前言
在日常开发和运维中,我们经常遇到 VMware 虚拟机磁盘空间不足的问题。本文记录了如何为一台正在运行的 CentOS 7 虚拟机安全地扩容磁盘空间的全过程。本次操作不仅涵盖了标准的扩容步骤,还重点解决了实际操作中可能遇到的两个关键问题:
介绍在 VMware 环境下对 CentOS 7 虚拟机进行磁盘扩容的完整步骤。涵盖从 VMware 层面扩展虚拟硬盘,到系统内部使用 parted、pvresize、lvextend 及 xfs_growfs 命令调整分区、物理卷、逻辑卷及文件系统的标准 LVM 流程。同时提供了 growpart 工具报错的解决方案,确保根目录空间成功增加。

在日常开发和运维中,我们经常遇到 VMware 虚拟机磁盘空间不足的问题。本文记录了如何为一台正在运行的 CentOS 7 虚拟机安全地扩容磁盘空间的全过程。本次操作不仅涵盖了标准的扩容步骤,还重点解决了实际操作中可能遇到的两个关键问题:

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online
本文提供两种方法:推荐的标准 LVM 流程和备用方案,成功解决了从 VMware 层面到操作系统内部的完整扩容。最终成功将系统根目录从 26G 扩容至 76G。
扩容前使用 lsblk 和 df -h 查看磁盘情况:
$ sudo lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 80G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 29G 0 part
├─centos-root 253:0 0 26G 0 lvm /
└─centos-swap 253:1 0 3G 0 lvm [SWAP]
[注意] 警告:操作前请务必对虚拟机创建快照或备份,以防数据丢失!
至此,虚拟硬盘已变大,但操作系统还无法使用新空间。
启动 CentOS 虚拟机并登录。以下是操作的核心步骤。
这是最正确、最安全的流程,适用于标准的 LVM 分区结构。
步骤 1: 查看磁盘情况 首先确认 VMware 扩容是否成功,并看清磁盘结构。
sudo lsblk
sudo parted /dev/sda print
从输出可以清晰看到:
/dev/sda 磁盘已变为 80G。/dev/sda2 仍为 31.1G,这意味着有大量空闲空间位于 sda2 分区之后。/dev/sda2 的类型是 lvm,我们的根文件系统实际在逻辑卷 centos-root 上。结论:我们需要将磁盘末端的空闲空间 -> 加入到 sda2 分区 -> 被 LVM 物理卷识别 -> 将新空间加入到 centos 卷组 -> 最后扩展 centos-root 逻辑卷及其文件系统。
步骤 2: 扩展 sda2 分区
使用 parted 工具将 sda2 分区扩展到磁盘末尾。
sudo parted /dev/sda
(parted) resizepart 2 -1 # 将第 2 个分区扩展到所有剩余空间
(parted) quit # 退出
[注意] 注意:
-1表示扩展到最大可用空间。如果resizepart命令不可用(极旧版本),需使用rm和mkpart重建分区,但风险极高,不推荐。
步骤 3: 刷新内核分区表 让系统在不重启的情况下识别新的分区大小。
sudo partprobe /dev/sda
步骤 4: 扩展 LVM 物理卷 (PV)
/dev/sda2 本身是一个物理卷,我们需要调整其大小。
sudo pvresize /dev/sda2
执行后,使用 sudo pvdisplay 查看,会发现 Free PE 空间增加了。
步骤 5: 扩展逻辑卷 (LV)
将卷组中的空闲空间全部分配给 centos-root 逻辑卷。
# 查看卷组空闲空间
sudo vgdisplay
# 将所有空闲空间扩展到 centos-root 逻辑卷
sudo lvextend -l +100%FREE /dev/mapper/centos-root
步骤 6: 扩展文件系统 (XFS) 最后一步,扩展逻辑卷上的文件系统,才能真正使用空间。
# CentOS 7 默认使用 XFS 文件系统
sudo xfs_growfs /
# 如果是 Ext4 文件系统,请使用以下命令:
# sudo resize2fs /dev/mapper/centos-root
步骤 7: 验证结果 运行命令检查最终成果:
df -h
lsblk
输出应显示根目录 / 的挂载点大小已变为 76G 左右,扩容成功!
如果在非 LVM 系统上使用传统方法,可能会遇到 growpart 报错。
错误信息:
sudo growpart /dev/sda 2
unexpected output in sfdisk --version [sfdisk,来自 util-linux 2.23.2]
原因:CentOS 7 自带的 util-linux 版本过低,与 growpart 脚本不兼容。
解决方案:
直接使用 parted 替代(如上文方法一所示),这是最佳解决方案。
或尝试更新 cloud-utils-growpart 包:
sudo yum update cloud-utils-growpart