1.介绍
LVM全称Logical Volume Manager(逻辑卷管理器),是将存储空间虚拟化成虚拟设备来进行管理的一种机制。LVM本身通过调用Linux内核中的”Device-mapper”功能来实现这种机制。
LVM组成部分:
Physical volume(pv)物理卷:是LVM底层的设备,可以是硬盘分区,硬盘。
Volume group (vg)卷组:是组织pv的管理单元。
Logical volume(lv)逻辑卷:虚拟分区,既可以存储数据的设备。
Physical extent(pe)物理块大小:组成vg中空间的物理单位,默认为4M。(例如:如果VG是400M,也就是有100个PE组成。)
2.LVM命令介绍:LVM是个命令集合。
PV(常用命令)
创建:pvcreate Device
删除:pvremove Device
显示信息:pvs(简单信息);pvdisplay(详细信息)
移动pv设备中的数据(为删除设备准备):pvmove Device
扫描PV设备:pvscan
VG(常用命令)
创建VG:vgcreate �Cs 8M VGname PVDevice
-s:选项可以为创建VG时指定PE大小默认4M,范围:8K-16GB,一个逻辑卷(lv) 最多65534个PE。
扩展VG:vgextend VGname PVdevice
缩小VG:vgreduce VGname PVDeivce
删除VG:vgremove VGname
查看VG:vgs(简单)vgdisplay(详细)
LV(常用命令)
创建LV:lvcreate �CL LogicalVolumeSize �Cn LVname VGname
-L:指定LV大小
-l:指定PE数量,和-L任选其一指定即可。
-n:指定LV名字
-s:快照
扩展LV:lvextend �CL [+] LogicalVolumeSize LVdevice
-L:指定大小,两种方式,一种直接指定大小,一种指定增加多少。
缩小LV:lvreduce �CL [-] LogicalVolumeSize LVdevice
-L:与上相同。
删除LV:lvremove LVdevice
查看LV:lvs(简单) lvdisplay(详细)
3.使用方法
环境:centos6.4-x86_64,硬盘:sda(系统),sdb(21G),sdc(21G)
创建PV:
1: root@client ~]# pvcreate /dev/sd{b,c}
2: Writing physical volume data to disk "/dev/sdb"
3: Physical volume "/dev/sdb" successfully created
4: Writing physical volume data to disk "/dev/sdc"
5: Physical volume "/dev/sdc" successfully created
创建VG
1: [root@client vg_client]# vgcreate vg_test /dev/sd{b,c}
2: Volume group "vg_test" successfully created
创建LV(2G)
1: [root@client vg_client]# lvcreate -L 2G -n test_lv vg_test
2: Logical volume "test_lv" created
查看LV,VG,PV
1: [root@client vg_client]# vgs
2: VG #PV #LV #SN Attr VSize VFree
3: vg_test 2 1 0 wz--n- 39.99g 37.99g
4: [root@client vg_client]# lvs
5: LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
6: test_lv vg_test -wi-a--- 2.00g
7: [root@client vg_client]# pvs
8: PV VG Fmt Attr PSize PFree
9: /dev/sdb vg_test lvm2 a-- 20.00g 18.00g
10: /dev/sdc vg_test lvm2 a-- 20.00g 20.00g
格式化LV
1: [root@client vg_client]# mkfs.ext3 /dev/mapper/vg_test-test_lv
PS:LV设备的路径,有两个路径可以使用,一个在/dev/mapper下以VGname-LVname命名,
另一个在/dev/下以VGname命名的目录中有以LVname命名的文件。
这两个都是符号链接,真正的设备文件是/dev下的dm*。
挂载后即可使用
1: [root@client ~]# mount /dev/mapper/vg_test-test_lv /mnt/lvm
2: [root@client ~]# df
3: Filesystem 1K-blocks Used Available Use% Mounted on
4: /dev/mapper/vg_test-test_lv
5: 2064208 68676 1890676 4% /mnt/lvm
1: [root@client ~]# lvs #查看现在LV容量
2: LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
3: test_lv vg_test -wi-ao-- 2.00g #test_lv为2G
4: [root@client ~]# lvextend -L +200M /dev/mapper/vg_test-test_lv #将test_lv增加200M,也可以直接写2.2G
5: Extending logical volume test_lv to 2.20 GiB
6: Logical volume test_lv successfully resized
7: [root@client ~]# lvs #再次查看LV容量,已经变为2.2G了。
8: LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
9: test_lv vg_test -wi-ao-- 2.20g
PS:扩展完之后还要使用resize2fs更新一下LV容量,以便通知系统内核可以识别。
1: [root@client ~]# df -h #未使用resize2fs更新,系统还是识别为2G
2: Filesystem Size Used Avail Use% Mounted on
3: /dev/mapper/vg_test-test_lv
4: 2.0G 68M 1.9G 4% /mnt/lvm
5: [root@client ~]# resize2fs -p /dev/mapper/vg_test-test_lv #更新数据,注意推荐加“-P”选项以便观察进度,更新比较大的卷时尤其有用。
6: [root@client ~]# df -h #更新后系统已经识别为2.2G
7: Filesystem Size Used Avail Use% Mounted on
8: /dev/mapper/vg_test-test_lv
9: 2.2G 68M 2.0G 4% /mnt/lvm
至此整个扩展LV容量的步骤全部结束,为谨慎起见也可以用e2fsck检测一下设备是否有损坏,一般不需要。扩展LV时挂载的系统不需要卸载,可在线操作。那接下来演示一下缩小LV容量的内容。
缩减LV容量(此操作有一定的风险,故而不推荐在生产环境下使用)
1: [root@client ~]# lvs #查看LV分区大小,目前是2.2G
2: LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
3: test_lv vg_test -wi-ao-- 2.20g
4: [root@client ~]# df #查看挂载点
5: Filesystem 1K-blocks Used Available Use% Mounted on
6: /dev/mapper/vg_test-test_lv 2264896 68676 2081128 4% /mnt/lvm
7: [root@client ~]# umount /mnt/lvm #首先要卸载LV分区
8: [root@client ~]# e2fsck -f /dev/mapper/vg_test-test_lv #对LV分区进行磁盘检测
9: [root@client ~]# resize2fs -p /dev/mapper/vg_test-test_lv 1G #调整文件系统大小
10: [root@client ~]# lvreduce -L 1G /dev/mapper/vg_test-test_lv #缩减LV分区大小至1G
11: Reducing logical volume test_lv to 1.00 GiB
12: Logical volume test_lv successfully resized #挂载后即可使用
再来说下扩展VG和缩减VG
1:此例演示更换一个VG中的PV的过程。
2: [root@client ~]# vgs #查看VG
3: VG #PV #LV #SN Attr VSize VFree
4: vg_test 2 1 0 wz--n- 39.99g 38.99g
5: [root@client ~]# pvs #查看PV
6: PV VG Fmt Attr PSize PFree
7: /dev/sdb vg_test lvm2 a-- 20.00g 19.00g
8: /dev/sdc vg_test lvm2 a-- 20.00g 20.00g
9: [root@client ~]# pvmove /dev/sdb #将sdb中的数据移动到同VG中PV中
10: /dev/sdb: Moved: 1.6%
11: /dev/sdb: Moved: 100.0%
12: [root@client ~]# vgreduce vg_test /dev/sdb #将sdb从vg_test中去除
13: Removed "/dev/sdb" from volume group "vg_test"
14: [root@client ~]# vgs #VG中的容量缩小了
15: VG #PV #LV #SN Attr VSize VFree
16: vg_test 1 1 0 wz--n- 20.00g 19.00g
17: [root@client ~]# pvremove /dev/sdb #现在可以将sdb从PV中删除
18: Labels on physical volume "/dev/sdb" successfully wiped
19: 现在可以重新创建一个PV加入到VG中
20: [root@client ~]# pvcreate /dev/sdb #重新创建一个PV
21: Writing physical volume data to disk "/dev/sdb"
22: Physical volume "/dev/sdb" successfully created #将sdb重新加入到vg_test中
23: [root@client ~]# vgextend vg_test /dev/sdb
24: Volume group "vg_test" successfully extended
25: [root@client ~]# vgs #VG中的容量又恢复了
26: VG #PV #LV #SN Attr VSize VFree
27: vg_test 2 1 0 wz--n- 39.99g 38.99g
28: [root@client ~]# pvs #PV也复原了
29: PV VG Fmt Attr PSize PFree
30: /dev/sdb vg_test lvm2 a-- 20.00g 20.00g
31: /dev/sdc vg_test lvm2 a-- 20.00g 19.00g
LVM的基本应用就是如此几种。LVM给我们提供了非常灵活的管理存储的方式,但是也有些缺点,LVM本身是不能提供数据容灾保障的,需要配合Raid等一些其他手段来综合使用。