Dupliquer un système Linux avec rsync

Migrer un système Linux d’une machine à une autre (ou d’un disque dur à un autre) est une opération relativement aisée grâce à l’outil rsync. Voici une marche à suivre qui vous permettra de dupliquer un système Linux, de disque à disque ou par réseau, et en live ou non.

Tout d’abord, il va falloir préparer le disque dur cible, celui qui va recevoir le système. Celui-ci doit être au moins aussi grand que la quantité de place utilisée actuellement par le système (df). Préparez-le à partir d’un système temporaire, via un CD live, une clé USB ou par PXE. Assurez-vous de créer les mêmes partitions, ou si vous souhaitez changer de partitionnement, il vous faudra alors modifier quelques fichiers système (/etc/fstab et probablement votre lilo/grub). Idem pour le formatage des partitions : assurez-vous de formater avec les mêmes systèmes de fichiers, ou modifiez votre fstab (assurez-vous que votre noyau ou votre initrd soit capable de monter la partition root !).

Toujours dans le système live, voici ensuite la commande à entrer pour réaliser la copie (à adapter selon vos besoin) :

rsync -vauz --delete --rsh=ssh --stats --numeric-ids --exclude '/proc/*' --exclude '/sys/*' --exclude '/run/*' --exclude '/tmp/*' root@192.168.0.1:/* /mnt/tmp/

Explications des options :

  • -v : voir les fichiers pendant la copie
  • -a : mode archive (active plusieurs modes permettant la copie conforme des fichiers)
  • -u : mode mise à jour : si un fichier local est plus récent, ne pas le remodifier (pratique lorsque vous souhaitez mettre à jour votre système sans toucher aux modifications locales)
  • -z : active la compression (inutile si la copie se fait entre deux disques locaux)
  • –delete : supprime les fichiers absents de la machine source. Astuce : il est aussi possible d’utiliser l’option –delete-before afin de supprimer les fichiers avant de copier les nouveaux fichiers, afin de libérer de l’espace sur la machine destination. Cependant, cela ralenti un peu le rsync car tous les fichiers doivent être scannés avant d’entamer la première copie.
  • –rsh=ssh : utilise ssh pour la connexion entre les machines (inutile aussi si copie locale)
  • –stats : affiche des statistiques sur la copie des fichiers à la fin
  • –numeric-ids : copie les permissions avec les valeurs numériques et non les noms, évitant ainsi une mauvaise translation de numéros d’utilisateurs.
  • –exclude ‘…’ : exclure certains fichiers de la copie, tels que /proc/, /sys/, /run/ et /tmp/. Vous pouvez ajouter vos propres dossiers, comme par exemple : –exclude ‘/home/squid/cache/*’ (voir plus bas pour la syntaxe un peu particulière des exclude).
  • Et enfin, la source et la destination. Ici en l’occurence, il s’agit de copier un système qui fonctionne actuellement, vers un disque dont l’arborescence est montée localement sur /mnt/tmp (les sous-dossiers /mnt/tmp/boot et /mnt/tmp/home sont également montés dans mon cas).
  • Conseil : ajoutez l’option -n pour afficher la liste des fichiers à copier, sans réaliser la copie.
  • Pour les impatients, vous pouvez ajouter l’option -P qui affichera l’avancement et qui permettra de reprendre la copie au milieu d’un fichier interrompu.

Rappel de la syntaxe des exclusions :

‘/dir/’ signifie d’exclure le dossier racine /dir

‘/dir/*’ signifie de récupérer le dossier racine /dir mais pas son contenu

‘dir/’ signifie d’exclure tout dossier n’importe où dont le nom contient dir/
Par exemple : /dir/, /usr/share/mydir/, /var/spool/dir/

‘/dir’ signifie d’exclure tout dossier n’importe où dont le nom contient /dir
Par exemple : /dir/, /usr/share/directory/, /var/spool/dir/

/var/spool/lpd//cf signifie d’exclure tout fichier qui commence par cf dans n’importe quel dossier dans /var/spool/lpd

Afin de terminer, il faut maintenant installer le gestionnaire de démarrage lilo ou grub. Dans mon cas, c’est un lilo :

cd /mnt/tmp
mount -t proc proc proc
mount -t sysfs sys sys
chroot .
lilo
exit
reboot