Como criar um dupe de uma VM KVM / libvirt / virt-manager?


12

Estou um pouco perdido com o virt-manager / libvirt / KVM.

Eu tenho uma VM KVM funcionando (Windows XP) que funciona muito bem.

A VM é suportada por um arquivo de 4 GB ou mais (um .img ).

Agora, quero fazer algo muito simples: quero duplicar minha VM.

Eu pensei "OK, não há problema, vamos copiar o arquivo de 4 GB e copiar o XML" .

Mas então a FAQ da libvirt declara em todas as letras maiúsculas: "você não deve se importar onde o XML é armazenado"

libvirt FAQ

Tudo bem, eu não deveria me importar. Mas então, como duplico minha VM?

Quero criar uma nova VM que seja uma cópia dessa VM.

Respostas:


3

virshpermitirá editar, exportar e importar a definição XML para seus servidores. Eu usaria virt-clonepara gerar um arquivo de imagem clonado e exportar o XML. Para ser seguro, eu removeria a configuração do clone do servidor original.


41

O mais conveniente é simplesmente:

# virt-clone --connect=qemu://example.com/system -o this-vm -n that-vm --auto-clone

O qual fará uma cópia this-vm, nomeará that-vme cuida da duplicação dos dispositivos de armazenamento. Nada de novo aqui, exceto detalhes.

Mais ao ponto, o que as perguntas frequentes estão dizendo é que as descrições de domínio XML não são diretamente editáveis, você precisa passar pela libvirt. Para concluir as etapas executadas pelo virt-clonecomando, você pode:

source_vm=vm_name
new_vm=new_vm_name

# You cannot "clone" a running vm, stop it.  suspend and destroy
# are also valid options for less graceful cloning
virsh shutdown "$source_vm"

# copy the storage.
cp /var/lib/libvirt/images/{"$source_vm","$new_vm"}.img

# dump the xml for the original
virsh dumpxml "$source_vm" > "/tmp/$new_vm.xml"

# hardware addresses need to be removed, libvirt will assign
# new addresses automatically
sed -i /uuid/d "/tmp/$new_vm.xml"
sed -i '/mac address/d' "/tmp/$new_vm.xml"

# and actually rename the vm: (this also updates the storage path)
sed -i "s/$source_vm/$new_vm" "/tmp/$new_vm.xml"

# finally, create the new vm
virsh define "/tmp/$new_vm.xml"
virsh start "$source_vm"
virsh start "$new_vm"

Isso funciona também para copiar uma VM para outro host: use sftp em vez de cp, (possível) altere o caminho da imagem antes de 'definir' a nova vm e sftp também that-vm.xml para o outro host.
Andreas Florath

Obrigado por isso, me salvou um monte de tempo. O problema que tive foi clonar ou criar um novo, pois se eu criar um novo nó, as versões do pacote ficariam fora de sincronia com os outros nós que usavam um espelho local.
21414 Mike Purcell

Lida virt-clonecom a criptografia completa do disco corretamente? Significado, ele vai me pedir o meu descriptografar pw antes de fazer sua coisa?
codificador

Eu acho que sed -i "s/$source_vm/$new_vm" "/tmp/$new_vm.xml"deveria ler, sed -i "s/$source_vm/$new_vm/" "/tmp/$new_vm.xml"ou pelo menos no meu derivado debian, sed queixa-se de um / final ausente. Obrigado pela informação também, meu virsh-clone simplesmente não estava funcionando.
precisa saber é o seguinte

2

Além de "virt-clone", você pode duplicar a VM desta maneira:

  1. Verifique se a VM existente (a ser duplicada) está desligada.
  2. faça um "sudo virsh dumpxml <domid>" da VM existente e salve o arquivo xml de saída.
  3. Modifique a tag <name> sob a tag <domain>.
  4. Use "uuidgen" para gerar um novo ID exclusivo e use-o para modificar a tag <uuid> existente.
  5. Faça uma cópia das imagens virtuais qcow existentes que a VM usa (geralmente armazenadas em / var / lib / libvirt / images, mas certifique-se de ler seu arquivo XML para obter a localização exata). O comando é "sudo cp /var/lib/libvirt/images/xxx.qcow2 yyyy.qcow2" e preencha o novo arquivo yyyy.qcow2 no arquivo XML.
  6. Inicie o novo vm: sudo virsh define new.xml
  7. Inicie o novo domid: sudo virsh start <new_domid>



0

Aparentemente, o virt-clone é o caminho a percorrer.

Tentei duplicar o XML, mas ele não apareceria no virt-manager.

Ainda me pergunto como posso transferir um XML + .img para um novo sistema que dizia ...


0

O comando a seguir funcionou para mim (é necessário desligar o VSA / Vm antes de executar o comando)

# virt-clone --connect=qemu:///system -o present_vsa/vm_name -n vsa/vm_to_be_cloned_name --auto-clone

1
Além dos nomes de pseudo VM, isso é idêntico ao comando da resposta de três anos de idade - mas faltam as informações adicionais dessa resposta.
G-Man diz 'Reinstate Monica'

0

O virt-clone --auto-clone não parece funcionar muito bem com o LVM. Eu esperava que ele criasse uma captura instantânea e a usasse, mas, em vez disso, copia todos os dados.

Melhor fazer a rota dumpxml / define; e lembre-se de montar o sistema de arquivos raiz do clone e alterar os endereços IP e o nome do host adequadamente antes de iniciar o original e o clone.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.