当前位置:首页>Linux>ESXi 进阶攻略:Linux 虚拟机磁盘扩容,手把手教你“无痛”操作

ESXi 进阶攻略:Linux 虚拟机磁盘扩容,手把手教你“无痛”操作

  • 2026-09-02 19:11:04
ESXi 进阶攻略:Linux 虚拟机磁盘扩容,手把手教你“无痛”操作

空间告急不用怕,3 步搞定,数据无损。

前言

在日常运维中,我们经常会遇到这样的尴尬:监控系统突然告警,某台关键的 Linux 服务器磁盘使用率超过 95%,服务随时可能因无法写入日志而中断。

当初规划好的 50G 硬盘,如今早已捉襟见肘。

在 VMware ESXi 虚拟化环境中,如何在不重装系统、不损坏业务数据的前提下,实现磁盘空间的“无痛”扩容?

今天,我们就来详细拆解 ESXi 下 Linux 虚拟机磁盘扩容的标准操作流程。

一、扩容前的必读事项

操作有风险,且行且珍惜。

  1. 做好备份虽然 VM 磁盘在线扩容技术已经很成熟,但磁盘操作属于高风险操作。务必提前对虚拟机进行快照或全量备份(建议停机快照),以防万一 。

  2. 确认分区类型登录 Linux 系统,运行 lsblk 或 df -T。这一步非常关键,需要确认你的磁盘是普通的 fdisk 分区,还是使用了 LVM(逻辑卷管理)。

    • LVM:这是最灵活的方式,扩容无需卸载磁盘,生产环境首选。

    • 标准分区:操作稍复杂,有时需卸载分区。

二、ESXi 宿主机端操作

这一步无论是 Windows 版 vSphere Client 还是 Web Client,逻辑都一样。

第一步:增加虚拟磁盘大小

  1. 关闭虚拟机电源(部分环境支持热添加,但为了安全,生产环境建议关机操作)-1。

  2. 右键点击目标虚拟机 -> 编辑设置。

  3. 找到需要扩容的虚拟硬盘,在“磁盘大小”一栏中直接修改数值。

    注意:这里输入的是扩容后的总大小。例如原来 50GB,想加 10GB,这里需要改成 60GB。

    报错,是因为我这个虚拟机有快照,需要删除快照。

  4. 点击“确定”保存。此时,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(举例)进行操作:

fdisk /dev/sda
  • 输入 n 创建新分区。

  • 输入 p 选择主分区。

  • 直接回车接受默认分区号。

  • 两次回车接受默认起始和结束扇区(使用所有剩余空间)。

  • 输入 t 修改分区类型。

  • 输入 8e 将分区类型改为 Linux LVM。

  • 输入 w 保存退出 。

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. 验证

df -Th# 可以看到根目录大小已经增加

场景二:标准分区(非LVM)

在标准分区(非 LVM)环境下对 XFS 文件系统进行扩容,操作风险较高,但可行。以下是基于公开资料整理的‌标准分区 XFS 扩容关键步骤与注意事项‌:

核心前提‌

 ‌   1.XFS 文件系统不支持缩容‌,仅支持在线扩容。
    2.必须先通过虚拟化平台(如 VMware、云服务商)或物理方式‌扩展底层磁盘空间‌。
    3.操作前‌务必备份重要数据‌,避免分区表误操作导致数据丢失。
ext4格式扩容
1. 卸载分区(如果是根分区则无法卸载,建议使用 Live CD 或单用户模式)
umount /dev/sdb1   #卸载需要扩容的分区
2. 删除并重建分区表
运行 fdisk /dev/sdb。
  • 使用 d 删除原有分区(数据还在,只是删除了指针)。

  • 使用 n 重新创建分区,大小选择默认(即扩容后的大小)。

  • 使用 w 保存。

3. 检查文件系统并扩容

# 强制检查文件系统e2fsck -f /dev/sdb1# 扩容resize2fs /dev/sdb1# 重新挂载mount /dev/sdb1 /test
xfs格式扩容

标准分区 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 写入分区表。

通知内核重读分区表

partprobe /dev/sdc

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 ~]# 

四、避坑指南

  1. 慎用 GParted虽然网上很多教程推荐使用 GParted Live CD 进行图形化扩容 ,但对于生产环境的服务器,能通过命令行 LVM 解决就尽量不要动分区表,减少人为失误风险。

  2. 关于 Thin Provisioning如果你使用的是精简置备,ESXi 层面显示的大小可能并不代表实际占用物理存储的大小。扩容前请确认 Datastore 是否有足够的物理空间,防止出现存储超分导致的“磁盘已满”崩溃。

  3. 快照问题如果虚拟机当前有快照,不要直接进行磁盘扩容操作!请先删除快照再进行扩容,否则可能导致磁盘链损坏。

结语

掌握 ESXi 下的 Linux 磁盘扩容,是每一位虚拟化运维人员的必备技能。

通过 LVM 的动态管理,我们可以轻松化解磁盘空间不足的危机,整个过程甚至不需要重启业务,极大地保证了服务的连续性。

最新文章

随机文章