Petit article sur une manipulation que je suis amené à effectuer lors des changements de box : la migration de VMs d’un hyperviseur à un autre.
Rien de complexe dans la manipulation, dd étant un outil simple mais efficace.
I – Ancien serveur
Tout d’abord, nous allons renseigner l’adresse du nouveau serveur dans une variable :
# NEWSERV = ip.du.nouveau.serveur
Nous allons ensuite créer une clef RSA afin d’éviter les saisies de mot de passe :
# ssh-keygen -t rsa -N “” -f ${HOME}/.ssh/id_rsa # ssh-copy-id -i ${HOME}/.ssh/id_rsa.pub “-p port_ecoute_ssh root@${NEWSERV}”
Renseignez le nom de la machine virtuelle que vous souhaitez migrer :
# VM_NAME=exemple
Nous récupérons le fichier de configuration de la machine virtuelle pour le copier sur le nouveau serveur :
# VM_CONFIG=$(find /etc/xen -name “${VM_NAME}.cfg”) # scp -P port_ecoute_ssh -i ${HOME}/.ssh/temporary_id_rsa ${VM_CONFIG} root@${TARGET_SERVER}:/etc/xen
Prenons connaissance de la taille des partitions utilisé par la vm :
# lvdisplay /dev/vg0/$VM_NAME-disk | grep “LV Size” # lvdisplay /dev/vg0/$VM_NAME-swap| grep “LV Size”
On va alors renseigner les tailles :
# LV_SIZE=“XXGb” # LV_SIZE_SWAP=“XXGb”
On va créer la suite de commande pour créer les volumes disk, swap et formater ce dernier en swap. Puis on lance la commande sur le serveur distant :
# SHELL_COMMAND=“lvcreate -n ${VM_NAME}-disk -L ${LV_SIZE} vg0 && lvcreate -n ${VM_NAME}-swap -L ${LV_SIZE_SWAP} vg0 && mkswap /dev/vg0/${VM_NAME}-swap” # ssh -i ${HOME}/.ssh/temporary_id_rsa -p 23 root@${TARGET_SERVER} “${SHELL_COMMAND}”
II – Migration
Pour finir, on lance la migration à proprement parlé :
# dd if=/dev/vg0/${VM_NAME}-disk | ssh -i ${HOME}/.ssh/temporary_id_rsa -p 23 root@${TARGET_SERVER} dd of=/dev/vg0/${VM_NAME}-disk
Maintenant, il faut attendre la fin de la copie. On va donc se faire un café (oui, encore…). dd ne donnant pas d’indications sur l’état de la copie, il faut simplement…. attendre. Je suppute qu’il doit y avoir moyen d’avoir un pourcentage, etc…, mais j’avoue que pour le moment, je n’ai pas cherché.
III – Nouveau Serveur
Sur la nouvelle machine, on édite le fichier /etc/xen/exemple.cfg pour pointer sur les bons noyaux, par exemple, au moment de l’écriture de ce tutoriel :
kernel = '/boot/vmlinuz-4.9.0-6-amd64' extra = 'elevator=noop' ramdisk = '/boot/initrd.img-4.9.0-6-amd64'
On vérifie que le reste de la config est valable (réseau par exemple).
On lance pour tester et normalement, pas de soucis. J’utilise cela à chaque fois, et même si mon nouveau Xen est dans une version récente de Debian, mes anciennes VMs (généralement, une ou deux versions antérieures) tournent sans aucuns problèmes.