Migration de VM ou hardware


La méthode permet un remplacement de hardware (ou pseudo hardware) avec une coupure de services très courte, de l’ordre de quelques secondes, dans les cas suivants :

  • machine physique vers une autre machine physique,
  • machine physique vers une autre machine virtuelle,
  • machine virtuelle vers une autre machine virtuelle,
  • changement d’hébergeur,
  • changement de disque dur,
  • ...

La méthode décrite utilise des systèmes GNU/Linux Debian, mais peut être adaptée aux autres distributions.

L’ordre des opérations est à adapter pour avoir une coupure de service minimum.

1) Installer une nouvelle machine avec un partitionnement adéquat et éventuellement des volumes logiques.

2) Exécuter une première fois le code rsync ci-dessous :

rsync -azv --numeric-ids --bwlimit=7500 $SOURCE:/ / \
        --exclude='/dev/*' \
        --exclude='/etc/lvm*' \
        --exclude='/etc/mtab' \
        --exclude='/etc/fstab' \
        --exclude='/boot/*' \
        --exclude='/lib/modules/*' \
        --exclude='/proc/*' \
        --exclude='/sys/*' \
        --exclude='/etc/udev/rules.d/*' \
        --exclude='/etc/hostname' \
        --exclude='/etc/hosts' \
        --exclude='/etc/network/interfaces' \
        --exclude='/etc/network/interfaces.d/*' \
        --exclude='/etc/ssh/*' \
        --exclude='/root/.ssh' \
        --exclude='/etc/mdadm/mdadm.conf'



3) Stopper tous les processus sur la machine source.

4) Stopper tous les processus sur la machine nouvelle.

5) Exécuter à nouveau un script de synchronisation des données ci-dessous. Attention, celui-ci détruit les données sur la machine nouvelle, il faut donc l’adapter avec soin :

rsync -azv --delete --numeric-ids $SOURCE:/ / \
        --exclude='/dev/*' \
        --exclude='/etc/lvm*' \
        --exclude='/etc/mtab' \
        --exclude='/etc/fstab' \
        --exclude='/boot/*' \
        --exclude='/lib/modules/*' \
        --exclude='/proc/*' \
        --exclude='/sys/*' \
        --exclude='/etc/udev/rules.d/*' \
        --exclude='/etc/hostname' \
        --exclude='/etc/hosts' \
        --exclude='/etc/network/interfaces' \
        --exclude='/etc/network/interfaces.d/*' \
        --exclude='/etc/ssh/*' \
        --exclude='/root/.ssh' \
        --exclude='/etc/mdadm/mdadm.conf'



Si besoin, récupération des fichiers de la source :

rsync $SOURCE:/etc/fstab   /root/
rsync $SOURCE:/etc/hostname   /root/
rsync $SOURCE:/etc/network/interfaces     /root/
rsync $SOURCE:/etc/network/interfaces.d/* /root/
rsync -a $SOURCE:/root/.ssh/* /root/.ssh-save
rsync -a $SOURCE:/etc/ssh/* /etc/ssh-save



6) Installations complémentaires

Faire une mise à jour :

apt-get update
apt-get dist-upgrade



Dans le cas d’une migration d’une machine paravirtualisée, l’installation du noyau est nécessaire :

apt-get install linux-image-amd64



Si on a besoin de lvm2 :

apt-get install lvm2



Chargement des modules noyau : installer / mettre à jour l’image initramfs sur tous les noyaux :

apt-get install initramfs-tools
update-initramfs -u -k all



Installer le bootloader sur le device choisi, dans ce cas sur /dev/vda :

apt-get install grub2
update-grub
grub-install /dev/vda



Modifier l’IP sur la machine source ou bien simplement l’éteindre :

# ip a del $SOURCE/24 dev eth0 ; ip a add $AUTRE_IP_LIBRE/24 dev eth0 ; ip r add default via 192.168.42.1 dev eth0



Rebooter la nouvelle machine.