VMWare – Fehler: virtuellen Maschinen starten/stoppen nicht automatisch

In VMware ESXi 5.0 update 1 (5.0.0, 623869) ist laut VMWare ein Fehler aufgetreten, durch den die VMs nicht mehr sauber gestoppt werden, wenn der Host herunterfährt. Fährt der Host wieder hoch, werden die VMs genauso nicht gestartet.

Das Problem lässt sich durch einen Workaround leicht lösen. Grundlegendste Linuxkenntnisse sind von Vorteil, aber nicht zwingend nötig.

1. Den SSH-Zugang für den ESXi Host aktivieren.

VMWare vSphere Client - SSH EinschaltenUm den SSH-Zugang zu aktivieren muss sich einmalig mit dem vSphere Client zum Host verbunden werden und dann folgende Schritte ausgeführt werden (wie auf dem Bild zu sehen):

  1.  Den Tab Konfiguration des Hosts auswählen.
  2. Das Sicherheitsprofil aufrufen.
  3. Die Eigenschaften der Dienste aufrufen.
  4. SSH in der Liste suchen und auswählen.
  5. Die Optionen für SSH aufrufen.
  6. Den Dienst Starten.
  7. Optional: Wer SSH immer aktiviert haben will, kann Punkt 2 „Mit dem Host starten und beenden“ auswählen.
  8. Das Menü kann wieder verlassen werden.

 

2. Mit dem Server via SSH verbinden

VMWare ESXi - SSH Login ExampleMittels eines SSH-Clients wie z.B. PuTTY zu dem Server verbinden. Die Logindaten sind die selben, wie unter dem vSphere Client.

 3. Die VMs beim Hochfahren des Hosts mit einschalten

Mittels eines Texteditors muss die Datei /etc/rc.local geöffnet werden und der unten stehende Code hinzugefügt werden. Hier verwende ich vi.
Alle Befehle in der Datei rc.local werden bei einem Start des Servers ausgeführt. Die VMs werden durch den Aufruf dieser Datei dann gestartet.

vi /etc/rc.local

Drückt „i“ für den „Insert-Mode“ um Text einfügen zu können. Mit den Pfeiltasten kann in dem Textdokument navigiert werden.

Am Ende der  Datei muss folgender Code eingefügt werden, um alle VMs beim Hochfahren des Servers mit einzuschalten:

for i in $(vim-cmd vmsvc/getallvms | cut -f1 -d" " | grep -v Vmid); do
vim-cmd vmsvc/power.on $i; sleep 10
done

Sollen nur bestimmte VMs eingeschaltet werden, müssen die IDs der VMs ermittelt werden und dann eingetragen werden. In dem folgendem Beispiel werden die VMs mit der ID 1 und 3 gestartet.
1. VM-IDs mit folgendem Befehl ermitteln/anzeigen lassen:

vim-cmd vmsvc/getallvms

In der ersten Spalte „Vmid“ stehen die IDs der VMs.

Vmid Name File Guest OS Version Anotation
1 vm-windoof [datastore1] vm-windoof/vm-windoof.vmx windows7Server64Guest vmx-08
2 vm-centos [datastore1] vm-centos/vm-centos.vmx centos64Guest vmx-08
3 vm-ubuntu [datastore1] vm-ubuntu/vm-ubuntu.vmx ubuntu64Guest vmx-08

2. Der Code für die Datei /etc/rc.local

START_VMs="1 3"
for i in $START_VMs; do
vim-cmd vmsvc/power.on $i; sleep 10
done

In der Variable „START_VMs“ stehen, durch Leerzeichen getrennt, die VMs, die gestartet werden sollen.

Um die Datei zu verlassen muss einmal „Esc“ gedrückt werden. Dadurch wird der Texteditor vi zurück in den Befehlsmodus versetzt.

  • Mit dem Befehl „:x“ kann die Datei gespeichert und geschlossen werden.
  • Mit dem Befehl „:q“ wird die Datei ohne Speichern geschlossen (änderungen gehen verloren).

4. Die VMs beim Herunterfahren sauber ausschalten

Dazu muss eine neue Datei angelegt werde. Diese Datei muss auf dem gleichem Volumen liegen, auf dem auch die VMs liegen, da es sonst bei jeden Reboot gelöscht wird.

VMWare vSphere Client - Name des DatenspeichersGeht dazu in den Ordner /vmfs/volumes/datastore1. Der letzte Teil „datastore1“ kann abweichen. Ihr könnt den Namen im vSphere Client unter dem Reiter „Konfiguration“ im Menüpunkt Speicher auslesen.

Wechselt in den entsprechenden Ordner:

cd /vmfs/volumes/datastore1

Öffnet eine neue Datei:

vi shutdown.clients.sh

Fügt folgenden Code ein, wenn ihr alle VMs herunterfahren wollt:

#!/bin/ash
for i in $(vim-cmd vmsvc/getallvms | cut -f1 -d" " | grep -v Vmid); do
vim-cmd vmsvc/power.shutdown $i; sleep 10
done

Fügt folgenden Code ein, wenn ihr nur bestimmte VMs herunterfahren wollt (was wohl eher unsinng erscheint):

#!/bin/ash
STOP_VMs="1 3"
for i in $STOP_VMs; do
vim-cmd vmsvc/power.shutdown $i; sleep 10
done

In der Variable „STOP_VMs“ stehen, mit Leerzeichen getrennt, die IDs der VMs die heruntergefahren werden sollen. Wie ihr die IDs ermittelt ist weiter oben schon beschrieben.

Danach kann die Datei mit „Esc“ und „:x“ gespeichert und geschlossen werden.

Die Datei benötigt Ausführungsrechte, um direkt von der Shell aufgerufen werden zu können:

chmod +x shutdown.clients.sh

Damit die Datei bei einem Shutdown oder Reboot ausgeführt wird, muss sie noch in der entsprechenden Datei angegeben werden.
Editiert dazu die Datei /etc/inittab:

vi /etc/inittab

Folgende Zeilen müsst ihr einfügen (achtet darauf, dass der Pfad korrekt ist):

::restart:/vmfs/volumes/datastore1/shutdown.clients.sh
::shutdown:/vmfs/volumes/datastore1/shutdown.clients.sh

Meine Datei sieht danach wie folgt aus:

[...]
tty2::respawn:-/sbin/initterm.sh tty2 /sbin/dcuiweasel
::restart:/vmfs/volumes/datastore1/shutdown.clients.sh
::restart:/sbin/init
::shutdown:/vmfs/volumes/datastore1/shutdown.clients.sh
::shutdown:/usr/lib/vmware/vmksummary/log-bootstop.sh stop
::shutdown:/sbin/shutdown.sh

Danach könnt ihr die Datei mit „Esc“ und „:x“ schließen.

Die Shell verlasst ihr mit dem Befehl „exit“ (sollte das unklar sein).

4. Testen

Ihr könnt den Server jetzt nach belieben 2-3 mal Herunterfahren und wieder einschalten. Die VMs sollten wie gewünscht starten und stoppen.

Wenn ihr fragen oder Probleme habt, könnt ihr gerne über die Kommentarfunktion nachfragen.

2 Gedanken zu „VMWare – Fehler: virtuellen Maschinen starten/stoppen nicht automatisch

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Time limit is exhausted. Please reload the CAPTCHA.