Starten Sie die Headless-VM von VirtualBox beim Booten

Starten Sie die Headless-VM von VirtualBox beim Booten

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> defaultsund los geht‘s.

Antwort2

Ich vermute, dass Sie mit einem anderen Konto als root angemeldet sind, wenn Sie die VMs manuell starten, während cronals 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

verwandte Informationen