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ê precisará ter acesso 'ssh' às duas máquinas (origem e destino) para seu usuário.
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
- A máquina virtual está no host dom0 conhecido como chewie
- O destino desejado no host dom0 conhecido como darth e tinha um IP interno aqui 10.10.10.38 (por exemplo)
- No nosso caso atual, usamos o centos 7 como o sistema operacional dom0 nas duas máquinas
- A máquina virtual neste caso que estamos movendo é chamada LARRY
- O usuário que está executando a ação é USER (que será seu nome)
- DOM0 significa o servidor físico real
Procedimento
Etapas iniciais no host de origem
- Efetue login no host dom0 que atualmente possui a máquina (o host "de origem"), por exemplo:
ssh user@chewie.domainname.com.au
- Permaneça como seu usuário, para não se tornar usuário sudo * Liste máquinas com
sudo virsh --all
- Despejar a definição da máquina usando, por exemplo:
sudo virsh dumpxml larry> larry.xml
Copie a definição despejada para a nova máquina (o host "destino"), por exemplo:
scp -p larry.xml 10.10.10.38:larry.xml
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: scp -p larry.xml user@10.10.10.38: larry.xml
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
sudo lvs --unidades B
.
** 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
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy% Sync Convert
lv_root vg1 -wi-ao ---- 53687091200B
lv_swap vg1 -wi-ao ---- 17179869184B
vm_vsrv1 vg1 -wi-ao ---- 193273528320B
vm_vsrv10 vg1 -wi-ao ---- 64424509440B
vm_vsrv11 vg1 -wi-ao ---- 161061273600B
vm_vsrv12 vg1 -wi-ao ---- 204010946560B
vm_vsrv2 vg1 -wi-ao ---- 140110725120B
vm_vsrv3 vg1 -wi-ao ---- 128849018880B
vm_larry vg1 -wi-ao ---- 69793218560B
vm_vsrv5 vg1 -wi-ao ---- 257698037760B
vm_vsrv6 vg1 -wi-ao ---- 64424509440B
vm_vsrv7 vg1 -wi-ao ---- 161061273600B
vm_vsrv8 vg1 -wi-ao ---- 64424509440B
vm_vsrv9 vg1 -wi-ao ---- 214748364800B
Etapas iniciais no host de destino
- Faça login no host de destino, por exemplo
ssh user@darth.domainname.com.au
- Permaneça como seu próprio usuário. ou seja, não se torne raiz.
Crie um arquivo de definição de volume, por exemplo:
vi larry.domainname.com.au-vol.xml
ou nano larry.domainname.com.au-vol.xml
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 B
<volume type='block'>
<name>larry.domainname.com.au</name>
<capacity unit='bytes'>69793218560</capacity>
<allocation unit='bytes'>69793218560</allocation>
<target>
<path>/dev/centos/larry.domainname.com.au</path>
<permissions>
<mode>0600</mode>
<owner>0</owner>
<group>6</group>
<label>system_u:object_r:fixed_disk_device_t:s0</label>
</permissions>
</target>
</volume>
Nota: 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
sudo virsh vol-create --pool centos larry.domainname.com.au-vol.xml
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:
sudo chgrp wheel /dev/mapper/centos-larry.domainname.com.au
sudo chmod g + rw /dev/mapper/centos-larry.domainname.com.au
Edite a definição xml copiada, por exemplo:
vi larry.xml
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
ssh user@chewie.domainname.com.au
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.
- Se ainda não estiver no host de destino, copie-o para lá, por exemplo:
scp -p blocksync.py user@10.10.10.38: blocksync.py
- Use-o para copiar o disco de origem no disco de destino, por exemplo
Comando que faz a cópia
sudo -E python blocksync.py / dev / vg1 / vm_larry user@10.10.10.38 /dev/mapper/centos-larry.domainname.com.au -b 4194304
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.