Em relação às máquinas virtuais, continuo adepto da estratégia: instalação um cliente do “Bacula” em cada uma das máquinas virtuais – ou seja: trate elas como se fossem máquinas dedicadas (físicas).
A questão aqui, novamente, reside no “backup” dos arquivos que correspondem às máquinas virtuais em si (para fins de disaster recovery), que aparentemente não podem ser diretamente “backupeados” com a máquina virtual em execução.
Assim, pesquisamos alguns métodos utilizados:
1. Pausar a Máquina Virtual Xen para a cópia dos arquivos:
A desvantagem desse processo é óbvia: a indisponibilidade temporária da máquina virtual. Se isso não é um problema, estes seriam os procedimentos:
1. Pausar o “domU” utilizando o comando “xm pause” (script RunBeforeJob do “Bacula”)
2. Sincronize o “domU” utilizando o comando “xm sysrq” (num segundo script “RunBeforeJob”)
3. Faça o “backup” das configurações do Xen e do arquivo correspondentes à máquina virtual.
4. Despause o “domU” através do comando “xm unpause”
Este “backup completo” da máquina virtual pode ser executado numa peridiocidade menor (Ex.: semanalmente ou mensalmente).
Fonte: [http://lists.xensource.com/archives/html/xen-users/2006-10/msg00476.html]
2. Clone da Máquina Virtual (recomendado)
Elabore um script para copiar cada uma das máquinas para um determinado ponto de montagem ou disco com espaço suficiente:
xe vm-export vm="Heitor Server" filename=/var/backup/heitor.xva
O Bacula deverá estar configurado para realizar backup da pasta /var/backup
Uma maneira mais avançada e que não requer espaço intermediário em disco seria a utilização de FIFO, explicada no final deste capítulo.
Para restaurar, localize o repositório na qual você deseja restaurar:
run xe sr-list
… E localize o UUID storage onde deseja restaurar e execute o vm-import:
xe vm-import filename=/mnt/backup/thisserver_09_25_2010.xva sr-uuid=28f25ea1-4c49-5346-4a86-d37560bd07b7
3. Criar um Snapshot LVM:
Parece se tratar do método mais popular entre os administradores de Xen. O LVM é utilizado como uma camada intermediária entre a máquina virtual e o disco rígido, permitindo a cópia integral da VM com a mesma em produção.
Para isso, vários scripts estão na Internet (que devem ser chamados pelo “Bacula” com um RunBeforeJob). Gostei bastante desse aqui:
#!/bin/bash # Backup das VM's do Xen # Tiago Cruz - tiagocruz@everlinux.com # Mar/2008 export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
VMS=`xm list | awk '{print $1}' | egrep -v '(Name|Domain-0)'` BACK="_snap" LOG=/var/log/backup # Particao root, geralmente a segunda eh swap ROOT="1"
[ ! -d "/mnt/back" ] && mkdir -p /mnt/back [ ! -d "/dados/backup" ] && mkdir -p /dados/backup
for i in $VMS; do echo "=================================================================" >> $LOG echo "Backup $i iniciado em `date` com load de `cat /proc/loadavg`" >> $LOG DEVICE=`grep disk /etc/xen/$i | awk -F "Vol_LVM" '{print $2}' | cut -d / -f 2 | cut -d , -f 1` echo "Maquina Virtual $i usa $DEVICE como storage device" >> $LOG
lvcreate --snapshot -L 15G -n $i$BACK /dev/Vol_LVM/$DEVICE >> $LOG [ $? -ne 0 ] && echo "Erro $i: criando LVM $i$BACK" >> $LOG kpartx -a /dev/mapper/Vol_LVM-$i$BACK >> $LOG mount /dev/mapper/Vol_LVM-$i$BACK$ROOT /mnt/back/ >> $LOG [ $? -ne 0 ] && echo "Erro $i: montando $i$BACK$ROOT" >> $LOG SIZE1=`df -hP /mnt/back/ | awk '{print $3}' | grep -v Used` SIZE2=`df -hP /mnt/back/ | awk '{print $2}' | grep -v Size` echo "Backup de /dev/mapper/Vol_LVM-$i$BACK$ROOT - $SIZE1 de $SIZE2 usados" >> $LOG tar zcf /dados/backup/$i-xen.tar.gz /mnt/back >> $LOG [ $? -ne 0 ] && echo "Erro $i: criando /dados/backup/$i.tar.gz" >> $LOG SIZE3=`ls -lh /dados/backup/$i-xen.tar.gz | awk '{print $5}'` echo "Criado /dados/backup/$i-xen.tar.gz com $SIZE3" >> $LOG umount /mnt/back/ >> $LOG [ $? -ne 0 ] && echo "Erro $i: desmontando $i$BACK" >> $LOG kpartx -d /dev/mapper/Vol_LVM-$i$BACK >> $LOG [ $? -ne 0 ] && echo "Erro $i: desmapeando $i$BACK" >> $LOG echo "Removendo snapshot ja backupeado $i$BACK" >> $LOG lvremove /dev/Vol_LVM/$i$BACK -f >> $LOG done
echo "Backup finalizado em `date` com load de `cat /proc/loadavg`" >> $LOG echo "=================================================================" >> $LOG echo "=================================================================" >> $LOG
Fonte: [http://everlinux.com/blog/2008/04/03/fazendo-backup-das-suas-vms-do-xen]
Mais uma coisa: você deverá incluir a pasta [/dados/backup/] no “FileSet” do “Bacula”, para fazer a cópia dos arquivos gerados (que são os snapshots da LVM comprimidos em .tar.gz).
Outra coisa: inclua também, no “FileSet” correspondente, os arquivos de configuração do “Xen”.
Última coisa: opcionalmente, crie um “RunAfterJob” para limpar o [/dados/backup], dessa forma desocupando o espaço utilizado pelas LVM.
Fonte: [http://wiki.sepsoftware.com/wiki/index.php/Online_backup_of_virtual_XEN_machines]
Abracetas,
Heitor Faria
Disponível em: Português