Most guides for installing Windows on VirtualBox to act as a template for quick Windows jobs tell you to take a few steps to prepare the Virtual Machine before installing Windows (the best guide I found: grahamrhay.wordpress.com; another fairly good guide: www.windowstablettv.com). Unfortunately, I didn't read these guides before installing and activating Windows on the VM I wanted to use as a template.
I want to know how to clone my already-active VM in such a way that would not require re-activation from Windows.
Looking in the template VM Definition file (the VBOX or XML file for the VM), the /VirtualBox/Machine/Hardware
(XPath ID) node has no uuid
attribute. But, if I try to use VBoxManage modifyvm <uuid|name> --hardwareuuid <uuid>
to set a new UUID for the template VM, then the template VM loses its activation status! (Thankfully, I had made a backup of the template.) So, to accomplish my aim, I can't just follow those guides pretending that I haven't installed Windows yet.
Best Answer
Thankfully, I noticed something about all of my Virtual Machines that I hadn't prepared as those guides had outlined.
I ran
VBoxManage showvminfo <uuid|name>
and noticed that theUUID
valued matched theHardware UUID
value, leading me to surmise that if any VM Definition didn't have auuid
attribute in the/VirtualBox/Machine/Hardware
node, then the VM would use the "Machine UUID" value as the "Hardware UUID" value. So, for my template VM, it did have a "Hardware UUID" that I could use; I just had to find how to transfer it to any clones I would make.To ensure that the UUID transfers, you can take one of two approaches:
/VirtualBox/Machine/Hardware
has theuuid
attribute. So, copy the/VirtualBox/Machine
uuid
attribute and add it to the/VirtualBox/Machine/Hardware
uuid
attribute. You probably want to re-initialize the VirtualBox machine database after this, by closing/killing any VirtualBox process you're running. (VBoxSVC sometimes lingers on Windows; you may have to kill it from the Task Manager.)VBoxManage modifyvm <uuid|name> --hardwareuuid <uuid>
to set the new template's "Hardware UUID" to the original template's "Machine UUID"/"Hardware UUID". I say you have to clone the VM to create a new template VM because if you try to set the "Hardware UUID" with this command on the original template, it won't add theuuid
attribute to the/VirtualBox/Machine/Hardware
node, since it can still imply it from the "Machine UUID", and thus won't copy this value to any clone it makes.