Como (corretamente) fazer backup de uma VM do QEMU / KVM ativa?

4

Atualmente, estou criando uma solução de backup para VMs KVM como uma medida adicional para backups tradicionais.

Infelizmente, todas as soluções existentes atualmente (agosto de 2013) que encontrei até agora:

  • não garante um backup consistente da VM (perdendo o estado da RAM, criando uma imagem suja ou outras coisas)
  • ou exigem tempo de inatividade longo (encerramento completo da VM durante o backup).

Estou ciente da funcionalidade do QEMU / libvirt de tirar fotos, no entanto, ainda não é utilizável desde:

  • instantâneos internos de imagem apresentam um arquivo de imagem em constante mudança, resultando em um provável backup sujo ( assumindo que um usa imagens qcow2 em todos os ).
  • ainda não é possível mesclar um instantâneo externo atualmente ativo na imagem de apoio original ( "blockcommit" ).

Com base nos motivos acima, estou implementando um script que:

  1. Salva o estado da VM e a interrompe
  2. Configura um (s) instantâneo (s) do mapeador de dispositivo em que as imagens e o estado do disco da VM residem
  3. Retoma a VM
  4. Monte os instantâneos da etapa 2.
  5. Faz o backup do disco e do estado da VM (configuração por conveniência)
  6. Mescla o (s) snapshot (s).

Se eu acertei tudo, isso levará backups consistentes de VMs com apenas alguns segundos (se for o caso, já que 1-3 é rápido, possivelmente sub-segundo) de tempo de inatividade. É claro que, ao restaurar, a VM será caminho no passado, mas pelo menos me dará a opção de um desligamento / reinicialização ordenada.

Estou faltando alguma coisa com essa solução? Ou alguém realmente já implementou isso?

    
por Roman 14.08.2013 / 10:17

2 respostas

3

Parar a VM não libera os IOs em vôo, você deve usar qemu-ga para desativar a VM.

Como o QEMU introduziu a migração em bloco, você pode tentar usá-lo para migrar uma VM para uma imagem de backup, salvando o estado da memória e o disco

    
por 14.08.2013 / 18:49
2

link

Isto é possível com versões: QEMU 2.1 (e acima), libvirt-1.2.9 (e acima).

$ virsh domblklist vm1
Target     Source
------------------------------------------------
vda        /export/images/base.qcow2 

$ virsh snapshot-create-as --domain vm1 guest-state1 \
--diskspec vda,file=/export/images/overlay1.qcow2 \
--disk-only --atomic --quiesce

$ rsync -avhW --progress /export/images/base.img \
/export/images/copy.img

$ virsh blockcommit vm1 vda --active --verbose --pivot
    
por 14.07.2018 / 21:25