Gostaria de saber qual é a maneira correta de mover uma VM entre dois hosts KVM sem usar nenhum tipo de armazenamento compartilhado
Copiar os arquivos de disco e o XML dump da máquina KVM de origem para a de destino é suficiente? Em caso afirmativo, quais comandos precisam ser executados para importar o vm no destino?
OS é Ubuntu no Dom0 e DomU.
desde já, obrigado
kvm-virtualization
ubuntu-12.04
Onitlikesonic
fonte
fonte
/dev/mapper/vgname-lvname
láComo ainda não posso comentar, tenho que postar este adendo à resposta de dyasny dessa maneira.
Se a VM tiver capturas instantâneas que você deseja preservar, você deve despejar os arquivos xml da captura instantânea na origem
virsh snapshot-dumpxml $dom $name > file.xml
para cada captura instantânea na lista de capturas instantâneas da VMvirsh snapshot-list --name $dom
.Em seguida, no destino, use
virsh snapshot-create --redefine $dom file.xml
para concluir a migração dos instantâneos.Se você também se preocupa com qual instantâneo é o atual, faça adicionalmente na origem:
virsh snapshot-current --name $dom
e no destino:
virsh snapshot-current $dom $name
Em seguida, você pode usar
virsh snapshot-delete --metadata $dom $name
para cada instantâneo para excluir os arquivos xml na fonte ou simplesmente excluí-los de/var/lib/libvirt/qemu/snapshots/$guestname
Fontes:
lista de discussão libvirt-users
http://kashyapc.com/2012/09/14/externaland-live-snapshots-with-libvirt/
fonte
Sim, apenas copiar o arquivo XML e as imagens de disco virtual é suficiente, mas isso obviamente impede uma migração "ativa". A VM deve ser desligada durante este procedimento.
Uma vez copiado para o destino,
libvirtd
deve ser recarregado ou reiniciado para reconhecer o novo arquivo XML.fonte
virsh
. Eu apenas copio os arquivos diretamente e recarregolibvirtd
.Instruções detalhadas sobre como copiar VMs usando blocksync.py
Essas instruções se aplicam a uma VM usando um disco fornecido pelo LVM e pressupõe que o Python esteja em cada um dos hosts
Faça o download do script blocksync.py em https://gist.github.com/rcoup/1338263 e coloque o host de origem e de destino na pasta / home / user.
Precursor
Você também precisará ter acesso 'sudo' ao 'root' nas duas máquinas.
Como alternativa, você pode fazer tudo como root, mas apenas se sua chave ssh fornecer acesso root a pelo menos a máquina de destino. ** Nesse caso, remova o nome do usuário das linhas de comando.
Configurações de exemplo
Procedimento
Etapas iniciais no host de origem
Copie a definição despejada para a nova máquina (o host "destino"), por exemplo:
você pode alterar o IP interno para o nome do servidor dom0 de destino ** Nota: é melhor usar o endereço IP para o destino, por exemplo:Se você não pode copiar devido a chaves o gato larry.xml e copiá-lo, então você pode ssh em outra máquina e criar um arquivo e colá-lo.
Encontre o tamanho e o nome do disco da VM usando
.** O comando acima deve mostrar o tamanho exatamente em bytes. ** O nome do disco da máquina está na primeira coluna da lista, seu grupo de volumes na segunda e tamanho na última. ** Determine o nome do dispositivo como / dev // ** Verifique-o com um comando 'll' Por exemplo, nesta saída: vm_larry vg1 -wi-ao ---- 69793218560B
Etapas iniciais no host de destino
Crie um arquivo de definição de volume, por exemplo:
ou com as seguintes linhas: NOTA - Você precisará pegar o tamanho em bytes da VM original e inseri-lo no script abaixo. O comando na máquina de origem para tamanho era sudo lvs --units BNota: esta definição é para um disco de 69793218560 bytes para larry da VM, altere conforme necessário para a VM real.
Nota: o nome e a última parte do caminho devem corresponder e serão usados como o novo nome do disco.
Crie o novo disco a partir da definição, usando
dirá Vol larry.domainname.com.au criado a partir de larry.domainname.com.au-vol.xml
Torne o arquivo do dispositivo de disco acessível:
Edite a definição xml copiada, por exemplo:
Encontre a definição de disco no arquivo (procure por "source dev =") e substitua o dispositivo pelo recém-criado (você pode ls / dev / centos / para ver a vm), por exemplo: / dev / drbd4 -> / dev / centos / larry.domainname.com.au
Essa mudança de ponte foi exclusiva da nossa situação.
** Encontre qualquer referência a "br1" nas sub-rotinas da interface e altere-a para "br0", por exemplo, você está alterando a ponte de origem para que a linha fique assim
Etapas finais no host de origem
Faça logon no host de origem, por exemplo
A melhor prática seria desligar a VM no host de origem antes de fazer a sincronização final, mas não precisa ser feita. (desligamento virsh NameOfMachine)
Se ainda não estiver no host de origem, faça o download do script blocksync.py em https://gist.github.com/rcoup/1338263
Se seu nome de usuário for usuário (por exemplo), copie o script blocksync.py em ambas as máquinas para / home / user e chown user: user e chmod 755 o script.
Comando que faz a cópia
Nota: o primeiro nome do dispositivo é para o host de origem, conforme determinado no comando 'lvs'; este é de um host de origem [[chewie]].
Nota: isso destruirá o conteúdo do disco de destino, verifique se /dev/mapper/centos-larry.domainname.com.au está correto!
Nota: a sincronização levará muito tempo - cerca de 100 segundos por gigabyte, ou seja: 90 minutos para um disco de 60 gigabytes.
No entanto, você pode fazer uma sincronização enquanto a VM estiver em uso; sincronizações subsequentes podem ser até 25% mais rápidas
O script imprimirá os parâmetros que está usando (pode haver uma mensagem sobre um módulo obsoleto, tudo bem). Em seguida, ele exibe o comando ssh que está usando e o executa (você verá a mensagem somente da equipe autorizada quando fizer isso). Durante sua sincronização, ele exibirá um total de blocos copiados e sua velocidade média. Por fim, imprime uma mensagem de conclusão com o número de segundos que levou.
Coisas a Saber
Você pode cancelar a sincronização com CTRL C e reiniciá-lo mais tarde executando o comando novamente
Etapas finais no host de destino
Nota: pode ser necessário alterar os detalhes da VM para se adequar ao novo ambiente.
fonte
Eu encontrei esse problema com alguns dos meus servidores KVM mais antigos, mas é realmente irritante quando isso acontece e pode causar problemas em qualquer uma das VMs instaladas. No meu caso, ele regularmente colocava uma das minhas VMs no estado de redefinição, pois o espaço em disco era lento. As instruções abaixo são um pouco sensíveis à versão KVM / Distro. No meu caso, eu tenho o CentOS 7.5
Por padrão, as imagens KVM estão localizadas no local / var / lib / libvirt / images /
Você precisa encontrar o nome da VM, para esta lista de uso virsh
Pare o virsh da VM, pare o VM-Name
Para mim, copio o arquivo primeiro, em vez de me mover. Copie o arquivo qcow para o novo local
Edite o arquivo xml da VM, para referenciar o novo local "arquivo de origem" virsh edit VM-Name
Você deseja alterar o "arquivo de origem" deste arquivo
Reinicie o serviço libvirtd
Em seguida, reinicie a VM e você deve estar pronto.
fonte