Tags: Hyper-V, Migration, Datei-Management, VirtualBox
Open Virtual Appliance (OVA) und Open Virtualization Format (OVF) haben sich als Standard für den Austausch von virtuellen Maschinen zwischen Hypervisoren etabliert. Hyper-V bietet aber keinen Import für derartige virtuelle Appliances. Mit PowerShell lässt sich dieser Vorgang teilweise automatisieren.
Während VMware und VirtualBox das unkomplizierte Exportieren und Importieren von VMs als OVA schon lange erlauben, sieht Microsoft bei Hyper-V dafür offenbar keinen Bedarf. Die bisher einzigen Tools aus Redmond ergänzen den System Center VMM 2012 um die Fähigkeit zum OVA-Import.
Konvertieren der virtuellen Laufwerke
Nachdem es sich bei OVA nur um ein ZIP-Archiv handelt, das die virtuellen Laufwerke sowie eine .ovf-Datei enthält, kann man sich zumindest selbst behelfen. In der Regel wird es für den Import notwendig sein, die virtuellen Festplatten aus den Formaten VMDK oder .vdi nach VHD(X) zu konvertieren.
Dafür benötigt die VirtualBox kein externes Werkzeug, weil sie über die Kopieren-Funktion des Managers für virtuelle Medien auch VHDs exportieren kann. Ansonsten empfehlen sich für diese Aufgabe entweder der grafische StarWind Converter oder qemu, beides kostenlose Programme.
Neue VM braucht die Einstellungen aus der .ovf-Datei
Nach der Umwandlung der virtuellen Laufwerke könnte man nun manuell eine neue VM in Hyper-V anlegen und diese mit der konvertierten VHD(X) verbinden. Allerdings müsste man dann raten, wie viele CPUs die VM benötigt oder wie groß der Arbeitsspeicher dimensioniert sein sollte. Außerdem weiß man nicht, ob das Laufwerk mit GPT oder MBR partitioniert wurde und somit BIOS oder UEFI gefragt ist.
All diese Informationen über eine VM bringt eine Open Virtual Appliance in der .ovf-Datei mit. Sie liegt als XML vor, so dass man die Einstellungen mit Hilfe der XML-Funktionen von PowerShell auslesen kann. Erschwert wird dies allerdings dadurch, dass mehrere Versionen davon im Umlauf sind und Hersteller das Format durch eigene Namespaces erweitern können.
Werte für CPUs, RAM, Controller
Grundlegende Einstellungen wie CPUs, RAM, UEFI bzw. BIOS, SCSI-Controller oder DVD-Laufwerke lassen sich aber relativ verlässlich ermitteln. Wenn man diese Werte in Variablen zwischenspeichert, ist es nachher ein Leichtes, auf ihrer Basis mit PowerShell eine neue VM zu erzeugen.
Das folgende Script liest die Einstellungen aus der .ovf-Datei in eine Hash-Tabelle ein. Den Namen der OVF muss man im ersten Schritt natürlich anpassen. Am Ende gibt es die Liste der gefunden Konfigurationen aus, damit man diese auf Plausibilität prüfen kann.
Dazu gehört etwa, dass das Gast-OS für eine VM der Gen 2 geeignet sein sollte. VMware und VirtualBox können nämlich auch ältere Windows-Versionen in einer UEFI-VM ausführen. Hyper-V benötigt dafür aber mindestens Windows 8.1 oder Server 2012 R2.
Wie man schnell sieht, trifft das Script gleich am Anfang eine Fallunterscheidung zwischen VMware und VirtualBox, um bestimmte Einstellungen an unterschiedlichen Orten auszulesen.
Sehen die gefundenen Werte gut aus, dann kann man im nächsten Schritt das folgende Script starten, um die neue VM zu erzeugen. Dafür benötigt es die Variable $VM aus dem ersten Script, die aber noch verfügbar sein sollte, solange man sich in der gleichen PowerShell-Sitzung befindet.
Die neue VM sollte nun nach den Vorgaben aus der .ovf existieren.
Manuelle Anpassungen
Als manuelle Nacharbeit bliebe dann, die VM mit dem konvertierten Laufwerk zu verbinden. Nachdem sich dessen Dateiname ändert, die Extension entweder .vhd oder .vhdx sein kann und es nicht im Standardpfad liegen muss, wäre die Anbindung mittels Script relativ umständlich. Wenn man sich hier auf bestimmte Vorgaben festlegt, könnte man das aber leicht nachrüsten.
Außerdem kann man davon ausgehen, dass sich im Vergleich zur Umgebung, aus der die OVA exportiert wurde, die Netzwerkkonfiguration ändert. Dazu zählt unter anderem der Name des virtuellen Switches. Außerdem bietet Windows erst ab der Version 10 1709 und Server 1709 einen eigenen NAT-Switch, so dass auf älteren Versionen eine NAT-Konfiguration sich nicht ohne Weiteres importieren lässt.
Aus diesem Grund verzichten die Scripts darauf, die Netzwerkeinstellungen aus der .ova-Datei auf die neue virtuelle Maschine zu übernehmen.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- VMDK, VHDX, VDI: Virtuelle Disks konvertieren mit qemu-img für Windows
- VirtualBox-VMs auf andere Hosts migrieren
- VMware vCenter Converter 6.4 Beta: Support für vSphere 8, Microsoft VBS
- Virtuelle Maschinen unter Hyper-V von Generation 1 auf 2 konvertieren
- File-Server mit dem Storage Migration Service auf Server 2019 umziehen
Weitere Links