Inicie VirtualBox Headless VM al arrancar

Inicie VirtualBox Headless VM al arrancar

Estoy ejecutando dos máquinas virtuales VirtualBox sin cabeza en un host Ubuntu 12.04. Me gustaría que estas máquinas virtuales se inicien automáticamente cuando se inicie el sistema.

Tengo dos entradas de crontab configuradas de esta manera (bajo el usuario propietario de las máquinas virtuales):

@reboot /usr/bin/vboxheadless -startvm io
@reboot /usr/bin/vboxheadless -startvm pbx

Pero parece que eso no funciona. Si ejecuto el comando directamente desde la terminal, las máquinas se inician sin problemas, pero parece que no puedo iniciarlas una vez que se inicia el sistema. Estoy pensando que tal vez el crontab se esté ejecutando antes de que se cargue el programa/biblioteca de VirtualBox.

¿Cómo inicio estas máquinas virtuales automáticamente?

Respuesta1

Esto es lo que uso. Inicia las máquinas virtuales al arrancar y guarda su estado al apagar/reiniciar

#!/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

Simplemente guárdelo en /etc/init.d. Llamé al mío vbox. Corre update-rc.d <script name> defaultsy deberías estar listo para comenzar.

Respuesta2

Sospecho que has iniciado sesión con una cuenta distinta a la raíz cuando inicias las máquinas virtuales manualmente, mientras cronlas ejecutas como raíz y, por lo tanto, no conoces tus máquinas virtuales. Puedes comprobarlo ejecutando el comando

sudo /usr/bin/vboxheadless -startvm io

Si recibe un error

Invalid machine name or UUID!

la VM no está registrada con la cuenta raíz. En ese caso, cree un script de shell para ejecutar los comandos en su cuenta y programe ese script con cron:

#!/bin/sh

USERNAME=...

su -c "/usr/bin/vboxheadless -startvm io" - $USERNAME
su -c "/usr/bin/vboxheadless -startvm pbx" - $USERNAME

Respuesta3

Una opción secundaria también si tu visualización de hardware de soporte MB/CPU es ProxMox. Es una instalación independiente de Linux, KVM y una interfaz web. tiene un rendimiento mucho mejor que virtualbox, ya que se ejecuta a nivel de kernel y, en lugar de unidades "virtuales" como las que usa virtualbox, puede conectar un invitado bajo KVM a una unidad física que usa MUCHO menos disco Io.

Comprueba rápidamente si tu sistema admite visualización de hardware:

egrep -c '(vmx|svm)' /proc/cpuinfo

información relacionada