解决vmware虚拟机占用磁盘空间过大的问题
起因
早都想解决vmware磁盘占用过大的问题,尝试了网上的几种方法没有任何优化。最近脑磁盘又开始飘红,忍无可忍,无需再忍,这次下定决心优化一下这个问题。
先查看一下优化前Ubuntu 18.04.2 (64bit).vmdk占用内存大小,竟然占用220g,实在是夸张,感觉像是装了一个3a大作一样。

不止于此,此前为了防止一个虚拟机占用过大的空间,我在做每个项目的时候都会单独复制一份虚拟机,用完就删除,后面发现随便复制一个虚拟机,都能从10g轻松扩充到60多g。

原因
虚拟机的磁盘是 “稀疏(growable/sparse)” 类型,VMware 一开始只创建一个小文件,但随着系统运行、文件写入,它会按需自动膨胀,直到达到创建时的最大值。
为什么我已经在虚拟机中把下载的文件删除了,而vmdk占用空间并没有减少?
即便你在 Ubuntu 里删除了很多文件,这些空闲块没有被“归零”,对宿主机来说仍然占用空间。
因此解决方法就是将这些空闲块清零,然后通过VMware shrink 工具将这些清零块回收,从而达到释放磁盘空间的目的
解决方法
1) 在ubuntu虚拟机中将空闲块清零
碎片整理
1 | #打开Ubuntu虚拟机 |
2) 在windows下使用shrink回收清零块
碎片回收
1 | ./vmware-vdiskmanager.exe -k "H:\dky-ubuntu18.04\ubuntu18.04_vscode_imx6ull_pro\Ubuntu 18.04.2 (64bit).vmdk" |
结果

经过漫长的等待之后,发现从原本的220g减少到201g。
还是不够理想。
终极大法
重新生成磁盘文件结构,而不仅是 shrink
1 | D:\LinuxLearningInstall\VMware\vmware-vdiskmanager.exe ` -r "H:\dky-ubuntu18.04\ubuntu18.04_vscode_imx6ull_pro\Ubuntu 18.04.2 (64bit).vmdk" ` -t 1 "H:\dky-ubuntu18.04\ubuntu18.04_vscode_imx6ull_pro\Ubuntu-compact.vmdk" |
-r:从旧盘读取。-t 1:创建 split growable(2 GB 分片)稀疏磁盘,体积会根据实际数据动态增长。新生成的
Ubuntu-compact.vmdk会自动剔除所有无效块
预期效果
最终为几十g,取决于实际ubuntu使用了多少空间。
如果上述操作没有明显效果,建议在此之前再清零一次
1 | sudo apt-get clean |
上述操作原理
VMware 的 .vmdk 就相当于一块“虚拟硬盘”。
vmware-vdiskmanager -k:只在文件层面做压缩,不会动里面的数据。vmware-vdiskmanager -r ... -t ...:相当于“克隆硬盘”,把原磁盘里所有有效的数据块(操作系统、配置文件、用户文件等)完整复制到一个新磁盘文件中。
它不改动 Ubuntu 内部文件系统,只是重建磁盘结构、去掉空白区。
所以:
- Ubuntu 内的
/home/你的用户名/目录下的文件、桌面、配置、下载、VS Code 工作区、ROS、IMX6ULL 工程文件等都会完好无损; - Ubuntu 的用户账号、密码、包管理配置也都保留;
- 克隆完成后虚拟机启动起来,看起来和原来一模一样
注意
- 需要把快照删除
- 需要预留两倍磁盘空间
- 以上操作耗时很久