关于这个问题,早就想写出来总结一下了。玩过VMWare的都知道,Windows虚拟机清理磁盘非常简单,在GUI界面下选择磁盘清理就可以了,但是此操作对Linux系统无解。
注意,这里说的VMWare包括Windows平台的VMWare Workstation和Mac OSX的VMWare Fusion。
这里以VMWare Fusion为例,记录一下是如何清理的。
Linux虚拟机里磁盘清理
清理已经删除的软件的.deb软件安装包
sudo apt-get autoclean
使用zero数据填充磁盘的剩余空间,以便在下一步的清理阶段可以回收这些空间
sudo cat /dev/zero > zero;sync;sleep 1;sudo rm zero
宿主系统下清理vmdk虚拟机文件
这时候,我们把虚拟机关机。然后打开Terminal程序,进入到VMWare Fusion的安装目录
cd '/Applications/VMware Fusion.app/Contents/Library'
这时候我们先清理磁盘碎片(这一步并不会回收磁盘空间)
./vmware-vdiskmanager -d path_to_your/disc.vmdk
这里要注意一下,因为为了便于移动,一般情况下我们的虚拟机磁盘是分成多个文件的。所以有些文章里边说”path_to_your/disc.vmdk”指的是”disc-s001.vmdk”, “disc-s002.vmdk”,如果你这样执行,会报错,说指定的文件不是虚拟机文件。
其实这里是虚拟机磁盘的入口文件”disc.vmdk”,这个文件其实是一个文本文件,它列出了所有的虚拟机文件。
接下来我们回收磁盘空间
./vmware-vdiskmanager -k path_to_your/disc.vmdk
上面的两步都要执行一段时间,耐心等待或者去活动一下就好了。
P.S. 说起来也比较奇怪,VMWare官方对于这个问题的教程就是在GUI界面里边直接清理磁盘就好了,但是就像我们一开始提到的,根本没有效果。也不知道为什么不更新。