Eine bereits vorhandene VM soll innerhalb eines einzelnen ESXi-Servers in einen anderen Datastore umziehen. Da der ESXi ohne zugehöriges vCenter betrieben wird ist hier Handarbeit angesagt.

Ein denkbarer Lösungsansatz wäre sich via SSH zu verbinden und die Daten zwischen den Datastores via cp zu kopieren (bzw. mit mv zu verschieben). Der alternative Weg über die vmdkfstools spart jedoch reichlich Zeit. Darüber hinaus kann die Zielplatte via thin-provisioning bereit gestellt werden.

Beim Schreiben dieser kurzen Anleitung habe ich VMware ESXi 6.7.0 verwendet. Dies funktioniert sinngemäß aber genauso auf älteren Versionen.

Prolog

Heute also mal Virtualisierung: Ein Problem wie es in kleineren VMware ESXi Umgebungen immer wieder mal vorkommt. Aber auch in größeren Installationen kann es hilfreich sein zu wissen wie man elegant und effizient eine VM an der Konsole von einem in einen anderen Datastore umzieht.

Notwendige Arbeitsschritte

  1. VM anhalten – egal ob über Betriebssystem in VM oder dem virtuellen Ausschalteknopf
  2. ggf. Snapshots zusammen fassen. Wenn man diese eh nicht mehr braucht spart das einfach nur Zeit diese bereits jetzt zusammen zu fassen (rechte Maustaste auf VM/Snapshots/Snapshots verwalten und hier entfernen)
  3. Registrierung der VM aufheben (rechte Maustaste auf VM/Registrierung aufheben)
  4. Zugriff via SSH ermöglichen (Host/Verwalten/Dienste/SSH starten)
  1. Login via ssh
  2. Neues Verzeichnis für die Ziel-VM anlegen: mkdir "/vmfs/volumes/<Ziel Datastore>/Some VM"
  3. Alle Platten wie folgt übernehmen: vmkfstools -i "/vmfs/volumes/<Quell Datastore>/<VM Name>/<Platte>.vmdk" -d thin "/vmfs/volumes/<Ziel Datastore>/<VM Name>/<Platte>
    VM.vmdk"
  4. Alle übrigen Dateien außer den vmdk-Daten kopieren: find "/vmfs/volumes/<Quell Datastore>/<VM Name>" -maxdepth 1 -type f
    -print | grep -v ".vmdk" | while read file; do cp "$file"
    "/vmfs/volumes/<Ziel Datastore>/<Ziel VM>"; done
  5. Snapshots während der Vorbereitung nicht aufgelöst? Dann sollten jetzt die Snapshot vmdk Delta-Daten kopiert werden: find "/vmfs/volumes/<Quell Datastore>/<VM Name>" -maxdepth 1 -type f
    -print | grep
    [0123456789][0123456789][0123456789][0123456789][0123456789][0123456789]
    | grep ".vmdk" | while read file; do cp "$file"
    "/vmfs/volumes/<Ziel Datastore>/<VM Name>"; done
    Aber Achtung: Dies kann durchaus dauern. Das kommt auf die Anzahl der Snapshots und deren Größe drauf an 😉
  1. VM registrieren. Sofern noch via SSH verbunden geht dies so: vim-cmd solo/registervm "/vmfs/volumes/<Ziel Datastore>/<VM Name>/<VM Name>.vmx"
    Ansonsten geht dies auch über die UI: Speicher/<Ziel Datastore>/Datenspeicherbrowser und hier die passende vmx-Datei suchen, rechte Maustaste/VM registrieren
  2. VM starten (Die Frage nach kopiert oder verschoben sinngemäß richtig beantworten)
  3. Testen
  4. Falls alles ok: Alte VM löschen, z.B. via Datenspeicherbrowser oder via SSH mit rm -rf "/vmfs/volumes/<Quell Datastore>/<VM Name>"
  5. Ggf. den Zugriff via SSH wieder deaktivieren.