解决Ubuntu 10.10下Vmware每次打开都会重新编译加载模块的问题
Fedora Kernel 升级至 2.6.40 之后 VMware Player 无法开启的解决方案

VirtualBox 4.0 实现Virtual PC和VMware那样的母盘差分

bachue posted @ 2011年1月09日 08:22 in Virtualization with tags ubuntu vbox virtualbox VMware differencing virtualpc disk immutable writethrough vdi vboxmanage modifyhd autoreset Unity , 7205 阅读

使用VirtualBox,一定是看中了他免费的特点(也许还号称开源,虽然我怀疑没有多少人会真的选择OSE版本,缺功能的),否则的话,这个虚拟机和VMware Workstation相比,根本不是一个级别的。VMware完全GUI操作,功能强大,使用方便,运行稳定。VirtualBox的功能就是他一个子集,而且还有大量命令行操作,使用非常不便,Bug也很多,幸亏核心功能还是比较稳定的。

但是在社会主义伟大精神的号召下,我还是想放弃盗版的VMware Workstation,毕竟一台Ubuntu电脑上装一盗版软件实在是不妥。虽然想,但是难度很大,由于学习方面的需求,我对虚拟机的功能要求是非常苛刻的,不仅效率要高,而且一定要有非常先进的母盘差分功能和文件传输功能。前者的意思是多个虚拟机共用一个硬盘文件,当一个虚拟机要向硬盘写入时,实现写时拷贝,就像Linux多个进程共享内存那样,有效的节约了硬盘资源。后者么就是虚拟机和实体机文件传输了。

问题是VirtualBox的这两个功能全都没有,或者说极其落后。Virtual PC和VMware很多年前就有母盘差分和文件拖拽传输,VMware更是实现了丰富的快照功能(快照也是一种简易的差分),而VirtualBox的文件传输必须依靠共享一个文件夹,极其不方便(有人说这样安全,VMware的文件拖拽是不安全的,但在我看来,病毒如果能突破虚拟机,要感染个共享文件夹岂不更加简单,没有人共享文件夹总是只读的吧),他也有快照功能,但是功能弱到绝不可能成为母盘差分的替代品。这也是我多年不使用VirtualBox的主要原因。

不过后来在一个很偶然的机会下,我读到了一篇英文文章(链接),这里面详细描述了VirtualBox的磁盘类型——immutable和writethrough,直到那个时候我才知道原来VirtualBox有很多命令行驱动的隐藏功能,这倒使我对VirtualBox的隐藏功能产生了兴趣,如果这些命令行功能中正好有我想要的,岂不善哉?为此我Google了大量文章,但是收获很少。但我曾经有一次实现了!不知道之前做了神马,最后我把vdi文件权限设为400后,他真的变成了母盘!所有基于他的虚拟机都可以同时开启并且互不影响的操作,但后来我发现,这是个很偶然的操作下诱发的Bug,我无法在另一台电脑上复制这个操作。尤其是VirtualBox进入4.0版本后,似乎还修复了这个Bug。VirtualBox 4.0还取消了存储选项中的一个叫Differencing Disk的选项,之前版本我其实也不知道这个选项究竟干吗用,现在索性还取消了。

我曾经还在Ubuntu中文论坛发过求助帖,但是无一人回帖,令我对这个论坛深感失望。

又是很偶然的,翻了Google排名较后的文件,发现了一篇BlogSpot的英文文章(链接),察看缓存,竟然发现正是我要的!这篇文章最大的特点就是没有用到Differencing Disk的选项,非常符合目前的情况。

创建好虚拟机之后,在VirtualBox Media Manager下选中即将成为母盘的VDI文件,右击Release。这样,既有的虚拟机将和这个VDI文件完全脱离关系。你也许能想出各种让VDI文件孤立的办法,但是请一定要使用上述方法,用其他方法几乎都会报错。

切到终端下(Linux系统的骄傲!VirtualBox是我见过唯一的在Linux平台下使用比在Windows平台下使用更加方便的多平台软件,方便就体现在这里),使用这样一个命令:

VBoxManage modifyhd <disk file>  --type immutable

把VDI文件转换为immutable文件,顺便把文件权限设为400吧,这样的VDI才是真正意义上的母盘。好,现在创建各种基于她的虚拟机吧!

其实之前的动作只是创建immutable盘的标准操作而已(什么是immutable盘?是指每次关闭虚拟机后,之前的所有操作全部回滚,再打开后就像一个从没被操作过的虚拟机一样),后面的才是重点。

图上的只是演示,我觉得在VirtualBox Media Manager下找到新虚拟 机的VDI文件(其实是基于母盘的快照)的路径更方便些,复制这个路径,使用以下命令:

VBoxManage modifyhd <differencing disk file> --autoreset false

把自动回滚取消,这样的immutable盘既实现了母盘差分,又不会在每次关闭后回滚,符合了我的要求。

真够麻烦的,其实Sun/Oracle要加个母盘差分功能很难吗?不可能。但他就是没有这么做,其中的原因么,不得而知了。不过随着进一步的深入研究,应该是能找到比这更方便的操作的。

至于文件传输,还是配个FTP吧,比她自带的共享文件夹功能还方便点。

后来发现:VMware Player也不错,同样也是免费产品,功能还行,非常稳定。与VMware Workstation相比,VMware Player仅仅失去了快照和母盘差分功能,与VirtualBox相比,VMware Player非常方便的文件拖拽功能,和其特色的Unity功能依然胜过他,如果不需求快照和母盘差分功能,还是考虑VMware Player吧,更好些!

Avatar_small
依云 说:
2011年1月09日 22:36

如果VirtualBox是你见过唯一的在Linux平台下使用比在Windows平台下使用更加方便的多平台软件的话,那你是不是没折腾过Vim/Emacs、nginx/Apache/MySQL、Python/Ruby/Perl/etc?

Avatar_small
依云 说:
2011年1月09日 22:38

至于文件传输嘛,我一直 scp 中,FTP 太麻烦了。

Avatar_small
bachue 说:
2011年1月10日 01:46

@依云: 哈哈!都不是很熟悉,只是懂点皮毛而已。scp么,好像不能linux->windows吧。

Avatar_small
依云 说:
2011年1月10日 02:32

@bachue: 虽然效率低了很多,但 Cygwin 还是很好用的。另外,scp 的源地址也可以是远程地址,所以也可以从 win 上 ssh 到 linux 来把文件拷过去。

nolnom 说:
2011年4月07日 13:53

怎样令vbox具有还原性呀 就是每次都不保存我对他做的修改

Avatar_small
bachue 说:
2011年4月14日 12:35

@nolnom: 其实这招我从来不用,因为我还是不喜欢VirtualBox,我用VMware Player。

Avatar_small
依云 说:
2011年4月14日 13:36

@nolnom: 你先 snapshot 下,然后每次用完关闭时选择“强制退出”,勾选“恢复上一次的快照”即可。

nolnom 说:
2011年4月18日 21:43

@依云: 什么是immutable盘?是指每次关闭虚拟机后,之前的所有操作全部回滚,再打开后就像一个从没被操作过的虚拟机一样),后面的才是重点。

这个immutable不是还原盘吗 我把磁盘设成那样也不成呀

piraya 说:
2011年6月25日 13:43

winscp很好用的说……

Avatar_small
bachue 说:
2013年10月20日 15:37

突然发现Virtualbox现在真的有linked clone功能了 归了Oracle后竟然有点进步了。。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter