VMware 虚拟机使用之后硬盘空间只会增大不缩小问题的解决
问题背景
我使用的是ubuntu20.04的虚拟机,由于要编译Android的AOSP代码,所以使用内存比较大,但是换一个平台定制的Android源码之后我删除了原先的Android源码库在虚拟机中gparted能看到空间被释放了,但是宿主机Windows10上面的磁盘空间显式依然是满的,此时如果要换另一个源码进行编译会显式空间不足,解决方法如下:
解决方式
- 将虚拟机中的空间写0.出现这个问题的原因就是我虽然删除了空间但是这些空间并不是实际的在宿主机上被释放了,写0是为了将原本这块内存上的内容完全的清空,才有可能被后面的步骤回收掉。
使用如下命令将内存空间写0,一定要先切换到root权限。
// 使用cat命令复写root分区
root@ubuntu:~/# cat /dev/zero > /zero.fill;sync;sleep 1;sync;rm -f /zero.fill
// 使用dd命令复写root分区,两种方式二选一
root@ubuntu:~/# dd if=/dev/zero of=/zeroes && rm -f /zeroes
如果有挂载点需要清除的可以使用以下命令:
cat /dev/zero > /[挂载点]/zero.fill;sync;sleep 1;sync;rm -f /[挂载点]/zero.fill
or
dd if=/dev/zero of=/[挂载点]/zeroes && rm -f /[挂载点]/zeroes
- 关闭虚拟机,使用VMware自带的磁盘管理工具将刚刚写0的空间进行回收
打开Windows10的命令行窗口运行以下命令:
G:\vmware\vmware-vdiskmanager.exe -k 路径\XXX.vmdk
前面的路径表示vmware的安装路径,自己可以去找一下安装路径下是否有vmware-vdiskmanager.exe这个工具,一般默认都是会安装的,但是不要直接打开,只能在命令行下使用,后面的路径表示虚拟机存放的路径,找到vmdk文件进行压缩即可,这一步等待的时间可能较长,取决于虚拟机本身占用了多大空间
两步操作结束后即可,空间被完美释放。