Eu tenho um servidor Ubuntu no qual uma máquina virtual Virtualbox precisa estar em execução o tempo todo. As VMs são administradas por um usuário específico VMAdmin
que não possui privilégios de administrador. Preciso criar um script init.d para lidar com minhas VMs de caixa virtual.
Deveria:
- inicie a VM sempre que o sistema host inicializar;
- salve o estado do sistema convidado sempre que o host for desligado;
- forneça comandos para iniciar, desligar, redefinir e fazer backup da VM.
Responder1
O script a seguir cuida de todos os itens acima:
#! /bin/sh
# /etc/init.d/vbox
#Edit these variables!
VMUSER=VMAdmin
VMNAME="cdb62186-7c30-4c25-a0b0-e4a32cfb0504"
BASEFOLDER=/home/VMAdmin/path/to/backups/
case "$1" in
start)
echo "Starting VirtualBox VM..."
sudo -H -u $VMUSER VBoxManage startvm "$VMNAME" --type headless
;;
reset)
echo "Resetting VirtualBox VM..."
sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" reset
;;
stop)
echo "Saving state of Virtualbox VM..."
sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" savestate
;;
shutdown)
echo "Shutting down Virtualbox VM..."
sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" acpipowerbutton
;;
status)
sudo -H -u $VMUSER VBoxManage list vms -l | grep -e ^"$VMNAME": -e ^State | sed s/\ \ //g | cut -d: -f2-
;;
backup)
echo ""
sudo -H -u $VMUSER VBoxManage controlvm "$VMNAME" acpipowerbutton
echo "Waiting for VM "$VMNAME" to poweroff..."
until $(sudo -H -u $VMUSER VBoxManage showvminfo --machinereadable "$VMNAME" | grep -q ^VMState=.poweroff.)
do
sleep 1
done
FILENAME=$(date +"%Y_%m_%d-%T")
echo "Backing up Virtualbox VM to '$BASEFOLDER$FILENAME'..."
sudo -H -u $VMUSER VBoxManage clonevm "$VMNAME" --options keepallmacs --name $FILENAME --basefolder $BASEFOLDER
echo "Restarting VirtualBox VM..."
sudo -H -u $VMUSER VBoxManage startvm "$VMNAME" --type headless
echo ""
;;
*)
echo "Usage: sudo service vbox {start|stop|status|shutdown|reset|backup}"
exit 1
;;
esac
exit 0
Diga ao script para ser o primeiro a desligar e o último a inicializar:
sudo update-rc.d vbox defaults 99 01
Para adicionar tarefa de backup ao crontab, execute:
sudo crontab -e
E adicione uma linha como:
* 3 * * 5 service vbox backup
Que executará um backup semanal às sextas-feiras às 3h. Para obter mais informações sobre como criar uma tarefa crontab, consulte: http://www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/
Pergunta relacionada:Script Bash para aguardar o desligamento da VM do Virtualbox?