扩展LVM磁盘空间

在虚拟化环境中,随着业务增长,磁盘空间不足是常见问题。本文记录在 CentOS 7/8 环境下扩展 LVM 磁盘空间的完整流程。

扩展虚拟机磁盘

首先在虚拟化平台(VMware / KVM / Proxmox 等)上扩大虚拟磁盘容量。以 VMware 为例:

  1. 关闭虚拟机(部分平台支持在线扩容)
  2. 编辑虚拟机设置,将磁盘容量从原来的 50GB 扩展到 100GB
  3. 启动虚拟机

扩展后,操作系统层面不会自动识别新增的空间,需要手动操作。

确认当前磁盘状态

# 查看块设备信息
lsblk

# 查看磁盘分区表
fdisk -l /dev/sda

# 查看PV/VG/LV状态
pvdisplay
vgdisplay
lvdisplay

假设当前磁盘 /dev/sda 有一个分区 /dev/sda1,PV 为 /dev/sda1,VG 名为 centos,LV 名为 root,挂载点为 /

使用 growpart 扩展分区

growpart 可以在不破坏数据的情况下扩展已有分区,使其占用新增的磁盘空间。

# 安装 cloud-utils-growpart(如果未安装)
yum install -y cloud-utils-growpart

# 扩展分区(磁盘设备 + 分区编号)
growpart /dev/sda 1

执行后可以用 fdisk -l /dev/sda 确认分区大小已扩展。

扩展 LVM 物理卷和逻辑卷

# 让LVM识别扩展后的PV
pvresize /dev/sda1

# 查看VG可用空间
vgdisplay centos | grep "Free"

# 将所有可用空间扩展到LV
lvextend -l +100%FREE /dev/centos/root

# 或者指定具体大小
lvextend -L +50G /dev/centos/root

扩展文件系统

逻辑卷扩展后,还需要扩展文件系统才能实际使用新增空间。

XFS 文件系统(CentOS 7 默认)

xfs_growfs /

注意:XFS 只支持扩容,不支持缩容。xfs_growfs 后面跟的是挂载点,不是设备路径。

ext4 文件系统

resize2fs /dev/centos/root

验证结果

df -h /

此时应该能看到文件系统容量已扩展到目标大小。

总结

整个流程可归纳为以下四步:

  1. 在虚拟化平台扩展虚拟磁盘
  2. growpart 扩展分区
  3. pvresize + lvextend 扩展 PV 和 LV
  4. xfs_growfs / resize2fs 扩展文件系统

常见问题

Q: growpart 报错 “NOCHANGE: partition 1 is size XXXXX it cannot be grown”

这说明分区已经是磁盘末尾且无法扩展,或者分区表类型不支持。检查是否已经扩展到最大,或者考虑新增分区后创建新的 PV 加入 VG。

Q: pvresize 报错 “Device /dev/sda1 not found”

分区可能没有被内核重新识别,执行 partprobe /dev/sda 后重试。

Q: 能否在线操作?

以上所有步骤均支持在线操作(不重启、不卸载),前提是虚拟化平台支持在线扩容磁盘。