Rsync

Rsync (pour remote synchronization ou synchronisation à distance), est un logiciel de synchronisation de fichiers. Il est fréquemment utilisé pour mettre en place des systèmes de sauvegarde distante ou des points de restauration du système (via l’interface Timeshift).

rsync travaille de manière unidirectionnelle c’est-à-dire qu’il synchronise, copie ou actualise les données d’une source (locale ou distante) vers une destination (locale ou distante) en ne transférant que les octets des fichiers qui ont été modifiés. Sur cette page nous verrons les principales options de cet outil extraordinaire.

La commande de base est la suivante:

rsync source/ destination/

L’intérêt est une utilisation à travers le réseau. rsync utilise SSH par défaut. Un exemple :

rsync -az source/ login@serveur.org:/destination/

L’option -a est une contraction de -archive est la contraction de plusieurs options et permet de conserver la récursivité, les droits sur les fichiers, les liens symboliques etc….

L’option -z est une contraction de –compress et permet, comme son nom l’indique de compresser les fichiers lors du transfert.

Attention, il convient d’être vigilant dans l’utilisation ou non du slash (« / ») dans le chemin de la source. Ainsi, les deux commandes suivantes ne sont pas équivalentes :

rsync source destination/ 
rsync source/ destination/

En effet, la première commande va _créer_ le dossier source dans le dossier destination en ajoutant donc un niveau dans l’arborescence. La deuxième commande copie le _contenu_ du dossier source dans le dossier destination. Autrement dit, les deux commandes suivantes sont, elles, équivalentes* :

rsync source destination/ 
rsync source/ destination/source/

Enfin, il faut noter que l’utilisation ou non d’un slash final dans le chemin de la destination n’a aucune incidence. Les deux commandes suivantes sont donc équivalentes :

rsync source destination/ 
rsync source destination

* Sauf dans le cas ou source est un lien symbolique vers un répertoire, la première commande ne copie que le lien, tandis que la seconde travaille bien à l’intérieur du répertoire

L’option –dry-run permet de faire une synchronisation « à blanc » c’est à dire qu’elle ne va pas faire la copie réellement des fichier mais seulement tester. Elle n’a d’intérêt qu’utilisée avec l’option « verbose » (-v) laquelle affiche l’ensemble des actions qui se déroulent en direct:

rsync -av –dry-run source/ destination/

Vous verrez alors apparaître l’ensemble des fichiers qui auraient étés transférés si vous n’aviez pas mit l’option –dry-run

L’option –delete, quand à elle est à utiliser avec précaution. En effet elle effacera dans la destination tous les fichiers qui ne seront pas présents dans la source. À utiliser avec précaution, ou alors pensez à faire un –dry-run juste avant pour voir le résultat de la commande avant de faire éventuellement une bêtise.

rsync -av –delete –dry-run source/ destination/

Avec cette commande, la présence du « -v » vous indiquera l’ensemble des modifications qui auraient lieues si vous n’aviez pas mit l’option –dry-run.

L’option -P permet d’afficher la progression du transfert

Pour exécuter une tâche rsync entre deux serveurs distants, rsync utilise le protocole ssh. Comme on l’a vu plus haut la commande est la suivante:

rsync -azP source/ login@serveur.org:/destination/

Évidemment il faudra entrer le mot de passe ssh du serveur distant. Pour éviter cette contrainte je vous renvois à mon article sur l’échange de clefs ssh entre serveurs distants pour éviter d’avoir à taper à chaque fois son mdp. C’est au dernier paragraphe de cette page!

L’intérêt de rsync c’est que l’on peut aussi faire une synchro dans « l’autre sens », c’est à dire depuis le serveur distant vers le serveur local! Il suffit d’inverser la commande:

rsync login@serveur_distant:/source/ destination/

Créer un script avec log horodaté.

Vous pouvez avoir besoin d’avoir un retour sur la manière dont s’est passé votre backup Rsync (notamment si la sauvegarde est programmée dans un script avec déclenchement via crontab).

Supposons le script suivant:
#!/bin/sh
rsync -artvu /media/syno_video/ freebox@xx.xx.xx.xx:/mnt/Freebox/Vidéos
rsync -artvu /media/syno_zic/ freebox@xx.xx.xx.xx:/mnt/Freebox/Musiques

On pense évidemment à rendre le script éxécutable avec la commande:

sudo chmod +x script.sh

Et dans cron on tape la ligne suivante:

00 00 * * * /home/user/Documents/script.sh > $HOME/date +\%Y\%m\%d\%H\%M\%S-cron.log 2>&1

Si le script doit se lancer a minuit.