Instructions détaillées sur la copie des VMs en utilisant blocksync.py
Ces instructions s'appliquent à une VM utilisant un disque fourni par LVM et supposent que Python est sur chacun des hôtes
Téléchargez le script de blocksync.py à partir de https://gist.github.com/rcoup/1338263 et le placer sur l'hôte source et l'hôte de destination dans votre dossier /home/user.
Précurseur
-
Vous devrez disposer d'un accès "ssh" aux deux machines (source et cible) pour votre utilisateur.
-
Vous devrez également disposer d'un accès 'sudo' à 'root' sur les deux machines.
-
Vous pouvez également tout faire en tant que root, mais seulement si votre clé ssh vous donne un accès root à au moins la machine cible. ** Dans ce cas, supprimez le nom d'utilisateur des lignes de commande.
Exemples de réglages
- La machine virtuelle est sur l'hôte dom0 connu sous le nom de chewie.
- La destination souhaitée se trouve sur l'hôte dom0 connu sous le nom de darth et a une IP interne ici 10.10.10.38 (pour notre exemple).
- Dans notre cas, nous utilisons centos 7 comme système d'exploitation dom0 sur les deux machines.
- La machine virtuelle que nous déplaçons s'appelle LARRY.
- L'utilisateur qui effectue l'action est USER (qui sera votre nom).
- DOM0 signifie le serveur physique actuel
Procédure
Étapes initiales sur l'hôte source
-
Connectez-vous à l'hôte dom0 qui possède actuellement la machine (l'hôte "source"), par exemple : ssh user@chewie.domainname.com.au
-
Restez en tant que votre utilisateur, donc ne devenez pas sudo user *Liste des machines avec sudo virsh --all
-
Dump la définition de la machine en utilisant, par exemple : sudo virsh dumpxml larry > larry.xml
-
Copiez la définition vidée sur la nouvelle machine (l'hôte "cible"), par exemple :
scp -p larry.xml 10.10.10.38:larry.xmlvous pouvez changer l'ip interne par le nom de votre serveur dom0 de destination. \*\* Note : il est préférable d'utiliser l'adresse IP de la cible, par exemple : scp -p larry.xml user@10.10.10.38:larry.xml
Si vous ne pouvez pas copier à cause des clés, faites le chat larry.xml et copiez-le. Ensuite, vous pouvez vous connecter à une autre machine, créer le fichier et le coller.
-
Trouvez la taille et le nom du disque de la VM en utilisant
sudo lvs --units B.
** La commande ci-dessus devrait montrer la taille exacte en octets. ** Le nom du disque de la machine est dans la première colonne de la liste, son groupe de volume dans la deuxième, et la taille dans la dernière. ** Déterminez le nom du périphérique comme étant /dev//. ** Vérifiez-le avec une commande 'll'. Par exemple, dans cette sortie : 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
-
Le nom du disque est 'vm_larry', le groupe de volume est 'vg1'.
-
Le nom du périphérique est /dev/vg1/vm_larry
-
Sortie par exemple : ls -l /dev/vg1/vm_larryest : lrwxrwxrwx. 1 root root 8 Jan 31 13:57 /dev/vg1/vm_larry -> ../dm-11
Étapes initiales sur l'hôte cible
- Connectez-vous à l'hôte cible, par exemple ssh user@darth.domainname.com.au
- Restez votre propre utilisateur, c'est-à-dire ne devenez pas root.
-
Créer un fichier de définition de volume, par exemple :
vi larry.domainname.com.au-vol.xmlo nano larry.domainname.com.au-vol.xmlavec les lignes suivantes : NOTE - Vous devrez prendre la taille en octets de la VM originale et la mettre dans le script ci-dessous. La commande sur la machine source pour la taille était 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>
Note : cette définition est pour un disque de 69793218560 Bytes pour la VM larry, changez si nécessaire pour la VM réelle.
Remarque : le nom et la dernière partie du chemin doivent correspondre et seront utilisés comme nouveau nom de disque.
Créez le nouveau disque à partir de la définition, en utilisant
sudo virsh vol-create --pool centos larry.domainname.com.au-vol.xml
il dira Vol larry.domainname.com.au créé à partir de larry.domainname.com.au-vol.xml
Rendre accessible le fichier de l'unité de disque :
sudo chgrp wheel /dev/mapper/centos-larry.domainname.com.au sudo chmod g+rw /dev/mapper/centos-larry.domainname.com.au
Modifiez la définition xml copiée, par exemple :
vi larry.xml
Trouvez la définition du disque dans le fichier (recherchez "source dev =") et remplacez le périphérique par celui qui vient d'être créé (vous pouvez ls /dev/centos/ pour voir le vm), par exemple : /dev/drbd4 -> /dev/centos/larry.domainname.com.au
Ce changement de pont était unique dans notre situation.
** Trouvez toutes les références à "br1" dans les strophes de l'interface et remplacez-les par "br0".
Dernières étapes sur l'hôte source
-
Connectez-vous à l'hôte source, par exemple
ssh user@chewie.domainname.com.au
-
La meilleure pratique serait d'arrêter la VM sur l'hôte source avant de faire la synchronisation finale, mais cela n'est pas nécessaire. (virsh shutdown NomDeLaMachine)
-
S'il n'est pas déjà sur l'hôte source, téléchargez le script de blocksync.py à partir de https://gist.github.com/rcoup/1338263
-
Si votre nom d'utilisateur est user (par exemple), copiez le script de blocksync.py sur les deux machines dans /home/user et chown user:user et chmod 755 le script.
-
S'il n'est pas déjà sur l'hôte cible, copiez-le là, par exemple :
scp -p blocksync.py user@10.10.10.38:blocksync.py
-
Utilisez-le pour copier le disque source sur le disque cible, par exemple
Commande qui effectue la copie
sudo -E python blocksync.py /dev/vg1/vm\_larry user@10.10.10.38 /dev/mapper/centos-larry.domainname.com.au -b 4194304
Remarque : le premier nom de périphérique correspond à l'hôte source, tel que déterminé par la commande 'lvs' ; celui-ci provient d'un hôte source [[chewie]].
Remarque : cela détruire le contenu du disque cible, assurez-vous que /dev/mapper/centos-larry.domainname.com.au est correct !
Remarque : la synchronisation prendra beaucoup de temps - environ 100 secondes par gigaoctet, soit 90 minutes pour un disque de 60 gigaoctets.
Cependant, vous pouvez effectuer une synchronisation pendant que la VM est en cours d'utilisation ; les synchronisations suivantes peuvent être jusqu'à 25 % plus rapides.
Le script imprime les paramètres qu'il utilise (il peut y avoir un message sur un module déprécié, c'est correct). Ensuite, il affiche la commande ssh qu'il utilise et l'exécute (vous verrez le message réservé au personnel autorisé lorsqu'il le fera). Pendant la synchronisation, il affiche le nombre total de blocs copiés et sa vitesse moyenne. Enfin, elle imprime un message d'achèvement avec le nombre de secondes qu'elle a pris.
Ce qu'il faut savoir
Vous pouvez annuler la synchronisation avec CTRL C et la relancer plus tard en exécutant à nouveau la commande
Dernières étapes sur l'hôte cible
- Connectez-vous à l'hôte cible, par exemple ssh user@darth.domainname.com.au
- Créer la machine virtuelle, par exemple : virsh define larry.xml
- Démarrer la machine nouvellement définie, par exemple : sudo virsh start larry
- Marquez-le pour qu'il démarre au démarrage de l'hôte, par exemple : sudo virsh autostart larry
Remarque : il peut être nécessaire de modifier les détails de la VM pour l'adapter au nouvel environnement.