一、问题背景与现状

Esxi有一台PNETLab虚拟机(ubuntu20.04)原本安装的时候,分配了两个硬盘:硬盘1(40G)硬盘2(500G)都是精简置备,使用一段后发现ESXI平台上PNETLab虚拟机占用的空间有526.38G,而PNETLab系统实际占用空间约56G(也就是526-56大约浪费470G空间)这里想把虚拟机硬盘缩小以收回浪费空间,而Esxi操作界面上,磁盘只可以扩容,但不能直接缩小,所以需要使用别的办法对硬盘进行转换或压缩以回收浪费掉的空间。

关键矛盾:ESXi 界面仅支持磁盘扩容,无法直接缩小、精简置备磁盘的 vmdk 文件会随数据写入 “只增不减”—— 即使在系统内删除文件,ESXi 也不会自动回收空间,所以会造成空间浪费,必须手动干预。

Esxi平台上占用的空间:

图片

Pnetlab实际占用空间:

root@pnetlab:~# df -h
Filesystem                         Size  Used Avail Use% Mounted on
udev                               5.8G     0  5.8G   0% /dev
tmpfs                              1.2G  1.6M  1.2G   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv  530G   55G  454G  11% /
tmpfs                              5.9G     0  5.9G   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
tmpfs                              5.9G     0  5.9G   0% /sys/fs/cgroup
/dev/sda2                          2.0G  236M  1.6G  13% /boot
tmpfs                              1.2G     0  1.2G   0% /run/user/0
root@pnetlab:~# lsblk
NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                         8:0    0   40G  0 disk 
├─sda1                      8:1    0    1M  0 part 
├─sda2                      8:2    0    2G  0 part /boot
└─sda3                      8:3    0   38G  0 part 
  └─ubuntu--vg-ubuntu--lv 253:0    0  538G  0 lvm  /
sdb                         8:16   0  500G  0 disk 
└─ubuntu--vg-ubuntu--lv   253:0    0  538G  0 lvm  /

#待后续空间回收完成可用以上命令查看新机器磁盘情况,可做到空间缩小LV不变

二、关键概念:三种虚拟磁盘类型

磁盘类型

特点

适用场景

厚置备延迟置零(zeroed thick)

是默认模式,在创建时为虚拟磁盘分配所需空间(真实地占用物理存储空间),当虚拟机在有写入的时,再按量将其置零。

对性能有一定要求,无需立即完成置零的场景

厚置备置零(eager zeroed thick)

在创建时为虚拟磁盘分配所需空间(真实地占用物理存储空间),创建过程中作置零操作,所以创建磁盘时间长。

对数据安全性和性能要求高的场景(如数据库)

精简置备(thin)

无论磁盘分配多大,实际用多少就占用物理存储多少,当虚拟机真正写入数据时,才进行分配空间及置零的操作,需等待分配空间和置备完成后才能进行操作,对于IO频繁造成性能会有所下降,但它的好处是节省了存储空间,不过使用这种方式,虚拟磁盘vmdk文件随着置备量会只增不减。

需节省存储资源的场景,但 IO 频繁时性能会下降

这里重点说下精简置备:只增不减,精简置备vmdk文件容量是随着写入置备增加,如虚拟机曾经使用磁盘达500GB,虽然你删除300GB文件后,甚至格式化磁盘,删除磁盘分区,但vmdk文件依然是500GB。所以需要加收空间

三、解决方案:使用 VMware vCenter Converter

网上针对Esxi平台虚拟机硬盘压缩及回收空间的方法有很几种,我查了很多资料,这里选用最方便且靠谱的 VMware vCenter Converter Standalone——VMware 免费官方工具,专门处理虚拟机转换和磁盘优化,可全程不用停机(但还是建议先备份数据)。

1. 工具准备:下载安装官方工具

  • 下载:官网下 “VMware vCenter Converter Standalone”,选和 ESXi 版本兼容的(我用的 9.0 版本)

  • 安装:按默认步骤装,不用额外配置,装完打开就能用,首次用建议看看说明和文档。

    发行说明:

    https://techdocs.broadcom.com/us/en/vmware-cis/vsphere/vcenter-converter/9-0/vmware-vcenter-converter-standalone-documentation/convert-a-physical-or-virtual-machine.html

    中文版文档:

    https://www.manuallib.com/download/5D8843C4A9AC44C99C28DA0CBDD5E513.pdf

2. 第一步:选要瘦身的 “源虚拟机”

  • 打开工具,点左侧 “转换计算机”;

  • 源类型选 “已开启电源的计算机”→“远程计算机”;

  • 填 PNETLab 的 IP(比如我这台是 192.168.31.13)、root 用户名和密码,点 “下一步”(确保网络通,能连到虚拟机)。

    图片

3. 第二步:指定 “目标 ESXi 服务器” (这步别选错目标,不然数据会存错地方)

  • 目标类型选 “VMware Infrastructure virtual machine”;

  • 填 ESXi 服务器的 IP、用户名(比如 root)和密码,点 “下一步”(弹出证书提示直接点 “忽略”);

    图片

  • 设目标虚拟机名(建议和源机一样,好识别),选存储位置(确保目标存储有足够空间,至少比源机实际占用的 56GB 大)。

    图片

图片

4. 第三步:关键配置 —— 调整磁盘大小(这步决定能不能 “瘦下来”,重点看磁盘设置)

  • 进 “转换设置”→“磁盘” 选项卡;

  • 会显示 2 块源硬盘,每块都选 “磁盘类型 = 精简置备”(和源机保持一致,避免性能问题);

  • 勾 “调整磁盘大小”:/boot保持 2GB 不用动,数据盘按实际需求设(比如我设 198GB,以后不够再扩容,况且我使用了Lv);

  • 确认没问题,点 “下一步”。

    图片

    图片

图片

这里有个关键点:配置助手虚拟机IP

  • 助手虚拟机功能:转换已启动的 Linux 计算机时,Converter Standalone 会在目标端创建助手虚拟机,它需要有源计算机的网络访问权才能克隆源文件,默认会自动获取 IPv4 地址和 DNS 服务器,也可手动配置网络连接。

  • 助手虚拟机网络配置要点:需创建助手虚拟机并确保其有网络访问权,迁移时只需设置一个能互通的空闲 IP 地址即可。

  • 单IPv4的现网环境我们只需要开启IPv4地址,记得关闭IPv6地址。

图片

5. 第四步:启动转换,等完成

  • 点 “完成” 开始转换,工具会自动读源机数据,按新配置写进目标存储;

  • 等进度:56GB 数据大概要 30-60 分钟,看你网络和存储速度;

  • 验证:转换完去 ESXi 看,新虚拟机占用应该是调整后的大小(比如我这台是 2GB+198GB=200GB),不是之前的 526GB 了。

    图片

图片

图片

收尾:确认功能正常后替换源机

  • 先启动新虚拟机(A-PNETLab),检查 PNETLab 的网络、磁盘挂载、分区、数据、服务是不是都正常。没问题就把原虚拟机关机备份(建议留 1-2 天,防止漏数据);

  • 这里我启动新虚拟机后查看了一下磁盘情况并新建实验打开实验环境看有无异常报错。

  • 再次确认新机器一切都正常的情况,最后删原虚拟机,释放全部冗余空间,瘦身完成!

图片图片图片图片

图片

图片

四、3 个避坑提醒,别踩雷

  1. 提前备份

    虽然转换不删源数据,但还是建议用 PNETLab 的备份功能,把拓扑、设备配置导出来;

  2. 网络稳定

    转换时,源机、ESXi、助手虚拟机、工具所在电脑的网络别断,不然会失败;

  3. 版本兼容

    确保 Converter 版本和 ESXi 匹配,不然可能连不上服务器(官网能查兼容列表)。

  4. 注意不要使用符号或中文命名

按这套步骤操作,我成功从 526GB 降到 2000GB,找回了 326GB 存储!如果你的 ESXi 虚拟机也有 “吞空间” 问题,照着做就能解决,不用再为虚高的存储占用头疼。

五、实操可能会遇到的问题

1.转换过程卡在1%,出现报错“Error: The destination virtual machine did not boot up”

图片

解决办法

1. 上传并使用converter-helper-vm.iso文件,将 converter-helper-vm.iso 文件上传到 ESXi 主机上的 Datastore 中。这个文件位于安装了 Converter 的主机上的以下目录:C:\ProgramFiles(x86)\VMware\VMwarevCenterConverterStandalone\

在转换启动后我们可以在Esxi上看到虚拟机助手自动创建的助手虚拟机(A-PNETLab)我们进入虚拟机编辑界面选择从 Local Datastore 上加载之前上传的converter-helper-vm.iso ISO 文件,点击连接状态并勾选开机自动连接,并重置虚拟机。

图片

图片

进入bios的开机启动项设置从光驱启动

图片

之前不能正常加载开机的助手虚拟机现在可以正常启动了

图片

2. 静态配置 Helper VM 的 IP 地址,在提交任务前,静态配置 Helper VM 的 IP 地址,最好使用 IPv4,并且与源物理机在同一网段。这样可以避免由于没有可用的 DHCP 服务而导致的通信失败,下图IP244就是助手虚拟机。

图片

助手虚拟机被自动创建开机,你会发现,虚拟机硬件配置跟我们目标虚拟机不太一样,这是正常的,我们只需要让它加载iso文件可以正常开机启动,后续会自动转换配置。

图片

2.VMware vCenter Converter 启动报错,出现以下报错是由于Converter的服务启动具有延迟,等待30s再尝试Retry就可以了

图片