Rsync

De UnixManiax
Aller à la navigation Aller à la recherche


Présentation

Rsync est un outil disponible sur tous les unix, parfois en option, parfois installé par défaut. Il sert à synchroniser des fichiers ou des répertoires, en local, ou entre machines distantes. Il permet de ne mettre à jour que ce qui a changé, pour économiser du temps et de la bande passante (pour celà, il se base sur la taille et sur la date de dernière modification). Par exemple, on a une machine A qui contient un répertoire REP avec des fichiers et des sous-répertoires. Lorsqu'on fait un rsync de REP de la machine A vers la machine B, au premier rsync il va tout copier. Et quand on va relancer rsync, il va prendre un peu de temps pour regarder ce qui a changé, et ne va synchroniser que ce qui en a besoin. C'est donc une solution de sauvegarde très pratique.

Rsync dispose d'un grand nombre d'options, qui permettent énormément de souplesse. On peut par exemple conserver les droits ou non, supprimer sur la cible les fichiers qui n'existent plus sur la source, compresser les données pendant le transfert, passer par un tunnel ssh, etc. On peut également mettre en place un serveur rsync, mais je n'aborderai pas ce sujet ici. La page man de rsync donne tous les détails.

Syntaxe et principales options

La syntaxe de rsync est de la forme :

rsync -options /repertoire_source /repertoire_destination

Exemple :

rsync -avz -e ssh --delete /home/fred/data/ fred@serveur:/backup/fred/

Remarque : le "/" à la fin du nom des répertoires permet de ne pas prendre le répertoire lui-même, mais uniquement son contenu. Pour prendre également le répertoire, il suffit d'enlever le "/".

Toutes les options sont disponibles dans la page man de rsync. Celles qui me paraissent les plus intéressantes sont rassemblées dans le tableau ci-dessous.

-a mode archive (équivalent des options rlptgoD) : récursif, les liens symboliques restent des liens symboliques, préserve les permissions, préserve les dates de modification et préserve les fichiers spéciaux.
-v verbose : mode bavard
-z compresse les données pendant le transfert
-P affiche la progression du transfert (si on met aussi -v) et permet de reprendre le transfert de fichiers partiellement transmis
-e ssh passe par un tunnel ssh
--delete les fichiers qui n'existent plus sur la machine source seront également supprimés sur la machine cible
-r (inclu dans -a) récursif (parcours les sous-répertoires)
-p (inclu dans -a) conserve les permissions des fichiers
-t (inclu dans -a) conserve les dates de modification
-c la comparaison est basée sur un checksum plutôt que sur la taille et la date de modif des fichiers
--exclude="*texte*" exclue tous et les fichiers et répertoires contenant "texte"

Les pièges

Pour fonctionner, rsync a besoin d'être installé sur les deux machines qui communiquent. Et surtout, il a besoin d'avoir le même chemin absolu sur les deux machines ! Pour deux linux, ça ne posera probablement pas de problème, mais d'un linux à un autre unix, ça peut poser problème. Par exemple, sur Mandriva, le nom absolu de rsync est "/usr/bin/rsync", mais sur Solaris, c'est "/usr/local/bin/rsync".

Si on est dans ce cas, la communication va se faire entre les deux machines, puis elles vont se déconnecter aussitôt, avec un message du type :

rsync: connection unexpectedly closed (0 bytes received so far) [receiver] 			
rsync error: error in rsync protocol data stream (code 12) at io.c(635) [receiver=3.0.2]

La résolution de ce problème est en fait extrêment simple. Il suffit de faire des liens de la commande avec le nom de l'autre machine. Pour l'exemple précédent, sur la machine Mandriva, on tapera "ln -s /usr/bin/rsync /usr/local/bin/rsync", et sur la machine Solaris "ln -s /usr/local/bin/rsync /usr/bin/rsync".

rsync sous Windows

Pour utiliser rsync sous Windows (en ligne de commande, comme sous unix), il faut récupérer les trois fichiers suivants, et les mettre dans "C:\Windows\system32".


Ensuite, le principe est exactement le même et les options sont identiques. La seule différence se situe au niveau de la syntaxe des noms de répertoires. En effet, le lecteur "C:" se notera "/cygdrive/c/" et "D:\data\" se notera "/cygdrive/d/data/".

Si vous n'avez pas besoin des commandes en mode texte, vous pouvez alors vous tourner vers une application graphique comme SyncBack.