前言部分:
网上找了一些virtualBox虚拟机压缩方法,做了测试。虚拟机导出体积有了明显减少。
参考文档:https://blog.csdn.net/mr__bai/article/details/129147223
里面有一些注意事项,包括我在实践时遇到的一些问题,在这里统一做个汇总。
体积减少原理:
VirtualBox虚拟机会在使用时动态分配磁盘空间,空间分配在vdi文件中。使用时间越长,vdi磁盘文件越大,导致导出虚拟机时占用空间变大。

即使在虚拟机中删除文件,vdi磁盘文件也不会缩小。因为已经分配的空间是不会自动回收的,所以需要使用工具进行压缩vdi文件。压缩时,会将磁盘中标记为0的空间压缩,所以需要对空闲的磁盘使用dd工具批量填充为0后删除,能够带来压缩率的提升。
具体操作:
1、删除虚拟机快照。
2、使用dd命令填充磁盘后,删除文件。
cd /
sudo dd if=/dev/zero of=/free
sudo rm -rf /free

3、使用VBoxManage工具进行压缩。
使用cmd命令行进入vbox安装目录,默认vbox安装路径为C:\Program Files\Oracle\VirtualBox

执行工具进行压缩
# 我的vdi文件位置,D:\Tools\centos7-disk001.vdi
VBoxManage modifyhd D:\Tools\centos7-disk001.vdi --compact
执行命令时,vdi路径中不能包含空格,如果包含空格,请将C:\Program Files\Oracle\VirtualBox目录下的所有文件拷贝到vdi文件的子目录中。


然后在新目录中执行命令即可。
VBoxManage modifyhd ..\centos7-disk001.vdi --compact
此时虚拟机空间即被压缩。