Fazendo backup das suas VM’s do Xen
Posted by: Tiago Cruz in Linux, Scripts, Virtualização, Xen
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.
#!/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

Entries (RSS)
April 4th, 2008 at 5:58 am
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
April 4th, 2008 at 12:11 pm
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ê
April 4th, 2008 at 5:16 pm
Ú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.
April 7th, 2008 at 11:08 am
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
April 7th, 2008 at 12:12 pm
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, http://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
April 7th, 2008 at 1:34 pm
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.
April 7th, 2008 at 3:39 pm
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….
)
Abraços
May 12th, 2008 at 4:47 pm
Somente para constar: Script atualizado
http://www.everlinux.com/blog/2008/05/12/fazendo-backup-das-suas-vm%e2%80%99s-do-xen-atualizado/
January 15th, 2010 at 6:25 pm
[...] Para isso, vários scripts estão na Internet (que devem ser chamados pelo “Bacula” com um RunBeforeJob). Gostei bastante desse aqui: [http://everlinux.com/blog/2008/04/03/fazendo-backup-das-suas-vms-do-xen] [...]