27 juillet 2024

Migration de machines virtuelles Xen

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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *