Virtralbox使用一个Vdi文件来为虚拟机提供一个虚拟硬盘,在使用过程中,这个文件增长比实际使用要多,比如在虚拟机中,操作系统连带其他文件可能实际只占有2G空间,但到宿主机中,这个虚拟硬盘文件可能会有5G,而且最关键是即使虚拟机中删除了文件,也不会体现到VDI文件中,也就是说这个文件不会自己变小,只会越来越大,如果你有很多虚机,或者频繁的安装和卸载软件,这个问题就比较大了,所以virtualbox提供了压缩vdi文件的方法,不幸的是这个方法不是集成到图形管理界面中,而且不能一步完成,需要下面两个步骤。(最好在开始前把虚拟硬盘VDI文件备份一下。)

1、在客户机(虚拟机)中为压缩准备磁盘

对于windows系统,我们先在需要压缩的磁盘或分区中删除不要和临时的文件,做好磁盘整理。

然后我们使用一个 sdelete 工具来准备磁盘分区(sdelete是微软的安全删除工具,可以从网上搜索下载),下载后在dos命令窗口中输入:

sdelete -c (将sdetele复制到需要处理的分区,-c 表示使用0填充删除文件的数据库,虚拟磁盘工具可以处理并真正压缩虚拟硬盘文件)

对Linux系统,需要下载安装一个zerofree工具,需要进入init.1模式,使用下列命令:

下载安装zerofree命令:

sudo apt-get install zerofree

进入init.1模式命令:

sudo init 1

以只读模式重新挂载你想压缩的硬盘命令:

mount -n -o remount,ro -t ext4 /dev/sdb1 /var

压缩已挂载的硬盘命令:

zerofree /dev/sdb1

处理完成后立刻关闭虚拟机。

2. 在宿主机中压缩虚拟硬盘文件,需要用到vboxmanage命令

在终端中使用下列命令可以压缩VDI文件

vboxmanage modifyhd /VDIs/winxp.vdi (这里我们的VDI文件在/VDIs中,一定要完整路径)

或者好像这样也行:

vboxmanage clonehd /VDIs/winxp.vdi  /VDI/winxp1.vdi (这种方式会复制一个vdi文件,但问题是需要这个文件会使用一个新的GUID序号,而且需要重新挂载