Tengo un servidor Ubuntu en el que debe estar ejecutándose una máquina virtual Virtualbox en todo momento. Las máquinas virtuales son administradas por un usuario específico VMAdmin
que no tiene privilegios de administrador. Necesito crear un script init.d para manejar mis máquinas virtuales de virtualbox.
Debería:
- inicie la VM cada vez que arranque el sistema host;
- guardar el estado del sistema invitado cada vez que se apaga el host;
- Proporciona comandos para iniciar, apagar, restablecer y realizar copias de seguridad de la máquina virtual.
Respuesta1
El siguiente script se encarga de todo lo anterior:
#! /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
Dígale al script que sea el primero en cerrarse y el último en iniciarse:
sudo update-rc.d vbox defaults 99 01
Para agregar una tarea de respaldo a crontab, ejecute:
sudo crontab -e
Y agregue una línea como:
* 3 * * 5 service vbox backup
Que ejecutará una copia de seguridad semanal los viernes a las 3 a.m. Para obtener más información sobre la creación de una tarea crontab, consulte: http://www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/
Pregunta relacionada:¿Secuencia de comandos Bash para esperar a que se apague la VM de Virtualbox?