逻辑卷管理器是 Linux 系统用于对硬盘分区进行管理的一种机制,理论性较强,其创建初衷是为了解决硬盘设备在创建分区后不易修改分区大小的缺陷。尽管对传统的硬盘分区进行强制扩容或缩容从理论上来讲是可行的,但是却可能造成数据的丢失。而 LVM 技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。这样一来,用户不必关心物理硬盘设备的低层架构和布局,就可以实现对硬盘分区的动态调整。LVM 的技术架构如图 7-7 所示。

为了容易理解,举一个吃货的例子。比如小明家里想吃馒头但是面粉不够了,于是妈妈从隔壁老王家、老李家、老张家分别借来一些面粉,准备蒸馒头吃。首先需要把这些面粉(物理卷[PV,Physical Volume])揉成一个大面团(卷组[VG,Volume Group]),然后再把这个大团面分割成一个个小馒头(逻辑卷[LV,Logical Volume]),而且每个小馒头的重量必须是每勺面粉(基本单元[PE,Physical Extent])的倍数。
物理卷处于 LVM 中的最底层,可以将其理解为物理硬盘、硬盘分区或者 RAID 磁盘阵列,这都可以。卷组建立在物理卷之上,一个卷组可以包含多个物理卷,而且在卷组创建之后也可以继续向其中添加新的物理卷。逻辑卷是用卷组中空闲的资源建立的,并且逻辑卷在建立后可以动态地扩展或缩小空间。这就是 LVM 的核心理念。
目录
第2步:把两块硬盘设备加入到 myvg1 卷组中,然后查看卷组的状态。
第2步:使用 -s 参数生成一个快照卷,使用-L 参数指定切割的大小。
第3步:校验 SNAP 快照卷效果,要对逻辑卷进行快照还原操作。
第1步:取消逻辑卷与目录的挂载关联,删除配置文件中永久生效的设备参数。
第2步:删除逻辑卷设备,路径要填写绝对路径,需要输入 y 来确认操作。
第3步:删除卷组,此处只写卷组名称即可,不需要设备的绝对路径。
7.2.1 部署逻辑卷


第1步:让新添加的两块硬盘设备支持 LVM 技术。
pvcreate /dev/sdb /dev/sdc
第2步:把两块硬盘设备加入到 myvg1 卷组中,然后查看卷组的状态。
vgcreate myvg1 /dev/sdb /dev/sdc
vgdisplay
第3步:切割出一个 30GB 逻辑卷设备。
lvcreate -n mylv1 -L 30G myvg1

第4步:把生成好的逻辑卷进行格式化,然后挂载使用。
格式化: mkfs.ext4 /dev/myvg1/mylv1
[root@localhost ~]# mkfs.ext4 /dev/myvg1/mylv1
[root@localhost ~]# mkdir /0903
[root@localhost ~]# mount /dev/myvg1/mylv1 /0903/
[root@localhost ~]# df -Th
....省略部分信息
/dev/mapper/myvg1-mylv1 ext4 30G 45M 28G 1% /0903
第5步:查看挂载状态,并写入到配置文件,使其永久生效。
[root@localhost ~]# df -Th
......省略部分信息
/dev/mapper/rhel-root xfs 27G 2.9G 24G 11% /
/dev/mapper/myvg1-mylv1 ext4 30G 45M 28G 1% /0903
[root@localhost ~]# echo "/dev/myvg1/mylv1 /0903 ext4 defaults 0 0" >> /etc/fstab
[root@localhost ~]# cat /etc/fstab
......省略部分信息
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/myvg1/mylv1 /0903 ext4 defaults 0 0
7.2.2 扩容逻辑卷
第1步:卸载设备和挂载点的关联。逻辑卷扩展。
卸载设备:umount /dev/myvg1/mylv1
扩展命令格式: lvextend -L +1G /dev/myvg1/mylv1
[root@localhost ~]# umount /dev/myvg1/mylv1
[root@localhost ~]# lvextend -L +1G /dev/myvg1/mylv1
Extending logical volume mylv1 to 31.98 GiB
Logical volume mylv1 successfully resized
第2步:检查硬盘完整性,并重置硬盘容量。
检查硬盘完整性命令:e2fsck -f /dev/myvg1/mylv1
重置硬盘容量:resize2fs /dev/myvg1/mylv1
[root@localhost ~]# e2fsck -f /dev/myvg1/mylv1
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/myvg1/mylv1: 11/1966080 files (0.0% non-contiguous), 167453/7864320 blocks
[root@localhost ~]# resize2fs /dev/myvg1/mylv1
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/myvg1/mylv1 to 8382464 (4k) blocks.
The filesystem on /dev/myvg1/mylv1 is now 8382464 blocks long.
第3步:重新挂载硬盘设备并查看挂载状态。
[root@localhost ~]# mount -a
[root@localhost ~]# df -Th
......省略部分信息
/dev/mapper/rhel-root xfs 27G 2.9G 24G 11% /
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
/dev/mapper/myvg1-mylv1 ext4 32G 49M 30G 1% /0903
7.2.3 缩小逻辑卷
第1步:文件系统卸载掉、检查文件系统的完整性。
卸载设备: umount /0903/
检查系统: e2fsck -f /dev/myvg1/mylv1
[root@localhost ~]# umount /0903/
[root@localhost ~]# e2fsck -f /dev/myvg1/mylv1
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/myvg1/mylv1: 11/2097152 files (0.0% non-contiguous), 176706/8382464 blocks
第2步:把逻辑卷 mylv1 的容量减小到 20 G。
检查是否可以缩容到20G:resize2fs /dev/myvg1/mylv0 20G
lv缩容命令使用格式:lvreduce -L 20G /dev/myvg1/mylv0
[root@localhost ~]# resize2fs /dev/myvg1/mylv0 20G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/myvg1/mylv0 to 5242880 (4k) blocks.
The filesystem on /dev/myvg1/mylv0 is now 5242880 blocks long.
[root@localhost ~]# lvreduce -L 20G /dev/myvg1/mylv0
WARNING: Reducing active logical volume to 20.00 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv0? [y/n]: y
Reducing logical volume mylv0 to 20.00 GiB
Logical volume mylv0 successfully resized
第3步:重新挂载文件系统并查看系统状态。
[root@localhost ~]# mount /dev/myvg1/mylv0 /0903/
[root@localhost ~]# df -Th
/dev/sda1 xfs 497M 119M 379M 24% /boot
/dev/sr0 iso9660 3.5G 3.5G 0 100% /run/media/zhangxu/RHEL-7.0
/dev/mapper/myvg1-mylv0 ext4 20G 45M 19G 1% /0903
7.2.4 逻辑卷快照

第1步: 首先查看卷组的信息。
通过卷组的输出信息可以清晰看到,卷组中已经使用了 10G 的容量,空闲容量还有29.99G。接下来用重定向往逻辑卷设备所挂载的目录中写入一个文件。

第2步:使用 -s 参数生成一个快照卷,使用-L 参数指定切割的大小。
另外,还需要在命令后面写上是针对哪个逻辑卷执行的快照操作。
创建格式:lvcreate -n lvbackup -L 10G -s /dev/myvg1/mylv0 最后是lv的绝对路径
[root@localhost ~]# lvcreate -n mylv0backup -L 10G -s /dev/myvg1/mylv0
Logical volume "mylv0backup" created
[root@localhost ~]# lvdisplay
--- Logical volume ---
LV Path /dev/myvg1/mylv0
LV Name mylv0
VG Name myvg1
LV UUID pt2uuj-XMFE-lANK-cKI1-2Sna-iHN2-aNmQGG
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2021-09-03 16:52:21 +0800
LV snapshot status source of
mylv0backup [active]
LV Status available
# open 1
LV Size 10.00 GiB
Current LE 2560
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
--- Logical volume ---
LV Path /dev/myvg1/mylv0backup
LV Name mylv0backup
VG Name myvg1
LV UUID h9aryU-wia6-2EPZ-mI8V-aKOq-qg2Z-fMdJk9
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2021-09-03 17:30:25 +0800
LV snapshot status active destination for mylv0
LV Status available
# open 0
LV Size 10.00 GiB
Current LE 2560
COW-table size 10.00 GiB
COW-table LE 2560
Allocated to snapshot 0.00%
Snapshot chunk size 4.00 KiB
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:3
--- Logical volume ---
第2步:在挂载的目录中创建文件,然后再查看快照卷的状态。
可以发现存储空间占的用量上升了。
[root@localhost 0903]# dd if=/dev/zero of=/0903/test bs=100MB count=10
[root@localhost 0903]# lvdisplay
--- Logical volume ---
LV Path /dev/myvg1/mylv0backup
LV Name mylv0backup
VG Name myvg1
LV UUID h9aryU-wia6-2EPZ-mI8V-aKOq-qg2Z-fMdJk9
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2021-09-03 17:30:25 +0800
LV snapshot status active destination for mylv0
LV Status available
# open 0
LV Size 10.00 GiB
Current LE 2560
COW-table size 10.00 GiB
COW-table LE 2560
Allocated to snapshot 9.35%
Snapshot chunk size 4.00 KiB
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:3
第3步:校验 SNAP 快照卷效果,要对逻辑卷进行快照还原操作。
在此之前记得先卸载掉逻辑卷设备与目录的挂载。
第4步:快照卷会被自动删除掉。
并且刚刚在逻辑卷设备被执行快照操作后再创建出来的 100MB 的垃圾文件也被清除了
7.2.5 删除逻辑卷
第1步:取消逻辑卷与目录的挂载关联,删除配置文件中永久生效的设备参数。

第2步:删除逻辑卷设备,路径要填写绝对路径,需要输入 y 来确认操作。

第3步:删除卷组,此处只写卷组名称即可,不需要设备的绝对路径。

第4步:删除物理卷设备。

在上述操作执行完毕之后,再执行 lvdisplay、vgdisplay、pvdisplay 命令来查看 LVM 的信息时就不会再看到信息了(前提是上述步骤的操作是正确的)