Se você usa o Xen, usa Storage Devices sob LVM, e acha importante ter um backup das mesmas, você pode utilizar/ adaptar este pequeno script que tira um snapshot e em seguida faz um “tar.gz” de todo o “/” da sua VM, e a guarda em um local para que você possa restaura-lo caso necessário. :-D

#!/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

Trecho do log:

Backup ora_busca iniciado em Fri Mar 28 05:02:53 BRT 2008 com load de 1.31 1.33 1.21
Maquina Virtual ora_busca usa ora_busca como storage device
Logical volume “ora_busca_snap” created
Backup de /dev/mapper/Vol_LVM-ora_busca_snap1 - 16G de 95G usados
Criado /dados/backup/ora_busca-xen.tar.gz com 4.9G
Removendo snapshot ja backupeado ora_busca_snap
Logical volume “ora_busca_snap” successfully removed

8 Responses to “Fazendo backup das suas VM’s do Xen”

  1. Pedro Rodrigues says:

    Bom dia, queria apenas fazer uma observação:
    Penso que seria bom estar explicito para os menos esclarecidos que o backup é feito á custa de snapshots lvm que é uma funcionalidade unica e exclusiva do lvm, ou seja o backup ( snapshot ) é dos dados que estiver no lvm que neste caso é uma máquina virtual. A funcionalidade do script em si não tem nada a ver com XEN.
    Bom blog, com boas dicas, gostei.

    Cumprimentos,
    Pedro Rodrigues

  2. Tiago Cruz says:

    Bom dia Pedro,

    Você tem razão. Ando meio sem paciência de explicar tudo nos mínimos detalhes, mas com certeza, é bom frisar de que isso só vai funcionar se você estiver usando LVM no dom0, e exporta-lo para dentro da VM (domU).

    Lembrando que a prática mais recomendada é justamente essa: Usar LVM no dom0 e __não__ usar LVM no domU, pois além de redundante dificulta a manutenção do mesmo. E, dentro da VM, fazer um setup simples, como uma partição “/” e uma swap e só.

    O lance do script é somente identificar qual é o device correto de cada VM, e automatizar isso para fazer um backup de todas as VM’s (tenho algumas dezenas de servers aqui…. nem todos os devices de LVM estão com o nome sugestivo, ex: /dev/LVM/vm00).

    Mas é isso ae… obrigado pelo seu comentário e elogio, um abraço para você ;)

  3. Tiago Cruz says:

    Último comentário: Para fazer backup de VM’s Windows, você provavelmente precisará do módulo de NTFS rodando no kernel. Segue o link para o Red Hat:

    http://www.linux-ntfs.org/doku.php?id=redhat:rhel5

    Todas as outras distros já devem ter suporte a NTFS, nem que seja Read Only.

  4. Renato Gregio says:

    Olá Thiago,
    Parabéns pelo seu script de backup, muito bom.

    Tenho uma dúvida hoje com relaçao à diferença de ambiente. Tenho hoje 3 hosts xen de virtualização e 16 guests. Os 3 hosts estão em cluster rodando rh 5.1 AP. Tenho um storage que entrega os discos para os hosts e nele crio as partições lvm, entregando cada partição para as maquinas virtuais.

    É possível tirar snapshot das partições neste ambiente salvando assim o ambiente das VMs que tenho?
    Qual a necessidade de backupear a raiz ( / ) se estou tirando snapshot dos guests?

    Att Renato Gregio

  5. Tiago Cruz says:

    Bom dia Renato,

    Posso estar enganado, mas pelo o que me parece, um snapshot de LVM não foi feito para ficar guardado em um archive da vida (fita, disco, ftp…)… eu sempre utilizei o snapshot para facilitar o backup, e não usando o snapshot em si _como_ backup, se é que você me entende.

    Ex: Para fazer um dump do mysql, eu tiro um snapshot do /dados/mysql, monto esse snapshot, faço o backup (tarzão) e depois removo o snapshot.

    Por favor, verifique este link que foi o consultado para a criação do script:
    http://tldp.org/HOWTO/LVM-HOWTO/snapshots_backup.html

    Abraços

  6. Renato Gregio says:

    Olá Thiago,
    faço em um estilo que creio ser similar,,,
    tenho uma partição também em lvm criada com o sistema base e para facilitar o backup eu faço um dd desta partição que já tem o sistema base pre=configurado com todos os aplicativos que eu preciso, direcionando a saida para a partição onde desejo restaurar a maquina virtual.
    Após isto eu restauro meus dados que estão armazenados em fita, gravados pelo robô de backup, de modo que eu só faço a imagem do SO 1 vez e os backups de dados vão de acordo com a política de cada servidor.
    Por sorte ainda não precisei usar com nenhuma máquina crítica (e espero nao ter de usar), porém com uma máquina de testes usei e funcionou muito bem.

  7. Tiago Cruz says:

    Renato,

    O procedimento que você descreveu é o que eu utilizo para fazer a migração de uma máquina real para dentro de uma virtual, chamado de “p2v”:
    http://wiki.xensource.com/xenwiki/XenManualPtoVProcess

    Geralmente eu uso “dd” direto no device e exporto via NetCat para um storage device dentro do Xen… rsrsrsrs… costuma funcionar bem, tirando a parte do LiLo/Grub…. :o)

    Abraços

  8. Tiago Cruz says:

    Somente para constar: Script atualizado
    http://www.everlinux.com/blog/2008/05/12/fazendo-backup-das-suas-vm%e2%80%99s-do-xen-atualizado/

Leave a Reply