在处理大数据存储需求时,一个常见的挑战是如何为 /data 这样的关键目录提供充足且可灵活调整的容量。这时,Linux 的逻辑卷管理器(LVM,Logical Volume Manager)便成为了一个强大的工具。它能动态调整磁盘容量,极大地提高了磁盘管理的灵活性。
PV 物理卷
物理卷,Physical Volume,是 LVM 机制的基本存储设备,通常对应一个普通分区或是整个硬盘。
创建物理卷时,会在分区或磁盘头部创建一个用于记录 LVM 属性的保留区块,并把存储空间分割成默认大小为 4MB 的基本单元(Physical Extend,PE),从而构成物理卷。
对于普通分区,需要先将其分区类型转换为 8e;对于整块硬盘,可以直接使用,也可以将其所有空间划分为一个主分区后再进行调整。
VG 卷组
卷组,Volume Group,是由一个或多个物理卷组成的一个整体。卷组可以动态地添加或移除物理卷,并且在创建时可以指定 PE 的大小。
LV 逻辑卷
逻辑卷,Logical Volume,建立在卷组之上,与物理卷没有直接关系。逻辑卷在格式化后,就可以像普通分区一样挂载使用了。
通过以上对三者的解释,可以清晰地看到建立 LVM 的逻辑过程:
- 首先,将普通分区或整个硬盘创建为物理卷;
- 然后,将一个或多个物理卷创建为卷组;
- 最后,在卷组上分割出不同的数据存储空间,形成逻辑卷。
有了逻辑卷,就可以进行格式化、挂载等操作,投入使用了。这种分层抽象的设计,正是实现动态存储管理的核心。
LVM 管理
LVM 提供了一套完整的命令集来管理物理卷、卷组和逻辑卷。掌握这些命令是灵活运用 LVM 的关键。
常用命令总结如下:
| 功能 |
PV 管理命令 |
VG 管理命令 |
LV 管理命令 |
| Scan(扫描) |
pvscan |
vgscan |
lvscan |
| Create(建立) |
pvcreate |
vgcreate |
lvcreate |
| Display(显示) |
pvdisplay(pvs) |
vgdisplay(vgs) |
lvdisplay(lvs) |
| Remove(移除) |
pvremove |
vgremove |
lvremove |
| Extend(扩展) |
/ |
vgextend |
lvextend |
| Reduce(减少) |
/ |
vgreduce |
lvreduce |
下面通过一个实际系统的命令输出来直观地感受 LVM 的组成。在这个例子中,我们使用了两块大容量硬盘(sdb 和 sdc)为 /data 目录构建了一个巨大的逻辑卷。
[root@lab000 vgdata]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 223.6G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 223.1G 0 part
├─centos-swap 253:0 0 4G 0 lvm
├─centos-root 253:1 0 169G 0 lvm /
└─centos-home 253:3 0 50G 0 lvm /home
sdb 8:16 0 9.1T 0 disk
└─vgdata-lvdata 253:2 0 18.2T 0 lvm /data
sdc 8:32 0 9.1T 0 disk
└─vgdata-lvdata 253:2 0 18.2T 0 lvm /data
[root@lab000 vgdata]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <223.08g 80.00m
/dev/sdb vgdata lvm2 a-- <9.10t 0
/dev/sdc vgdata lvm2 a-- <9.10t <1.43g
[root@lab000 vgdata]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 3 0 wz--n- <223.08g 80.00m
vgdata 2 1 0 wz--n- 18.19t <1.43g
[root@lab000 vgdata]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home centos -wi-ao---- 50.00g
root centos -wi-ao---- 169.00g
swap centos -wi-a----- 4.00g
lvdata vgdata -wi-ao---- 18.19t
从 lsblk 的输出可以看到,/dev/sdb 和 /dev/sdc 两块物理磁盘共同组成了一个名为 vgdata-lvdata 的逻辑卷,并挂载在 /data 下。pvs、vgs、lvs 命令则清晰地展示了物理卷、卷组和逻辑卷之间的归属与容量关系。
最后,为了确保系统重启后能自动挂载,需要在 /etc/fstab 文件中添加相应的配置项:
[root@lab000 ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Mon Jun 8 14:59:59 2020
#
# 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
#
/dev/mapper/centos-root / xfs defaults 1 1
UUID=287680f7-cdd8-424a-9fcc-d93f77144c16 /boot xfs defaults 1 2
/dev/mapper/centos-home /home xfs defaults 1 2
#/dev/mapper/centos-swap swap swap defaults 0 0
/dev/vgdata/lvdata /data xfs defaults 1 2
通过以上介绍,我们了解了 LVM 的核心概念、管理命令和一个实际的应用示例。对于希望深入掌握系统存储管理、构建灵活可靠存储架构的开发者或运维人员来说,LVM 是一项必备技能。如果你想与更多同行交流类似的技术实践,欢迎访问云栈社区进行探讨。
参考资料
[1] 如何在 Linux 中创建/配置 LVM(逻辑卷管理): https://linux.cn/article-12670-1.html
[2] 如何在 Linux 中扩展/增加 LVM 大小(逻辑卷调整): https://linux.cn/article-12673-1.html
[3] Linux 文件系统-XFS 收缩与扩展: https://blog.csdn.net/baidu_39459954/article/details/89446794
[4] archlinux LVM: https://wiki.archlinux.org/title/LVM
[5] LVM : 简介: https://www.cnblogs.com/sparkdev/p/10130934.html