Die Migration von Maschinen per “Shared Nothing Live Migration” oder “Storage Migration” per PowerShell
Diesen Artikel könnten wir eigentlich auch unter “wie verlängere ich das Leben meiner Maus, weil ich weniger klicke” führen :) Ich musste heute morgen einige VMs von Host A auf Host B verschieben, danach mussten die Daten der VMs von einer SMB 3.0-Freigabe wieder auf das lokale System umgezogen werden. All dies hätte ich auch manuell per GUI machen können, da ich allerdings immer mehr Freund von kleinen, aber effizienten PowerShell-Befehlen bin, habe ich die Sache kurz per PowerShell gelöst. Den ersten Teil dieses kleinen Beitrags habe ich ja schon bei Facebook gepostet, da sich die Sache allerdings noch weiter fortgesetzt hat hier das Ganze in Blog-Form :)
Zum Verständnis der Befehle und der Nutzung hier eine kurze Erklärung der Situation:
Wir haben einen Server, der zu Wartungszwecken heruntergefahren werden musste, da der RAM erhöht wurde. Das System ist der einzige Host, der nicht im Failover Cluster-Verbund läuft. Ich habe im ersten Schritt alle Daten der VMs auf eine Freigabe verschoben. Danach habe ich eine Livemigration der VM durchgeführt auf einen anderen Knoten, der die VMs temporär betreibt. Nach dem Wartungsvorgang habe ich die VMs wieder zurück auf den eigentlichen Host verschoben. Nachdem die VMs wieder dort liefen, habe ich die Daten der VMs dann im letzten Schritt zurück von der Freigabe auf die lokalen Festplatten verschoben. Die Eingabe erfolgt jeweils dort, wo die VMs gerade läuft (nicht dort, wo die Daten liegen).
Die Storage-Migration auf die SMB 3.0-Freigabe
$VMName = Read-Host "Geben Sie den Namen der VM ein"
Move-VMStorage “$VMName” –DestinationStoragePath "\\Server\Freigabe\$VMName\"
Die Livemigration der VMs auf einen anderen Knoten
Move-VM "VM-Name" "Ziel-Host"
Die Livemigration zurück auf den ursprünglichen Knoten
Move-VM "VM-Name" "Ziel-Host"
Die erneute Storage-Migration der Daten von der SMB 3.0-Freigabe auf die lokalen Festplatten
$VMName = Read-Host "Geben Sie den Namen der VM ein"
Move-VMStorage “$VMName” –DestinationStoragePath "D:\Virtuelle Maschinen\$VMName\"
Wenn man die Befehle noch weiter ausarbeiten würde, könnte man auch mit einem Befehl alle VMs auf einem Host gleichzeitig verschieben. Die Verschiebung aller VMs gemeinsam würde man durch den folgenden Befehl erreichen:
Get-VM | Move-VM -DestinationHost "Ziel-Host"
Um alle VMs gleichzeitig in jeweils einen eigenen Ordner zu verschieben habe ich aktuell noch keinen Befehl, ich vermute man muss die Namen der VMs auslesen und dann jeweils einen eigenen Befehl starten, in dem der jeweilige Name dann auch als Zielpfad angelegt wird. Falls hier jemand eine Lösung hat wäre es super, wenn er diese in den Kommentaren posten würde. Eine Verschiebung aller VMs in einen einzelnen Ordner lässt sich wie folgt realisieren:
Get-VM | Move-VMStorage –DestinationStoragePath "D:\Virtuelle Maschinen\"
Viel Spaß beim Verschieben