[教学]如何更好地利用vbox的snapshot功能实现多机共享一个虚拟硬盘

Kvm、VMware、Virtualbox、Xen、Qemu 等
回复
头像
xrfang
帖子: 1116
注册时间: 2006-12-08 10:21

[教学]如何更好地利用vbox的snapshot功能实现多机共享一个虚拟硬盘

#1

帖子 xrfang » 2007-04-14 23:28

我们知道vmware server只允许做一个snapshot,新做一个就会把老的冲掉。而vmware workstation可以做多个snapshot而且可以在多个snapshot之间切换,就好想是拥有了一台虚拟机的多个配置。

vbox的snapshot功能介于vmware的两个版本之间。它可以让你做多个snapshot,但是在恢复的时候却不能象vmware workstation那样自如。以下举一个例子:

Basic
Fully Optimized
Current State (Changed)

上面Basic表示第一个Snapshot,就是刚装完机器做的。Fully Optimized表示我已经安装了所有的常用软件,调整到最佳状态做的。而Current State就是虚拟机的当前状态。如果使用vmware workstation,我们可以随时在这三个状态之间相互切换。而vbox不行。它只能做”退回“操作。也就是说,如果你要回到Fully Optimized状态,就必须抛弃(Discard)比它更新的状态(Current State)。就是说,你一旦回到了Fully Optimized,就不能再进入Current State了。同样,如果你回到Basic,就会连Fully Optimized一起抛弃。这一点对于刚从vmware切换过来的用户尤其要注意,因为你在vbox中找不到“Revert to Snapshot”选项,你需要用Discard实现这个功能

我们有没有办法改进这个状态?可以!

假设有这样一个需求。我需要两台虚拟机,一台做软件开发,取名为DevStudio; 另一台炒股票,取名为MoneyStation。这两台机器的软件要求如下:

DevStudio需要安装
- .Net Framwork 2.0
- Visual C#
- Subversion

MoneyStation需要安装
- 大智慧
- 网上交易软件
- 网上银行

两台机器共同需要安装
- PSPad文本编辑器
- avast个人反病毒系统
- FoxItReader PDF浏览器

我们最佳的状态是装一台干净的XP,安装好公用软件,然后把这个基础系统的硬盘给两个机器共享。再在这两个机器上建立一个基础的Snapshot,然后分别安装它们各自需要的软件。这样设计以后,这俩个机器完全独立,各自有一个基本的Snapshot体系(相当于XP的系统回滚功能),它们之间互不干扰,但却共享一个大的虚拟硬盘。好处是一来节约了硬盘空间(越多的虚拟机基于这个硬盘,节约越是大); 二来这个基础系统是“百毒不侵”的,保持两个或多个虚拟机的稳定性。做软件测试的朋友可以利用这种思路设计一批共有基础系统但又有小区别的“机群”来模拟多变的用户环境。

2007-6-7日安装了VBox 1.4,欣喜地发现,按本方案配置的共享硬盘虚拟机可以实现同时启动运行了!以下文字保留成为历史。

要特别指出的是:这种配置情况下,所有利用同一个硬盘的机器只能有一个是处于开启状态的!这点vbox就比vmware做的差了。vmware的共享硬盘方案(我这个研究就是受了vmware的启发)允许多个共享硬盘系统同时运行。VirtualBox有一个良好的开端,但路漫漫其修远兮,希望VirtualBox从功能上逐渐赶超vmware,到时候这篇文章就要进拉圾箱了(或者进博物馆:lol:)。

我来描述一下具体做法:

1)安装好一台干净的虚拟机作为基础系统,这个系统称之为Machine-1,需要包含所有的公共软件,越优化越好。
2)做一个Snapshot,可以称之为Machine-1 Basic Status。
3)新键一个虚拟机Machine-2。注意:这个虚拟机不要安装硬盘
4)关键:在终端下执行VBoxManage modifyvm Machine-2 -hda Machine-1.vdi
5)启动Machine-2,确认是否完全正常。
6)为Machine-2建立一个基础SnapShot。

最后,推荐一些Windows下的常用软件作为基础系统的配件,请大家推荐你认为很重要的基础软件。列表如下:

- 7-Zip,多格式压缩/解压/包管理工具
- CCleaner清除Windows拉圾
- Foxit Reader轻便的PDF阅读器
- IrfanView轻便的多格式图片查看器
- Firefox
- Adblock Plus广告过滤
- Download Statusbar
- FormFox查看HTML Form Action(提高安全性)
- FullerScreen改善FireFox全屏浏览
- NoScript智能地阻止页面Javascript,提高安全性
- SCM (Site Continuity Management,反钓鱼,提高安全性)
- myFireFox把FireFox变脸成IE7(目前最佳版本)
(以上插件在Firefox官方网站下载)
- MSN/QQ之类的IM软件
- PSPad文本编辑器

请各路高手对以上方法评价、试用、批判、修正。。。以期共同提高使用虚拟化技术的水平。
上次由 xrfang 在 2007-06-07 0:58,总共编辑 1 次。
blblme
帖子: 102
注册时间: 2007-03-24 12:57

#2

帖子 blblme » 2007-05-13 20:15

厉害 真是好思路 !
我想请教在终端下执行VBoxManage modifyvm Machine-2 -hda Machine-1.vdi 执行这句是什么意思?
jimmin
帖子: 2138
注册时间: 2006-09-24 4:37

#3

帖子 jimmin » 2007-05-13 20:30

收藏了!以后试试。
头像
xrfang
帖子: 1116
注册时间: 2006-12-08 10:21

#4

帖子 xrfang » 2007-05-14 0:11

blblme 写了:厉害 真是好思路 !
我想请教在终端下执行VBoxManage modifyvm Machine-2 -hda Machine-1.vdi 执行这句是什么意思?
这句话的意思是把这个vdi挂在到这个vm里面。

其实备份virtualbox的虚拟硬盘比vmware方便,只要备份一个文件就可以了。可以随意地把一个硬盘挂载到任何一个虚拟机中。遗憾的是用同一个硬盘的虚拟机不能同时打开。这个据我所知vmware workstation是可以的。(我看文档的,但没有用过)。
blblme
帖子: 102
注册时间: 2007-03-24 12:57

#5

帖子 blblme » 2007-05-14 10:12

怎么怎么用VBoxManage 复制一个vid硬盘镜像呢 请举个例子吧 不知道怎么用:)
头像
xrfang
帖子: 1116
注册时间: 2006-12-08 10:21

#6

帖子 xrfang » 2007-05-14 16:58

blblme 写了:怎么怎么用VBoxManage 复制一个vid硬盘镜像呢 请举个例子吧 不知道怎么用:)
复制镜像不需要用vboxmanage,直接cp就可以了。vboxmanage管的是挂载、卸载的问题。
blblme
帖子: 102
注册时间: 2007-03-24 12:57

#7

帖子 blblme » 2007-05-14 21:36

xrfang 写了: 复制镜像不需要用vboxmanage,直接cp就可以了。vboxmanage管的是挂载、卸载的问题。
假设有一个 winxpwork.vdi 的硬盘镜像
我用命令复制:
$ cp winxpwork.vdi winxpwork2.vdi
然后用Virtual Disk Manager add 这个vdi
但是加载不了提示A hard disk with UUID {97ce14ec-c531-4816-b0b3-fc1d9440da80} or with the same properties ('/home/bo/.VirtualBox/VDI/winxpwork.vdi') is already registered

怎么办?
头像
xrfang
帖子: 1116
注册时间: 2006-12-08 10:21

#8

帖子 xrfang » 2007-05-15 9:11

blblme 写了:
xrfang 写了: 复制镜像不需要用vboxmanage,直接cp就可以了。vboxmanage管的是挂载、卸载的问题。
假设有一个 winxpwork.vdi 的硬盘镜像
我用命令复制:
$ cp winxpwork.vdi winxpwork2.vdi
然后用Virtual Disk Manager add 这个vdi
但是加载不了提示A hard disk with UUID {97ce14ec-c531-4816-b0b3-fc1d9440da80} or with the same properties ('/home/bo/.VirtualBox/VDI/winxpwork.vdi') is already registered

怎么办?
我没有说清楚 :oops: 你要挂载一个硬盘到虚拟机B,先要把它从虚拟机A中卸载,同样的,“磁盘架”上不能有两个相同UUID的硬盘存在(对于备份/恢复来说,这不是问题)。这个操作最好从命令行做,我感觉界面上好像没有提供所有的选项。
头像
xyf
帖子: 2032
注册时间: 2007-05-05 23:59
来自: 嘉兴

#9

帖子 xyf » 2007-05-24 8:52

做个记号,慢慢学习
pengtu
帖子: 349
注册时间: 2006-09-09 0:35

Re: [教学]利用vbox的snapshot多机共享一个虚拟硬盘

#10

帖子 pengtu » 2007-08-09 19:51

解决了我的大问题,感谢楼主分享!:D 刚才实验1拖2成功。我再发个帖子,把手册里面的这一段翻译出来。
建议:第2台机器测试前先做快照(只有100多KB),我担心直接运行对原机有影响。
我原来遇到的《vbox创建‘持续写入’镜像失败》,请大家帮看一下。不过现在有了‘机群’,这个需求下降了。
viewtopic.php?t=64123
xrfang 写了:我们最佳的状态是装一台干净的XP,安装好公用软件,然后把这个基础系统的硬盘给两个机器共享。再在这两个机器上建立一个基础的Snapshot,然后分别安装它们各自需要的软件。这样设计以后,这俩个机器完全独立,各自有一个基本的Snapshot体系(相当于XP的系统回滚功能),它们之间互不干扰,但却共享一个大的虚拟硬盘。好处是一来节约了硬盘空间(越多的虚拟机基于这个硬盘,节约越是大); 二来这个基础系统是“百毒不侵”的,保持两个或多个虚拟机的稳定性。做软件测试的朋友可以利用这种思路设计一批共有基础系统但又有小区别的“机群”来模拟多变的用户环境。

我来描述一下具体做法:
1)安装好一台干净的虚拟机作为基础系统,这个系统称之为Machine-1,需要包含所有的公共软件,越优化越好。
2)做一个Snapshot,可以称之为Machine-1 Basic Status。
3)新键一个虚拟机Machine-2。注意:这个虚拟机不要安装硬盘
4)关键:在终端下执行VBoxManage modifyvm Machine-2 -hda Machine-1.vdi
5)启动Machine-2,确认是否完全正常。
6)为Machine-2建立一个基础SnapShot。
tocer
帖子: 24
注册时间: 2007-04-24 9:02

#11

帖子 tocer » 2007-08-10 17:01

感谢楼住的分享。我我按照楼主的办法成功的建立了三个虚拟机。但是我发现,用这个方法可能节省不了多少磁盘空间。请看附件,倒数第二行是我安装完delphi后建立的快照(没有安装其他软件),delphi本身只有400M,但是在快照中却占用硬盘900多M。我不懂快照的原理,我猜想快照里面保存的是与快照前的内容差异,单就目前来说,感觉是快照所占的磁盘空间是实际内容差异的两倍。

希望高手能解释一下。
附件
Screenshot-虚拟存储管理器.png
Screenshot-虚拟存储管理器.png
pengtu
帖子: 349
注册时间: 2006-09-09 0:35

#12

帖子 pengtu » 2007-08-14 1:57

tocer 写了:但我发现,用这个方法可能节省不了多少磁盘空间。请看附件,倒数第二行是我安装完delphi后建立的快照(没有安装其他软件),delphi本身只有400M,但在快照中却占用硬盘900多M。我不懂快照的原理,我猜想快照里面保存的是与快照前的内容差异,单就目前来说,感觉是快照所占的磁盘空间是实际内容差异的两倍。
不能节省磁盘的主要原因是因为‘动态磁盘’。几类虚拟机默认的磁盘镜像都是‘动态磁盘’,特点是,只能增大不能变少。你拷贝一个100MB的文件进去,vdi体积增大100MB,然后你再删除100MB,vdi体积却不减少。至于这个vdi中实际上空闲出的100MB空间会不会得到利用,我现在不清楚。

所以,当你安装delphi后,实际的总容量并不是最后得到的目录容量,而是这个过程中出现过的文件总容量,大致上=setup.exe + 解压临时文件 + 安装后delphi目录 + win产生的临时文件。如果delphi的安装包有100MB,那么它的解压文件可能就会有300MB,加上最后生成的400MBdelphi,总体积增加900MB就不奇怪了。

要想节省磁盘空间,我的想法是,vdi共享+‘持续写入’镜像。持续写入类的磁盘镜像是和‘动态磁盘’向对应的另一种磁盘镜像,体积变化仿照真实硬盘。vbox是支持该功能的,但我按照手册创建失败。谁有兴趣可看我楼上一贴。
头像
xrfang
帖子: 1116
注册时间: 2006-12-08 10:21

#13

帖子 xrfang » 2007-08-26 15:42

tocer 写了:感谢楼住的分享。我我按照楼主的办法成功的建立了三个虚拟机。但是我发现,用这个方法可能节省不了多少磁盘空间。请看附件,倒数第二行是我安装完delphi后建立的快照(没有安装其他软件),delphi本身只有400M,但是在快照中却占用硬盘900多M。我不懂快照的原理,我猜想快照里面保存的是与快照前的内容差异,单就目前来说,感觉是快照所占的磁盘空间是实际内容差异的两倍。

希望高手能解释一下。
关于快照我也没有太多的研究,但发现,关机状态下做的快照尺寸小,开机状态做的尺寸要大的多。估计就是保存内存的缘故。
回复