在 VMware 中运行 Linux 虚拟机虽然便捷,但常遇到一个棘手问题:磁盘空间只增不减,且无法像 Windows 虚拟机那样直接通过“清理磁盘”与“压缩磁盘”功能释放空间。今天就来分享如何手动为 Linux 虚拟机进行彻底磁盘清理,让缩水的 vmdk 文件恢复原有大小。
先来看清理前的状态:一个虚拟机文件占用 17GB 空间。使用 Xshell 或其他 SSH 工具登录到这台 Linux 虚拟机,准备工作开始。


第一步,在终端中依次执行两个命令:先用 dd if=/dev/zero of=/0bits bs=20971520 向磁盘空白区域填充零字节文件,接着用 sudo rm /0bits 将其删除。这样做的目的是标记所有未使用的磁盘块,使 VMware 能够识别哪些空间可以被回收。执行完毕后即可关闭虚拟机。
点击复制以下命令
dd
if
=/dev/zero of=/0bits bs=20971520
sudo rm /0bits


第二步,回到 Windows 宿主机。打开命令提示符,先切换到 VMware 安装目录(通常为 C:\Program Files (x86)\VMware\VMware Workstation 或类似路径)。然后执行磁盘压缩命令:
vmware-vdiskmanager -k "E:\myvmware\RHEL6x86-64-cognos\Red Hat Enterprise Linux 6-cl1.vmdk"
务必把引号内的路径替换为你自己虚拟机的 .vmdk 文件实际存放位置。参数 -k 即表示压缩磁盘,作用是回收未使用空间。


第三步,耐心等候。VMware 会重新整理磁盘文件,将之前填充零字节占用的空间真正释放掉。该过程根据磁盘大小与主机性能不同,通常需要几分钟到十几分钟。完成后,你会发现 .vmdk 文件体积明显缩小,磁盘占用恢复如初。


如果觉得每次手动执行两次操作(Linux 端写零、Windows 端压缩)略显繁琐,完全可以将其分别编写为脚本——Linux 端用 shell 脚本,Windows 端用批处理或 PowerShell 脚本,以后一键运行即可。核心原理就是这套流程,掌握之后能有效节省大量磁盘空间,让虚拟机管理更加高效。
