
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> defaults
e você estará pronto para ir.
Responder2
Suspeito que você esteja logado com uma conta diferente de root ao iniciar as VMs manualmente, enquanto cron
executa 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