Speicher-Migration bei virtuellen Maschinen

14. September 2014

Administratoren stehen des Öfteren vor der Frage, wie sich eine Speicher-Migration von allen virtuellen Maschinen ausführen lässt, die ihre VHDs auf einer bestimmten Festplatte liegen haben. Eine zweite Aufgabenstellung, die sich mit der Powershell gut abwickeln lässt, ist das Ausführen einer Migration des gesamten Speichers, der an einer bestimmten Stelle im Dateisystem des Hyper-V-Hosts liegt.

Wenn viele „ähnliche Aktionen“ auf einem Rutsch auszuführen sind, ist der Einsatz der Powershell in den meisten Fällen ein guter Lösungsansatz. Auch bei der hier gestellten Aufgabe erweist sich dieses Tool als eine gute Wahl.

Der folgende Powershell-Code führt alle VMs auf einem Hyper-V-Host auf, sucht dann nach allen VHDs, die sich in einem bestimmten Dateipfad befinden.

Wird dort eine VHD gefunden, wird sie an einen neuen Ort (also an einen neuen Dateipfad) verschoben. Dieser neue Pfadname wird im Skript angegeben.

$VMstoMove = Get-VM | Get-VMHardDiskDrive |
    where {$_.Path.StartsWith("C:\Path")} |
    Select-Object -ExpandProperty VMName |
    Get-Unique

foreach ($VM in $VMstoMove)
{
    write-host $VM
    $vmobj = get-vm -Name $VM
    $newpath = "C:\ClusterStorage\VMs\" + $VM
    Move-VMStorage -DestinationStoragePath $newpath -VM $vmobj
}

Speichermigration auf dem Hyper-V

Eine zweite Aufgabenstellung, die sich mit der Powershell gut abwickeln lässt, ist das Ausführen einer Migration des gesamten Speichers, der an einer bestimmten Stelle im Dateisystem des Hyper-V-Hosts liegt.

Der Autor stand vor der Herausforderung, den gesamten virtuellen Speicher von einem Speicherort auf dem Hyper-V-Server an einen anderen zu verschieben. Auch hier kann die Powershell ihre Vorteile ausführen. Der zugehörige Code ist etwas geändert im Vergleich zum vorherigen Beispiel.

Anhand dieser beiden Beispiele lässt sich auch sehr schön sehen, wie das „Grundgerüst“ dieser Powershell-Code-Struktur angepasst werden kann. Damit steht dem Administrator eine Blaupause zur Verfügung, die er für ähnliche Aufgabenstellungen heranziehen kann.

$VMstoMove = Get-VM | Get-VMHardDiskDrive |
     where {$_.Path.StartsWith("C:\ClusterStorage\VMs")}

foreach ($VM in $VMstoMove)
{
    write-host $VM.VMName
    $vmobj = get-vm -Name $VM.VMName
    $newpath = "C:\ClusterStorage\StorageSpace_VMs\" + $VM.VMName
    Move-VMStorage -DestinationStoragePath $newpath -VM $vmobj
}

In der ersten Code-Zeile werden alle VHDs gesucht, die an dem angegebenen Speicherort liegen.

Danach wird für jede VHD-Datei die Aktion „Speicher-Migration“ ausgeführt.

Verantwortungsbewusste Administratoren führen derartige Skripte iommer erst in einer Testumgebung aus: Bitte auch diese Powershell-Skripts nicht ungetestet in  einer Produktivumgebung verwenden.

John Savill/rhh

Lesen Sie auch