Table des matières

,

rsync

Présentation

rsync1) (pour remote synchronization ou synchronisation à distance) est une application 2) de synchronisation de fichiers en ligne de commande. Il est parfois utilisé pour mettre en place des systèmes de sauvegardes distantes ou des points de restauration du système (par exemple via l'outil rsnapshot ou 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.

La notion d’unidirectionnalité semble parfois mal comprise : elle signifie qu'en une commande, la synchronisation ne peut se faire que dans un sens. Rien n'empêche ensuite de lancer une autre commande pour effectuer l'opération dans l'autre sens !

En particulier pour une entreprise, un serveur de synchronisation est utile pour centraliser les sauvegardes sur une même machine équipée accessoirement d'un enregistreur de bande.

Pour un particulier habitué à la ligne de commande, il est intéressant (si vous avez plusieurs machines), d'avoir une sauvegarde simple et rapide de son Dossier Personnel.

Ici nous verrons son utilisation basique. Pour plus de détails, allez voir ce tutoriel : Sauvegarder "/home" avec rsync.

Pour les personnes qui n’aiment pas la ligne de commande, il existe des interfaces graphiques à rsync, telles que Grsync.

Utilisation

Comme l'indique le manuel :

"rsync est un programme très similaire à rcp, mais possède bien plus d'options et utilise le protocole de mise à jour à distance rsync afin d'accélérer significativement le transfert de fichiers lorsque le fichier de destination existe déjà."

L'appel de base :

rsync source/ destination/

En local, pour une copie/synchro de votre répertoire vidéo vers un disque dur externe (de sauvegarde) monté dans /media/$USER/, cela donne :

rsync -av /home/$USER/Vidéos/ /media/$USER/film_music/Vidéos/

L'option -v affiche les fichiers sauvegardés au fur et à mesure. Pour l'option -a, voir plus bas. $USER est la variable d’environnement système qui permet d'accéder au nom d’utilisateur de la session en cours.
Vous pouvez relancer cette commande à chaque nouvelle synchro, seuls les nouveaux fichiers seront synchronisés.

En réseau, rsync utilise SSH par défaut. Un exemple :

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

où:

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

Pour une gestion du port ssh, utiliser la syntaxe suivante:
rsync -avz chemin/source/ -e "ssh -p port" user@ip:"/chemin/de destination avec espaces/"

Créer un dossier miroir

Voici un exemple d'une commande, utilisant le protocole SSH, qui copie à l'identique le dossier <source> vers le dossier <destination>.

Copie du dossier source vers le serveur :

rsync -e ssh -avz --delete-after /home/source user@ip_du_serveur:/dossier/destination/

où :

Si les noms des chemins contiennent des espaces, on peut les écrire entre guillemet pour échapper les espaces :

rsync -e ssh -avz --delete-after "/home/source avec espace/" user@ip_du_serveur:"/dossier/destination avec espace/"
Attention à partir de la version 3.0, d'après le man, le caractère espace doivent être échappés pour être compris et le chemin doit être indiqué entre apostrophe. Donc l'instruction précédente devient :
rsync -avz chemin/source/ -e "ssh -p port" user@ip:'/chemin/de\ destination\ avec\ espaces/'

Avec l'option -n la commande liste ce qu'elle va faire sans l'exécuter :

rsync -e ssh -avzn --delete-after /home/mondossier_source user@ip_du_serveur:/dossier/destination/

Exclure des fichiers

On peut exclure des fichiers/dossiers selon beaucoup de schémas. C'est utile pour ne pas sauvegarder le cache, les fichiers temporaires, le répertoire .git, la corbeille, etc…

L'exclusion d'un dossier est identique à l'exclusion d'un fichier : il suffit d'indiquer le chemin d'accès relatif au répertoire source.

Inclure des fichiers

Dès lors qu'on exclut, il peut être nécessaire d'inclure.

Attention, --include ne s'utilise qu'avec --exclude, et n'est qu'une exception à ce dernier (qui doit toujours suivre le --include).
Exemple, vous souhaitez ne synchroniser qu'un type de fichier, mettons des .csv, cela donne :

rsync --include="*.csv" --exclude="*" source/ destination/

Cette commande se lit ainsi : exclure tout (c'est le caractère *) ce qui est dans source/ sauf les fichiers .csv, qui seront donc les seuls à être copiés.

La commande suivante copie 3 répertoires (et leur contenu) depuis le répertoire /user/. les autres répertoires ou fichiers ne sont pas transférés.

rsync -av --include={'Documents/***','Images/***','snap/***'} --exclude=* /home/user/ destination/

Le caractère générique *** (3 étoiles) est fondamental pour les répertoires dans le --include. Il indique que le --include ne vaut pas que pour le répertoire, mais aussi pour tout ce qu'il contient. Sans lui, c'est un répertoire vide qui est transféré.

Quelques options

De nombreuses options existent (voir ici), en voici quelques unes :

Sauvegarde distante du serveur web

Cas présenté :

Pour l'exemple qui suit :

  1. sur la machine locale, on devient www-data pour travailler avec les droits de ce dernier
  2. www-data exécute la commande rsync qui va établir une connexion via SSH au serveur distant avec le compte utilisateur (on peut avoir besoin de saisir le mot de passe de l'utilisateur distant si on n'a pas déposé de clef publique)
  3. sur le serveur distant, via SSH, utilisateur va lancer sudo pour devenir www-data
  4. www-data exécute la commande rsync qui échange les informations avec la machine locale

Sur le serveur distant :

Sur la machine locale :

Interface graphique : Grsync ou Timeshift

Les logiciels graphiques utilisant rsync sont assez nombreux. Certains font plutôt de la sauvegarde du système, de la sauvegarde de données, de la pure synchronisation…

Voir aussi les pages synchronisation et sauvegarde pour trouver éventuellement d'autres interfaces graphiques.
On peut aussi rechercher rsync dans le Centre d'applications ou sur GNOME Logiciels, ainsi que sur Snapcraft et Flathub.

Voir aussi

Tutoriels

Source de ce tutoriel, adaptée pour le cas présenté


Contributeur : ostaquet, jahwork

2)
sous licence GNU GPL
3)
« traduction de Denis Mertz, 2002. Mise à jour par Éric Piel <eric POINT piel AT tremplin-utc POINT net>, 2005. Relecture par Frédéric Delanoy et Julien Soula. » (extrait de développez.com, 2005) (Lien mort? autre solution, même contenu).