在线扩容需分三步:先扩lv(lvextend),再扩文件系统(ext4用resize2fs,xfs用xfs_growfs挂载点),中间不可跳步;须确认vg有空闲pe,否则需先添加pv;命令参数大小写、单位及对象路径须严格区分。

能在线扩容,但必须分三步走:先扩LV,再扩文件系统,中间不能跳步。
确认卷组还有空闲空间(vgdisplay 看 Free PE / Size)
没空闲PE,lvextend 会直接报错 Insufficient free extents。别急着敲命令,先看清楚现状:
- 运行
vgdisplay,重点找Free PE / Size行——这才是你真正能用的“额度” - 如果为
0,说明VG已满,必须先加物理卷:pvcreate /dev/sdb1→vgextend vg01 /dev/sdb1 - 注意:新磁盘要先分区(
fdisk /dev/sdb设类型为8e),再partprobe刷新内核识别,否则pvcreate会失败
lvextend 扩逻辑卷时大小写和单位要盯紧
lvextend 的 -L 和 -l 参数含义完全不同,混用会导致容量远超预期或报错:
-
-L +10G:给 LV 增加 10GB(支持G/M/T单位) -
-L 50G:把 LV 总大小设为 50GB(不是增加) -
-l +100%FREE:用掉 VG 中所有剩余 PE(推荐,避免手算出错) - 错误示例:
lvextend -L +10g(小写 g)在部分老版本会解析失败,坚持用大写G
ext4 和 xfs 扩文件系统命令完全不同且不可互换
LV 扩完只是“划地”,文件系统不跟着扩,df -h 就不会变。这一步最容易漏,也最易踩坑:
- ext4(含 ext3/ext2):直接对设备路径操作 ——
resize2fs /dev/vg01/lv_root(支持在线,不用 umount) - xfs:必须对挂载点操作 ——
xfs_growfs /(传/dev/vg01/lv_root会报错invalid argument) - 验证是否生效:先
lvdisplay看 LV 大小,再df -h /看挂载点容量,两者必须一致
扩容后文件系统没变大?八成卡在 xfs 的挂载点参数上
尤其在根分区扩容时,xfs_growfs 报 cannot open /dev/xxx: No such file or directory 不是设备不存在,而是它根本不认设备路径:
- 查挂载点:
findmnt -n -o TARGET /dev/vg01/lv_root或直接mount | grep vg01 - 必须用输出的挂载路径,例如
/、/home、/data,而不是 LV 设备名 - 若挂载选项含
noatime或nobarrier,不影响xfs_growfs执行,无需调整
整个过程没有“一键完成”的命令,lvextend 和文件系统扩容是两个独立动作,xfs 还额外要求你记住挂载点这个上下文。漏掉任一环,空间就躺在那里,df 看不见。










