Olá amigos, tive a necessidade desse script em ambiente linux, então fiz as modificações necessárias.
Lembrando, a dica do Andreisiqueira é muito importante, pois ambientes servidores não vão desligar por acpi.
Segue abaixo meu Script.
-----------------------------------------------------------------------------------------------------------------
#!/bin/bash
# VARIAVEIS DEFINIDAS
VM="xpts" # NOME DA MÁQUINA VIRTUAL
ORIGEM="/home/usuario/VirtualBox VMs" # CAMINHO PADRÃO DAS MÁQUINAS VIRTUAIS
DESTINO="/media/dispositivo/backup" # CAMINHO DOS ARQUIVOS DE BACKUP
# MOSTRA INFORMAÇÃO DE DESLIGAMENTO.
echo ----------------------------
echo Desligando a maquina virtual
echo ----------------------------
# ESTE COMANDO DESLIGA A MÁQUINA VIRTUAL.
VBoxManage controlvm $VM acpipowerbutton
# O COMANDO A SEGUIR AGUARDA O DESLIGAMENTO DA MÁQUINA.
echo "Waiting for machine $VM to poweroff..."
until $(VBoxManage showvminfo --machinereadable $VM | grep -q ^VMState=.poweroff.)
do
sleep 1
done
# MOSTRA INFORMAÇÃO DA COPIA DO BACKUP.
echo -------------------------------------
echo Iniciando Backup.
echo
echo A copia pode demorar alguns minutos.
echo -------------------------------------
# ESTE COMANDO COPIA A MAQUINA VIRTUAL PARA O DIRETORIO DE BACKUP.
rsync -av --progress "$ORIGEM/$VM" $DESTINO
# MOSTRA INFORMAÇÃO DO BACKUP CONCLUÍDO.
echo -----------------
echo Backup Finalizado
echo -----------------
sleep 2
# MOSTRA INFORMAÇÃO DE INICIALIZAÇÃO DA MÁQUINA.
echo -------------------------
echo Ligando a maquina virtual
echo -------------------------
# ESTE COMANDO LIGA A MÁQUINA.
vboxmanage startvm $VM --type headless
until $(VBoxManage showvminfo --machinereadable $VM | grep -q ^VMState=.running.)
do
sleep 2
done
# MOSTRA INFORMAÇÃO DA MAQUINA LIGADA E FINALIZA.
echo -----------------
echo Maquina ligada...
echo -----------------
sleep 2
echo -----------------
echo Processo concluido...
echo -----------------
sleep 3
exit