rsync est un outil po­ly­va­lent qui simplifie le transfert de fichiers via des con­nexions réseau et accélère la syn­chro­ni­sa­tion des ré­per­toires locaux. Sa grande flexi­bi­lité fait de cet outil de syn­chro­ni­sa­tion une ex­cel­lente option pour une multitude d’opé­ra­tions au niveau des fichiers.

Qu’est-ce que rsync ?

rsync, abré­via­tion de « remote syn­chro­ni­za­tion » (syn­chro­ni­sa­tion à distance), est un outil de syn­chro­ni­sa­tion flexible et com­pa­tible avec le réseau sous Linux. Ce programme open source permet de syn­chro­ni­ser des fichiers et des ré­per­toires entre des systèmes locaux ou sur des réseaux. Pour ce faire, l’outil utilise une technique de transfert de données dif­fé­ren­tielle, dans laquelle seules les sections de données réel­le­ment modifiées sont trans­fé­rées. Cela permet de minimiser l’échange de données et d’accélérer con­si­dé­ra­ble­ment le processus de syn­chro­ni­sa­tion. Grâce à une multitude d’options, rsync permet un contrôle précis du com­por­te­ment de syn­chro­ni­sa­tion. La syntaxe flexible permet aussi bien des copies locales simples que des syn­chro­ni­sa­tions réseau complexes.

La syntaxe de rsync

La syntaxe de rsync est simple et ressemble à celle de SSH, SCP et CP. La structure de base est la suivante :

rsync [OPTION] source destination
bash

Le chemin source à partir duquel les données doivent être syn­chro­ni­sées est saisi dans source, tandis que le chemin cible est indiqué dans destination. Pour cela, rsync propose une variété d’options qui per­met­tent d’adapter le processus de syn­chro­ni­sa­tion aux exigences res­pec­tives de la source ou de la des­ti­na­tion. Les options les plus fré­quem­ment utilisées sont :

  • -a (archives) : conserve de manière récursive les per­mis­sions de fichiers, l’ho­ro­da­tage, les groupes, les pro­prié­taires et les pro­prié­tés spéciales des fichiers.
  • -v (verbose) : affiche des in­for­ma­tions dé­tail­lées sur le processus de syn­chro­ni­sa­tion.
  • -r (recursive) : syn­chro­nise les ré­per­toires et leur contenu de manière récursive.
  • -u (mise à jour) : ne transfère que les fichiers plus récents que ceux déjà présents dans le ré­per­toire cible.
  • -z (compress) : réduit le trafic de données sur le réseau.
  • -n --itemize-changes : affiche une liste des mo­di­fi­ca­tions à effectuer.
  • --delete : supprime les fichiers du ré­per­toire cible qui n’existent plus dans la source.
  • --exclude : exclut certains fichiers ou ré­per­toires de la syn­chro­ni­sa­tion.
  • --dry-run : simule le processus de syn­chro­ni­sa­tion sans réel­le­ment trans­fé­rer de fichiers.
  • --progress : affiche la pro­gres­sion du transfert de fichiers.
  • --partial : les fichiers qui ont été par­tiel­le­ment trans­fé­rés restent dans le ré­per­toire cible si le transfert est in­ter­rompu. Lors d’un nouveau transfert, le fichier reprendra à partir de son dernier état.

Exemple de syntaxe rsync

La syntaxe rsync peut être fa­ci­le­ment re­pro­duite à l’aide d’un exemple pratique. La commande suivante permet de créer le ré­per­toire dir1, com­pre­nant 100 fichiers de test vides, et un deuxième ré­per­toire vide dir2 :

$ cd ~
$ mkdir dir1
$ mkdir dir2
$ touch dir1/file{1..100}
bash

Le contenu de dir1 peut être syn­chro­nisé sur le même système avec dir2 avec l’option -r :

$ rsync -r dir1/ dir2
bash

Il est également possible d’utiliser l’option -a, qui syn­chro­nise de manière récursive et contient des liens sym­bo­liques, des fichiers de pé­ri­phé­riques spéciaux, des temps de mo­di­fi­ca­tion, des groupes, des pro­prié­taires et des au­to­ri­sa­tions :

$ rsync -a dir1/ dir2
bash

Remarque : la barre oblique (/) à la fin du ré­per­toire source dans une commande rsync est im­por­tante, car elle indique que c’est le contenu du ré­per­toire qui doit être syn­chro­nisé, et non le ré­per­toire lui-même.

$ rsync -a dir1/ dir2
Output
sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .
bash

Sans la barre oblique finale au ré­per­toire source, le contenu du ré­per­toire « source » est copié dans le ré­per­toire « cible » :

$ rsync -a dir1/ dir2
Output
sending incremental file list
dir1/
dir1/file1
dir1/file10
dir1/file100
dir1/file11
dir1/file12
dir1/file13
dir1/file14
dir1/file15
dir1/file16
dir1/file17
dir1/file18
. . .
bash

Il est donc utile d’utiliser la barre oblique à la fin du ré­per­toire source pour s’assurer que le processus de syn­chro­ni­sa­tion se déroule comme prévu et que le contenu du ré­per­toire source arrive cor­rec­te­ment dans le ré­per­toire cible.

rsync : syn­chro­ni­sa­tion avec un système distant

La syn­chro­ni­sa­tion d’un système distant avec rsync n’est pas difficile, à condition d’avoir un accès SSH à l’or­di­na­teur distant et de connaître les in­for­ma­tions d’au­then­ti­fi­ca­tion né­ces­saires. rsync utilise souvent SSH (Secure Shell) pour la com­mu­ni­ca­tion sécurisée avec les systèmes distants. Cet outil doit être installé des deux côtés.

Si l’accès SSH entre les deux or­di­na­teurs est vérifié, le dossier dir1 peut être syn­chro­nisé sur un or­di­na­teur distant. Dans ce cas, c’est le ré­per­toire pro­pre­ment dit qui doit être transféré, c’est pourquoi la barre oblique dans la commande suivante est supprimée :

$ rsync -a ~/dir1 username@remote_host:destination_directory
bash

Lorsqu’un ré­per­toire est déplacé d’un système local vers un système distant, on parle d’opération « push ». In­ver­se­ment, on parle d’opération « pull » lorsqu’un ré­per­toire distant est syn­chro­nisé avec un système local. La syntaxe est la suivante :

$ rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
bash
Serveurs virtuels (VPS)
VPS éco­no­miques sur serveurs Dell En­ter­prise
  • 1 Gbit/s de bande passante et trafic illimité
  • Dis­po­ni­bi­lité de 99,99 % et cer­ti­fi­ca­tion ISO
  • As­sis­tance 24/7 primée pour sa qualité et con­seil­ler personnel

Uti­li­sa­tion d’autres options dans rsync

Les options déjà pré­sen­tées plus haut per­met­tent de per­son­na­li­ser davantage le com­por­te­ment par défaut de rsync. En voici quelques-unes, ex­pli­quées plus en détails.

Transfert de fichiers non com­pres­sés avec rsync

La charge du réseau lors du transfert de fichiers non com­pres­sés peut être réduite avec l’option -z comme suit :

$ rsync -az source destination
bash

Afficher la pro­gres­sion et reprendre les trans­ferts in­ter­rom­pus

Avec -P, les options --progress et --partial peuvent être combinées. Vous obtenez ainsi un aperçu de la pro­gres­sion des trans­mis­sions et pouvez en même temps reprendre les trans­mis­sions in­ter­rom­pues :

$ rsync -azP source destination
Output
sending incremental file list
./
file1
    0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=99/101)
file10
    0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=98/101)
file100
    0 100%    0.00kB/s    0:00:00 (xfer#3, to-check=97/101)
file11
    0 100%    0.00kB/s    0:00:00 (xfer#4, to-check=96/101)
. . .
bash

Exécutez à nouveau la commande pour obtenir une sortie plus courte. Cela permet à rsync de dé­ter­mi­ner si des mo­di­fi­ca­tions ont été ef­fec­tuées en fonction du temps de mo­di­fi­ca­tion.

$ rsync -azP source destination
Output
sending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00
bash

Garder les ré­per­toires syn­chro­ni­sés avec rsync

Pour s’assurer que deux ré­per­toires sont ef­fec­ti­ve­ment maintenus syn­chro­ni­sés, il est né­ces­saire de supprimer dans le ré­per­toire cible les fichiers qui ont été supprimés de la source. Par défaut, rsync ne supprime cependant pas les fichiers du ré­per­toire cible. Ce com­por­te­ment peut être modifié avec l’option --delete. Il est toutefois conseillé d’utiliser cette option avec prudence, car elle supprime dans le ré­per­toire cible des fichiers qui n’existent plus dans la source.

Avant d’utiliser cette option, vous devriez utiliser l’option --dry-run. Celle-ci vous permet d’effectuer une si­mu­la­tion du processus de syn­chro­ni­sa­tion sans supprimer de fichiers réels. Vous pouvez ainsi vous assurer que seules les mo­di­fi­ca­tions sou­hai­tées sont ef­fec­tuées, sans perdre ac­ci­den­tel­le­ment des données im­por­tantes :

$ rsync -a --delete source destination
bash

Exclure des fichiers et des ré­per­toires de la syn­chro­ni­sa­tion avec rsync

Dans rsync, l’option --exclude permet d’exclure certains fichiers et ré­per­toires de la syn­chro­ni­sa­tion. Ceci est utile lorsque des fichiers tem­po­raires, des fichiers journaux ou d’autres contenus ne doivent pas être syn­chro­ni­sés.

$ rsync -a --exclude=pattern_to_exclude source destination
bash

Si vous avez indiqué un modèle pour exclure des fichiers, vous pouvez remplacer cette exclusion pour les fichiers qui cor­res­pon­dent à un autre modèle avec l’option --include=.

$ rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
bash

En­re­gis­trer les sau­ve­gardes avec rsync

L’option --backup vous permet d’en­re­gis­trer des sau­ve­gardes de fichiers im­por­tants. Elle est utilisée en com­bi­nai­son avec l’option --backup-dir. Celle-ci indique le ré­per­toire dans lequel les fichiers de sau­ve­garde doivent être en­re­gis­trés :

$ rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination
bash

Pour une vue d’ensemble précise des dif­fé­rents scénarios de sau­ve­garde, consultez notre article plus détaillé sur les sau­ve­gardes de serveur avec rsync.

Aller au menu principal