VirtualBox下通过复制已存在的vdi文件可以快速创建新的虚拟机。
点击新建(ctrl + n);
设置虚拟电脑名称和系统类型;
分配内存大小;
选择使用已有的虚拟硬盘文件(vdi文件)。
其中,已有的虚拟硬盘文件可以从别人主机中复制过来,也可以从自己主机中已有的vdi直接复制。前者选择后即设置完毕,可以直接使用;而直接时候后者,会提示虚拟电脑控制台-错误,如下图所示。
提示语句为:
打开硬盘文件F:\WinXP Lab\WinXP Lab1.vdi 失败.
Cannot register the hard disk ‘F:\WinXP Lab\WinXP Lab1.vdi’
{464a2753-9583-4ffb-b15a-7c2548ce5a6f}
because a hard disk ‘F:\WinXP Lab\WinXP Lab.vdi’
with UUID {464a2753-9583-4ffb-b15a-7c2548ce5a6f} already exists.
返回 代码: E_INVALIDARG (0x80070057)
组件: VirtualBox
界面: IVirtualBox {fafa4e17-1ee2-4905-a10e-fe7c18bf5554}
被召者 RC:VBOX_E_OBJECT_NOT_FOUND (0x80BB0001)
本文主要讲解如何解决这一错误提示。只需解决问题的读者只需要看第四节,前三节留给关心背景知识的读者。其中,前两节的详细内容可参见VirtualBox的官方UserMaual。
一、关于UUIDUUID即Universally Unique Identifier,意为通用唯一识别码。VirtualBox中UUID是其用于调用虚拟机的内部唯一识别码。
二、VBoxManageVBoxManage是VirtualBox的命令行界面,通过它可以用主机OS中的命令行来完全控制VirtualBox。VirtualBox支持但不限于VirtualBox中GUI中提供的所有功能,也就是说它还可以实现GUI中不能实现的功能。例如,本文就是使用VBoxManage来实现修改UUID的,而这一功能在GUI中是无法实现的。
VBoxManage的命令格式一般为:
VBoxManage + 子命令 + 虚拟机名/UUID
例如,开机的子命令为startvm,则令名为Windows XP的虚拟机开机的命令为(注意:若虚拟机名称包括空格,必须使用双引号):
VBoxManage startvm “Windows XP”
或者使用其UUID:
VBoxManage startvm 670e746d-abea-4ba6-ad02-2a3b043810a5
三、错误分析根据错误提示可知,无法直接使用复制过来的vdi文件作为已有的虚拟硬盘文件原因是同一主机下两个vdi文件的UUID重复。因此修改其中一个vdi文件的UUID即可解决。我们通过VBoxManage + internalcommands sethduuid这一子命令加vdi文件所在路径来对拷贝后vdi文件的UUID进行修改。
四、操作步骤 方法一1、win + r 运行 cmd, 输入:
cd /d “x:\…\virtualbox”
用来挂载VBoxManage所在路径,其中引号内为VirtualBox安装目录(引号可不保留)。例如,我的VirtualBox安装在D盘根目录下,则应为:
cd /d “d:\virtualbox”
如下图所示:
2、继续输入:
vboxmanage internalcommands sethduuid “x:\…\***.vdi”
其中,引号内为待修改UUID的vdi文件的绝对路径(注意引号要保留),例如:
vboxmanage internalcommands sethduuid “F:\WinXP Lab\WinXP Lab.vdi”
显示
UUID changed to: fa8d8029-f280-4565-90ee-86aae4af9352
表示UUID修改完成,如下图所示。
方法二实质与方法一相同,使用批处理方式,避免了输入文件路径这一步。
新建文本文件,打开后将下述代码复制过去,
@ VBoxManage internalcommands sethduuid "x:\\...\\***.vdi" @ pause将引号内路径改为你要修改的vdi文件的路径,保存后把后缀修改为.bat,将该文件放入VirtualBox安装路径下,即与VirtualBox.exe相同路径下,运行即可。如下图所示:
注:
Windows 版本:Windows 8.1 企业版
VirtualBox版本:4.3.26