Synchronisation de deux répertoires avec rsync

Publié le 12 novembre 2008 par Nicolargo

Rsync est un utilitaire présent sur tout les systèmes Unix (de Linux à FreeBSD en passant par Mac OS X et même sous Windows en passant par Cygwin) et ayant pour but la synchronisation de fichiers/répertoires. Cette synchronisation peut se faire soit de manière locale (par exemple deux répertoire d’un même disque) soit par le réseau (via le protocole SSH).

Un petit exemple valant mieux qu’un long discours…

Imaginons que l ‘on veuille synchroniser un répertoire (/home/nicolargo/src) avec un autre stocké sur une clés USB (/media/uskkey/dst).

Le répertoire src contient 3 fichiers:

ls /home/nicolargo/src

1

2

3

Le répertoire dst est vide:

ls /media/usbkey/dst

Pour synchroniser le répertoire dst avec le contenu du répertoire src, il faut saisir la commande suivant:

rsync -av –delete /home/nicolargo/src/ /media/usbkey/dst

building file list … done

./

1

2

3

wrote 231 bytes read 80 bytes 622.00 bytes/sec

total size is 0 speedup is 0.00

/home/nicolargo/src est le répertoire source.

/media/usbkey/dst est le répertoire destination.

L’option -a (pour archive) permet de garder les propriétés des fichiers (droits, propriétaire, lien symbolique) intactes. L’option -v (verbose) permet d’afficher ce que fait rsync pendant sont exécution.

Si vous souhaitez que rsync ne créé par un répertoire src dans le répertoire dst mais qu’il mette directement les fichiers contenus dans src, il faut penser à mettre un / à la fin du répertoire source.

On vérifie que le répertoire destination contient bien les 3 fichiers.

ls /media/usbkey/dst

1

2

3

Nous allons maintenant vérifier que la commande “delete” fonctionne correctement. L’option –delete (noté le double - avant la commande) permet de supprimer dans le répertoire destination les fichiers non présents dans le répertoire source.

Nous pouvons le tester simplement en supprimant le fichier 1 du répertoire source:

rm /home/nicolargo/src/1

Puis en re-synchronisant:

rsync -av –delete /home/nicolargo/src/ /media/usbkey/dst

building file list … done

deleting 1

./

wrote 104 bytes read 20 bytes 248.00 bytes/sec

total size is 0 speedup is 0.00

On vérifie que le répertoire destination contient seulement 2 fichiers.

ls /media/usbkey/dst

2

3

Quelques options utiles…

Rsync fourmille d’options (je vous laisse consulter le man page pour une liste exhaustive). Voici quelques options que je trouve utile de détailler.

Synchronisation à travers un tunnel SSH

Si votre répertoire destination se trouve sur une autre machine disposant d’un serveur SSH correctement configuré (nommé serveur dans mon exemple ci-dessous), il est possible de faire une synchronisation à travers le réseau grâce à la commande suivante:

rsync -avz -e ssh –delete /home/nicolargo/src/ serveur:/home/nicolargo/dst

J’ai ici ajouté l’option -z afin de compresser les données avant de les envoyer dans le réseau.

Utilisation de Rsync comme d’un daemon

Il est possible de lancer Rsync en mode daemon en utilisant l’option –daemon. Dans ce cas, on peut se passer d’un serveur SSH. Le daemon écoutera (sur le port TCP/873) les requêtes de synchronisation venant de machine lancant Rsync en mode client (voir la syntaxe dans les chapitre précédant).

Vous trouverez un exemple de configuration de Rsync en mode daemon ici.

Exclure des fichiers de la synchronisation

Si l’on souhaite exclure certain fichier de la synchronisation, on peut utiliser l’option –exclude.

Exemple ou l’on souhaite synchroniser tous les fichiers sauf ceux ayant pour extension .log:

rsync -av –exclude “*.log” –delete /home/nicolargo/src/ /media/usbkey/dst

Et si je veux simuler

Très facile Simone, il suffit d’utiliser l’option -n. Utilisée avec l’option -v, on aura la liste des fichiers qui seront copiés ou effacés…

Pour finir…

Et voilà pour cette très courte introduction à ce précieux outils. Si vous utilisez ce logiciel et que vous avez des options intéressantes à expliquer, les commentaires sont fait pour ça