Linux LVM 原理与操作案例

13次阅读

必须先设分区类型为 8e,因为 pvcreate 只识别类型 id 为 8e(lvm 专用)的分区;内核据此判断是否允许 lvm 管理,否则报错或静默失败。

Linux LVM 原理与操作案例

为什么必须先设分区类型为 8e 才能 pvcreate

因为 pvcreate 不是万能格式化工具,它只认“已声明为 LVM 用途”的设备。Linux 内核靠分区类型 ID(如 8e)判断该分区是否允许被 LVM 管理;否则会报错 Device does not exist or is not a block device 或静默失败。

  • fdisk /dev/sdbt → 输入 8e 设置类型(对整盘无需此步,但生产环境强烈建议分区后设)
  • partprobe 必须执行——尤其在脚本中,否则 /dev/sdb1 文件节点可能未生成,pvcreate 找不到设备
  • RAID 设备(如 /dev/md0)或 NVMe 分区(如 /dev/nvme0n1p1)同样需确保内核已识别且类型合规

扩容 LV 时,resize2fsxfs_growfs 不能混用

文件系统类型决定后续命令:ext4/xfs 行为完全不同,强行套用会导致挂载失败甚至数据损坏。

  • ext4 扩容流程严格三步:lvextend -L +10G /dev/vg0/lv_datae2fsck -f /dev/vg0/lv_data(缩容前必做,扩容可选但推荐)→ resize2fs /dev/vg0/lv_data
  • xfs 扩容只需一步:xfs_growfs /mount/point(注意:是挂载点,不是设备路径!)
  • xfs 不支持在线缩容;ext4 虽支持,但必须先 umount + e2fsck + resize2fs 回缩,风险极高,生产环境应避免

VG 空间不够?加新硬盘不是直接 vgextend 就完事

新加物理磁盘要进 VG,得先变成 PV;而 PV 创建失败最常见的原因是残留元数据或设备忙。

  • 旧硬盘重利用前,务必清除 LVM 签名:pvremove -ff /dev/sdc-ff 强制覆盖,否则 pvcreate 拒绝写入)
  • 若提示 device is in use by another device-mapper target,检查是否有残留 LV 映射:dmsetup ls + dmsetup remove xxx
  • vgextend vg0 /dev/sdc 成功后,用 vgs 确认 VFree 值已增加;别只看 VG Size —— 它包含已分配空间,不等于可用空间

快照(snapshot)不是备份,lvcreate -s 后必须及时处理

LVM 快照是写时复制(COW)机制,空间耗尽会导致快照失效、原 LV 可能只读甚至 I/O 错误,它只适合短时操作(如升级前临时保存状态)。

  • 创建时务必指定大小:lvcreate -L 5G -s -n snap_root /dev/vg0/lv_root;默认大小为 100MB,几乎立刻打满
  • 快照本身不自动清理,长期存在会持续占用 VG 空间;用完即删:lvremove /dev/vg0/snap_root
  • 不能对快照再做快照;也不能从快照挂载写入——它是只读的(除非加 --permission rw,但极不推荐)

LVM 的弹性建立在清晰的三层抽象上,但每一层都有隐性约束:PE 大小影响最大 LV 容量(虽 64 位系统已放宽),VG 中 PV 的元数据一致性依赖 vgcfgbackup 定期保存,而任何涉及 lvreducepvmove 的操作,都要求你真正理解数据落盘路径——不是所有“看起来能动”的空间,都真的安全可动。

text=ZqhQzanResources