Instrucciones detalladas sobre cómo copiar máquinas virtuales con blocksync.py
Estas instrucciones se aplican a una VM que utiliza un disco proporcionado por LVM y asume que Python está en cada uno de los hosts
Descargue el script blocksync.py de https://gist.github.com/rcoup/1338263 y coloque el host de origen y de destino en su carpeta / home / user.
Precursor
- Deberá tener acceso 'ssh' a ambas máquinas (fuente y destino) para su usuario.
También necesitará tener acceso 'sudo' a 'root' en ambas máquinas.
Alternativamente, puede hacer todo como root, pero solo si su clave ssh le da acceso root al menos a la máquina de destino. ** En este caso, elimine el nombre de usuario de las líneas de comando.
Configuraciones de ejemplo
- La máquina virtual está en el host dom0 conocido como chewie
- El destino deseado en el host dom0 conocido como darth y tenía una IP interna aquí 10.10.10.38 (para nuestro ejemplo)
- En nuestro caso real, usamos centos 7 como sistema operativo dom0 en ambas máquinas
- La máquina VIRTUAL en este caso que estamos moviendo se llama LARRY
- El usuario que realiza la acción es USUARIO (que será su nombre)
- DOM0 significa el servidor físico real
Procedimiento
Pasos iniciales en el host de origen
- Inicie sesión en el host dom0 que actualmente tiene la máquina (el host "fuente"), por ejemplo:
ssh user@chewie.domainname.com.au
- Permanezca como su usuario, así que no se convierta en usuario de sudo * Enumere máquinas con
sudo virsh --todos
- Volcar la definición de máquina usando, por ejemplo:
sudo virsh dumpxml larry> larry.xml
Copie la definición volcada en la nueva máquina (el host "objetivo"), por ejemplo:
scp -p larry.xml 10.10.10.38:larry.xml
puede cambiar la dirección IP interna a su nombre de servidor dom0 de destino ** Nota: es mejor usar la dirección IP para el destino, por ejemplo: scp -p larry.xml user@10.10.10.38: larry.xml
Si no puede copiar debido a las claves, el gato larry.xml y cópielo. Luego, puede enviar ssh a otra máquina y crear un archivo y pegarlo.
Encuentre el tamaño y el nombre del disco de la VM usando
sudo lvs --unidades B
.
** El comando anterior debe mostrar el tamaño exactamente en bytes. ** El nombre del disco de la máquina está en la primera columna de la lista, su grupo de volúmenes en la segunda y el tamaño en la última. ** Determine el nombre del dispositivo como / dev // ** Verifíquelo con un comando 'll' Por ejemplo, en esta salida: vm_larry vg1 -wi-ao ---- 69793218560B
LV VG Attr LSize Pool Origen Datos% Meta% Move Log Cpy% Sync Convert
raíz_vv 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
Pasos iniciales en el host de destino
- Inicie sesión en el host de destino, p. Ej.
ssh user@darth.domainname.com.au
- Mantente como tu propio usuario. es decir, no se convierta en root.
Cree un archivo de definición de volumen, por ejemplo:
vi larry.domainname.com.au-vol.xml
o nano larry.domainname.com.au-vol.xml
con las siguientes líneas: NOTA: deberá tomar el tamaño en bytes de la máquina virtual original y colocarlo en el siguiente script. El comando en la máquina fuente para el tamaño 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 definición es para un disco de 69793218560 bytes para VM larry, cambie según sea necesario para la VM real.
Nota: el nombre y la última parte de la ruta deben coincidir y se utilizarán como el nuevo nombre del disco.
Cree el nuevo disco a partir de la definición, utilizando
sudo virsh vol-create --pool centos larry.domainname.com.au-vol.xml
dirá Vol larry.domainname.com.au creado a partir de larry.domainname.com.au-vol.xml
Haga que el archivo del dispositivo de disco sea accesible:
sudo chgrp wheel /dev/mapper/centos-larry.domainname.com.au
sudo chmod g + rw /dev/mapper/centos-larry.domainname.com.au
Edite la definición xml copiada, por ejemplo:
vi larry.xml
Busque la definición del disco en el archivo (busque "source dev =") y reemplace el dispositivo con el que acaba de crear (puede ls / dev / centos / para ver vm), por ejemplo: / dev / drbd4 -> / dev / centos / larry.domainname.com.au
Este cambio de puente fue exclusivo de nuestra situación.
** Encuentre referencias a "br1" en las estrofas de la interfaz y cámbielo a "br0", por ejemplo, está cambiando el puente de origen para que la línea sea así
Pasos finales en el host de origen
Inicie sesión en el host de origen, p. Ej.
ssh user@chewie.domainname.com.au
La mejor práctica sería apagar la máquina virtual en el host de origen antes de realizar la sincronización final, pero no es necesario hacerlo. (cierre de virsh NameOfMachine)
Si aún no está en el host de origen, descargue el script blocksync.py de https://gist.github.com/rcoup/1338263
Si su nombre de usuario es user (por ejemplo), copie el script blocksync.py en ambas máquinas en / home / user y chown user: user y chmod 755 el script.
- Si aún no está en el host de destino, cópielo allí, por ejemplo:
scp -p blocksync.py usuario@10.10.10.38: blocksync.py
- Úselo para copiar el disco de origen en el disco de destino, p. Ej.
Comando que hace la copia
sudo -E python blocksync.py / dev / vg1 / vm_larry user@10.10.10.38 /dev/mapper/centos-larry.domainname.com.au -b 4194304
Nota: el primer nombre del dispositivo es para el host de origen, según lo determinado por el comando 'lvs'; este es de un host fuente [[chewie]].
Nota: esto destruirá el contenido del disco de destino, asegúrese de que /dev/mapper/centos-larry.domainname.com.au sea correcto.
Nota: la sincronización llevará mucho tiempo, aproximadamente 100 segundos por gigabyte, es decir, 90 minutos para un disco de 60 gigabytes.
Sin embargo, puede hacer una sincronización mientras la VM está en uso; las sincronizaciones posteriores pueden ser hasta un 25 por ciento más rápidas
El script imprimirá los parámetros que está utilizando (puede haber un mensaje sobre un módulo en desuso, esto está bien). A continuación, muestra el comando ssh que está utilizando y lo ejecuta (verá el mensaje de personal autorizado solo cuando lo haga). Durante su sincronización, mostrará un total acumulado de bloques copiados y su velocidad promedio. Finalmente, imprime un mensaje de finalización con la cantidad de segundos que tardó.
Cosas que saber
Puede cancelar la sincronización con CTRL C y reiniciarla más tarde ejecutando el comando nuevamente
Pasos finales en el host de destino
Nota: puede ser necesario modificar los detalles de la VM para adaptarlos al nuevo entorno.