Gelegenlich kann es vorkommen, dass eine virtuelle Maschine (VM) von einem anderen Hyper-V-Host kopiert und in den eigenen eingefügt werden soll. Dazu reicht es leider nicht, die Dateien der VM in den Standardspeicherort zu kopieren.
Diese Aufgabe kann sich ergeben, wenn beispielsweise ein Hyper-V-Host nicht mehr verfügbar ist (Hardwaredefekt oder anderes). Hat man keine Bare-Metal-Sicherung, sondern nur eine Sicherung der VMs, müssen diese nach der Installation des Betriebssystems und von Hyper-V wieder verfügbar gemacht werden. Aber importieren kann man sie nicht, da sie vorher nicht exportiert wurden. (Das gilt nicht mehr seit Windows Server 2012.) Man müsste also eine neue VM erzeugen und in diese die vorhandenen virtuellen Festplatten aus der Sicherung einbinden. Aber hat man auch die Konfiguration dokumentiert? Oder soll man sie sich aus den XML-Datei zusammen suchen? Das geht auch einfacher.
Ein anderes Szenario kann darin bestehen, dass eine VM im Hyper-V-Manager nicht mehr angezeigt werden soll. Die Konfiguration soll aber nicht verloren gehen. Und exportieren möchte man die VM auch nicht, das dauert zu lange und braucht doppelten Speicherplatz. Auch hierfür gibt es eine Lössung. Die ist aber etwas einfacher als das Hinzufügen von VMs. (Klar. Kaputtmachen geht immer einfach und schnell.)
Der Standardspeicherort
Standardspeicherort – schon der erste Begriff, der erklärt werden muss. Nachdem die Rolle Hyper-V auf einem Windows Server ab 2008 oder das Windows-Feature Hyper-V auf einem Computer ab Windows 8 Professional hinzugefügt wurde, werden die Dateien für die virtuellen Festplatten der VMs im Ordner %PUBLIC%\Documents\Hyper-V\Virtual Hard Disks und die VMs selbst (das ist eigentlich nur eine XML-Datei, die die Konfiguration der VM enthält) im Ordner %PROGRAMDATA%\Microsoft\Windows\Hyper-V\Virtual Machines gespeichert.
Das kann man ändern. Dazu klickt man im Hyper-V-Manager auf den eigenen Computernamen und wählt dann im Kontextmenü oder im Menü Aktionen, welches standardmäßig in der rechten Spalte der Managementkonsole erscheint, Hyper-V-Einstellungen…
Gleich die ersten beiden Punkte in der linken Navigation ermöglichen die Standardspeicherorte zu ändern. Es ergibt Sinn, für beide Orte den gleichen Ordner festzulegen, zum Beispiel D:\VMs. Hauptsache er bietet schnelle Zugriffszeiten (befindet sich also idealerweise auf einer SSD) und ausreichend Platz, denn die virtuellen Festplatten können recht groß werden und meist hat man auch nicht nur eine VM. Ein weiterer Vorteil des individuell konfigurierten Speicherorts ist die Übersichtlichkeit. Alle zu einer VM gehörendenden Dateien und Ordner liegen unter einem Ordner mit dem Namen der VM.
Abhängig von dieser Konfiguration ist auch das Vorgehen beim Entfernen und Hinzufügen von VMs unterschiedlich.
Generelles Vorgehen
Bevor irgend eine der folgenden Aktionen durchgeführt wird muss der Dienst Hyper-V-Verwaltung für virtuelle Computer beendet werden. Das kann man einfach in einer administrativen (elevated) Eingabeaufforderung mit dem Kommando net stop vmms oder über die Konsole Dienste (services.msc) erledigen.
Auf die Dateien der virtuellen Festplatten müssen gesonderte Berechtigungen erteilt werden. Seit Windows Server 2008 gibt es eine sogenannte Service SID. Das ist eine Kombination aus „NT VIRTUAL MACHINE\“ und der GUID der VM, wie „NT VIRTUAL MACHINE\CA87473D-36AD-4310-9C33-7AB4A94C5DC1“. Diese Berechtigung kann man nicht in der grafischen Oberfläche setzen. Bevorzugt verwendet man das Kommando icacls und erteilt der Service SID die Berechtigungen Lesen und Schreiben auf die VHDs. Die Service SID wird angelegt, wenn sich die Konfigurationsdatei im Zielordner befindet und der Dienst Hyper-V-Verwaltung für virtuelle Computer gestartet wird.
Stehen in der Konfigurationsdatei der VM Berechtigungen und eventuell noch Eigentümerverhältnisse, die sich auf diesem Hyper-V-Host nicht auflösen lassen, kann die VM nicht gestartet werden. Um das zu korrigieren, verwendet man am einfachsten das PowerShell-Cmdlet Grant-VMConnectAccess.
Nach Abschluss aller Arbeiten muss der Dienst natürlich wieder gestartet werden (net start vmms).
Entfernen von VMs
Standardspeicherort
Dazu werden die Konfigurationsdatei der VM und der gleichnamigee Ordner aus dem Ordner %PROGRAMDATA%\Microsoft\Windows\Hyper-V\Virtual Machines sowie (falls vorhanden) die Konfigurationsdatei für Snapshots und deren gleichnamiger Ordner aus %PROGRAMDATA%\Microsoft\Windows\Hyper-V\Snapshots in einen anderen Ordner verschoben. Die Zielordner sollte man so benennen, dass man daraus immer den Namen der VM erkennen kann und ob es sich um die Daten aus Virtual Machines oder aus Snapshots handelt. Empfehlenswert wäre ein Ordner mit dem Namen der VM und drei Unterorder: Virtual Hard Disk, Virtual Machines und Snapshots. Dann könnte man auch gleich die Dateien der virtuellen Festplatten dorthin verschieben und hätte alles, was zu einer VM gehört unter einem Ordner gespeichert.
Individueller Speicherort
Zuerst ermittelt man die GUID der VM. Dazu wechselt man in den Ordner, wo die VM gespeichert ist. dieser enthält einen Unterorder Virtual Machines. Darin befindet sich wiederum ein Unterordner und eine XML-Datei. Beide habe als Namen die GUID der VM.
Nun sucht man im Ordner %PROGRAMDATA%\Microsoft\Windows\Hyper-V\Virtual Machines nach einer gleichnamigen XML-Datei und löscht sie. Es handelt sich nämlich gar nicht um eine reguläre Datei, sondern um einen symbolischen Link, der zu der XML-Datei zeigt, die man im ersten Schritt ermittelt hat. Erkennen kann man das. wenn im Explorer die Detailansicht ausgewählt ist. Symbolische Links werden als Typ .symlink mit einer Dateigröße von 0 KB angezeigt.
Hinzufügen von VMs
Die nachfolgende Vorgehensweise ist nur bis Windows Server 2008 R2 notwendig. Sie funktioiert natürlich auch in neueren Windows-Versionen, aber: ab Windows Server 2012 kann einfach eine virtuelle Maschine importiert werden, auch wenn sie nicht vorher exportiert worden war. Es reicht beim Import den Ordner anzugeben, in dem die VM gespeichert ist.
Standardspeicherort
Zunächst kopiert man die virtuellen Festplatten nach %PUBLIC%\Documents\Hyper-V\Virtual Hard Disks. Die Konfigurationsdatei und der gleichnamige Ordner wird nach %PROGRAMDATA%\Microsoft\Windows\Hyper-V\Virtual Machines kopiert, (falls vorhanden) die Snapshots in den Ordner Snapshots unter Hyper-V. Dann startet man den Dienst Hyper-V-Verwaltung für virtuelle Computer, damit die Service SID erzeugt wird. Falls beim Start Fehler gemeldet werden, keine Panik. Das wird gleich korrigiert.
Nun können den virtuellen Festplatten und den Snapshotdateien die korrekten Berechtigungen zugewiesen werden. Dann öffnet man im Hyper-V-Manager die Einstellungen der VM und korrigiert die Pfade für die virtuellen Festplatten oder die Snapshotdateien. Auch ein Blick auf den oder die Netzwerkswitche kann nicht schaden. Vielleicht gibt es auf dem Zielhost nicht die gleichen virtuellen Switche wie auf dem Quellhost. Notfalls konfiguriert man die Netzwerkkarte(n) zunächst mit der Einstellung Nicht verbunden. Eventuell müssen auch die Berechtigungen zum Zugriff auf die VM mit Grant-VMConnectAccess noch erteilt werden. Danach sollte sich die VM fehlerfrei starten lassen.
Individueller Speicherort
Im Ordner %ProgramData%\Microsoft\Windows\Hyper-V\Virtual Machines gibt es für jede VM einen symbolischen Link, der auf die Konfigurationsdatei der VM (der Dateiname ist die GUID der VM, die Dateiendung .xml) zeigt. Der Name des Links ist mit dem Dateinamen identisch. Dieser Link muss erzeugt werden. Dazu kann man beispielsweise das Kommando mklink benutzen.
Verfügt die VM auch über Snapshots, so muss ebenfalls ein symbolischer Links auf die XML-Datei der Snapshots erzeugt werden. Der Link wird im Ordner %ProgramData%\Microsoft\Windows\Hyper-V\Snapshots angelegt.
In der Zusammenfassung sind alle Kommandos noch einmal aufgeführt.
Zusammenfassung
Entfernen
- net stop vmms
- GUID der VM ermitteln -> <Ordner der VM>\Virtual Machines
- gleichnamige XML-Datei unter %ProgramData%\Microsoft\Windows\Hyper-V\Virtual Machines und %ProgramData%\Microsoft\Windows\Hyper-V\Virtual Machines Cache löschen
- net start vmms
Hinzufügen
- net stop vmms
- mklink %ProgramData%\Microsoft\Windows\Hyper-V\Virtual Machines\<GUID der VM>.xml <Ordner der VM>\Virtual Machines\<GUID der VM>.xml oder Konfigurationsdatei und gleichnamiger Ordner dorthin kopieren
- mklink %ProgramData%\Microsoft\Windows\Hyper-V\Snapshots\<GUID des Snapshots>.xml <Ordner der VM>\Snapshots\<GUID des Snapshots>.xml oder Konfigurationsdatei und gleichnamiger Ordner dorthin kopieren
- net start vmms
- icals <Dateiname der (A)VHD(X)> /grant „NT VIRTUAL MACHINE\<GUID der VM>„:(R,W)
- Grant-VMConnectAccess -UserName <user who starts the VM> -VMName <name of the VM>
Gerade die letzten beiden Kommandos können auch in Windows Versionen nach 2008 R2 sehr nützlich sein.
http://faq-o-matic.net/?p=5995