帮你快速理解、总结文档立即下载

LVM 逻辑卷管理

最近更新时间:2026-08-27 18:07:01
我的收藏

LVM 介绍

LVM( Logical Volume Manager )是一个 device mapper 框架,用来提供逻辑卷管理能力。逻辑卷存在于块设备和具体文件系统之间,可以让上层应用忽略块设备的物理布局,达到更方便更灵活使用设备的目的。

物理卷管理

创建物理卷

使用 pvcreate 命令将块设备初始化为 LVM 物理卷。以下以 /dev/vdb 为例:
警告
pvcreate 会在目标设备上写入 LVM 标签和元数据。若设备中已存在文件系统或其他签名,继续操作可能破坏原有数据。请您在执行前确认目标设备正确,并已备份需要保留的数据。
pvcreate /dev/vdb
输出示例:
Physical volume "/dev/vdb" successfully created.
若目标设备中已存在文件系统签名,命令会提示您确认是否清除该签名,输出示例如下:
WARNING: ext4 signature detected on /dev/vdb at offset 1080. Wipe it? [y/n]:
创建时默认会以设备目前可用最大大小创建。

查看物理卷

pvdisplay 命令用于显示物理卷(Physical Volume)的属性信息,包括物理卷的名称、UUID、大小、状态、分配情况等等。
pvdisplay /dev/vdb
输出示例:
--- Physical volume ---
PV Name /dev/vdb
VG Name test
PV Size 200.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 51199
Free PE 51199
Allocated PE 0
PV UUID gQB42U-IKt2-517n-RB3q-p9ob-bAz7-Ggvjtd
直接执行 pvdisplay 命令(不带任何参数),可列出系统中所有物理卷的信息。也可以指定一个或多个物理卷名称作为参数,仅显示指定物理卷的信息。pvdisplay 命令的输出结果包括以下信息:
PV Name:物理卷的名称
UUID:物理卷的 UUID
Total PE / Free PE:物理卷的大小
Allocatable / Exported / Missing:物理卷的状态
物理卷的属性(例如,是否加密、是否只读等等)
VG Name:物理卷所属的卷组
LV Name:物理卷上的逻辑卷
pvs 用于查看物理卷的状态:
pvs
输出示例:
PV VG Fmt Attr PSize PFree
/dev/vdb test lvm2 a-- <200.00g <200.00g

修改物理卷属性

pvchange 命令是 Linux 系统中 LVM(逻辑卷管理)的一个命令,用于更改物理卷的属性。以下是 pvchange 命令的使用方法:
pvchange [options] [PhysicalVolumePath...]
其中,PhysicalVolumePath 是需要更改属性的物理卷路径,可以指定多个物理卷路径,用空格分隔。以下是一些常用的选项:
-a, --all:更改所有物理卷的属性。
-x, --allocatable y/n: 设置物理卷是否可分配。y 表示可分配,n 表示不可分配。
-t, --test: 测试模式,不会实际更改物理卷的属性,而是显示将要执行的操作。
注意
在使用 pvchange 命令时,请注意备份重要数据,并谨慎操作,以免造成数据丢失或其他不必要的损失。
以下示例将分别修改单个物理卷、全部物理卷以及使用测试模式验证配置:
1. 将物理卷 /dev/sdb1 设置为不可分配(需要先将其分配给逻辑卷组,下同):
pvchange -x n /dev/sdb1
2. 将所有物理卷设置为可分配:
pvchange -x y -a
3. 测试将物理卷 /dev/sdb1 设置为不可分配的操作:
pvchange -x n -t /dev/sdb1

删除物理卷

删除物理卷会清除该物理卷上的 LVM 元数据。删除前请确认该物理卷已不属于任何卷组,并已备份需要保留的数据:
警告
若物理卷仍属于某个卷组,请先使用 vgreduce 将其从卷组中移除,否则 pvremove 会执行失败;强行删除属于卷组的物理卷可能导致该卷组中的数据丢失。
pvremove /dev/vdb
输出示例:
Labels on physical volume "/dev/vdb" successfully wiped.

逻辑卷组管理

创建卷组

vgcreate 命令用于创建卷组(Volume Group,VG),并将一个或多个物理卷(Physical Volume,PV)加入该卷组。执行前,请您确认目标物理卷已通过 pvcreate 初始化,且未被其他卷组使用。
以下示例创建名为 myvg 的卷组,并加入物理卷 /dev/sdb1
vgcreate myvg /dev/sdb1
输出示例:
Volume group "myvg" successfully created
如需在创建卷组时加入多个物理卷,请在命令末尾依次指定设备路径:
vgcreate myvg /dev/sdb1 /dev/sdc1 /dev/sdd1
常用选项如下:
-s, --physicalextentsize:指定物理区段(PE)的大小。
-l, --maxlogicalvolumes:指定卷组中允许创建的最大逻辑卷数量。
-p, --maxphysicalvolumes:指定卷组允许包含的最大物理卷数量。
-A, --autobackup y|n:指定变更后是否自动备份卷组元数据,建议保持为 y
以下示例创建 PE 大小为 16MiB 的卷组 myvg
vgcreate -s 16M myvg /dev/sdb1
创建完成后,请执行 vgdisplay myvgvgs myvg 验证卷组状态。PE 大小在卷组创建后难以调整,请您在创建前根据业务需要合理规划。

查看卷组

vgdisplay 命令用于查看卷组的 UUID、大小、状态、物理卷数量、逻辑卷数量和空闲 PE 等详细信息。以下示例查看卷组 myvg
vgdisplay myvg
输出示例(节选):
--- Volume group ---
VG Name myvg
VG Status resizable
Cur LV 0
Cur PV 1
VG Size <200.00 GiB
PE Size 4.00 MiB
Total PE 51199
Alloc PE / Size 0 / 0
Free PE / Size 51199 / <200.00 GiB
如需以表格形式查看所有卷组,可执行:
vgs
输出示例:
VG #PV #LV #SN Attr VSize VFree
myvg 1 0 0 wz--n- <200.00g <200.00g
您可以根据输出中的 VG StatusCur PVCur LVVG SizeVFree 等字段判断卷组是否可用以及剩余空间是否充足。

修改卷组属性

vgchange 命令用于修改卷组及其逻辑卷的激活状态、卷组是否允许增删物理卷等属性。常用选项如下:
-a, --activate y|n|ay:激活或停用卷组中的逻辑卷。y 表示激活,n 表示停用,ay 表示自动激活。
-x, --resizeable y|n:允许或禁止通过 vgextendvgreduce 增加或移除物理卷。
-u, --uuid:为卷组生成新的随机 UUID。修改 UUID 前必须确保卷组处于非激活状态。
警告
停用卷组会使其中的逻辑卷无法访问,可能导致正在使用这些逻辑卷的业务中断。执行前请您先卸载相关文件系统,并确认没有进程正在使用对应逻辑卷。
1. 停用卷组 myvg 中的逻辑卷(执行成功时无输出):
vgchange -a n myvg
2. 重新激活卷组 myvg 中的逻辑卷:
vgchange -a y myvg
输出示例:
1 logical volume(s) in volume group "myvg" now active
修改完成后,可执行 lvs -o lv_name,vg_name,lv_attr 验证逻辑卷的激活状态。

伸缩卷组

扩展

vgextend 命令用于将一个或多个物理卷添加到已有卷组中,从而增加卷组可分配给逻辑卷的空间。执行前,请您确认待添加设备未被其他卷组使用。
以下示例将物理卷 /dev/sdc1 添加到卷组 myvg
vgextend myvg /dev/sdc1
输出示例:
Volume group "myvg" successfully extended
如需一次添加多个物理卷,请在命令末尾依次指定设备路径:
vgextend myvg /dev/sdc1 /dev/sdd1
常用选项如下:
-A, --autobackup y|n:指定变更后是否自动备份卷组元数据,建议保持为 y
-t, --test:测试操作,不写入卷组元数据。
-v, --verbose:显示详细执行信息。
卷组的 PE 大小由 vgcreate -s 在创建时确定,不能通过 vgextend 修改。扩展完成后,请执行以下命令验证卷组空间:
vgs myvg
请确认输出中的物理卷数量和空闲空间符合预期。

缩减

vgreduce 命令用于从卷组中移除一个或多个未被使用的物理卷。若待移除物理卷仍包含已分配的 PE,请先使用 pvmove 将数据迁移到同一卷组中的其他物理卷。
警告
移除仍承载数据的物理卷会导致逻辑卷不完整和数据丢失。执行前请您使用 pvs -o pv_name,pv_used 确认目标物理卷的 PUsed0,并备份重要数据。
命令语法如下:
vgreduce [options] <VG> <PV> [<PV>...]
其中,<VG> 表示卷组名称,<PV> 表示需要移除的物理卷路径。常用选项如下:
-a, --all:移除卷组中所有空闲、未承载数据的物理卷。
-f, --force:强制执行操作,可能导致数据丢失,不建议在常规场景使用。
-t, --test:测试操作,不写入卷组元数据。
示例命令如下:
1. 从卷组 vg01 中移除物理卷 /dev/sdb1
vgreduce vg01 /dev/sdb1
2. 移除卷组 vg01 中所有空闲物理卷:
vgreduce -a vg01
3. 使用测试模式检查从卷组 vg01 移除 /dev/sdb1 的操作:
vgreduce -t vg01 /dev/sdb1
实际移除完成后,请执行 pvsvgs -o vg_name,pv_count 验证卷组中的物理卷数量。

删除卷组

vgremove 命令用于删除卷组以及卷组中的逻辑卷。删除后,卷组中的物理卷仍保留 LVM 物理卷标签,可重新用于其他卷组。
警告
删除卷组会删除其中的全部逻辑卷及其数据,且不可恢复。执行前请您卸载卷组内逻辑卷对应的文件系统,确认相关数据已备份,并优先使用测试模式验证。
命令语法如下:
vgremove [options] <VG>
其中,<VG> 表示需要删除的卷组名称。常用选项如下:
-f, --force:强制执行操作并绕过部分确认,不建议在常规场景使用。
-t, --test:测试操作,不写入卷组元数据。
示例命令如下:
1. 使用测试模式检查删除卷组 vg01 的操作:
vgremove -t vg01
2. 确认无误后,删除卷组 vg01
vgremove vg01
输出示例:
Volume group "vg01" successfully removed
删除完成后,请执行 vgs 确认卷组列表中已无 vg01

逻辑卷管理

创建逻辑卷

lvcreate 命令用于从卷组的空闲空间中创建逻辑卷。该命令只创建块设备,不负责创建 ext4、xfs 等文件系统。
命令语法如下:
lvcreate -L <size> -n <LV> <VG>
其中,<size> 表示逻辑卷大小,<LV> 表示逻辑卷名称,<VG> 表示卷组名称。常用选项如下:
-L, --size:指定逻辑卷的大小,可使用 KMGT 等单位。
-l, --extents:按 PE 数量或卷组空间百分比指定逻辑卷大小。
-n, --name:指定逻辑卷名称。
-r, --readahead:指定逻辑卷的预读扇区数,也可设置为 autonone
警告
在逻辑卷上执行 mkfs 会清除该逻辑卷中的现有数据。请您仅对新建或确认无需保留数据的逻辑卷执行格式化操作。
示例命令如下:
1. 在卷组 vg01 中创建大小为 10GiB 的逻辑卷 lv01
lvcreate -L 10G -n lv01 vg01
输出示例:
Logical volume "lv01" created.
2. 创建大小为 100MiB 的逻辑卷 lv02,然后创建 ext4 文件系统:
lvcreate -L 100M -n lv02 vg01
mkfs.ext4 /dev/vg01/lv02
3. 创建大小为 1TiB、预读扇区数为 256 的逻辑卷 lv03
lvcreate -L 1T -n lv03 -r 256 vg01
创建完成后,请执行 lvs -o lv_name,vg_name,lv_size,lv_attr 验证逻辑卷状态。

查看逻辑卷

lvdisplay 命令用于查看逻辑卷的名称、路径、大小、状态和卷组等详细信息。
示例命令如下:
1. 查看逻辑卷 lv01 的详细信息:
lvdisplay /dev/vg01/lv01
输出示例(节选):
--- Logical volume ---
LV Path /dev/vg01/lv01
LV Name lv01
VG Name vg01
LV Status available
LV Size 10.00 GiB
2. 查看系统中的全部逻辑卷:
lvdisplay
3. 以冒号分隔格式查看逻辑卷 lv01
lvdisplay -c /dev/vg01/lv01
如需以表格形式查看逻辑卷,建议使用 lvs 命令。

扩展逻辑卷

lvextend 命令用于从卷组的空闲空间中为逻辑卷增加容量。常用选项如下:
-L, --size:指定扩展后的绝对大小;使用 + 前缀时,表示在当前大小基础上增加容量。
-l, --extents:按 PE 数量或卷组空间百分比扩展逻辑卷。
-r, --resizefs:扩展逻辑卷后,同时调整受支持的文件系统大小。
注意
扩展前请您确认卷组剩余空间充足,并备份重要数据。若未使用 -r,扩展逻辑卷后还需根据文件系统类型单独扩展文件系统。
示例命令如下:
1. 将逻辑卷 lv01 的容量扩展到 20GiB:
lvextend -L 20G /dev/vg01/lv01
2. 将逻辑卷 lv02 扩展到 200MiB,并同步调整文件系统大小:
lvextend -L 200M -r /dev/vg01/lv02
扩展完成后,请执行 lvs /dev/vg01/lv01 /dev/vg01/lv02 验证逻辑卷容量。若未使用 -r,ext4 文件系统可使用 resize2fs 扩展,已挂载的 xfs 文件系统应使用 xfs_growfs <挂载点> 扩展。

调整逻辑卷大小

lvresize 命令既可扩展逻辑卷,也可缩小逻辑卷。常用选项如下:
-L, --size:指定调整后的绝对大小;使用 +- 前缀时,表示增加或减少指定容量。
-l, --extents:按 PE 数量或卷组空间百分比调整逻辑卷大小。
-r, --resizefs:同时调整受支持的文件系统大小。
警告
缩小逻辑卷可能截断文件系统数据并造成不可恢复的数据丢失。执行前请您完成数据备份,确认文件系统支持缩小,并确保文件系统已先安全缩小到不大于目标逻辑卷容量。xfs 文件系统不支持原地缩小。
示例命令如下:
1. 将逻辑卷 lv01 扩展到 20GiB,并同步扩展文件系统:
lvresize -L 20G -r /dev/vg01/lv01
2. 以下命令仅适用于已确认可安全缩小的文件系统,将逻辑卷 lv02 缩小到 100MiB,并同步调整文件系统:
lvresize -L 100M -r /dev/vg01/lv02
调整完成后,请执行 lvs 和对应文件系统的检查命令验证逻辑卷与文件系统状态。

删除逻辑卷

lvremove 命令用于删除逻辑卷。删除后,逻辑卷中的文件系统和数据也将一并丢失。
警告
删除逻辑卷会永久删除其中的数据,且不可恢复。执行前请您备份重要数据,并先卸载该逻辑卷上的文件系统。-f-y 会绕过部分确认,请勿在未核对目标逻辑卷时使用。
命令语法如下:
lvremove [options] <LV>
常用选项如下:
-f, --force:强制执行操作并绕过部分检查。
-y, --yes:对确认提示自动回答“是”。
示例命令如下:
1. 卸载逻辑卷 lv01 上的文件系统,然后删除该逻辑卷:
umount /dev/vg01/lv01
lvremove /dev/vg01/lv01
输出示例:
Logical volume "lv01" successfully removed.
2. 在已确认目标无误的情况下,强制删除逻辑卷 lv02
lvremove -f /dev/vg01/lv02
删除完成后,请执行 lvs 确认逻辑卷列表中已无目标逻辑卷。

文件系统管理

逻辑卷创建完成后,可将其作为普通块设备创建文件系统并挂载使用。以下以逻辑卷 /dev/vg01/lv01 和 ext4 文件系统为例。
警告
创建文件系统会清除目标逻辑卷中的全部现有数据,且不可恢复。请您在执行前确认目标逻辑卷正确,并已备份需要保留的数据。
1. 确认逻辑卷存在且状态正常:
lvs /dev/vg01/lv01
输出示例:
LV VG Attr LSize
lv01 vg01 -wi-a----- 10.00g
2. 在逻辑卷上创建 ext4 文件系统:
mkfs.ext4 /dev/vg01/lv01
输出示例(节选):
Creating filesystem with 2621440 4k blocks and 655360 inodes
Allocating group tables: done
Writing inode tables: done
Creating journal: done
Writing superblocks and filesystem accounting information: done
3. 创建挂载点(执行成功时无输出):
mkdir -p /mnt/myfs
4. 将逻辑卷临时挂载到 /mnt/myfs(执行成功时无输出):
mount /dev/vg01/lv01 /mnt/myfs
5. 验证文件系统已成功挂载:
findmnt /mnt/myfs
输出示例:
TARGET SOURCE FSTYPE OPTIONS
/mnt/myfs /dev/mapper/vg01-lv01 ext4 rw,relatime
上述 mount 命令创建的是临时挂载,系统重启后失效。如需永久挂载,请先执行 blkid /dev/vg01/lv01 获取文件系统 UUID,再将以下配置添加到 /etc/fstab,并将示例 UUID 替换为实际值:
UUID=<实际UUID> /mnt/myfs ext4 defaults 0 2
保存后,执行以下命令验证 /etc/fstab 配置。执行成功时无输出:
mount -a
如需卸载文件系统,请先确认没有进程正在使用挂载点,再执行:
umount /mnt/myfs
卸载完成后,可执行 findmnt /mnt/myfs 验证;无输出表示该挂载点已卸载。