lvm扩容必须先用lvextend扩展逻辑卷,再用resize2fs(ext4)或xfs_growfs(xfs)同步文件系统,二者缺一不可;顺序颠倒或命令混用将导致空间不生效或报错。

lvextend 和 resize2fs / xfs_growfs 是实际扩容操作中真正起效的两个关键命令,缺一不可。只调逻辑卷大小不调文件系统,空间不会被识别;只调文件系统不先扩逻辑卷,会报错“no space left on device”。
扩容前必须确认文件系统类型
不同文件系统对扩容的支持能力完全不同,不能混用命令:
- ext4(也兼容 ext3/ext2)支持在线扩容和缩容,用 resize2fs
- xfs 只支持在线扩容,不支持缩容,必须用 xfs_growfs,且该命令**必须在挂载状态下执行**
- df -T /mount/point 是最可靠的判断方式,别信分区名或历史印象
- /boot 分区永远不能基于 LVM,这是内核启动限制,强行做会导致系统无法启动
lvextend 扩容逻辑卷本身
这一步是给逻辑卷“划地”,但不等于文件系统能立刻用上:
- 增加 10G:lvextend -L +10G /dev/mapper/vgname-lvname
- 扩到总大小 50G:lvextend -L 50G /dev/mapper/vgname-lvname
- 必须确保卷组里有足够空闲 PE(用 vgs 或 vgdisplay vgname 查看 PFree)
- 如果没空闲空间,得先用 pvcreate + vgextend 加新物理盘或分区
- lvextend 默认不会拒绝超限操作,但后续 resize2fs 会失败并提示 “The filesystem is already XXX blocks long”
文件系统层必须同步调整
逻辑卷变大后,文件系统仍认为自己是旧大小,必须显式通知它:
- 对 ext4:resize2fs /dev/mapper/vgname-lvname(可在线执行,无需 umount)
- 对 xfs:xfs_growfs /mount/point(注意:参数是挂载点,不是设备路径!)
- resize2fs 不带大小参数时自动撑满整个 LV;xfs_growfs 同理,不支持指定大小
- 若误对 xfs 执行 resize2fs,会报错 “Invalid argument” 并中断,但不损坏数据
- 若 LV 已扩容但忘记运行文件系统命令,df -h 显示的仍是旧容量,这是最常被忽略的一步
缩容是高危操作,多数场景应避免
缩小逻辑卷+文件系统极易丢数据,除非万不得已:
- xfs 完全不支持缩容,硬要缩只能备份→mkfs.xfs→恢复
- ext4 缩容需严格按顺序:先 e2fsck -f 强制检查 → 再 resize2fs 缩文件系统 → 最后 lvreduce 缩 LV
- lvreduce 默认不校验文件系统大小,如果先缩 LV 再缩 FS,大概率直接损坏
- 生产环境缩容前必须 dd 备份整个 LV(如 dd if=/dev/mapper/vg-lv of=/backup/lv.img bs=1M)
- 很多运维事故都源于把 lvreduce 当成 lvextend 的反向操作直接套用,这是错的











