VirtualBox 硬盘镜像压缩

缘起

    罪魁祸首依然是mac,自从换了MBP,硬盘空间真的是捉襟见肘。由于需要看Android源码,搞了个Ubuntu虚拟机来编译源码,源码所在的硬盘镜像非常的大,一度达到40G,这在空间不足的情况下是不能忍的。

    然后翻了下Android源码的镜像盘的物理文件居然比系统里实际的大小要大不少,这怎么能忍。。。。。。分析后发现,virturabox居然只会增大分配磁盘空间,居然不会自动释放空间,同时不提供对虚拟磁盘的释放操作界面,简直蠢。。。。。

    好在搜索之后发现,virtualbox提供了命令行压缩磁盘的操作,那么就可以通过命令行操作曲线救国了,只是比较麻烦就是了。


操作

指导思想

1. 虚拟机: 清理系统,卸载、删除系统垃圾文件

2. 虚拟机: 将磁盘数据靠“前”移动,并将剩余磁盘空间写“零”

3. 物理主机: 清除“零”字节空间,使用 VBoxManage modifyhd 工具压缩 VDI 磁盘镜像文件


Windows 虚拟机

1. 虚拟机: 删除系统垃圾文件,运行磁盘整理程序...

2. 虚拟机: 用 SDelete 工具写"零",下载地址 http://technet.microsoft.com/en-us/sysinternals/bb897443.aspx,在命令行下执行 "sdelete -c <盘符>"... 关机...(如果是多个磁盘,请加上不同的盘符分别执行)

3. 物理主机: 执行 "VBoxManage modifyhd /the-path-of-VDI.vdi --compact"


Linux 虚拟机

1. 虚拟机: 清理、卸载系统垃圾文件

2. 填0操作(如果是多个盘,请分别执行)

    sudo dd if=/dev/zero of=/EMPTY  bs=1M 

    sudo rm -f /EMPTY

3. 物理主机: 执行 "VBoxManage modifyhd /the-path-of-VDI.vdi --compact"


vm虚拟机格式

如果你的虚拟硬盘是Vmware的VMDK格式,那就要麻烦点,因为VirtualBox不支持直接压缩VMDK格式,但是可以变通下:先转换成VDI并压缩,再转回VMDK。执行命令:

VBoxManage clonehd "source.vmdk" "cloned.vdi" --format vdi
VBoxManage modifyhd cloned.vdi --compact
VBoxManage clonehd "cloned.vdi" "compressed.vmdk" --format vmdk

事实上,执行命令的过程中可以发现:在从VMDK转换到VDI的过程中似乎已经做了压缩,文件大小已经减少了很多,第二条命令反而没见到文件大小有什么变化,所以这里第二条命令应该可以省略了。

VMDK 的压缩,也可以使用 vmware-vdiskmanager,只需要一条命令(参考):

vmware-vdiskmanager -k disk.vmdk

总结

    同样是虚拟机软件,vmware和vbox都是十分好用的(当然国内大多vmware都是盗版咯)。在大部分情况下,vmware和vbox的体验无差异,甚至于vbox开源免费,体积小巧,用起来更为合适。但是在一些细节上,比如磁盘压缩功能,vbox就不想VMware一样有界面工具支持,这也和大部分开源软件一样,界面是比较简陋的,但是功能不少,各种命令行各种参数用起来一般也能达到目的。


参考文档

1、如何减小VirtualBox虚拟硬盘文件的大小

2、VirtualBox VDI 磁盘镜像 - 压缩


发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。