一、背景原因

在建立虚拟机时,一般都会选择动态分配存储空间的选项,也就是实际占用的磁盘空间会随着虚拟机占用的空间增大而增大。这样做的好处是可以节省磁盘空间,对于虚拟机的拷贝也相对方便。但是随着虚拟机的使用,会发现实际虚拟镜像文件越来越大,但是虚拟机内部实际占用的空间要比虚拟镜像文件要小很多,这个就是磁盘碎片,类似于内存碎片。


二、回收磁盘空间-虚拟机部分

如果使用VMware虚拟机的同学可以直接在管理界面进行磁盘的回收,这个还是比较方便的。而对于Vbox来说还没有这个图形界面操作的方法。需要使用命令行的方式进行操作。其回收的原理是检测磁盘空间内容为0的空间进行回收
对于虚拟机的操作(虚拟机为Linux系统)
这里针对虚拟机为Linux系统的情况,Windows环境可以根据原理使用工具解决。既然原理是将磁盘写0,所以Linux环境需要运行下面两个命令来将没有使用的磁盘块写0。

dd if=/dev/zero of=/empty
rm -f /empty

注意:linux下如果有多个分区需要在每个分区都要创建空文件然后删除。

运行完指令之后需要关闭虚拟机然后在宿主机进行磁盘空间的回收。


三、回收磁盘空间-宿主机部分

回到宿主机需要找到Vbox的安装目录一般路径为D:\Program Files\Oracle\VirtualBox,然后右键在终端打开,运行.\VBoxManage.exe modifyhd "E:\VirtualBox VMs\Centos7\Centos7\Centos7.vdi" --compact这里需要修改为自己的虚拟机镜像地址。


-EOF

最后修改:2023 年 10 月 11 日
如果觉得我的文章对你有用,请随意赞赏