LVM2
逻辑卷管理器第二版,Logical Volume Manager Version 2,将多个底层设备组织成一个单一的逻辑设备。
1、纯软件实现的虚拟层次上的软设备lvm2
2、磁盘损坏时,数据恢复困难。人为损坏数据,恢复困难。
一、LVM原理
PV(物理卷):在任何块设备(分区、RAID、磁盘)之上,附加一层元数据。
**在删除PV前,先将要移除PV上的数据移动至其他PV之上**
VG(卷组):在PV的存储空间中,更低层次上划分多个相同大小的PE,将所有PE组合成一个逻辑上的层次VG。
1、可动态扩展或缩减VG中PV的数量
2、类似于扩展分区,不能直接格式化使用。
3、PE只有在VG创建后才会出现在PV中,其大小由创建时指定。默认为4M
LV(逻辑卷):在逻辑层次的VG之上,划分VG为大小相同的PE,组合不同数量的PE为LV。
1、可动态扩展或缩减LV的大小,或 LV中PE的数量,即可跨越多个PV。
2、可以直接格式化并挂载使用。
3、LE只有在LV创建后才会出现在VG中,其大小由创建时指定。默认为1280
快照:在LV之上实现的。创建快照后,将创建一个监控对原卷中的元数据进行瞬间扫描(为了避免元数据备份的时间不一致),当文件任何内容改变时,元数据均会改变。在元数据变化之前,将变化的数据备份在于快照空间中。访问快照时,变化的部分在快照中,没有变化的部分在于原卷中。
1、快照是另一个路径指向与原卷相同的Inode
2、创建快照备份,只是对创建快照那一刻原卷内的所有数据进行备份,之后新加入的内容不会进行备份,需要用到(增量备份或差异备份)
3、快照的大小取决于:原卷存活的时间内数据变化量。最大大小为原卷大小
4、快照卷的路径:跟原卷在同一个卷组中。
**备份:数据序列化的过程,将文件和数据抽象为丝状,才能被线缆所承载。
**序列化:将特定数据组织结构转换成流式化的数据,且能够还原成原来的样子。
***逻辑卷的扩展和收缩
逻辑卷分为内层和外层:内存为使用的文件系统大小,外层为逻辑空间大小。
1、如果要扩展时,先扩展外层,后扩展内层。
1、如果要缩减时,先缩减内层,后缩减外层。
二、LVM2的实现
LV是内核中dm(device mapper)模块实现的功能之一
1、实现RAID:可将多个底层设备组织成一个设备
2、实现逻辑卷
3、实现多路径
用户空间的程序:用户不能直接操作内核中的模块:
1、程序员通过API接口
2、通过程序员写的程序调用内核中的模块
创建后逻辑卷的路径(lvpath)
原始路径:/dev/dm-#
其链接文件有:
1)/dev/mapper/VGNAME-LVNAME
2)/dev/VGNAME/LVNAME
三、LVM2在CentOS 6上的实现
1、物理卷管理
创建:pvcreate [<partition/raid/disk>]...
显示:pvs ,pvdisplay
删除:pvremove [<partition/raid/disk>]
2、卷组管理
创建: vgcreate VGNAME [<partition/raid/disk>]...
显示: vgs,vgdisplay
扩展: vgextend VGNAME [<partition/raid/disk>]
缩减:vgreduce VGNAME [<partition/raid/disk>] **缩减前,pvmove <partition/disk/raid>
删除:vgremove VGNAME [<partition/raid/disk>]
3、逻辑卷管理
创建: lvcreate -L #[KMGTE] -n LVNAME VGNAME
-L #[KMGTE],-L指定创建逻辑卷的大小,单位有K/M/G/T/E
-n LVNAME ,-n指定逻辑卷的名字
显示: lvs ,lvdisplay
扩展:
mount lvpath MOUNT_POINT
lvextend -L [+]#[KMGTE] lvpath
让逻辑卷大小扩展: # 扩展后的具体大小. +# 原来的大小加上由#指定的值即为扩展后的值
resize2fs lvpath
让文件系统扩展至逻辑卷空间大小
缩减:
umount {lvpath|MOUNT_POINT}
e2fsck -f lvpath
resize2fs lvpath #[KMGTE]
让文件系统缩减至指定大小
lvreduce -L [-]#[KMGTE] lvpath
让逻辑卷大小缩减: # 缩减后的具体大小. -# 原来的大小减去由#指定的值即为缩减后的值
mount lvpath MOUNT_POINT
df -lh
删除: lvremove lvpath
快照:lvcreate -L #[KMGTE] -s -n lv_snap_NAME -p r lvpath
-s 指定原卷
-p r 指明快照卷的权限,r:只读.rw:可读可写.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
***查看当前系统的版本** # cat /etc/centos-release
1
2
|
[root@localhost ~]
# cat /etc/centos-release
CentOS release 6.9 (Final)
|
使用LVM2的准备:分区ID为82
1
2
3
4
5
|
[root@localhost ~]
# fdisk /dev/sdc
/dev/sdc1
1 6527 52428096 5 Extended
/dev/sdc5
1 1306 10490382 8e Linux LVM
/dev/sdc6
1307 3265 15735636 8e Linux LVM
/dev/sdc7
3266 5877 20980858+ 8e Linux LVM
|
1、物理卷管理
1)创建物理卷
1
2
3
4
|
[root@localhost ~]
# pvcreate /dev/sdc{5,6,7}
Physical volume
"/dev/sdc5"
successfully created
Physical volume
"/dev/sdc6"
successfully created
Physical volume
"/dev/sdc7"
successfully created
|
2)显示Pv
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
1/显示所有PV的简要描述信息
[root@localhost ~]
# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2
myvg lvm2 a--u 97.65g 17.57g
/dev/sdc5
lvm2 ---- 10.00g 10.00g
/dev/sdc6
lvm2 ---- 15.01g 15.01g
/dev/sdc7
lvm2 ---- 20.01g 20.01g
[root@localhost ~]
#
2/显示所有PV的详细属性信息
[root@localhost ~]
# pvdisplay
3/显示指定PV的详细属性信息
[root@localhost ~]
# pvdisplay /dev/sdc5
"/dev/sdc5"
is a new physical volume of
"10.00 GiB"
--- NEW Physical volume ---
PV Name
/dev/sdc5
##
VG Name
##
PV Size 10.00 GiB
##
Allocatable NO
## NO当前查看的PE没有加入至卷组中,不能分配其中的PE。YES 表示当前查看的PVNAME已经加入至VG中,且可分配其中的PE。
PE Size 0
##
Total PE 0
Free PE 0
Allocated PE 0
PV UUID aIUY10-QgvL-D2lt-f3J9-3tPb-PXpr-P3bqvP
[root@localhost ~]
#
|
3)移除物理卷
1
2
3
4
5
|
[root@localhost ~]
# pvremove /dev/sdc{5,6,7}
Labels on physical volume
"/dev/sdc5"
successfully wiped
Labels on physical volume
"/dev/sdc6"
successfully wiped
Labels on physical volume
"/dev/sdc7"
successfully wiped
[root@localhost ~]
#
|
2、卷组管理
1)创建: vgcreate VGNAME [<partition/raid/disk>]...
1
2
3
4
5
6
7
8
9
10
|
1、查看已有的VG的名字,避免新建立的VG名会和原有VG名冲突
[root@localhost ~]
# vgs
VG
#PV #LV #SN Attr VSize VFree
myvg 1 5 0 wz--n- 97.65g 17.57g
2、创建VG,名为VG0
[root@localhost ~]
# vgcreate vg0 /dev/sdc{5,6,7}
Volume group
"vg0"
successfully created
[root@localhost ~]
#
3、查看是否创建成功
[root@localhost ~]
# vgs
|
2)显示: vgs,vgdisplay
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
1、简要信息
[root@localhost ~]
# vgs
VG
#PV #LV #SN Attr VSize VFree
myvg 1 5 0 wz--n- 97.65g 17.57g
vg0 3 0 0 wz--n- 45.01g 45.01g
## 组合pv所有的空间
[root@localhost ~]
#
2、所有信息
[root@localhost ~]
# vgdisplay
3、指定vg信息显示
[root@localhost ~]
# vgdisplay vg0
--- Volume group ---
VG Name vg0
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 1
VG Access
read
/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 3
Act PV 3
VG Size 45.01 GiB
PE Size 4.00 MiB
## 默认PE大小
Total PE 11523
## 总PE个数
Alloc PE / Size 0 / 0
Free PE / Size 11523 / 45.01 GiB
## 空闲PE数
VG UUID HNyUPI-MsLO-od5j-JBFx-is6S-u9Dl-HiOWr1
[root@localhost ~]
#
****注意创建PE后,显示PV的详细属性信息中才会有PE相关的信息****
[root@localhost ~]
# pvdisplay /dev/sdc5
--- Physical volume ---
PV Name
/dev/sdc5
VG Name vg0
## 加入至vg0组中
PV Size 10.00 GiB / not usable 4.51 MiB
## 10G大小
Allocatable
yes
## 表示当前查看的/dev/sdc5已经加入至vg0中,且可分配其中的PE。
PE Size 4.00 MiB
## 默认PE大小
Total PE 2560
Free PE 2560
Allocated PE 0
PV UUID aIUY10-QgvL-D2lt-f3J9-3tPb-PXpr-P3bqvP
[root@localhost ~]
#
|
3) 扩展: vgextend VGNAME [<partition/raid/disk>]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
1、查看vg0大小
[root@localhost ~]
# vgs
VG
#PV #LV #SN Attr VSize VFree
myvg 1 5 0 wz--n- 97.65g 17.57g
vg0 3 0 0 wz--n- 45.01g 45.01g
## 45G
2、准备空闲pv
[root@localhost ~]
# pvcreate /dev/sdc8
Physical volume
"/dev/sdc8"
successfully created
3、扩展
[root@localhost ~]
# vgextend vg0 /dev/sdc8
Volume group
"vg0"
successfully extended
4、查看vg0大小
[root@localhost ~]
# vgs
VG
#PV #LV #SN Attr VSize VFree
myvg 1 5 0 wz--n- 97.65g 17.57g
vg0 4 0 0 wz--n- 49.99g 49.99g
## 49.99G
|
4) 缩减:vgreduce VGNAME [<partition/raid/disk>]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
1、查看vg0大小
[root@localhost ~]
# vgs
VG
#PV #LV #SN Attr VSize VFree
myvg 1 5 0 wz--n- 97.65g 17.57g
vg0 4 0 0 wz--n- 49.99g 49.99g
## 49.99G
2、将要移除的pv中的数据移动至其他pv上
[root@localhost ~]
# pvmove /dev/sdc8
No data to move
for
vg0
[root@localhost ~]
#
3、缩减
[root@localhost ~]
# vgreduce vg0 /dev/sdc8
Removed
"/dev/sdc8"
from volume group
"vg0"
4、查看大小
[root@localhost ~]
# vgs
VG
#PV #LV #SN Attr VSize VFree
myvg 1 5 0 wz--n- 97.65g 17.57g
vg0 3 0 0 wz--n- 45.01g 45.01g
##45G
[root@localhost ~]
#
|
5)删除:vgremove VGNAME [<partition/raid/disk>]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
1、查看vg0的空间
[root@localhost ~]
# vgs
VG
#PV #LV #SN Attr VSize VFree
myvg 1 5 0 wz--n- 97.65g 17.57g
vg0 3 0 0 wz--n- 45.01g 45.01g
2、移除vg
[root@localhost ~]
# vgremove vg0
Volume group
"vg0"
successfully removed
3、查看vg的简要信息
[root@localhost ~]
# vgs
VG
#PV #LV #SN Attr VSize VFree
myvg 1 5 0 wz--n- 97.65g 17.57g
|
3、逻辑卷管理
创建: lvcreate -L #[KMGTE] -n LVNAME VGNAME
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
1)、查看lv名字,避免创建的名字与之冲突
[root@localhost ~]
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_home myvg -wi-ao---- 4.88g
lv_root myvg -wi-ao---- 48.83g
lv_swap myvg -wi-ao---- 1.95g
lv_usr myvg -wi-ao---- 14.65g
lv_var myvg -wi-ao---- 9.77g
2)、查看vg的空闲空间的大小,确认可以分配给LV的空间
[root@localhost ~]
# vgs
VG
#PV #LV #SN Attr VSize VFree
myvg 1 5 0 wz--n- 97.65g 17.57g
vg0 3 0 0 wz--n- 45.01g 45.01g
## 空闲45G
3)、创建lv
[root@localhost ~]
# lvcreate -L 10G -n mylv vg0
Logical volume
"mylv"
created.
4)、查看创建的lv
[root@localhost ~]
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_home myvg -wi-ao---- 4.88g
lv_root myvg -wi-ao---- 48.83g
lv_swap myvg -wi-ao---- 1.95g
lv_usr myvg -wi-ao---- 14.65g
lv_var myvg -wi-ao---- 9.77g
mylv vg0 -wi-a----- 10.00g
## 空闲10G
|
显示: lvs ,lvdisplay
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
1、显示lv简要信息
[root@localhost ~]
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_home myvg -wi-ao---- 4.88g
lv_root myvg -wi-ao---- 48.83g
lv_swap myvg -wi-ao---- 1.95g
lv_usr myvg -wi-ao---- 14.65g
lv_var myvg -wi-ao---- 9.77g
mylv vg0 -wi-a----- 10.00g
2、显示某个lv的详细信息
[root@localhost ~]
# lvdisplay /dev/mapper/vg0-mylv
--- Logical volume ---
LV Path
/dev/vg0/mylv
##lvpath
LV Name mylv
VG Name vg0
LV UUID faTCWz-2P0e-qy9q-pk8T-mdAL-HycR-4T9lQF
LV Write Access
read
/write
LV Creation host,
time
localhost.localdomain, 2017-08-12 17:30:42 +0800
LV Status available
# open 0
LV Size 10.00 GiB
Current LE 2560
Segments 1
Allocation inherit
Read ahead sectors auto
- currently
set
to 256
Block device 253:5
[root@localhost ~]
#
|
扩展:
1
2
3
4
5
6
|
1、格式化,挂载
2、查看文件系统可用空间
3、复制文件至LV中,并查看文件
4、扩展
5、查看文件系统可用空间
6、查看文件,验证文件是否损坏
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
1、格式化,挂载
1)、格式化
[root@localhost ~]
# mke2fs -t ext4 -b 1024 -L 'Spring' -m 3 /dev/vg0/mylv
2)、挂载
[root@localhost ~]
# install -d /Spring_dir
[root@localhost ~]
# mount -L Spring /Spring_dir
3)、验证挂载
[root@localhost ~]
# ls -l /Spring_dir
总用量 12
drwx------ 2 root root 12288 8月 12 17:37 lost+found
[root@localhost ~]
# mount | fgrep pring
/dev/mapper/vg0-mylv
on
/Spring_dir
type
ext4 (rw)
2、查看文件系统可用空间
[root@localhost ~]
# df -lhP
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/myvg-lv_root
48G 520M 45G 2% /
tmpfs 122M 0 122M 0%
/dev/shm
/dev/sda1
477M 33M 419M 8%
/boot
/dev/mapper/myvg-lv_home
4.7G 9.9M 4.5G 1%
/home
/dev/mapper/myvg-lv_usr
15G 710M 13G 6%
/usr
/dev/mapper/myvg-lv_var
9.5G 88M 9.0G 1%
/var
/dev/md127
9.3G 23M 9.0G 1%
/backup
## 与上次md设备名变化了,故而需要以LABE或UUID方式进行挂载
/dev/md126
9.8G 23M 9.3G 1%
/mydata
/dev/mapper/vg0-mylv
9.9G 3.8M 9.6G 1%
/Spring_dir
## 可用9.9
3、复制文件至LV中,并查看文件
[root@localhost ~]
# cp /etc/{fstab,issue} /Spring_dir/
[root@localhost ~]
# cat /Spring_dir/{fstab,issue}
4、扩展
[root@localhost ~]
# lvextend -L +5G /dev/mapper/vg0-mylv
[root@localhost ~]
# resize2fs /dev/vg0/mylv
5、查看文件系统可用空间
[root@localhost ~]
# df -lhP
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg0-mylv
15G 3.5M 15G 1%
/Spring_dir
##可用15G
6、查看文件,验证文件是否损坏
[root@localhost ~]
# cat /Spring_dir/{fstab,issue}
|
缩减:
1
2
3
4
5
6
7
|
1、卸载
2、检测
3、缩减文件系统空间
4、缩减LV空间
5、挂载
6、查看文件系统可用空间
7、查看文件是否损坏
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
1、卸载
[root@localhost ~]
# umount /Spring_dir/
2、检测
[root@localhost ~]
# e2fsck -f /dev/vg0/mylv
3、缩减文件系统空间
[root@localhost ~]
# resize2fs /dev/vg0/mylv 1G
4、缩减LV空间
[root@localhost ~]
# lvreduce -L 5G /dev/mapper/vg0-mylv
Do you really want to reduce vg0
/mylv
? [y
/n
]: y
5、挂载
[root@localhost ~]
# mount /dev/mapper/vg0-mylv /Spring_dir/
6、查看文件系统可用空间
[root@localhost ~]
# df -lhP
Filesystem Size Used Avail Use% Mounted on
/dev/md127
9.3G 23M 9.0G 1%
/backup
/dev/md126
9.8G 23M 9.3G 1%
/mydata
/dev/mapper/vg0-mylv
976M 2.8M 943M 1%
/Spring_dir
7、查看文件是否损坏
[root@localhost ~]
# cat /Spring_dir/{fstab,issue}
#
# /etc/fstab
# Created by anaconda on Thu Aug 3 08:30:25 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
...
|
快照:lvcreate -L #[KMGTE] -s -n lv_snap_NAME -p r lvpath
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
1.查看原卷大小
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_home myvg -wi-ao---- 4.88g
lv_root myvg -wi-ao---- 48.83g
lv_swap myvg -wi-ao---- 1.95g
lv_usr myvg -wi-ao---- 14.65g
lv_var myvg -wi-ao---- 9.77g
mylv vg0 -wi-ao---- 5.00g
2、创建快照卷
[root@localhost ~]
# lvcreate -L 200M -s -n lv_snap -p r /dev/vg0/mylv
Logical volume
"mylv_snap"
created.
[root@localhost ~]
#
4、挂载快照卷
[root@localhost ~]
# mount /dev/vg0/lv_snap /mnt
5、显示内容
[root@localhost ~]
# ls /mnt
fstab issue lost+found
6、显示快照卷的可用空间
[root@localhost ~]
# df -lPh
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg0-mylv
976M 2.8M 943M 1%
/Spring_dir
/dev/mapper/vg0-lv_snap
976M 2.8M 943M 1%
/mnt
## 同原卷大小,与快照卷是指向原卷Inode的另一个路径不谋而合。
7、查看原卷和快照卷的内容
[root@localhost ~]
# cat /mnt/fstab /Spring_dir/fstab
相同
8、在原卷中增加内容
[root@localhost ~]
# cp -r /etc/pam.d /Spring_dir/ ## 源为单个目录,用-r选项。目标存在为目录。复制,原名。
9、查看快照卷是否也有此目录?
[root@localhost ~]
# ls -l /mnt
总用量 15
-rw-r--r-- 1 root root 1211 8月 12 18:09 fstab
-rw-r--r-- 1 root root 47 8月 12 17:39 issue
drwx------ 2 root root 12288 8月 12 17:37 lost+found
10、在原卷中,删除所有文件
[root@localhost ~]
# rm -rf /Spring_dir/*
11、快照卷中的文件:仍然存在
[root@localhost ~]
# ls -l /mnt
总用量 15
-rw-r--r-- 1 root root 1211 8月 12 18:09 fstab
-rw-r--r-- 1 root root 47 8月 12 17:39 issue
drwx------ 2 root root 12288 8月 12 17:37 lost+found
12、备份快照卷至
/Spring_dir
[root@localhost ~]
# cp -a /mnt/* /Spring_dir/
[root@localhost ~]
# ls /Spring_dir/
fstab issue lost+found
|
删除: lvremove lvpath
1
2
3
4
5
6
|
13、卸载
[root@localhost ~]
# umount /mnt
14、删除卷
[root@localhost ~]
# lvremove /dev/vg0/lv_snap
Do you really want to remove active logical volume lv_snap? [y
/n
]: y
Logical volume
"lv_snap"
successfully removed
|