Olá Mundo!
Quem me conhece sabe que não vou gastar um post inteiro com saudações. No máximo uma palavra: Cheguei!
Pronto! Vamos direto ao assunto…
Segue aqui um passo a passo para fazer backup automático de suas máquinas virtuais no XenServer 5.5. Isso deve funcionar em versões anteriores também.
Nesses script, trocamos a turbina do avião com ele voando.
Ou seja, as VMs não param.
1º Passo: Decobrir quais as VMs existentes.
vms="$(xe vm-list | grep "name-label" | grep -v "Control domain" | tr -s " " | cut -d " " -f 5)"
Perceba que tive que fazer um filtro inverso para “Control domain”, pois se você usa Pool de hardware aparecem essas “VMs” fantasmas que na verdade representam o controlador.
2º Passo: Definir variáveis.
# Diretorio onde sera feito o backup. Pode ser via NFS... dirBack=/backup #Separador de campo para o "for". Previne erros no caso de espaços # no nome das VMs IFS=" " #Inicio do for. Cada loop faz backup de uma VM. for vm in $(echo $vms) do #Cria uma variavel data com o formato da data que quero pra compor # o nome do arquivo de backup time=$(date --date "now" +%d_%m_%y_%H:%M) #Agora componho o nome do arquivo de backup snapName=$vm-bk-$time
3º Passo: Criar snapshot e obter UID.
#Aqui crio um snapshot. Ele eh necessario para não precisar
# parar a VM. O backup eh feito com ela em producao.
ID=$(xe vm-snapshot vm=$vm new-name-label=$snapName &&
{
logger -t "XenBackup" -s "$vm - OK Passo 1"
}||{
logger -t "XenBackup" -s "$vm - ERR Passo 1"
echo 1
})
#Na criacao do snap acima, a variavel ID recebe o UID do
# snap.No caso de erro, ela recebe "1"
#O logger joga o log joga no /var/log/messages
#Abaixo faço um teste pra checar se deu erro.
if [ "$ID" == "1" ]
then
exit 1
fi
4º Passo: Transformar o Snapshot em VM.
#Pra essa tarefa, uso o ID obtido no passo anterior.
xe template-param-set is-a-template=false uuid=$ID &&
{
logger -t "XenBackup" -s "$vm - OK Passo 2"
}||{
logger -t "XenBackup" -s "$vm - ERR Passo 2"
exit 2
}
5º Passo: Exportar VM para o DIR de backup.
#Perceba o uso das variaveis. Nao vah se perderxe vm-export vm=$snapName filename=$dirBack/$snapName { logger -t "XenBackup" -s "$vm - OK Passo 3" }||{ logger -t "XenBackup" -s "$vm - ERR Passo 3" exit 3 }
6º Passo: Remover VM.
Agora que a VM criada a partir do SnapShot já foi exportada, podemos descartá-la:
xe vm-uninstall vm=$snapName force=true
{
logger -t "XenBackup" -s "$vm - OK Passo 4"
}||{
logger -t "XenBackup" -s "$vm - ERR Passo 4"
exit 4
}
7º Passo: Plus!
Pra economizar espaço (e economiza muito), vamos “gzipar” a VM:
gzip $dirBack/$snapName
{
logger -t "XenBackup" -s "$vm - OK Passo 5"
}||{
logger -t "XenBackup" -s "$vm - ERR Passo 5"
exit 5
}
#Fala a verdade, voce jah ia esquecer de encerrar o "for"...
done
exit 0
Bom pessoal, é isso!
Espero que tenham gostado… em breve outros posts quentinhos.
Visitem www.pahim.org
Comentem!
Amigo,
Adorei a matéria, ainda mais pelo fato que traz algo que é necessário em um produto com o XenServer. Eu queria saber se há um script para restaurar o backup?
Opa Artur,
Obrigado pelo comentário. Vou postar o script para restaurar backups ainda essa semana!
Abraço.
Oi Artur,
Um pouco atrasado né
A restauração desse backup pode ser feita com os 2 passos a seguir:
gunzip vm.bak.gz
xe vm-import filename=vm.bak
Simples assim
Abraço.
Boa tarde..
estou testando este scritpt, mas estou encontrando algumas dificuldades para rodar o mesmo. Segue abaixo como ficou meu script
att
vms=$(xe vm-list | grep “name-label” | grep -v “Control domain” | tr -s ” ” | cut -d ” ” -f 5)
dirBack=/backup
IFS=”\"
for vm in $(echo $vms)
do time=$(date –date “now” +%d_%m_%y_%H:%M)
snapName=$vm-bk-$time
ID=$(xe vm-snapshot vm=$vm new-name-label=$snapName &||{logger -t “XenBackup” -s “$vm – ERR Passo 1″ echo 1})
if [ \"$ID\" == \"1\" ]
then
exit 1
fi
xe template-param-set is-a-template=false uuid=$ID &||{logger -t “XenBackup” -s “$vm – ERR Passo 2″exit 2}
xe vm-export vm=$snapName filename=$dirBack/$snapName {logger -t “XenBackup” -s “$vm – OK Passo 3″}||{logger -t “XenBackup” -s “$vm – ERR Passo 3″ exit 3}
xe vm-uninstall vm=$snapName force=true {logger -t “XenBackup” -s “$vm – OK Passo 4″}||{logger -t “XenBackup” -s “$vm – ERR Passo 4″ exit 4}
gzip $dirBack/$snapName {logger -t “XenBackup” -s “$vm – OK Passo 5″}||{logger -t “XenBackup” -s “$vm – ERR Passo 5″ exit 5}
done
for
then
exit 0
Oi Rodrigo,
Tá desorganizado o script e vai dar problema por causa das quebras de linhas e do separador de campo. Segue versão “organizada”
Só copiar e colar
Abraço
vms=”$(xe vm-list | grep “name-label” | grep -v “Control domain”
| tr -s ” ” | cut -d ” ” -f 5)”
# Diretorio onde sera feito o backup. Pode ser via NFS…
dirBack=/backup
#Separador de campo para o “for”. Previne erros no caso de espaços
# no nome das VMs
IFS=”
”
#Inicio do for. Cada loop faz backup de uma VM.
for vm in $(echo $vms)
do
#Cria uma variavel data com o formato da data que quero pra compor
# o nome do arquivo de backup
time=$(date –date “now” +%d_%m_%y_%H:%M)
#Agora componho o nome do arquivo de backup
snapName=$vm-bk-$time
#Aqui crio um snapshot. Ele eh necessario para não precisar
# parar a VM. O backup eh feito com ela em producao.
ID=$(xe vm-snapshot vm=$vm new-name-label=$snapName &||{
logger -t “XenBackup” -s “$vm – ERR Passo 1″
echo 1
})
#Na criacao do snap acima, a variavel ID recebe o UID do
# snap.No caso de erro, ela recebe “1″
#O logger joga o log joga no /var/log/messages
#Abaixo faço um teste pra checar se deu erro.
if [ \"$ID\" == \"1\" ]
then
exit 1
fi
#Pra essa tarefa, uso o ID obtido no passo anterior.
xe template-param-set is-a-template=false uuid=$ID &||{
logger -t “XenBackup” -s “$vm – ERR Passo 2″
exit 2
}
#Pra essa tarefa, uso o ID obtido no passo anterior.
xe template-param-set is-a-template=false uuid=$ID &||{
logger -t “XenBackup” -s “$vm – ERR Passo 2″
exit 2
}
xe vm-uninstall vm=$snapName force=true
{
logger -t “XenBackup” -s “$vm – OK Passo 4″
}||{
logger -t “XenBackup” -s “$vm – ERR Passo 4″
exit 4
}
gzip $dirBack/$snapName
{
logger -t “XenBackup” -s “$vm – OK Passo 5″
}||{
logger -t “XenBackup” -s “$vm – ERR Passo 5″
exit 5
}
#Fala a verdade, voce jah ia esquecer de encerrar o “for”…
done
exit 0
Muito obrigado.
É de grande valia.
Você também lida com VMware ESXi 4 free???
Eu tenho uma grande dúvida.
Em dois servidores com datastores locais, é possível realizar uma replicação das VMs (ativo na origem e passivo no destino) com algum software free, ou até mesmo através dos próprios recursos do VMware ESXi 4 free e com agendamento???
Oi Artur,
Ainda estou de devendo o script de restauração… não esqueci!
Sobre o VMware, infelizmente não vou poder te ajudar. Não tenho experiência nenhuma com ele
Abraço.
cara me diz uma coisa to tentando fazer backp e ele me da o seguinte erro
Error: No matching VMs found
XenBackup: XEN_ZIMBRA Myster_Way XEN_ARQUIVOS XEN_VIPRADO_TREND XEN_SYSTEMAS – ERR Passo 1
Opa Lucas,
Eu achei um erro no script sobre os espaços nos nomes das maquinas virtuais. No 3º Passo do tutorial (onde ocorre o passo 1 do script), o comando certo seria:
ID=$(xe vm-snapshot vm=”$vm” new-name-label=$snapName &&
Observe as aspas duplas na variável $vm
Vê se seu problema é resolvido com isso amigo.
Abraço.
Cara tem um problema quando fasso backup das VMs mesmo depois de apagar ele continua alocando espaço…como fasso para apagar..
#lvs
/dev/cdrom: open failed: No medium found
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
MGT VG_XenStorage-1db4f613-fd0b-3b23-7c7b-0491d946c7be -wi— 4.00M
VHD-0b912d10-4dca-42f2-aa33-ab2f616c667c VG_XenStorage-1db4f613-fd0b-3b23-7c7b-0491d946c7be -wi-ao 8.02G
VHD-0f19574a-5556-4b1c-b973-943d214471d6 VG_XenStorage-1db4f613-fd0b-3b23-7c7b-0491d946c7be -wi-ao 52.11G
VHD-11a8ecd4-071e-4a38-859d-ed81c2d52150 VG_XenStorage-1db4f613-fd0b-3b23-7c7b-0491d946c7be -ri-ao 43.53G
VHD-3d021248-2f53-4754-af8e-97aa428ca710 VG_XenStorage-1db4f613-fd0b-3b23-7c7b-0491d946c7be -wi-ao 1.62G
VHD-670b3999-cd08-413b-a3ed-6b33f915a843 VG_XenStorage-1db4f613-fd0b-3b23-7c7b-0491d946c7be -wi-ao 20.05G
VHD-6b251197-a60d-4bba-aeb5-bd459aeb038c VG_XenStorage-1db4f613-fd0b-3b23-7c7b-0491d946c7be -ri-ao 3.61G
VHD-b7279715-6b31-41ba-a4f7-9426676908da VG_XenStorage-1db4f613-fd0b-3b23-7c7b-0491d946c7be -wi-ao 30.07G
VHD-b7e4a72b-a99b-4da5-9e6d-d2e9c6027299 VG_XenStorage-1db4f613-fd0b-3b23-7c7b-0491d946c7be -wi-ao 30.07G
VHD-d161328f-1c49-4f10-a5db-64829447e3c1 VG_XenStorage-1db4f613-fd0b-3b23-7c7b-0491d946c7be -wi-ao 60.12G
VHD-d25961fa-1ccc-438d-937f-aa6ce359793b VG_XenStorage-1db4f613-fd0b-3b23-7c7b-0491d946c7be -ri-ao 5.32G
VHD-f9004a1a-3def-4043-9d42-38be1cc16aa8 VG_XenStorage-1db4f613-fd0b-3b23-7c7b-0491d946c7be -ri-ao 260.00M
VHD-fd72e7f3-0e9c-40c2-8908-995ad51b7ef8 VG_XenStorage-1db4f613-fd0b-3b23-7c7b-0491d946c7be -ri-ao 9.60G
tem espaço alocado de 9.60GB 260MB que não estão sendo usando..
como fasso pra exluir esses espaços, pois cada bkp ele utiliza mais espaços meu disco encheu
E aí brother!
Legal seu script… Parabéns!
Estou tendo problemas na exportação de algumas máquinas virtuais.
Ocorre o seguinte erro:
20/1/2010 07:18:50 Error: Exporting MaquinaVirtual01 – A timeout happened while attempting to attach a device OpaqueRef:2aca2927-605e-db5d-ebfc-1eb4983ce92e of type VBD to a VM
Você tem idéia do que pode estar causando isso e como resolver? Pois depois que ocorre este erro o script não consegue realizar a exportação das outras máquinas virtuais da lista.
Obrigado!
Gostei muito dessa situação de Backup via script no Xen, muito bom mesmo. Vou fazer o teste na segunda-feira.Na realidade tenho a seguinte situação:
1 – servidor PFsense como Firewall , Proxy e DMZ
2 – servidor XenServer com : WinXP Transformado para Terminal Service para receber acesso remoto sem precisar pagar calls e legal. tenho 15 usuários.
3 – tenho um Servidor FreeNAS para Storage,estou pensando em um Nexenta.
O que eu gostaria de fazer. Como todos trabalhão através dos sistemas virtuais eu gostaria além do backup, gostari de copiar esse backup para um outro local e isso diariamente! vc poderia me passar como? Desde ja Obrigado!
Olá Amigo,
uma duvida relacionada a backup do xenserver mas não ao script do post.
eu vi que na tela do xenserver (no servidor mesmo e não no xencenter) existe uma opção para fazer backup e restaurar backup, e também é possivel agendar (diario, semanal, mensal, etc).
você já utilizou essa opção?
é seguro?
pretendo utilizar essa opção e direcionar o backup para um hd externo.
obrigado pela atenção