5
Posted on 下午4:04:00 by Fan Zhang and filed under ,

  之前曾经使用 VirtualBox 安装过 Ubuntu,现在因为测试需要,准备安装一下 Windows XP。

  结果一上来就遇到一个问题,在格式化一步出错,提示:Unable to allocate and lock memory...错误 ID:HostMemoryLow。原来是我把虚拟机的内存设置得太大了(设置的是 128M 好像,主机内存 1G+2G 页面缓存)。后来修改成 64M 就可以了。

  VirtutalBox 的虚拟硬盘是保存成 VDI 文件的,在虚拟系统运行的任何时刻,都可以生成一个当前系统运行状态的快照(Snapshots)。这个备份是保存在 Snapshots 目录下的一个新的 VDI 文件中,在快照生成之后的所有操作都是保存在这个新的 VDI 文件中,原始的文件就不会发生变化了。通过快速修复界面,可以恢复最近的快照。

  注意,当你新生成或者删除某一个快照备份的时候,原始的 VDI 就会发生变化,保存的是当前的系统状态。

  但是,VirtualBox 的快照恢复顺序类似与一个堆栈,只能恢复最近的快照,想要生成更早一点的状态,只能把最近的快照删除才行。这点也很好理解,因为如果想要并行保存两个状态,那势必要占用两份空间,而 VirtualBox 的快照是一个增量备份的过程,所以它只能线性恢复。

  而我们软件测试,是需要在同一个操作系统的不同软件环境下进行,比如需要保存刚刚安装完 Windows 的状态,还要保存已经安装常用软件的状态。这样就需要把虚拟硬盘的 VDI 文件多保存几份了。但是,直接复制 VDI 文件是不行的,因为 VirtualBox 对每个 VDI 文件有一个 uuid,所以直接复制以后无法注册,因为 uuid 是相同的。

  在帮助文件中给出了解决方案,就是通过命令行中使用 VBoxManage 的 clonevdi 的方法来复制一个 VDI 文件,并重新生成一个 uuid。使用方法如下,注意文件名如果有空格,需要用引号括起来。

VBoxManage clonevdi <uuid>|<filename> <outputfile>

  复制的过程相当慢...

  如何压缩虚拟硬盘的大小,在 VBoxManage 中有一个 modifyvdi compact 的命令,如果选用了动态分配磁盘,可以试试。注意到,因为在频繁的文件操作后,将会有大量的空间只被标记为删除,但是并没有真的清空。这样压缩就会没什么效果。

  一种方法是使用 Ghost 备份一下然后再恢复。另一种方法是:

  1. 首先进行磁盘碎片整理。
  2. 然后使用 Sysinternals 的一个命令行工具 SDelete,在 Guest OS 中执行:sdelete -c c:\ ,把C盘中标记为未使用的空间清0。
  3. 在 Host OS 中执行:VBoxManage modifyvdi "文件名.vdi" compact
5
评论 : VirtualBox 安装 Windows
Marcher 说... 2008年12月2日 下午4:12

我觉得vb怎么那么慢……
还不如盗版的微软virtual pc好用……

晓月 说... 2008年12月2日 下午4:25

to Marcher:
我在公司的机器上用得还行。Virtual PC没用过,VM我用过,这个太大了,没有VB小巧。
我对速度没有太大要求,主要是测试软件的使用环境。所以用VB还是可以接受的。

匿名 说... 2008年12月30日 上午10:53

很有用的VBoxManage命令!刚开始用VirtualBox,学习了!貌似很多人不知道VBoxManage命令,不知道怎么压缩磁盘。为什么VBox不把这些集成进Virtual Media Manager,不做个GUI呢?

匿名 说... 2008年12月30日 下午12:17

顺便说下modifyvdi已经变为modifyhd。以前一直用VM,现在刚开始用VBox真有点不习惯……

晓月 说... 2008年12月30日 下午4:49

多谢上面,我不知道已经改了命令。
我记得我是一个月前还在用的...
至于为什么不做成GUI,可能是出于安全性考虑,或者防止复杂的界面给初级用户造成心理压力吧...

发表评论