Wie stellt man sicher, dass eine VM ordnungsgemäß heruntergefahren wird?

Wie stellt man sicher, dass eine VM ordnungsgemäß heruntergefahren wird?

Auf meinem Heimserver laufen mehrere andere Server über VirtualBox in VMs.

Insbesondere habe ich einen Webserver, der aus irgendeinem Grund, wenn er nicht richtig heruntergefahren wird, nicht automatisch im Grub-Menü ausgewählt wird. Das bedeutet, dass er hängen bleibt, bis ich ihn auf dem Server manuell zurücksetze.

Wie kann ich sicherstellen, dass meine VM ordnungsgemäß heruntergefahren wird, wenn mein Server heruntergefahren wird?

Zusätzliche Informationen: Der „Server“ ist eigentlich ein alter Laptop, auf dem Ubuntu Desktop 11.04 läuft und der nicht Headless ist (er führt auch das Media Center aus).

Antwort1

Mit dem Befehl können Sie VBoxManageIhre virtuellen Maschinen über die Befehlszeile steuern. Auf diese Weise können Sie ein Skript erstellen, das Ihre VM vor dem Herunterfahren herunterfahren kann.

Sie könnten ein sehr einfaches Skript ausführen, um die VM und den Host herunterzufahren ...

#!/bin/bash
# poff.sh - poweroff the vm, then the host...

VBoxManage controlvm VMNAME acpipowerbutton && sudo shutdown -P 1

Oder Sie können dieselben Befehle als Alias ​​verwenden, der zu Ihrer .bashrc-Datei hinzugefügt wird …

alias poff='VBoxManage controlvm VMNAME acpipowerbutton && sudo shutdown -P 1' # poweroff the vm, then the host...

Dies sind sehr einfache Beispiele, die erweitert werden können, um Ihren genauen Anforderungen zu entsprechen. Sie müssen möglicherweise auch geändert werden, damit sie mit Ihrer Betriebssystemkonfiguration ordnungsgemäß funktionieren.

Antwort2

Ich habe dies mit qemu gemacht, das auf Debian läuft und eine Windows Server 2003-VM hostet. Ich habe „Emergency Management Services“ auf der Win2k3-VM aktiviert. Dadurch erhalten Sie die „Special Administration Console“ auf dem seriellen Port. Mit qemu können Sie einen virtuellen seriellen Port mit einem „Telnet“-Port verbinden, also habe ich ihm eine Localhost-Adresse zugewiesen. Mit dem SAC können Sie das System sauber herunterfahren, indem Sie einen Befehl über den seriellen Port ausgeben. Da es sich um so etwas wie eine „Notfall-Hintertür“ handelt, ist es in der Regel sehr zuverlässig, unabhängig davon, was sonst noch in der VM vor sich geht.

Ich habe dann ein kurzes expectSkript erstellt, um mich beim seriell basierten SAC „anzumelden“ und den Shutdown-Befehl auszugeben. Dies wurde in ein weiteres Skript eingebettet, das dieses expectSkript aufruft und 2 Minuten wartet, bis der QEMU-Prozess beendet wird. Wenn der Prozess nicht beendet wird, wird er zwangsweise beendet. Indem Linux so eingestellt wird, dass dieses Skript beim Herunterfahren aufgerufen wird, wird sichergestellt, dass die VM möglichst immer sauber heruntergefahren wird.

Möglicherweise können Sie diese Methode an Ihre Situation anpassen.

Wenn Sie eine Linux-VM haben, können Sie einfach ein kleines Skript auf Ihrem Ubuntu-System erstellen, das sich per SSH bei der VM anmeldet und ein Skript aufruft, das das System ordnungsgemäß herunterfährt.

verwandte Informationen