lvm扩容需依次完成物理卷加入卷组、逻辑卷扩展、文件系统同步扩容三步,缺一不可;须用pvs/vgs/lvs/df逐层确认结构,lvextend慎用-l绝对值参数,ext4用resize2fs、xfs用xfs_growfs挂载点。

直接说结论:LVM扩容不是“加一块盘就完事”,核心卡点在物理卷(PV)是否已加入卷组(VG),以及逻辑卷(LV)是否已扩展且文件系统是否同步重置大小——三者缺一不可,漏掉任意一步都会导致磁盘空间不生效。
确认当前LVM结构:别急着lvextend,先看清楚谁在用谁
很多操作失败,是因为连自己有几个VG、哪个LV挂载在哪个目录都不清楚。必须从底层逐层查起:
- 用
pvs看物理卷(比如/dev/sdb是否已被初始化为PV,PV状态是否为lvm2) - 用
vgs看卷组剩余空间(关键字段是VFree,为 0 就说明没空间可分,lvextend必报错Insufficient free space) - 用
lvs和df -h对照:确认目标LV(如centos-root)挂载点(如/),避免扩错LV
特别注意:df -h 显示的是文件系统大小,不是LV大小;两者不一致时,一定是没执行文件系统扩容步骤。
lvextend 扩容LV:指定大小还是+大小?参数选错会覆盖数据
lvextend 的 -L 和 -l 参数行为完全不同,且极易误用:
-
lvextend -L 20G /dev/vg0/lv0:把LV设为**绝对大小 20G**(如果原为15G,就加5G;如果原为25G,就强制缩小——危险!) -
lvextend -L +5G /dev/vg0/lv0:**增加 5G**(安全推荐,+号不能省) -
lvextend -l +100%FREE /dev/vg0/lv0:把VG里所有空闲PE全分给这个LV(适合快速清空VG剩余空间)
执行后务必跟 lvs 核对LV的 LSize 是否已变大——这是后续文件系统扩容的前提。
ext4/xfs文件系统扩容:resize2fs 和 xfs_growfs 不能混用
LV扩大后,文件系统仍认为自己是老大小。这步不做,df -h 完全不会变化:
- ext2/ext3/ext4 文件系统:用
resize2fs /dev/vg0/lv0(无需指定大小,它自动读LV当前尺寸) - XFS 文件系统:必须用
xfs_growfs /mount/point(注意:参数是**挂载点**,不是设备路径!填/dev/vg0/lv0会报错Invalid argument) - 在线扩容支持:ext4 和 xfs 都支持运行中扩容,但前提是文件系统未损坏、LV已扩展完成
常见错误:resize2fs 报 The filesystem is already mounted 是提示信息,不是错误——它本就设计为在线调整,继续执行即可。
新硬盘加入LVM:pvcreate 后记得 vgextend,否则lvextend找不到空间
给系统加了新盘(如 /dev/sdc),但 vgs 里 VFree 没变?大概率漏了这两步:
- 先
pvcreate /dev/sdc(⚠️该命令会清空盘上所有分区表和数据) - 再
vgextend centos /dev/sdc(把新PV加进名为centos的卷组)
执行后 vgs 的 VFree 应立刻增加。如果 vgextend 报 No physical extent available,说明该PV尚未 pvcreate 或已有PV被标记为 missing(可用 pvs -o +pv_used 排查)。
最常被跳过的其实是最后一步:文件系统扩容。LV变大了,但 df 不涨,第一反应往往是LV没扩成功,其实只是忘了 resize2fs 或 xfs_growfs——这个延迟反馈让排查变得特别绕。











