Inicie a VM sem cabeça do VirtualBox na inicialização

Inicie a VM sem cabeça do VirtualBox na inicialização

Estou executando duas VMs sem cabeça do VirtualBox em um host Ubuntu 12.04. Gostaria que essas VMs iniciassem automaticamente quando o sistema inicializasse.

Eu tenho duas entradas crontab definidas assim (sob o usuário que possui as VMs):

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

Mas parece que isso não resolve. Se eu executar o comando diretamente do terminal, as máquinas inicializarão sem problemas, mas não consigo inicializá-las assim que o sistema for iniciado. Estou pensando que talvez o crontab esteja em execução antes do carregamento do programa/biblioteca do VirtualBox.

Como inicio essas VMs automaticamente?

Responder1

Isso é o que eu uso. Ele inicia as VMs na inicialização e salva seu estado no desligamento/reinicialização

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

Basta salvá-lo em /etc/init.d. Chamei meu vbox. Corra update-rc.d <script name> defaultse você estará pronto para ir.

Responder2

Suspeito que você esteja logado com uma conta diferente de root ao iniciar as VMs manualmente, enquanto cronexecuta como root e, portanto, não conhece suas VMs. Você pode verificar isso executando o comando

sudo /usr/bin/vboxheadless -startvm io

Se você receber um erro

Invalid machine name or UUID!

a VM não está registrada na conta root. Nesse caso, crie um script de shell para executar os comandos em sua conta e agende esse script com cron:

#!/bin/sh

USERNAME=...

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

Responder3

Uma opção secundária também se a visualização de hardware de suporte de MB/CPU for ProxMox. É uma instalação independente de Linux, KVM e uma interface web. ele tem um desempenho muito melhor em relação ao virtualbox, pois é executado no nível do kernel e, em vez de unidades "virtuais" apenas como o virtualbox usa, você pode realmente conectar um convidado no KVM a uma unidade física que usa MUITO menos Io de disco.

Verifique rapidamente se o seu sistema suporta visualização de hardware:

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

informação relacionada