一、LVM简介
LVM是 Logical Volume Manager(逻辑卷管理)的简写,LVM将若干个磁盘或者磁盘分区连接为一个整块的卷组,形成一个存储池。管理员可以在卷组上任意创建逻辑卷,并进一步在逻辑卷上创建文件系统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配。
简单来说,屏蔽底层磁盘布局,便于动态管理磁盘容量
二、一些术语
(1)物理存储设备(The physical media):指系统的存储设备文件,如:/dev/hda1、/dev/sda等等。
(2)物理卷(physical volume):简称PV,物理卷可以是整个硬盘、硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
(3)卷组(Volume Group):简称VG,可以看成单独的逻辑磁盘,建立在PV之上,一个卷组中至少要包括一个PV,在卷组建立之后可以动态的添加PV到卷组中。卷组的名称可以自定义。
(4)PE(physical extent)物理区域:物理区域是物理卷中可用于分配的最小存储单元,物理区域的大小默认为4MB。物理区域大小一旦确定将不能更改,同一卷组中的所有物理卷的物理区域大小需要一致。
(5) 逻辑卷(logical volume):简称LV,相当于物理分区。逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态的扩展或缩小空间。系统中的多个逻辑卷,可以属于同一个卷组,也可以属于不同的多个卷组。
(6)LE(logical extent)逻辑区域:逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域大小。LE的大小和PE的大小一样。
(7)VGDA(Volume Group Descriptor Area)卷组描述符区域:和非LVM系统将包含分区信息的元数据保存在位于分区的起始位置的分区表中一样,逻辑卷以及卷组相关的元数据也是保存在位于物理卷起始处的卷组描述符区域中。VGDA包括以下内容:PV描述符、VG描述符、LV描述符和一些PE描述符。
三、常用命令
任务 | PV | VG | LV |
创建 | pvcreate | vgcreate | lvcreate |
删除 | pvremove | vgremove | lvremove |
扫描列表 | pvscan | vgscan | lvscan |
显示属性 | pvdisplay | vgdisplay | lvdisplay |
显示相关信息 | pvs | vgs | lvs |
扩展 | 无 | vgextend | lvextend |
缩减 | 无 | vgreduce | lvreduce |
创建逻辑卷三步骤
1.创建pv
2.创建vg
3.创建lv
删除逻辑卷三步骤
1.删除lv
2.删除vg
3.删除pv
四、创建逻辑卷
以此图说明
1.添加三块硬盘大小分别为3G,2G,1G
[root@server ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 30G 0 disk
├─sda1 8:1 0 200M 0 part /boot
├─sda2 8:2 0 20G 0 part /
└─sda3 8:3 0 2G 0 part [SWAP]
sdb 8:16 0 3G 0 disk
sdc 8:32 0 2G 0 disk
sdd 8:48 0 1G 0 disk
2.将sdb划分为三个分区,打标签8e,sdc划分为两个分区,打标签8e,sdd不变[root@server ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 30G 0 disk
├─sda1 8:1 0 200M 0 part /boot
├─sda2 8:2 0 20G 0 part /
└─sda3 8:3 0 2G 0 part [SWAP]
sdb 8:16 0 3G 0 disk
├─sdb1 8:17 0 1G 0 part
├─sdb2 8:18 0 1G 0 part
└─sdb3 8:19 0 1023M 0 part
sdc 8:32 0 2G 0 disk
├─sdc1 8:33 0 1G 0 part
└─sdc2 8:34 0 1023M 0 part
sdd 8:48 0 1G 0 disk
3.按图示创建pv[root@server ~]# pvcreate /dev/sdb2 /dev/sdb3 /dev/sdc1 /dev/sdc2 /dev/sdd
Physical volume "/dev/sdb2" successfully created
Physical volume "/dev/sdb3" successfully created
Physical volume "/dev/sdc1" successfully created
Physical volume "/dev/sdc2" successfully created
Physical volume "/dev/sdd" successfully created
[root@server ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb2 lvm2 --- 1.00g 1.00g
/dev/sdb3 lvm2 --- 1023.00m 1023.00m
/dev/sdc1 lvm2 --- 1.00g 1.00g
/dev/sdc2 lvm2 --- 1023.00m 1023.00m
/dev/sdd lvm2 --- 1.00g 1.00g
4.创建vg[root@server ~]# vgcreate vg0 /dev/sdb2 /dev/sdb3 /dev/sdc1
Volume group “vg0” successfully created[root@server ~]# vgcreate vg1 /dev/sdc2 /dev/sdd
Volume group “vg1” successfully created[root@server ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg0 3 0 0 wz--n- 2.99g 2.99g
vg1 2 0 0 wz--n- 1.99g 1.99g
注:使用 -s 可指定pe大小,默认为4MB
比如[root@server ~]# vgcreate -s 8M vg1 /dev/sdc2 /dev/sdd
5.创建lv[root@server ~]# lvcreate -n lv1 -L 1G vg0
Logical volume “lv1” created.[root@server ~]# lvcreate -n lv2 -L 1G vg0
Logical volume “lv2” created.[root@server ~]# lvcreate -n lv3 -L 1G vg1
Logical volume “lv3” created.[root@server ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1 vg0 -wi-a----- 1.00g
lv2 vg0 -wi-a----- 1.00g
lv3 vg1 -wi-a----- 1.00g
注:-l 可指定pe的个数的大小
比如[root@server ~]# lvcreate -n lv3 -l 100 vg1
使用100个pe(默认4MB),即大小为400MB
6.分区情况[root@server ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 30G 0 disk
├─sda1 8:1 0 200M 0 part /boot
├─sda2 8:2 0 20G 0 part /
└─sda3 8:3 0 2G 0 part [SWAP]
sdb 8:16 0 3G 0 disk
├─sdb1 8:17 0 1G 0 part
├─sdb2 8:18 0 1G 0 part
│ └─vg0-lv1 253:0 0 1G 0 lvm
└─sdb3 8:19 0 1023M 0 part
├─vg0-lv1 253:0 0 1G 0 lvm
└─vg0-lv2 253:1 0 1G 0 lvm
sdc 8:32 0 2G 0 disk
├─sdc1 8:33 0 1G 0 part
│ └─vg0-lv2 253:1 0 1G 0 lvm
└─sdc2 8:34 0 1023M 0 part
└─vg1-lv3 253:2 0 1G 0 lvm
sdd 8:48 0 1G 0 disk
└─vg1-lv3 253:2 0 1G 0 lvm
sr0 11:0 1 3.8G 0 rom /mnt
7.格式化
[root@server ~]# mkfs.ext4 /dev/vg0/lv1[root@server ~]# mkfs.ext4 /dev/vg0/lv2[root@server ~]# mkfs.ext4 /dev/vg1/lv3
8.挂载
[root@server ~]# mkdir /lv{1,2,3}[root@server ~]# mount /dev/vg0/lv1 /lv1/[root@server ~]# mount /dev/vg0/lv2 /lv2/[root@server ~]# mount /dev/vg1/lv3 /lv3/[root@server ~]# df -h | grep lv
/dev/mapper/vg0-lv1 976M 2.6M 907M 1% /lv1
/dev/mapper/vg0-lv2 976M 2.6M 907M 1% /lv2
/dev/mapper/vg1-lv3 976M 2.6M 907M 1% /lv3
9.测试
[root@server ~]# touch /lv1/test[root@server ~]# touch /lv2/test[root@server ~]# touch /lv3/test[root@server ~]# ls /lv1 /lv2 /lv3
/lv1:
lost+found test
/lv2:
lost+found test
/lv3:
lost+found test
五、修改逻辑卷大小
这里只以ext4格式的文件系统为例,xfs的文件系统只支持扩大逻辑卷,ext4支持扩大和缩减
操作之前需要先卸载(扩大不需要卸载),这里以lv1为实例
1.扩大
需保证vg容量足够使用,这里lv1使用的vg0还剩余1012MB[root@server ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg0 3 2 0 wz--n- 2.99g 1012.00m
vg1 2 1 0 wz--n- 1.99g 1016.00m
扩大100个pe大小,即400MB[root@server ~]# lvextend -l +100 /dev/vg0/lv1
再扩大100M大小[root@server ~]# lvextend -L +100M /dev/vg0/lv1
重新读取[root@server ~]# resize2fs /dev/vg0/lv1
此时大小应该为1.5G,最开始的1G+400MB+100MB=1.5G[root@server ~]# df -h /dev/vg0/lv1
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg0-lv1 1.5G 3.0M 1.4G 1% /lv1
指定大小1.8G[root@server ~]# lvextend -L 1.8G /dev/vg0/lv1
重新读取[root@server ~]# resize2fs /dev/vg0/lv1
再次查看大小[root@server ~]# df -h /dev/vg0/lv1
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg0-lv1 1.8G 3.0M 1.7G 1% /lv1
2.缩减
减小逻辑卷可能造成数据损坏!
需先卸载[root@server ~]# umount /lv1
使用e2fsck工具检查逻辑卷lv1[root@server ~]# e2fsck -f /dev/vg0/lv1
确认缩小[root@server ~]# resize2fs /dev/vg0/lv1 1G
[root@server ~]# lvreduce -L 1G /dev/vg0/lv1
重新挂载[root@server ~]# mount /dev/vg0/lv1 /lv1
再次查看大小[root@server ~]# df -h /dev/vg0/lv1
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg0-lv1 976M 2.6M 912M 1% /lv1
3.扩大和缩减逻辑卷
可以使用lvresize -r的命令实现扩大或缩小,-r表示一并执行resize2fs[root@server ~]# lvresize -r -L 1.5G /dev/vg0/lv1
[root@server ~]# lvs vg0/lv1
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1 vg0 -wi-ao---- 1.50g
[root@server ~]# lvresize -r -L 1.1G /dev/vg0/lv1
[root@server ~]# lvs vg0/lv1
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1 vg0 -wi-ao---- 1.10g
六、移除逻辑卷
1.卸载[root@server ~]# umount /lv1/ /lv2/ /lv3/
2.移除lv[root@server ~]# lvremove vg0/lv1 vg0/lv2 vg1/lv3
3.移除vg[root@server ~]# vgremove vg0 vg1
4.移除pv[root@server ~]# pvremove /dev/sdb2 /dev/sdb3 /dev/sdc1 /dev/sdc2 /dev/sdd
5.分区标签改回83或格式化硬盘[root@server ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 30G 0 disk
├─sda1 8:1 0 200M 0 part /boot
├─sda2 8:2 0 20G 0 part /
└─sda3 8:3 0 2G 0 part [SWAP]
sdb 8:16 0 3G 0 disk
sdc 8:32 0 2G 0 disk
sdd 8:48 0 1G 0 disk
注:
扩大卷组vg时需要有新的分区或硬盘,使用vgextend命令
缩小vg时使用vgremove命令
如:给vg0扩大vgextend vg0 /dev/sde
缩小vgreduce vg0 /dev/sdd