XenServer – Backup automático de VMs

October 7th, 2009 | by | linux, tecnologia

Oct
07

Olá Mundo! :D

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…

xenSegue 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 perder ;)
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
        }

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!

Authored by

13 Responses to “XenServer – Backup automático de VMs”

Show / Hide Comments
  1. Artur de Souza Aragão says:

    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?

    • Amador Pahim says:

      Opa Artur,

      Obrigado pelo comentário. Vou postar o script para restaurar backups ainda essa semana!

      Abraço.

    • Amador Pahim says:

      Oi Artur,

      Um pouco atrasado né :D

      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.

      • Rodrigo says:

        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

        • Amador Pahim says:

          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

  2. Artur de Souza Aragão says:

    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???

    • Amador Pahim says:

      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.

  3. Lucas says:

    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

    • Amador Pahim says:

      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.

  4. Lucas says:

    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

  5. Cleiton says:

    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!

  6. Rogerio Rigon says:

    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!

  7. Thiago says:

    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

Leave a Comment