
Ich betreibe zwei VirtualBox Headless-VMs auf einem Ubuntu 12.04-Host. Ich möchte, dass diese VMs automatisch gestartet werden, wenn das System hochfährt.
Ich habe zwei Crontab-Einträge wie folgt festgelegt (unter dem Benutzer, dem die VMs gehören):
@reboot /usr/bin/vboxheadless -startvm io
@reboot /usr/bin/vboxheadless -startvm pbx
Aber das scheint nicht zu funktionieren. Wenn ich den Befehl direkt vom Terminal aus ausführe, starten die Maschinen problemlos, aber ich kriege sie anscheinend nicht zum Starten, wenn das System erst einmal gestartet ist. Ich denke, vielleicht läuft die Crontab, bevor das VirtualBox-Programm/die VirtualBox-Bibliothek geladen wird.
Wie starte ich diese VMs automatisch?
Antwort1
Das ist, was ich benutze. Es startet die VMs beim Booten und speichert ihren Status beim Herunterfahren/Neustart
#!/bin/bash
### BEGIN INIT INFO
# Provides: vmboot
# Required-Start: vboxdrv
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Stop/Start VMs on System shutdown
### END INIT INFO
VBOXUSER=vboxuser
SU="sudo -H -u $VBOXUSER"
VBOXMANAGE=/usr/bin/VBoxManage
VBOXHEADLESS=/usr/bin/VBoxHeadless
RUNNINGVMS=$($SU $VBOXMANAGE --nologo list runningvms | sed -e 's/^".*".*{\(.*\)}/\1/')
ALLVMS=$($SU $VBOXMANAGE --nologo list vms | sed -e 's/^".*".*{\(.*\)}/\1/')
case $1 in
stop)
if [[ -n $RUNNINGVMS ]]; then
echo "Saving the state of all running VMs..."
for v in $RUNNINGVMS; do
$SU $VBOXMANAGE --nologo controlvm $v savestate
done
fi
;;
start)
for v in $ALLVMS; do
if [[ -n $($SU $VBOXMANAGE --nologo showvminfo $v | grep saved) ]]; then
echo "Restoring VMs..." && $SU $VBOXHEADLESS -s $v & > /dev/null
fi
done
;;
*)
echo "Usage: /etc/init.d/vmboot start | stop"; exit 1
;;
esac
exit 0
Speichern Sie es einfach in /etc/init.d. Ich habe es vbox genannt. Führen Sie es aus update-rc.d <script name> defaults
und los geht‘s.
Antwort2
Ich vermute, dass Sie mit einem anderen Konto als root angemeldet sind, wenn Sie die VMs manuell starten, während cron
als root ausgeführt wird und daher nichts über Ihre VMs weiß. Sie können dies überprüfen, indem Sie den Befehl ausführen
sudo /usr/bin/vboxheadless -startvm io
Wenn Sie eine Fehlermeldung erhalten
Invalid machine name or UUID!
die VM ist nicht mit dem Root-Konto registriert. Erstellen Sie in diesem Fall ein Shell-Skript, um die Befehle unter Ihrem Konto auszuführen, und planen Sie das Skript mit cron
:
#!/bin/sh
USERNAME=...
su -c "/usr/bin/vboxheadless -startvm io" - $USERNAME
su -c "/usr/bin/vboxheadless -startvm pbx" - $USERNAME
Antwort3
Eine zweite Option, wenn Ihr MB/CPU Hardwarevisualisierung unterstützt, ist ProxMox. Dabei handelt es sich um eine eigenständige Installation von Linux, KVM und einer Weboberfläche. Die Leistung ist viel besser als bei Virtualbox, da es auf Kernelebene ausgeführt wird und Sie anstelle von ausschließlich „virtuellen“ Laufwerken, wie sie Virtualbox verwendet, einen Gast unter KVM tatsächlich mit einem physischen Laufwerk verbinden können, was VIEL weniger Festplatten-E/A verwendet.
Schneller Check, ob Ihr System die Hardware-Visualisierung unterstützt:
egrep -c '(vmx|svm)' /proc/cpuinfo