一、LVM 简介:什么是逻辑卷管理
在 Linux 磁盘管理体系中,LVM 是一项无法回避的核心技术。其全称为 Logical Volume Manager,即逻辑卷管理器。简单来说,LVM 在物理硬盘与分区之间构建了一个逻辑抽象层,其根本目标就是让磁盘分区的管理更加灵活、高效。
这一机制的最大优势是什么?磁盘容量管理的动态化。逻辑卷的大小可以随时进行调整,并且现有数据不会因此丢失。即便后续新增了硬盘,也不会影响上层已有的逻辑卷。这种动态管理能力,显著提升了磁盘资源的灵活调配效率。此外,若需进一步增强云盘的 I/O 性能,还可将多块容量相同的云盘组合成 RAID0 来实现。

图1:LVM 逻辑架构示意(图片源自网络)
二、LVM 逻辑卷的创建方法
2.1 步骤一:创建物理卷 PV
接下来以 5 块云盘通过 LVM 构建弹性可扩展逻辑卷为例,介绍具体操作流程。
root@lvs06:~# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTvda252:0040G0 disk└─vda1 252:1040G0 part /vdb252:16 0 1T0 diskvdc252:32 0 1T0 diskvdd252:48 0 1T0 diskvde252:64 0 1T0 diskvdf252:80 0 1T0 disk
step1:使用 root 账户登录云服务器
step2:执行以下命令,为云盘创建 PV 物理卷
pvcreate <磁盘路径1> ... <磁盘路径N>
说明:此处需填写云盘的设备名称,如需添加多块云盘,直接列出其设备名称并用空格隔开即可。下面以 /dev/vdb、/dev/vdc、/dev/vdd、/dev/vde、/dev/vdf 为例,执行结果如下:
root@lvs06:~# pvcreate/dev/vdb /dev/vdc /dev/vdd /dev/vde /dev/vdfPhysical volume "/dev/vdb" successfully created.Physical volume "/dev/vdc" successfully created.Physical volume "/dev/vdd" successfully created.Physical volume "/dev/vde" successfully created.Physical volume "/dev/vdf" successfully created.
step3:执行以下命令,查看服务器上所有物理卷(PV)信息:
lvmdiskscan | grep LVM
执行结果如下:
root@lvs06:~# lvmdiskscan | grep LVM/dev/vdb[ 1.00 TiB] LVM physical volume/dev/vdc[ 1.00 TiB] LVM physical volume/dev/vdd[ 1.00 TiB] LVM physical volume/dev/vde[ 1.00 TiB] LVM physical volume/dev/vdf[ 1.00 TiB] LVM physical volume5 LVM physical volume whole disks0 LVM physical volumes
2.2 步骤二:创建卷组 VG
step1:执行以下命令,创建卷组 VG
vgcreate <卷组名> <物理卷路径1>……<物理卷路径N>
执行结果如下:
root@lvs06:~# vgcreate lvm_01/dev/vdb/dev/vdc /dev/vdd /dev/vde /dev/vdfVolume group "lvm_01" successfully created
说明:
1.卷组名:此参数可自定义设置
2.物理卷路径:填写云盘的物理卷名称,多个物理卷之间用空格分隔
3.当出现 “Volume group XXX successfully created” 提示时,表示卷组创建成功
step2:执行以下命令,可向已有卷组(VG)中添加新的物理卷(PV)
vgextend 卷组名称<物理卷路径1>……<物理卷路径N>
以下示例向卷组 lvm_01 中添加一块新的物理卷:
root@lvs06:~# pvcreate /dev/vdgPhysical volume "/dev/vdg" successfully created.root@lvs06:~# vgextendlvm_01/dev/vdgVolume group "lvm_01" successfully extended
step3:卷组创建成功后,可通过 vgs、vgdisplay 命令查看卷组信息
root@lvs06:~# vgsVG #PV #LV #SN Attr VSizeVFreelvm_01 6 0 0 wz--n- <6.00t <6.00t
2.3 步骤三:创建逻辑卷 LV
step1:执行以下命令创建逻辑卷 LV
lvcreate [-L <逻辑卷大小>][ -n <逻辑卷名称>] <卷组名称>
参数说明:
1.逻辑卷大小:该值需小于卷组可用空间,单位可为 MB、GB 或 TB
2.逻辑卷名称:可自定义命名
3.卷组名称:填写逻辑卷所属的卷组名称
这里以创建 1 个 4TB 的逻辑卷为例,执行结果如下:
root@lvs06:~# lvcreate -L 5T -n lv01 lvm_01Logical volume "lv01" created.
step2:执行 lvdisplay 命令,查看逻辑卷的详细信息:
root@lvs06:~# lvdisplay--- Logical volume ---LV Path/dev/lvm_01/lv01LV Namelv01VG Namelvm_01LV UUIDsvB00x-l6Ke-ES6M-ctsE-9P6d-dVj2-o0h3KzLV Write Accessread/writeLV Creation host, time lvs06, 2019-06-06 15:27:19 0800LV Statusa vailable# open 0LV Size5.00 TiBCurrent LE 1310720Segments 6Allocation inheritRead ahead sectors auto- currently set to 256Block device 253:0
2.4 步骤四:创建并挂载文件系统
step1:执行以下命令,在已创建的逻辑卷上创建文件系统
mkfs.文件系统格式逻辑卷路径
针对上一步中的逻辑卷创建 ext4 文件系统,执行结果如下:
root@lvs06:~# mkfs.ext4/dev/lvm_01/lv01mke2fs 1.44.1 (24-Mar-2018)Creating filesystem with 1342177280 4k blocks and 167772160 inodesFilesystem UUID: 2529002f-9209-4b6a-9501-106c1145c77fSuperblock backups stored on blocks:32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,102400000, 214990848, 512000000, 550731776, 644972544Allocating group tables: doneWriting inode tables: doneCreating journal (262144 blocks): doneWriting superblocks and filesystem accounting information:done
step2:执行以下命令挂载文件系统:
mount逻辑卷路径 挂载点
执行结果如下:
root@lvs06:~# mount/dev/lvm_01/lv01/media/lv01root@lvs06:~# df -hFilesystem SizeUsed A vail Use% Mounted onudev12G 0 12G 0% /devtmpfs2.4G3.7M2.4G 1% /run/dev/vda1 40G3.6G 34G10% /tmpfs 12G 0 12G 0% /dev/shmtmpfs5.0M 05.0M 0% /run/locktmpfs 12G 0 12G 0% /sys/fs/cgrouptmpfs2.4G 02.4G 0% /run/user/0/dev/mapper/lvm_01-lv015.0T 89M4.8T 1% /media/lv01
三、进阶应用场景
3.1 逻辑卷与文件系统容量的在线扩展
Step1:执行以下命令,可以扩展逻辑卷的容量
lvextend [-L /- <增减容量>] <逻辑卷路径>
参数说明:
1.增减容量:若卷组中仍有剩余空间,即可执行扩容操作。注意,扩容逻辑卷后还需同步扩容对应的文件系统才能生效
2.逻辑卷路径:填写需要扩容的逻辑卷完整路径
下面以对 /dev/lvm_01/lv01 卷扩容 500GB 物理空间为例,执行结果如下:
root@lvs06:~# lvextend -L 500GB /dev/lvm_01/lv01Size of logical volume lvm_01/lv01 changed from 5.00 TiB (1310720 extents) to <5.49 TiB (1438720 extents).Logical volume lvm_01/lv01 successfully resized.
step2:执行 pvs 命令,查看物理卷使用情况:
root@lvs06:~# pvsPV VG FmtAttr PSize PFree/dev/vdb lvm_01 lvm2 a--<1024.00g 0/dev/vdc lvm_01 lvm2 a--<1024.00g 0/dev/vdd lvm_01 lvm2 a--<1024.00g 0/dev/vde lvm_01 lvm2 a--<1024.00g 0/dev/vdf lvm_01 lvm2 a--<1024.00g 0/dev/vdg lvm_01 lvm2 a--<1024.00g <523.98g
step3:执行 resize2fs 命令扩容文件系统:
resize2fs逻辑卷路径
执行结果如下:
root@lvs06:~# resize2fs/dev/lvm_01/lv01resize2fs 1.44.1 (24-Mar-2018)Filesystem at /dev/lvm_01/lv01 is mounted on /media/lv01; on-line resizing requiredold_desc_blocks = 640, new_desc_blocks = 703The filesystem on /dev/lvm_01/lv01 is now 1473249280 (4k) blocks long.
step4:执行 df -h 命令,确认文件系统扩容结果
root@lvs06:~# df -hFilesystem SizeUsed A vail Use% Mounted onudev12G 0 12G 0% /devtmpfs2.4G3.7M2.4G 1% /run/dev/vda1 40G3.6G 34G10% /tmpfs 12G 0 12G 0% /dev/shmtmpfs5.0M 05.0M 0% /run/locktmpfs 12G 0 12G 0% /sys/fs/cgrouptmpfs2.4G 02.4G 0% /run/user/0/dev/mapper/lvm_01-lv015.5T 83M5.2T 1% /media/lv01
