Script de control init.d para VM virtualbox

Script de control init.d para VM virtualbox

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 VMAdminque 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?

información relacionada