VMware 虚拟机释放磁盘空间
Warning
此过程会临时写满客户机分区。请先关闭不必要的程序和服务,避免在数据库、日志或其他重要写入任务运行期间执行。操作前确认虚拟机没有不需要保留的快照;存在快照时,应先删除或合并快照。
前提条件
- VMware Tools 或
open-vm-tools已正常安装并运行,可通过vmware-toolbox-cmd -v验证。 - 虚拟磁盘为可动态扩展且支持压缩的磁盘。预分配(thick/preallocated)磁盘通常无法通过此流程减小宿主机上的 VMDK 文件。
/wipefile仅会处理根分区/;若/home、/var等为独立挂载点,需分别在对应挂载点创建临时文件。
操作步骤
-
(可选)先尝试发送 TRIM/UNMAP;是否能回收宿主机空间取决于 VMware、虚拟控制器和宿主机文件系统配置:
sudo fstrim -av -
对根分区的空闲空间置零。命令会一直运行到分区写满,并以
No space left on device结束,这是预期现象,不代表操作失败:sudo dd if=/dev/zero of=/wipefile bs=1M status=progress conv=fsync -
删除填充文件并同步数据:
sudo rm -f /wipefile sudo sync -
若存在独立挂载点,按相同方式逐个处理。例如处理
/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 -
在客户机内执行 VMware Tools 的回收命令:
sudo vmware-toolbox-cmd disk shrink / -
正常关闭虚拟机(不要挂起)。在 VMware Workstation 中打开 虚拟机设置 → Hard Disk → Utilities → Compact,执行压缩;必要时可先执行 Defragment。

排查
-
宿主机空间没有减少:确认虚拟磁盘并非预分配磁盘、虚拟机没有快照,并确认已在关机状态下执行 Compact。
-
没有 Compact 按钮或按钮不可用:检查 VMware 版本、磁盘类型、快照状态及虚拟机运行状态。
-
vmware-toolbox-cmd不存在:在 Debian/Ubuntu 客户机中可安装:sudo apt update sudo apt install open-vm-tools