扩展LVM磁盘空间
在虚拟化环境中,随着业务增长,磁盘空间不足是常见问题。本文记录在 CentOS 7/8 环境下扩展 LVM 磁盘空间的完整流程。
扩展虚拟机磁盘
首先在虚拟化平台(VMware / KVM / Proxmox 等)上扩大虚拟磁盘容量。以 VMware 为例:
- 关闭虚拟机(部分平台支持在线扩容)
- 编辑虚拟机设置,将磁盘容量从原来的 50GB 扩展到 100GB
- 启动虚拟机
扩展后,操作系统层面不会自动识别新增的空间,需要手动操作。
确认当前磁盘状态
# 查看块设备信息
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 /
此时应该能看到文件系统容量已扩展到目标大小。
总结
整个流程可归纳为以下四步:
- 在虚拟化平台扩展虚拟磁盘
growpart扩展分区pvresize+lvextend扩展 PV 和 LVxfs_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: 能否在线操作?
以上所有步骤均支持在线操作(不重启、不卸载),前提是虚拟化平台支持在线扩容磁盘。