大多数在 VirtualBox 上安装 Windows 以作为快速 Windows 作业模板的指南都会告诉你需要采取一些步骤来准备虚拟机前安装 Windows(我发现的最佳指南:grahamrhay.wordpress.com;另一个相当不错的指南:www.windowstablettv.com)。不幸的是,在我想要用作模板的 VM 上安装和激活 Windows 之前,我没有阅读这些指南。
我想知道如何克隆我已经活动的 VM,以便不需要从 Windows 重新激活。
查看模板 VM 定义文件(VM 的 VBOX 或 XML 文件),/VirtualBox/Machine/Hardware
(XPath ID)节点没有uuid
属性。但是,如果我尝试使用VBoxManage modifyvm <uuid|name> --hardwareuuid <uuid>
为模板 VM 设置新的 UUID,则模板 VM 将失去其激活状态!(幸运的是,我已经备份了模板。)因此,为了实现我的目标,我不能只是假装我还没有安装 Windows 而遵循这些指南。
答案1
值得庆幸的是,我注意到我的所有虚拟机都有一些我尚未按照指南所述做好准备的地方。
我运行VBoxManage showvminfo <uuid|name>
后发现,UUID
值与值匹配,这让我推测,如果任何 VM 定义在节点中Hardware UUID
没有属性,则 VM 将使用“机器 UUID”值作为“硬件 UUID”值。因此,对于我的模板 VM,它确实有一个我可以使用的“硬件 UUID”;我只需要找到如何将其转移到我将要制作的任何克隆。uuid
/VirtualBox/Machine/Hardware
为了确保 UUID 传输,您可以采用以下两种方法之一:
- 您可以直接编辑模板 VM 定义文件。只有当克隆
/VirtualBox/Machine/Hardware
具有该uuid
属性时,“硬件 UUID”才会传输到克隆。因此,复制该/VirtualBox/Machine
uuid
属性并将其添加到/VirtualBox/Machine/Hardware
uuid
属性中。在此之后,您可能希望通过关闭/终止正在运行的任何 VirtualBox 进程来重新初始化 VirtualBox 机器数据库。(VBoxSVC 有时会在 Windows 上徘徊;您可能必须从任务管理器中终止它。) - 您可以克隆模板并创建新的模板 VM,然后使用
VBoxManage modifyvm <uuid|name> --hardwareuuid <uuid>
将新模板的“硬件 UUID”设置为原始模板的“机器 UUID”/“硬件 UUID”。我说您必须克隆 VM 才能创建新的模板 VM,因为如果您尝试使用此命令在原始模板上设置“硬件 UUID”,它不会将属性添加uuid
到/VirtualBox/Machine/Hardware
节点,因为它仍然可以从“机器 UUID”中暗示它,因此不会将此值复制到它所做的任何克隆中。
答案2
此 powershell 脚本完成以下工作:
- 克隆已经激活的机器。
- 从任务管理器关闭 virtualbox 进程。
- 运行此脚本,将变量修改为您的值。
请记住,虚拟机名称区分大小写。
$ORIGVirtualMachineName="BaseDevWin7"
$clonedVirtualMachineName="DevWin7a"
$vboxDir="c:\Program Files\Oracle\VirtualBox"
cd $vboxDir
$uid=$($($(.\VBoxManage.exe showvminfo $ORIGVirtualMachineName|select-string "Hardware UUID:").ToString()).Split())[4]
.\VBoxManage modifyvm $clonedVirtualMachineName --hardwareuuid $uid
答案3
感谢上述提示,我已经成功克隆了一台在 Kubuntu 主机上运行 Win7 客户机的机器,用于测试目的,无需重新激活。
我的机器已经激活并且(如上所述)实际上没有硬件 UUID。
在我看来,MACHINE UUID 仅用于 Virtualbox 管理,而 HARDWARE UUID 由 Windows 激活逻辑使用。如果没有硬件 UUID,则 Virtualbox 会向客户机提供机器 UUID,即 Microsoft 知道机器 UUID。
因此,在我的情况下,它无需重新激活即可正常工作:1)使用普通文件浏览器复制虚拟机(文件夹)。2)在简单的文本编辑器中打开 .vbox 文件。3)由于“硬件”没有 UUID 属性,请将机器 UUID 属性(例如 uuid="{xxx11111-2222-3333-4444-xxxxxxxxxxxx}" )复制到“硬件”条目。4)为机器生成新的 UUID,例如使用 uuidgenerator.net。5)用生成的 UUID 值覆盖 UUID 机器值。=> 完成。
为了在 VB 管理器中同时管理两台机器,需要更加小心:
1. 重命名克隆的硬盘 .vdi 文件。2
. 在命令行中通过命令“VBoxManage internalcommands sethduuid .vdi”为硬盘提供新的 UUID。VBManager 将设置新的 UUID 并显示它。3
. 在 VB 管理器中添加新机器。通过添加新硬盘文件编辑机器(并删除原始 vdi,如果仍然存在)。
现在,您拥有所有虚拟机和硬盘的唯一 ID。您可以在 VB 管理器中同时管理这两台机器。
答案4
上述答案有效!我在 Windows 10 模板上对其进行了测试。
“完整克隆机器。不要启动它。从命令行:VBoxManage modifyvm“克隆的虚拟机名称”--hardwareuuid xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 作为 UUID,使用原始机器的机器 ID(或硬件 ID,如果存在)。要获取该 UUID,请使用:VBoxManage showvminfo“原始虚拟机名称”
这应该可行。已在 Windows 10 客户机上测试,已激活。