With Hyper-V you cannot simply „Add“ a configuration file to your Hyper-V machine as you could with Virtual Server. Mainly because of the use of Live Snapshots. The recommended way is to use Export and Import.
If you have a given VHD it is way easier to create a new VM and simply add the VHD to it. If you used snapshots, see my earlier blog on how to merge them to a new VHD.
However, recently a colleague had a customer issue, where we only had the flat directory structure and needed to restore that. Here’s how we managed to get this running:
We start from a folder that contains the VM in v:\manualrecover
In this folder you usually have:
1. The machine VHD
2. The Virtual Machines Folder with
a: The <GUID>.xml File holding the machine Configuration
b: The <GUID> Folder
3. The Snapshots Folder with a <Snapshot GUID>.xml
Hyper-V uses a new Feature in Windows 2008 called Service SIDs. To access files from a VM, these files need to give this Service SID access permissions.
This SID is a combination of the Service SID ""NT VIRTUAL MACHINE" and the VM GUID
"NT VIRTUAL MACHINE\2F855D88-F990-47BA-95D6-0029BCD8C059"
Note, The GUIDS we used here are from our VM, You will need to adjust to the GUIDs used on your installation
The first step to make this machine known to Hyper-V is to create a Symbolic link to the <GUID>.xml configuration files, in the following folder:
We use the mklink command built into cmd.exe
C:\>mklink "%systemdrive%\programdata\Microsoft\Windows\Hyper-V\Virtual Machines\2F855D88-F990-47BA-95D6-0029BCD8C059.xml" "V:\manualrecover\Virtual Machines\2F855D88-F990-47BA-95D6-0029BCD8C059.xml"
The VM Name should now already appear in Hyper-V Manager. When using Windows Server 2008 R2, you might need to restart the vmms service to make the VMs visible at this point.
We need to add the Service SID to this Symbolic link so that Hyper-V is allowed to access it
C:\>icacls "%systemdrive%\programdata\Microsoft\Windows\Hyper-V\Virtual Machines\2F855D88-F990-47BA-95D6-0029BCD8C059.xml" /grant "NT VIRTUAL MACHINE\2F855D88-F990-47BA-95D6-0029BCD8C059":(F) /L
Note the /L parameter to indicate we work on a symbolic link
We also need to give the Service SID access to all files of our VM
C:\>icacls v:\manualrecover\ /T /grant "NT VIRTUAL MACHINE\2F855D88-F990-47BA-95D6-0029BCD8C059":(F)
Note for simplicity we give Full Control, whereas the default is more granular
If your machine had Snapshots, we also need to create another symbolic link
The snapshot itself has yet another guid.xml found in the snapshots folder.
C:\>mklink "%systemdrive%\ProgramData\Microsoft\Windows\Hyper-V\Snapshots\7DD74401-C2B4-4BD9-8079-3D48D8A78B32.xml" "V:\manualrecover\Snapshots\7DD74401-C2B4-4BD9-8079-3D48D8A78B32.xml"
Also give the Service SID access here too:
C:\>icacls "%systemdrive%\ProgramData\Microsoft\Windows\Hyper-V\Snapshots\7DD74401-C2B4-4BD9-8079-3D48D8A78B32.xml" /grant "NT VIRTUAL MACHINE\2F855D88-F990-47BA-95D6-0029BCD8C059":(F) /L
You will need to do the above for each individual snapshot!
Before starting the VM, open the settings of the VM and assign the Network Adapters to the correct Switches, as those need to be created newly on the switch.
This is not a supported way of adding a VM to Hyper-V. Use this just for disaster recovery, and once you are able to run the VM, backup your VM and recreate it from scratch.
If you restore to a different drive/ or folder, you may need to manually adjust the path to the VHD, and having Snapshots will make this far more complicated .
NOTE2: This procedure does not work on Windows Server 2008 R2.
People have been asking for a while for a way to add a virtual machine configuration file (.XML) directly
Is the NT virtual machine SID ( the hex value ) the same on all installations of 2008?
A: Unsure if I get the question.
The hex values here are GUIDs, and they are unique. NT SIDs are installation specific and unique unless you clone a installation. Thats not different in a virtual word.
The above procedure seems to not work the same with Hyper-V R2. In R1 when ever the mklink was done, the VM used to appear back in the Hyper-V snap in console. With R2 it does not happen. Any ideas thoughts how to resolve in R2. I am using RC build.
Also to add that with RC, re-starting the VMMS service after the links are fixed, gets the VM back. Comments/thoughts
08 R2 support the step above. tested that.
"NT VIRTUAL MACHINE" only exsit in english win2008 or R2, in Janpanese or German it is different. I think use S-1-5-83 should be correct way.
Thanks, That could indeed work besides using the translated name. Let me kow if that one worked for someone