Tags: Kompatibilität, Hyper-V, PowerShell
Bevor man eine virtuelle Maschine auf einen anderen Host migriert, sollte man dessen Eignung als neues Zuhause für die VM überprüfen. Diese Aufgabe übernimmt das PowerShell-Cmdlet Compare-VM, das die Kompatibilität unter verschiedenen Aspekten untersucht.
Innerhalb eines Clusters bilden die Hard- und Software meistens eine homogene Umgebung, so dass eine Live Migration dort kaum an großen Unterschieden zwischen den Knoten scheitern dürfte. Anders sieht es bei einer Shared Nothing Live Migration aus, die Windows Server seit der Version 2012 unterstützt. Hier wäre es denkbar, dass sich Quell- und Ziel-Host zum Beispiel in der Version von Hyper-V oder der Prozessorarchitektur unterscheiden.
Zahlreiche Kompatibilitätshürden
Läuft etwa auf dem Zielrechner eine ältere Ausführung von Hyper-V, dann kommt diese wahrscheinlich nicht mit der der virtuellen Hardware der VM zurecht. Microsoft hat nämlich in der Vergangenheit mit dem Update des Hypervisors auch automatisch die VMs aktualisiert. Unter Windows Server 2016 sieht der Hersteller davon ab, weil Server 2012 (R2) das neue binäre Format der Konfigurationsdateien nicht lesen kann.
Eine weitere Hürde sind virtuelle Maschinen der Generation 2, die erst mit Server 2012 R2 eingeführt wurden und auf einer älteren Version von Hyper-V nicht laufen. Eine Lösung für dieses Problem bietet Microsoft mit den Bordmitteln nicht an, und das Cmdlet Convert-VMGeneration auf MSDN sieht nur eine Umwandlung von Generation 1 auf 2 vor.
Die meisten dieser Hindernisse kann man mit Compare-VM vorab entdecken und in vielen Fällen auch beseitigen. Das trifft etwa auch auf abweichende Konfigurationen von Virtual Switches zu, so dass VMs am Ziel-Host nicht die von ihnen benötigten Netzwerke vorfinden.
Befehle zur Prüfung einer Live Migration
In der einfachsten Form ruft man das Cmdlet nur mit dem Namen der (lokalen) VM und des Ziel-Hosts auf:
Compare-VM -Name <Name der VM> -DestinationHost <Ziel-Host>
Möchte man herausfinden, ob sich eine VM von einem entfernten Server auf die lokale Maschine umziehen lässt, dann könnte der Befehl so aussehen:
Compare-VM -ComputerName <Quell-Host> -Name <Name der VM> -DestinationHost <lokaler-Host>
Das Cmdlet orientiert sich bei seinen Optionen weitgehend an Move-VM, mit dem man virtuelle Maschinen migriert. So bietet es etwa zusätzlich die Möglichkeit, Pfade zu Verzeichnissen anzugeben, an denen VHDs oder VMs abgelegt werden sollen (VirtualMachinePath, VhdDestinationPath, DestinationStoragePath).
Macht man von dieser Möglichkeit Gebrauch, dann kann man zusätzlich die Kompatibilität mit dem Zielspeicher prüfen lassen, indem man Compare-VM den Schalter -IncludeStorage mitgibt.
Import und Kopieren statt Migration
Schließlich lässt sich Compare-VM auch einsetzen, um andere Operationen für den Umzug von VMs vorzubereiten. Dazu zählen das Kopieren und das Importieren.
In diesem Fall ruft man das Cmdlet mit einem anderen Parameter-Set auf, im Fall des Imports handelt es sich dabei um eine Kombination aus Register und Path:
Compare-VM -Register -Path <\\Server\Pfad\ID-der-VM.xml>
Will man eine VM kopieren, dann ersetzt man im obigen Befehl Register durch Copy.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- Virtuelle Maschine vollständig mit PowerShell erstellen (am Beispiel von Azure Stack HCI)
- Microsoft gibt PowerShell 7 frei: die wichtigsten Neuerungen im Überblick
- PowerShell 7 Release Candidate inklusive Support freigegeben
- PowerShell-Remoting, Hyper-V Manager: Fehler wegen Netzwerkverbindungstyp "Öffentlich"
- Nachfolger für Windows PowerShell: PowerShell 7 bringt Log-Forwarding, Credential-Store, Long Term Servicing
Weitere Links