Instructions détaillées sur la copie de machines virtuelles à l'aide de blocksync.py
Ces instructions s’appliquent à une machine virtuelle utilisant un disque fourni par LVM et supposent que Python se trouve sur chacun des hôtes.
Téléchargez le script blocksync.py à l' adresse https://gist.github.com/rcoup/1338263 et mettez-le à la fois sur les hôtes source et de destination dans votre dossier / home / user.
Précurseur
- Vous devez avoir un accès 'ssh' aux deux machines (source et cible) pour votre utilisateur.
Vous aurez également besoin d'un accès «sudo» à «root» sur les deux machines.
Alternativement, vous pouvez tout faire en tant que root, mais uniquement 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.
Exemple de paramètres
- La machine virtuelle est sur l'hôte dom0 appelé chewie.
- La destination souhaitée sur l'hôte dom0 est connue sous le nom de darth et possède ici une adresse IP interne 10.10.10.38 (pour notre exemple)
- Dans notre cas actuel, nous utilisons centos 7 comme système d'exploitation dom0 sur les deux machines.
- La machine VIRTUELLE dans ce cas nous nous déplaçons s'appelle LARRY
- L'utilisateur effectuant l'action est USER (qui sera votre nom)
- DOM0 signifie le serveur physique réel
Procédure
Premières étapes sur l'hôte source
- Connectez-vous à l'hôte dom0 qui possède actuellement la machine (l'hôte "source"), par exemple:
ssh utilisateur@chewie.nomdomaine.com.au
- Restez en tant qu'utilisateur pour ne pas devenir utilisateur sudo * Répertoriez les machines avec
sudo virsh --all
- Vider 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.xml
vous pouvez remplacer l'ip interne par le nom de votre serveur dom0 de destination ** Remarque: il est préférable d'utiliser l'adresse ip de la cible, par exemple: scp -p larry.xml utilisateur@10.10.10.38: larry.xml
Si vous ne pouvez pas copier en raison de clés le chat larry.xml et le copier, vous pouvez alors ssh dans une autre machine, créer un fichier et le coller.
Recherchez la taille et le nom du disque de la machine virtuelle à l'aide de
sudo lvs --units B
.
** La commande ci-dessus devrait afficher la taille exactement en octets. ** Le nom du disque de la machine est dans la première colonne de la liste, son groupe de volumes dans la seconde et sa taille dans la dernière. ** Déterminez le nom du périphérique sous la forme / dev // ** Vérifiez-le avec une commande 'll' Par exemple, dans cette sortie: vm_larry vg1 -wi-ao ---- 69793218560B
LV VG Attr LSize Pool Data Origin% 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
Premières étapes sur l'hôte cible
- Connectez-vous à l'hôte cible, par exemple
ssh utilisateur@darth.nomdomaine.com.au
- Restez en tant que votre propre utilisateur. c'est-à-dire ne devenez pas root.
Créez un fichier de définition de volume, par exemple:
vi larry.nomdedomaine.com.au-vol.xml
ou nano larry.nomdomaine.com.au-vol.xml
avec les lignes suivantes: NOTE - Vous devrez prendre la taille en octets de la machine virtuelle d’origine 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>
Remarque: cette définition concerne un disque 69793218560 octets pour la machine virtuelle larry, modifiez-la si nécessaire pour la machine virtuelle 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 va dire Vol larry.domainname.com.au créé à partir de larry.domainname.com.au-vol.xml
Rendre le fichier de périphérique de disque accessible:
sudo chgrp wheel /dev/mapper/centos-larry.nomdomaine.com.au
sudo chmod g + rw /dev/mapper/centos-larry.domainname.com.au
Editez la définition XML copiée, par exemple:
vi larry.xml
Recherchez la définition du disque dans le fichier (recherchez "source dev =") et remplacez le périphérique par celui que vous venez de créer (vous pouvez ls / dev / centos / pour voir vm), par exemple: / dev / drbd4 -> / dev / centos / larry.domainname.com.au
Ce changement de pont était unique à notre situation.
** Recherchez les références à "br1" dans les strophes d'interface et remplacez-le par "br0", par exemple, vous modifiez le pont source de façon à ce que la ligne ressemble à ceci
Dernières étapes sur l'hôte source
Connectez-vous à l'hôte source, par exemple
ssh utilisateur@chewie.nomdomaine.com.au
La meilleure pratique consiste à arrêter la machine virtuelle sur l'hôte source avant de procéder à la synchronisation finale, mais cela n'est pas nécessairement le cas. (virsh shutdown NameOfMachine)
Si ce n'est pas déjà fait sur l'hôte source, téléchargez le script blocksync.py à l' adresse https://gist.github.com/rcoup/1338263.
Si votre nom d'utilisateur est utilisateur (par exemple), copiez le script blocksync.py sur les deux machines dans / home / user et chown user: user et chmod 755 le script.
- Si ce n'est pas déjà fait sur l'hôte cible, copiez-le là, par exemple:
scp -p blocksync.py utilisateur@10.10.10.38: blocksync.py
- Utilisez-le pour copier le disque source sur le disque cible, par exemple
Commande qui fait 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, comme déterminé à partir de la commande 'lvs'; celui-ci provient d'un hôte source [[chewie]].
Remarque: ceci détruira 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 lorsque la machine virtuelle est en cours d'utilisation. les synchronisations suivantes peuvent être jusqu'à 25% plus rapides
Le script affichera les paramètres qu’il utilise (un message concernant un module obsolète peut apparaître, c’est acceptable). Ensuite, il affiche la commande ssh qu'il utilise et l'exécute (vous verrez alors le message réservé au personnel autorisé uniquement). Lors de sa synchronisation, il affichera le total cumulé des blocs copiés et sa vitesse moyenne. Enfin, il affiche un message d'achèvement avec le nombre de secondes qu'il a pris.
Choses à savoir
Vous pouvez annuler la synchronisation avec CTRL C et la redémarrer ultérieurement en réexécutant la commande.
Dernières étapes sur l'hôte cible
Remarque: il peut être nécessaire de modifier les détails de la machine virtuelle pour les adapter au nouvel environnement.