先梳理完整流程、注意事项、风险点、排错,你这套步骤大体方向对,但有多处容易踩坑,结合 LVM + XFS 根分区扩容场景逐一说明。


一、先明确前提(非常重要)

你的环境:

  • 系统使用 LVM 逻辑卷(根 / 在 LV 上)
  • 文件系统:XFS(所以用 xfs_growfs,不能用 resize2fs
  • 新增硬盘:/dev/vda

先区分: 物理盘 → PV(物理卷) → VG(卷组) → LV(逻辑卷) → 挂载点 /


二、逐行解析 + 修正你的命令

1. 查看现有卷组 vgs

  1. vgs

作用:查看卷组名(你命令里的 xxx 就是这里查到的 VG 名称) 示例输出:

  1. VG #PV #LV #SN Attr VSize VFree
  2. centos 1 2 0 wz--n- <19.00g 0

这里 VG 名是 centos,后面就要替换成这个真实名字。


2. 创建物理卷 pvcreate /dev/vda

  1. pvcreate /dev/vda

✅ 作用:把整块新磁盘初始化为 LVM 物理卷 ⚠️ 高危提醒

  1. /dev/vda 必须是全新空盘,里面数据会全部清空!
  2. 很多云主机/虚拟机:原有系统盘是 /dev/vda,新加盘是 /dev/vdb /dev/vdc 千万别把原有系统盘 /dev/vda 再做一次 pvcreate,直接炸系统!

    先执行 lsblk 确认盘符,分清原盘 / 新加盘

验证:pvs 查看 PV 是否创建成功。


3. 把 PV 加入卷组 vgextend VG名 /dev/vda

  1. vgextend 你的VG /dev/vda

示例(VG 叫 centos):

  1. vgextend centos /dev/vda

作用:把新磁盘空间并入现有卷组,vgs 能看到 VFree 空闲空间变大。


4. 扩展逻辑卷 lvextend -l +100%FREE LV路径

你原命令 lvextend -l +100%FREE xxx 写法不完整

正确用法:

  1. 先查根分区对应的 LV 路径
    1. df -h
    2. lsblk
    3. # 或
    4. lvdisplay
    根目录 / 对应的 LV 一般格式: /dev/卷组名/root/dev/mapper/卷组名-root

示例(VG=centos,LV=root):

  1. # 把 VG 里所有空闲空间全部分配给 root 逻辑卷
  2. lvextend -l +100%FREE /dev/centos/root

参数说明:

  • -l:按 PE 个数 分配(+100%FREE 表示吃光所有空闲PE)
  • 也可以按容量:-L +50G 扩容50G

5. 在线扩容 XFS 文件系统 xfs_growfs /

  1. xfs_growfs /

XFS 文件系统专用,支持在线扩容,无需卸载分区。 如果是 ext4 才用:resize2fs /dev/xxx/root

执行完 df -h 就能看到根分区容量变大。


三、【完整标准步骤(可直接照着执行)】

假设:

  • 新加硬盘:/dev/vdb强烈建议先用这个,避开系统盘vda
  • 卷组名:centos
  • 根逻辑卷:/dev/centos/root
  1. # 1. 查看磁盘、VG、LV
  2. lsblk 查看类型为disk的新加空硬盘
  3. vgs
  4. pvs
  5. 推荐用 vgs 确认卷组名
  6. # 2. 新盘初始化为PV
  7. pvcreate /dev/vdc
  8. # 3. 扩展卷组
  9. ## klas_192-168-3-58 为卷组名
  10. vgextend klas_192-168-3-58 /dev/vdc
  11. # 4. 扩展根逻辑卷(占用全部空闲)
  12. lvextend -l +100%FREE /dev/mapper/klas_192--168--3--58-root
  13. # 5. 扩容XFS文件系统
  14. xfs_growfs /
  15. # 6. 验证
  16. df -h

四、常见报错 & 排错

1. pvcreate: /dev/vda is already in use by ...

原因:该盘已经是 PV/已有分区/正在使用 解决:换正确新加盘符,不要复用系统盘

2. vgextend: No physical volume found

原因:盘符写错 / 没执行 pvcreate 解决:重新确认盘符,重做 pvcreate

3. xfs_growfs: / is not a mounted XFS filesystem

原因:根分区不是 XFS(是 ext4) 解决:改用

  1. resize2fs /dev/centos/root

4. lvextend 提示空间不足

执行 vgs 看 VFree,确认卷组有空闲空间。


五、关键安全总结(必看)

  1. 优先确认盘符lsblk 分清系统盘 & 新增盘,严禁对正在使用的系统盘执行 pvcreate
  2. 你的原命令 lvextend xxx 缺少完整LV路径,必须补全 /dev/VG名/LV名
  3. XFS 只用 xfs_growfs /,ext4 用 resize2fs,不要混用。
  4. 生产环境操作前建议:备份重要数据,低峰时段执行。