Migrations via Rsync

Utilisation de SysrescueCD pour les migrations

Introduction

Ce tutoriel étape par étape peut être utilisé pour migrer un serveur physique ou une machine virtuelle vers une autre machine ou VM.
Cela peut être bénéfique pour les scénarios suivants :

Prérequis

Configuration de SysrescueCD

Sur SysrescueCD :

loadkeys fr # ou setkmap fr
passwd # Définir un mot de passe fort
systemctl stop iptables

Trouvez le nom de votre interface réseau :

ip a

Configurez l'interface réseau avec une IP libre, en remplaçant nom_interface par le nom trouvé précédemment (ex: ens32, eth0, etc.) :

ip addr add 192.168.1.XX/24 dev nom_interface
ip route add default via 192.168.1.1
# Vous devrez peut-être exécuter les commandes réseau deux fois
# Vous devrez peut-être attendre 2 minutes

Une fois connecté en SSH :

fdisk /dev/sda # Créer une nouvelle partition (n,p,enter,enter,enter,w)
mkfs.ext4 -j /dev/sda1
mount /dev/sda1 /mnt

Sur le serveur source

Vous avez deux options pour lancer le script rsync sur la source afin d'éviter les déconnexions : screen ou byobu.

Option 1 : Utiliser screen

screen -S migration # Lancer une nouvelle session screen nommée "migration"
# Lancez votre script rsync ici

Pour détacher la session, appuyez sur Ctrl+a puis d.
Pour la récupérer plus tard :

screen -r migration

Option 2 : Utiliser byobu

byobu -S migration # Lancer une nouvelle session byobu nommée "migration" 
# Lancez votre script rsync ici

Pour détacher la session, appuyez sur Ctrl+a puis d.
Pour la récupérer plus tard :

byobu -r migration

N'oubliez pas de quitter votre session une fois terminé.

Créez un script à usage unique pour synchroniser la majorité des fichiers et configurations du serveur.
Personnalisez ce script selon vos besoins :

#!/bin/bash

rsync -av --dry-run \
      --bwlimit="10m" \
      --exclude="/etc/lvm/*" \
      --exclude="/proc/*" \
      --exclude="/tmp/*" \
      --exclude="/sys/*" \
      --exclude="/dev/*" \
      --exclude="/mnt/*" \
      --exclude="/run/*" \
      --exclude="/etc/udev/rules.d/*" \
      --exclude="/lost+found" \
      --exclude="/usr/lost+found" \
      --exclude="/var/lost+found" \
      --exclude="/var/www/lost+found" \
      / root@192.168.1.XX:/mnt/

Configuration de la VM

Une fois rsync terminé, rebootez SysrescueCD puis montez et chroot dans votre système par SSH :

mount /dev/sda1 /mnt
mount -t proc proc /mnt/proc
mount -t sysfs sys /mnt/sys
mount -o bind /dev /mnt/dev
chroot /mnt /bin/bash

Récupérez l'UUID de la partition racine (/dev/sda1) :

blkid /dev/sda1  

Éditez le fichier /etc/fstab et commentez les anciens montages qui ne sont plus nécessaires.
Ajoutez la ligne suivante pour monter /dev/sda1 en tant que partition racine, en remplaçant <UUID> par l'UUID récupéré précédemment :

UUID=<UUID> / ext4 defaults 0 1

Si le serveur source utilise LVM, supprimez la configuration LVM et les paquets associés :

apt-get remove lvm2
rm -rf /etc/lvm

Mettez à jour Grub si nécessaire (par exemple si vous utilisez extlinux) :

# Mise à jour Grub basique
grub-install -v --force /dev/sda
update-grub

# Sur VM extlinux ou grub corrompu  
# Si pas de commande grub-install : apt install grub2 et sélectionner /dev/sda
cd /boot ; rm -Rf extlinux ; rm *cloud*
apt-get install linux-image-amd64
update-initramfs -c -k all
grub-install -v --force /dev/sda
update-grub

Mettez à jour votre réseau :

vim /etc/network/interfaces # Éditer l'interface, vous pouvez garder eth0
grep -iR 10.160.XXX.XXX /etc
sed -i 's/10\.160\.XXX\.XXX/192\.168\.1\.XX/g' votre_fichier  

Si vous utilisez Plesk, mettez à jour l'IP dans la base de données avec un script Plesk :

/opt/psa/bin/reconfigurator mapfile
# Éditer mapfile :
# eth0 10.168.X.X 255.255.255.0 -> eth0 192.168.1.X 255.255.255.0
# Reconfigurer : 
/opt/psa/bin/reconfigurator mapfile

plesk repair all -y # Peut être très long, ne pas faire sans problèmes

Installez/supprimez des packages si besoin :

apt-get install open-vm-tools
apt-get install shorewall # Ne pas utiliser avec Plesk
apt-get remove cloud-init

Avant de redémarrer, prenez un snapshot de la VM pour éviter de refaire la configuration IP en cas d'échec.

Essayez votre VM :

exit
umount /mnt/{proc,sys,dev}
umount /mnt
reboot  

Dernière synchronisation

Exécutez un rsync final avant de finaliser la migration.
Modifiez le script selon vos besoins.

Évitez de synchroniser l'intégralité pour ne pas écraser vos modifications.
Utilisez l'option --delete pour garder les données à jour.

Arrêtez tous les services (mysql, etc.) avant d'exécuter en tant que root (éditer /etc/sshd_config).

Exemples de scripts rsync :

#!/bin/bash
rsync -avz --delete /var/qmail/ root@192.168.1.XX:/var/qmail/

#!/bin/bash
rsync -avz --delete /var/lib/mysql/ root@192.168.1.XX:/var/lib/mysql/

#!/bin/bash  
rsync -avz --delete --exclude="/var/www/vhosts/system" /var/www/vhosts/ root@192.168.1.XX:/var/www/vhosts/

#!/bin/bash
rsync -avz --delete /var/lib/psa/dumps/ root@192.168.1.XX:/var/lib/psa/dumps/

Informations supplémentaires

Créer un swapfile si besoin :

fallocate -l 1G /.swapfile # OU dd if=/dev/zero of=/.swapfile bs=1M count=10240
chmod 600 /.swapfile
mkswap /.swapfile 
swapon /.swapfile
swapon -s
echo "/.swapfile none swap sw 0 0" >> /etc/fstab

En cas d'erreur "PTY allocation request failed" durant SSH :

mount devpts /dev/pts -t devpts
# Puis redémarrez votre connexion SSH  

Quelques considérations finales :

Ce guide vous fournit un cadre général pour réaliser des migrations de serveurs Linux avec SysrescueCD et rsync.
Les détails peuvent varier selon vos versions d'OS et vos besoins spécifiques.

N'hésitez pas à l'adapter en fonction de votre contexte.
Réalisez toujours des tests approfondis avant de finaliser la migration et prévoyez un plan de retour arrière.

Une bonne préparation, une exécution minutieuse et de la patience vous permettront de réaliser des migrations réussies, en minimisant les interruptions de service.

Avec ce document détaillé, vous avez en main les informations clés pour migrer efficacement vos serveurs Linux d'un environnement à l'autre en utilisant les outils SysrescueCD et rsync.