
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> defaults
y 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 cron
las 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