Linux 磁盘分区与 LVM 管理技巧

1次阅读

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

Linux 磁盘分区与 LVM 管理技巧

如何判断当前系统是否用了 LVM

直接看 lsblk 输出里有没有 lvm 类型的设备,或者执行 sudo pvs —— 如果返回空或报错 No volume groups found,基本可以确定没用 LVM。别只看 df -h,它只显示挂载点,不暴露底层结构。

常见误判:看到 /dev/sda2 挂载在 / 就以为是普通分区,其实它可能是 PV(物理卷),背后连着 vg0lv_root。真要确认,跑一遍 sudo lvssudo 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 vgsVFree
  • 扩 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/sdb1pvcreate,却忘了这个分区原本存着备份——没卸载、没备份就动手,等于主动删库。

  • 先卸载:sudo umount /dev/sdb1
  • 确认没被使用:sudo lsof +D /mnt/backupsudo 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/pointsudo 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 同步状态。

text=ZqhQzanResources