判断系统是否使用lvm应先执行sudo pvs,若返回“no volume groups found”则未用lvm;再结合sudo vgs、sudo lvs确认pv、vg、lv存在性,避免仅凭df -h或设备名误判。

如何判断当前系统是否用了 LVM
直接看 lsblk 输出里有没有 lvm 类型的设备,或者执行 sudo pvs —— 如果返回空或报错 No volume groups found,基本可以确定没用 LVM。别只看 df -h,它只显示挂载点,不暴露底层结构。
常见误判:看到 /dev/sda2 挂载在 / 就以为是普通分区,其实它可能是 PV(物理卷),背后连着 vg0 和 lv_root。真要确认,跑一遍 sudo lvs 和 sudo vgs 更可靠。
-
sudo pvs显示所有物理卷(PV) -
sudo vgs显示卷组(VG)是否存在、大小、空闲空间 -
sudo lvs显示逻辑卷(LV)路径、大小、挂载点(如果已挂载)
扩容一个已挂载的 LVM 逻辑卷(LV)
不能跳过步骤直接 resize2fs,否则文件系统会报错 The Filesystem is already <n> blocks long. Nothing to do!</n> —— 因为 LV 大小还没变。
典型流程是“先扩 LV,再扩文件系统”,顺序反了就白忙。注意:XFS 文件系统必须用 xfs_growfs,且只能增大不能缩小;ext4 才能用 resize2fs。
- 查空闲空间:
sudo vgs看VFree列 - 扩 LV(比如扩 10G):
sudo lvextend -L +10G /dev/vg0/lv_root - 扩文件系统:
sudo resize2fs /dev/vg0/lv_root(ext4) 或sudo xfs_growfs /(XFS,挂载点路径)
容易踩的坑:lvextend 默认不加 -r 参数,不会自动调用文件系统工具;加了 -r(如 lvextend -r -L +10G ...)才自动联动,但前提是系统装了对应工具(比如 xfsprogs)。
把普通分区转成 LVM 物理卷(PV)的安全操作
不能直接对已挂载、有数据的分区运行 pvcreate,它会清空前 512 字节(包括分区表和文件系统签名),导致数据不可读。必须先备份、卸载、确认无误再操作。
真实场景中,常有人想把新硬盘(如 /dev/sdb)加入现有 VG,结果误对 /dev/sdb1 做 pvcreate,却忘了这个分区原本存着备份——没卸载、没备份就动手,等于主动删库。
- 先卸载:
sudo umount /dev/sdb1 - 确认没被使用:
sudo lsof +D /mnt/backup或sudo fuser -v /dev/sdb1 - 备份关键数据(至少 MBR 和分区表):
sudo sfdisk -d /dev/sdb > sdb-partition.bak - 创建 PV:
sudo pvcreate /dev/sdb1 - 加入 VG:
sudo vgextend vg0 /dev/sdb1
为什么 lvremove 提示 “Can’t remove open logical volume”
说明该 LV 正被内核或进程占用,最常见的是它被挂载了,或者有 swap 在用,也可能是某个服务(如 docker、LXC)底层绑定了设备节点。
别急着强制删,先查清楚谁在用:sudo lsof +D /mount/point 或 sudo dmsetup info -c | grep <code>lv_name 看是否被 device-mapper 活跃引用。
- 如果是挂载状态:
sudo umount /dev/vg0/lv_data - 如果是 swap:
sudo swapoff /dev/vg0/lv_swap - 如果还在被 mapper 引用:
sudo dmsetup remove vg0-lv_data(需确保无任何访问) - 最后再删:
sudo lvremove /dev/vg0/lv_data
LVM 的设备节点(如 /dev/mapper/vg0-lv_data)和符号链接(/dev/vg0/lv_data)有时残留,删完建议运行 sudo dmsetup mknodes 同步状态。