VMware 虚拟机释放磁盘空间

Warning

此过程会临时写满客户机分区。请先关闭不必要的程序和服务,避免在数据库、日志或其他重要写入任务运行期间执行。操作前确认虚拟机没有不需要保留的快照;存在快照时,应先删除或合并快照。

前提条件

  • VMware Tools 或 open-vm-tools 已正常安装并运行,可通过 vmware-toolbox-cmd -v 验证。
  • 虚拟磁盘为可动态扩展且支持压缩的磁盘。预分配(thick/preallocated)磁盘通常无法通过此流程减小宿主机上的 VMDK 文件。
  • /wipefile 仅会处理根分区 /;若 /home/var 等为独立挂载点,需分别在对应挂载点创建临时文件。

操作步骤

  1. (可选)先尝试发送 TRIM/UNMAP;是否能回收宿主机空间取决于 VMware、虚拟控制器和宿主机文件系统配置:

    sudo fstrim -av
  2. 对根分区的空闲空间置零。命令会一直运行到分区写满,并以 No space left on device 结束,这是预期现象,不代表操作失败

    sudo dd if=/dev/zero of=/wipefile bs=1M status=progress conv=fsync
  3. 删除填充文件并同步数据:

    sudo rm -f /wipefile
    sudo sync
  4. 若存在独立挂载点,按相同方式逐个处理。例如处理 /home

    sudo dd if=/dev/zero of=/home/wipefile bs=1M status=progress conv=fsync
    # 以 No space left on device 结束属于预期现象
    sudo rm -f /home/wipefile
    sudo sync
  5. 在客户机内执行 VMware Tools 的回收命令:

    sudo vmware-toolbox-cmd disk shrink /
  6. 正常关闭虚拟机(不要挂起)。在 VMware Workstation 中打开 虚拟机设置 → Hard Disk → Utilities → Compact,执行压缩;必要时可先执行 Defragment

排查

  • 宿主机空间没有减少:确认虚拟磁盘并非预分配磁盘、虚拟机没有快照,并确认已在关机状态下执行 Compact

  • 没有 Compact 按钮或按钮不可用:检查 VMware 版本、磁盘类型、快照状态及虚拟机运行状态。

  • vmware-toolbox-cmd 不存在:在 Debian/Ubuntu 客户机中可安装:

    sudo apt update
    sudo apt install open-vm-tools