Backup de VMs ligadas do XEN Server

Este documento descreve a criação de Snapshots das máquinas virtuais ligadas do Xen Server e como exportar para um arquivo .xva, que é a extensão "padrão" que o virtualizador Xen usa.

[ Hits: 28.350 ]

Por: Túlio Ramos Barbosa em 24/10/2016


Exportação de Snapshot online das Máquinas Virtuais do Xen Server



Este documento descreve a criação de Snapshots da(s) máquina(s) virtual(is) do Xen Server e como exportar para um arquivo .xva, que é a extensão "padrão" que o virtualizador Xen usa.

Depois de muita dor de cabeça procurando como fazer backup das máquinas virtuais usadas aqui na empresa onde trabalho, consegui chegar numa solução temporária com apenas uma linha de comando para cada VM, mas esse processo teria que ser feito com a máquina DESLIGADA, o que não era nem um pouco viável, pois teria que achar algum espaço de tempo fora do expediente para executar a ação, sem contar o trabalho manual para fazer de cada máquina separadamente.

O cenário de virtualizadores que tenho na empresa é mais ou menos como mostra a imagem do link abaixo, onde são usados dois servidores em produção que hospedam alguns serviços, como DNS, DHCP, Openfire, entre outros:
No decorrer da minha "pesquisa" para achar uma forma de fazer esse backup, achei vários problemas, e o principal deles foi que TODAS as ferramentas que vi eram PAGAS, o que não era possível aqui na empresa por conta do orçamento para a TI ser absurdamente limitado.

Com todas as dificuldades, comecei a pesquisar na internet uma forma de "backupear" as máquinas virtuais que usamos aqui, deu bastante trabalho, porém, mais trabalhoso ainda era precisar reinstalar e reconfigurar um servidor em caso de desastre ou perda total.

Depois de muita procura, cheguei em alguns comandos que geram o snapshot da máquina virtual e depois exporta como um arquivo .xva, mas ainda assim não estava do jeito que eu precisava, pois teria que fazer VM por VM e isso isso ainda consumia muito tempo fazendo manualmente.

    Próxima página

Páginas do artigo
   1. Exportação de Snapshot online das Máquinas Virtuais do Xen Server
   2. Termos essenciais
   3. Importação via linha de comando
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Backup e restore para iniciantes

Clonar HD com o comando pv salvando em .img

Recovery de um desastre total | utilizadores Bacula "backup"

Implantando um Servidor de Backup com Bacula - Debian Squeeze

Backup em fita DAT com multivolume (LTO3)

  
Comentários
[1] Comentário enviado por JJSantos em 25/10/2016 - 00:16h

Vou testar

[2] Comentário enviado por paulomenor em 31/10/2016 - 15:32h


Testei seu código, a única parte que não funcionou foi a parte em que faz a exclusão do snapshot.
Tenho um pool com 4 servidores, xenserver versão 6,5 e todas vms estão em um storage.
Sabe me dizer se tem mais algum parâmetro?

[3] Comentário enviado por trbarbosa em 01/11/2016 - 09:18h

paulomenor, aqui funciona normalmente, mas acho que pra você conseguir excluir um snapshot precisa executar os dois comandos abaixo em ordem:

xe template-param-set is-a-template=false ha-always-run=false uuid=<UUID_do_Snapshot>

e depois:

xe vm-uninstall uuid=<UUID_do_Snapshot> force=true

Tente isso aí e dê uma resposta, qualquer coisa estamos à disposição.

Abraço.

[4] Comentário enviado por pbonfanti em 08/11/2016 - 08:35h

Muito boa a matéria , eu tenho um script de backup que uso aqui mas o seu é mais limpo, e eu estava no processo de parar a vm para backup, como você citou.
Aproveito a deixa para comentar um problema que eu tenho, em que uma das vms é um sistema legado que roda em ubuntu muito antigo, em que o xenserver-tools não instala. Nesse caso especifico ao tentar rodar comandos xen para esta vm o hipervisor inteiro congela (hang_task_timeout), de modo que se torna necessário resetar o equipamento, que é servidor de produção aqui, hospedando oito servidores diferentes para a rede interna, como dhcp,squid, apache, mysql, etc...
Até o momento o meu script precisa logar na vm problemática via ssh e rodar dentro dela o 'shutdown -h now' e só em seguida executar os comandos para as vms compatíveis.
Pelo fato de eu usar a linha de comando com uma certa frequencia os meus name-label não possuem espaço, o que facilita o seu método, como meus serviços não atendem a internet e são criticos apenas em horario comercial, o vm-shutdown durante a noite não é tão critico, então ficam algumas duvidas...
- O processo de snapshot tem alguma vantagem no meu caso? (mais ra&#7765;ido ou mais seguro por exemplo) ou a vantagem se refere apenas a disponibilidade do serviço mais próxima de 24/7 ?
- Você conhece algum método intuitivo e seguro de identicar no xenserver, quais recursos como discos e interfaces virtuais de rede , estão ativos e ligados a vms de produção (não snapshots ou orfãos ), devo ter cometido alguns erros na implementação e a identificação de uuid não é muito intuitiva para detectar essas coisas. Desde já agradeço.

[5] Comentário enviado por trbarbosa em 08/11/2016 - 09:46h

pbonfanti, não é que o processo de snapshot tenha alguma vantagem, fazer o snapshot é um dos passos pra realizar o backup das suas máquinas. Quando você fala em método intuitivo e seguro para identificar no XEN Server o uso de discos e interfaces de rede, você fala em modo texto ou pela GUI?? Se for por linha de comando, ainda não parei para estudar isso.

Qualquer dúvida, estamos à disposição.

Abraço.

[6] Comentário enviado por murilocsilva em 24/05/2017 - 09:14h

Bom dia, tenho dois servidores Xenserver 6.5 e um script de backup automático que consegui na internet e adaptei para minha rede, funciona bem faz o snapshot de todas as maquinas ligadas depois converte em .xva. Tudo agendado no crontab..
segue o script...

#!/bin/bash
# Script para backup a quente das vm's do XenServer
# E-tab Tecnologia - marcelo.leaes@e-tab.com.br
# O funcionamento do script é simples. Ele cria um snapshot, converte para template e remove o snapshot
# O envio de emails depende do SendEmail baixe de http://caspian.dotconf.net/menu/Software/SendEmail/
# Jamais rode este script antes de testar seu funcionamento em um host de homologação antes ;)
# Modificado em 01/07/2014 por Murilo Cesar da Silva

PATH=/opt/xensource/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
export PATH

BACKDATE=`date +%d-%m-%Y`

# Configurações para o envio de emails
# REMETENTE="backups@seudominio.com.br"
# ADMIN="suporte@seudominio.com.br"
# ASSUNTO="XENSERVER - Backup concluido no host $HOSTNAME"
# SMTP="smtp.seudominio.com.br"
# USUARIO="usuario.smtp@seudominio.com.br"
# SENHA="senhadomail"

# Defina aqui o diretório onde serão salvos os backups
BACKDIR=/defina-aqui-seu-diretorio-de-backup/$BACKDATE/$HOSTNAME

echo -e "Resumo das ações realizadas em $HOSTNAME \n" > /home/xen_back.mail

if [ -d $BACKDIR ]
then
echo "Diretório de backup já existe"
echo "$BACKDIR Exists" >> /home/xen_back.mail
else
echo "Diretório de backup não existe, criando agora."
echo "$BACKDIR não existe, criando agora" >> /home/xen_back.mail
mkdir -p $BACKDIR
fi

echo "Gerando lista das VMs rodando no Host"
xe vm-list power-state=running|grep name-label| grep -v "Control domain on host:" | sed 's/ name-label ( RW): //g' > /home/xen_back1
echo -e "\n Gerando lista das VMs rodando no Host" >> /home/xen_back.mail
cat /home/xen_back1 >> /home/xen_back.mail

if [ $? -eq 0 ]
then
echo -e "Listagem das VMs concluida com sucesso \n"
echo -e "Listagem das VMs concluida com sucesso \n" >> /home/xen_back.mail
else
echo -e "Ocorreu um erro ao obter listagem do Host \n"
echo -e "Ocorreu um erro ao obter listagem do Host \n" >> /home/xen_back.mail
fi

VMLIST=`cat /home/xen_back1 | wc -l`
COUNT=0
until [ $VMLIST = $COUNT ]
do
COUNT=`expr $COUNT + 1`
VM=`gawk FNR==$COUNT /home/xen_back1`

echo "Criando snapshot de $VM"
echo "Criando snapshot de $VM" >> /home/xen_back.mail
SNAPSHOT=`xe vm-snapshot vm="$VM" new-name-label="$VM"-$BACKDATE new-name-description="Snapshot Temporário" `

if [ $? -eq 0 ]
then
echo -e "Snapshot da vm $VM criado com sucesso \n"
echo -e "Snapshot da vm $VM criado com sucesso \n" >> /home/xen_back.mail
else
echo -e "Ocorreu um erro ao tentar fazer snapshot da vm $VM \n"
echo -e "Ocorreu um erro ao tentar fazer snapshot da vm $VM \n" >> /home/xen_back.mail
fi

echo "Convertendo o snapshot $SNAPSHOT da vm $VM para Template"
echo "Convertendo o snapshot $SNAPSHOT da vm $VM para Template" >> /home/xen_back.mail
xe template-param-set is-a-template=false uuid=$SNAPSHOT

if [ $? -eq 0 ]
then
echo -e "Conversão do snapshot $SNAPSHOT da vm $VM realizado com sucesso \n"
echo -e "Conversão do snapshot $SNAPSHOT da vm $VM realizado com sucesso \n" >> /home/xen_back.mail
else
echo -e "Ocorreu um erro ao tentar converter o snapshot $SNAPSHOT da vm $VM em um Template \n"
echo -e "Ocorreu um erro ao tentar converter o snapshot $SNAPSHOT da vm $VM em um Template \n" >> /home/xen_back.mail
fi

echo "Exportando $SNAPSHOT da vm $VM"
echo "Exportando UUID=$SNAPSHOT" >> /home/xen_back.mail
xe vm-export vm=$SNAPSHOT filename=$BACKDIR/"$VM".xva compress=true

if [ $? -eq 0 ]
then
echo -e "Processo de conversão do snapshot $SNAPSHOT e backup da vm $VM finalizado com sucesso \n"
echo -e "Processo de conversão do snapshot $SNAPSHOT e backup da vm $VM finalizado com sucesso \n" >> /home/xen_back.mail
else
echo -e "Processo de conversão do snapshot $SNAPSHOT para backup da vm $VM não pode ser realizado \n"
echo -e "Processo de conversão do snapshot $SNAPSHOT para backup da vm $VM não pode ser realizado \n" >> /home/xen_back.mail
fi

echo "Removendo $SNAPSHOT da vm $VM"
echo "Removendo UUID=$SNAPSHOT">> /home/xen_back.mail
xe vm-uninstall uuid=$SNAPSHOT force=true

if [ $? -eq 0 ]
then
echo -e "Remoção do snapshot $SNAPSHOT da vm $VM ocorreu com sucesso \n"
echo -e "Remoção do snapshot $SNAPSHOT da vm $VM ocorreu com sucesso \n" >> /home/xen_back.mail
else
echo -e "Ocorreu um erro ao tentar remover $SNAPSHOT vinculado a vm $VM \n"
echo -e "Ocorreu um erro ao tentar remover $SNAPSHOT vinculado a vm $VM \n" >> /home/xen_back.mail
fi
echo -e "\n" >> /home/xen_back.mail
done

/usr/local/bin/sendEmail -f $REMETENTE -t $ADMIN -u "$ASSUNTO" -o message-file="/tmp/xen_back.mail" -s $SMTP -xu $USUARIO -xp $SENHA

rm -rf /tmp/xen_back*

exit 0

[7] Comentário enviado por taryk em 27/06/2017 - 10:55h

muito bom o tutorial!!
mais na hora de importa a maquina remotamente ta dando um erro.

The VM could not be imported.
msg: INTERNAL_ERROR: [ Unix.Unix_error(Unix.ECONNRESET, "read", "") ]

se alguem ja passou por isso e poder ajuda agradeço!

[8] Comentário enviado por doomk em 18/08/2017 - 15:38h

Parabéns pelo artigo!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts