收藏于 2013-03-31
迁移自本人的百度空间
--------------------------------
转载自 http://bbs.7boo.org/forum.php?mod=viewthread&tid=13924
VirtualBox在创建虚拟磁盘时可以选择动态扩展和固定大小两种方式,然后设定磁盘空间大小。
其中 动态扩展 类型最初只需占用非常小的物理硬盘空间。然后不断增加(最大到当前指定的大小),具体大小根据虚拟电脑的实际需求动态分配。
其中 固定大小 类型一旦建立就需分配指定大小的物理磁盘空间给该虚拟硬盘使用,性能上有一定优势。建立这种类型的虚拟硬盘需花费较多的时间.
当动态扩展方式达到上限时,怎么办呢?目前VirtualBox没有提供修改动态扩展磁盘大小的方式。只能新建一块更大的虚拟磁盘,然后将原来的复制到新磁盘里去。具体到如何复制,可以在宿主机上操作,也可以在虚拟机里操作。
在虚拟机里操作,就要将这两块虚拟盘都挂载上,再挂载一个系统,通过这个系统将旧盘复制到新盘。这个系统可以是Linux Live CD,也可以是Linux系统,亦可以是Windows PE。
进入Linux系统的话,使用gparted进行磁盘复制。
使用Windows PE 进入Windows,用Ghost进行disk to disk 复制。
这两种方式都比较麻烦,在宿主机上操作就简单的多,可以直接使用VirtualBox提供的命令行工具vboxmanage进行磁盘克隆。
假设一开始创建的新的虚拟磁盘名称为windowsxp,使用clonehd子命令将原先的虚拟磁盘文件复制到新的虚拟磁盘文件里去,注意existing参数表示复制到一个已存在的虚拟磁盘而不是新建:
$ cd ~/.VirtualBox/HardDisks $ vboxmanage clonehd /media/amoblin1/windowsxpsp2.vdi windowsxp.vdi --existing Oracle VM VirtualBox Command Line Management Interface Version 3.2.8_OSE (C) 2005-2010 Oracle Corporation All rights reserved. 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Clone hard disk created in format 'VDI'. UUID: cd2f1f19-9361-492c-a9f2-4917d8b92ea6
注意这里的参数是虚拟磁盘磁盘文件的路径,默认创建的虚拟磁盘文件存放在用户主目录下.VirtualBox/HardDisks目录下,如果使用此目录下的磁盘文件,可以省略前面的路径名。当然也可以使用UUID。
执行上述操作前必须保证任何一个虚拟磁盘都不在运行状态或休眠状态,否则会出现类似下面的错误:
ERROR: Failed to lock source media '/home/amoblin/.VirtualBox/HardDisks/windowsxp.vdi' Details: code VBOX_E_INVALID_OBJECT_STATE (0x80bb0007), component Medium, interface IMedium, callee nsISupports Context: "CloneTo(dstDisk, DiskVariant, NULL, progress.asOutParam())" at line 693 of file VBoxManageDisk.cpp
好了,现在挂载新的虚拟磁盘启动。如果是Windows的话,在我的电脑里,右键属性可以看到多出来了未指派空间。这说明更改成功。
但这些空间还“未指派”,接下来通过分区管理工具来扩展一下磁盘大小就可以了。
比如使用Linux Live USB启动,进入Live Linux系统,用Gparted来resize磁盘大小。
vboxmanage是一个很有用的工具,使用它还可以对vdi文件进行压缩。
$ vboxmanage modifyhd windowsxp.vdi --compact
同一个vb软件里不可直接复制vdi文件再次使用,若要将vdi文件复制重用:
$ vboxmanage clonehd old.vdi new.vdi
注意:老版本的VB使用clonevdi参数,新版本改用clonehd。