压缩ESXi中虚拟机的vmdk文件

万能的“重新克隆法”

如果 -K (打孔) 提示功能未实现,最稳妥、最彻底的压缩方法就是再次使用克隆命令。克隆过程会自动跳过所有你刚刚置零(Zero out)过的块,生成一个最小化的新磁盘。

执行以下步骤:

  1. 克隆并压缩(将现有磁盘克隆到一个新文件):Bashvmkfstools -i M18.vmdk -d thin M18-compressed.vmdk
  2. 检查大小:Bashdu -h M18-compressed-flat.vmdk 此时你应该能看到文件大小已经显著减小了。
  3. 替换原文件:Bash# 删掉原来的(确认备份过) rm M18.vmdk M18-flat.vmdk # 把压缩后的改名回去 mv M18-compressed.vmdk M18.vmdk mv M18-compressed-flat.vmdk M18-flat.vmdk

为什么这个方法一定行?

-K 命令是在原有位置“挖洞”,对存储协议要求高;而 -i ... -d thin创建一个新文件。在创建新文件的过程中,ESXi 的克隆引擎会自动识别哪些块是全 0 并不再为它们分配物理空间。这就像是把一件旧衣服剪掉破洞(打孔)很难,但照着旧衣服的样子重新织一件(克隆)就简单多了。

你现在的存储环境(可能是家用 NAS、普通的 RAID 卡或特定版本的 ESXi)很可能不支持在线打孔,直接用克隆法是最快的。