空间告急不用怕,3 步搞定,数据无损。
前言
在日常运维中,我们经常会遇到这样的尴尬:监控系统突然告警,某台关键的 Linux 服务器磁盘使用率超过 95%,服务随时可能因无法写入日志而中断。
当初规划好的 50G 硬盘,如今早已捉襟见肘。
在 VMware ESXi 虚拟化环境中,如何在不重装系统、不损坏业务数据的前提下,实现磁盘空间的“无痛”扩容?
今天,我们就来详细拆解 ESXi 下 Linux 虚拟机磁盘扩容的标准操作流程。
一、扩容前的必读事项
操作有风险,且行且珍惜。
做好备份虽然 VM 磁盘在线扩容技术已经很成熟,但磁盘操作属于高风险操作。务必提前对虚拟机进行快照或全量备份(建议停机快照),以防万一 。
确认分区类型登录 Linux 系统,运行 lsblk 或 df -T。这一步非常关键,需要确认你的磁盘是普通的 fdisk 分区,还是使用了 LVM(逻辑卷管理)。
二、ESXi 宿主机端操作
这一步无论是 Windows 版 vSphere Client 还是 Web Client,逻辑都一样。
第一步:增加虚拟磁盘大小
关闭虚拟机电源(部分环境支持热添加,但为了安全,生产环境建议关机操作)-1。
右键点击目标虚拟机 -> 编辑设置。
找到需要扩容的虚拟硬盘,在“磁盘大小”一栏中直接修改数值。
注意:这里输入的是扩容后的总大小。例如原来 50GB,想加 10GB,这里需要改成 60GB。
报错,是因为我这个虚拟机有快照,需要删除快照。
点击“确定”保存。此时,ESXi 层面的操作已经完成。

第二步:让操作系统识别到变化
启动虚拟机,登录系统。虽然你增加了磁盘,但系统还“不知道”。需要重新扫描 SCSI 总线。
# 查看当前磁盘大小,确认 ESXi 层面的修改已生效fdisk -l | grep /dev/sda# 或者运行 rescan 命令(如果是 RHEL/CentOS 系)echo 1 > /sys/block/sda/device/rescan
如果磁盘空间没变,建议重启虚拟机。
三、Linux 系统内部操作(重点)
这里分两种情况进行讲解。
场景一:使用 LVM 管理磁盘(推荐,最常见)
这是最理想的情况,扩容可以在线完成,无需停机。
1. 查看现有卷组和逻辑卷
df -h# 假设我们要扩容 /dev/mapper/centos-rootlsblk# 查看磁盘和分区结构
2. 创建新分区
使用 fdisk 对 /dev/sda(举例)进行操作:
3. 创建物理卷并加入卷组
# 刷新分区表partprobe /dev/sda# 创建物理卷 (PV)pvcreate /dev/sda3# 将新PV添加到现有卷组 (VG)vgextend klas /dev/sda3 # klas 是卷组名,请根据实际情况修改,用vgs查看。
4. 扩展逻辑卷并文件系统
# lvs查看逻辑卷# 将卷组中所有空闲空间分配给逻辑卷lvextend -l +100%FREE /dev/mapper/klas-root# 调整文件系统大小(关键步骤)# 如果是 ext4 文件系统resize2fs /dev/mapper/klas-root# 如果是 xfs 文件系统(CentOS 7+ 默认)xfs_growfs /dev/mapper/klas-root
5. 验证
场景二:标准分区(非LVM)
在标准分区(非 LVM)环境下对 XFS 文件系统进行扩容,操作风险较高,但可行。以下是基于公开资料整理的标准分区 XFS 扩容关键步骤与注意事项:核心前提
1.XFS 文件系统不支持缩容,仅支持在线扩容。 2.必须先通过虚拟化平台(如 VMware、云服务商)或物理方式扩展底层磁盘空间。 3.操作前务必备份重要数据,避免分区表误操作导致数据丢失。1. 卸载分区(如果是根分区则无法卸载,建议使用 Live CD 或单用户模式)umount /dev/sdb1 #卸载需要扩容的分区
3. 检查文件系统并扩容
# 强制检查文件系统e2fsck -f /dev/sdb1# 扩容resize2fs /dev/sdb1# 重新挂载mount /dev/sdb1 /test
标准分区 XFS 扩容步骤
1.确认当前磁盘与分区布局
df -Th / # 查看根分区文件系统类型和使用情况lsblk # 查看磁盘和分区结构fdisk -l /dev/sdc # 替换 sdX 为实际磁盘,确认起始扇区和分区大小

2.使用 growpart 自动扩容分区(推荐)
安装工具(如未安装):
yum install -y cloud-utils-growpart # RHEL/CentOSapt install -y cloud-guest-utils # Ubuntu/Debian
3.手动调整分区(若无 growpart 或需精细控制)
进入 fdisk:
fdisk /dev/sdc # 替换 sdX 为实际磁盘.
关键操作:
输入 p 打印分区表,记录要扩容分区的起始扇区(Start)。
输入 d 删除该分区(仅删除分区表项,不破坏数据)。
输入 n 重建分区:
分区号保持原值;
起始扇区必须与原值完全一致;
结束扇区使用默认(占满剩余空间)。
输入 w 写入分区表。
通知内核重读分区表
4.扩展 XFS 文件系统
使用 xfs_growfs 命令,参数为挂载点而非设备路径:

[root@KYCP01 ~]# umount /test1 [root@KYCP01 ~]# fdisk /dev/sdc欢迎使用 fdisk (util-linux 2.35.2)。更改将停留在内存中,直到您决定将更改写入磁盘。使用写入命令前请三思。命令(输入 m 获取帮助):pDisk /dev/sdc:10 GiB,10737418240 字节,20971520 个扇区磁盘型号:Virtual disk 单元:扇区 / 1 * 512 = 512 字节扇区大小(逻辑/物理):512 字节 / 512 字节I/O 大小(最小/最佳):512 字节 / 512 字节磁盘标签类型:dos磁盘标识符:0xd2930554设备 启动 起点 末尾 扇区 大小 Id 类型/dev/sdc1 2048 10485759 10483712 5G 83 Linux命令(输入 m 获取帮助):d已选择分区 1分区 1 已删除。命令(输入 m 获取帮助):n分区类型 p 主分区 (0 primary, 0 extended, 4 free) e 扩展分区 (逻辑分区容器)选择 (默认 p):将使用默认回应 p。分区号 (1-4, 默认 1): 第一个扇区 (2048-20971519, 默认 2048): 最后一个扇区,+/-sectors 或 +size{K,M,G,T,P} (2048-20971519, 默认 20971519): 创建了一个新分区 1,类型为“Linux”,大小为 10 GiB。分区 #1 包含一个 xfs 签名。您想移除该签名吗?是[Y]/否[N]:n命令(输入 m 获取帮助):w分区表已调整。将调用 ioctl() 来重新读分区表。正在同步磁盘。[root@KYCP01 ~]# partprobe /dev/sdc[root@KYCP01 ~]# mount /dev/sdc1 /test1/[root@KYCP01 ~]# xfs_growfs /test1meta-data=/dev/sdc1 isize=512 agcount=4, agsize=327616 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=1data = bsize=4096 blocks=1310464, imaxpct=25 = sunit=0 swidth=0 blksnaming =version 2 bsize=4096 ascii-ci=0, ftype=1log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1realtime =none extsz=4096 blocks=0, rtextents=0data blocks changed from 1310464 to 2621184[root@KYCP01 ~]# df -Th文件系统 类型 容量 已用 可用 已用% 挂载点devtmpfs devtmpfs 1.4G 0 1.4G 0% /devtmpfs tmpfs 1.5G 16K 1.5G 1% /dev/shmtmpfs tmpfs 1.5G 162M 1.3G 12% /runtmpfs tmpfs 1.5G 0 1.5G 0% /sys/fs/cgroup/dev/mapper/klas-root xfs 56G 10G 46G 19% /tmpfs tmpfs 1.5G 20K 1.5G 1% /tmp/dev/sda1 xfs 1014M 277M 738M 28% /boottmpfs tmpfs 292M 0 292M 0% /run/user/1000tmpfs tmpfs 292M 56K 292M 1% /run/user/0/dev/sr0 iso9660 55M 55M 0 100% /run/media/root/CDROM/dev/sdb1 ext4 9.8G 23M 9.3G 1% /test/dev/sdc1 xfs 10G 104M 9.9G 2% /test1[root@KYCP01 ~]#

四、避坑指南
慎用 GParted虽然网上很多教程推荐使用 GParted Live CD 进行图形化扩容 ,但对于生产环境的服务器,能通过命令行 LVM 解决就尽量不要动分区表,减少人为失误风险。
关于 Thin Provisioning如果你使用的是精简置备,ESXi 层面显示的大小可能并不代表实际占用物理存储的大小。扩容前请确认 Datastore 是否有足够的物理空间,防止出现存储超分导致的“磁盘已满”崩溃。
快照问题如果虚拟机当前有快照,不要直接进行磁盘扩容操作!请先删除快照再进行扩容,否则可能导致磁盘链损坏。
结语
掌握 ESXi 下的 Linux 磁盘扩容,是每一位虚拟化运维人员的必备技能。
通过 LVM 的动态管理,我们可以轻松化解磁盘空间不足的危机,整个过程甚至不需要重启业务,极大地保证了服务的连续性。