Maîtriser Rsync sous Linux : le guide complet de la synchronisation de données

Linux

Maîtriser Rsync sous Linux : le guide complet de la synchronisation de données

Tous les administrateurs système se doivent de connaître rsync, un outil de synchronisation de fichiers indémodable. Il est très souvent utilisé pour manipuler les données, que ce soit en local ou entre deux machines, et il est à l’aise pour accomplir diverses tâches : synchronisation et réplication de données, sauvegarde de données, ou encore migration de données. Voici un guide complet pour bien le prendre en main.

Dans l’univers de l’administration système, la gestion des données est une activité quotidienne. Qu’il s’agisse de déployer une application, de migrer un serveur ou d’assurer la pérennité des informations via des sauvegardes, vous devez disposer d’un outillage efficace pour réaliser ces tâches. C’est ici qu’intervient rsync (Remote Sync), l’outil de synchronisation incrémentielle de référence.

Avant de commencer, sachez que rsync est installé par défaut sur certaines distributions Linux, comme Debian. Sur Windows, son équivalent est plutôt robocopy, même s’il est possible d’utiliser rsync au travers de WSL ou cygwin. Du côté de macOS, Apple a remplacé rsync par openrsync depuis macOS Sequoia.

Les fondamentaux de rsync

Rsync se distingue par son algorithme de transfert delta qui ne copie que les parties modifiées des fichiers, optimisant ainsi les échanges de données. Cette caractéristique est importante et le différencie d’autres commandes disponibles sous Linux capables de transférer des données, comme et . Cette façon de fonctionner explique en partie pourquoi il est efficace pour effectuer des sauvegardes (complètes ou incrémentales). À noter que rsync est un outil de synchronisation unidirectionnel.

Ce que vous devez savoir sur le fonctionnement de rsync :

  • L’algorithme de transfert Delta : contrairement à une copie classique, rsync ne transfère pas bêtement les fichiers (le format des fichiers n’importe peu, d’ailleurs). Il transfère vers la destination uniquement les blocs modifiés. Cela économise énormément de bande passante, mais attention, cette opération demande du CPU.
  • La stratégie de détection des changements : par défaut, rsync compare uniquement la taille des fichiers et leur date de dernière modification pour décider s’il doit synchroniser ou non un fichier. Pour forcer une vérification plus précise, il y a une solution : comparer les sommes de contrôle (checksum) grâce à l’utilisation de l’option (). C’est plus gourmand, mais aussi plus précis.
  • Le mode archive : copier uniquement le contenu d’un fichier n’est pas toujours suffisant. L’option active le mode archive et elle permet de garantir que la copie est un clone parfait : elle conserve les permissions (chmod), les propriétaires (chown), les groupes, les horodatages et, très important, les liens symboliques tels quels.
  • Le mode miroir : rsync est capable de rendre la destination strictement identique à la source. En effet, en activant l’option , rsync va supprimer sur la cible tout fichier qui n’existe plus sur la source. À manipuler avec précaution : une erreur de chemin peut faire des ravages sur la destination.
  • La résilience : sur des transferts de gros volumes et/ou via des réseaux instables, une coupure sera fatale pour certains outils… Mais rsync, lui, sait reprendre un transfert interrompu là où il s’est arrêté grâce à l’option .
  • Le transport sécurisé avec SSH : rsync est capable de travailler sur des données locales, mais il peut aussi être utile pour synchroniser des données entre deux machines distantes. Pour cela, il est capable de fonctionner au travers d’un tunnel SSH qu’il va lui-même monter (y compris avec l’authentification par clé).

Comprendre la syntaxe de rsync

Avant de passer à la pratique, prenez un instant pour bien comprendre la syntaxe de la commande rsync. La logique présentée ci-dessous va nous accompagner tout au long de ce guide. Vous devez spécifier des options, une source (où sont les données) et une destination (où elles doivent aller), en respectant l’ordre suivant :


Grâce à ses nombreuses options, rsync est un outil versatile suffisamment flexible pour s’adapter à de nombreux scénarios d’utilisation. La preuve, en évoquant le fonctionnement de rsync, j’ai déjà fait référence à quelques options.

Il y a une autre précision importante que je souhaite apporter avant de passer aux exemples : l’importance du slash ( ).

C’est un point à assimiler pour éviter les erreurs de manipulation, car rsync interprète différemment le chemin source selon qu’il se termine par un slash ou non ! Donc, concrètement, quand vous spécifiez le chemin d’un dossier, voici comment fonctionne rsync :

  • Sans slash final () : rsync copie le dossier lui-même à l’intérieur de la destination.

    • Résultat :
  • Avec slash final () : rsync copie le contenu du dossier directement dans la racine de la destination, sans recréer le répertoire de la source.

    • Résultat :

L’installation de rsync sur Linux

Bien que rsync soit préinstallé sur la majorité des distributions Linux (Debian, Ubuntu, CentOS, Red Hat), il est préférable de vérifier sa présence. Affichez la version utilisée par votre machine via cette commande :


Si la commande est introuvable (le cas de Debian sur une instance Azure, par exemple), l’installation est rapide :


Note : lorsque vous transférez des données entre deux machines, elles doivent disposer de rsync toutes les deux.

Synchronisation locale avec rsync

Il est temps de commencer à manipuler rsync en commençant par la synchronisation locale de données. Vous pouvez l’utiliser, par exemple, pour mettre en miroir deux répertoires ou effectuer une sauvegarde vers un emplacement spécifique.

Copier un seul fichier ou une arborescence de données

Commençons par un exemple tout simple : effectuer la copie d’un seul et unique fichier avec rsync. Même si nous pourrions utiliser dans le contexte d’une copie locale, nous allons utiliser exclusivement rsync : sa fiabilité est précieuse. De plus, il peut faire une différence importante sur des gros transferts, grâce à son algorithme.

Prenons le cas d’un serveur Web Apache2. Nous allons effectuer une copie d’un fichier de configuration en prévision d’une modification.

  • Le fichier source sera :
  • La destination sera :

La commande de base sera donc :


Mais, alors, quelles options allons-nous ajouter ?

Il y a plusieurs options fréquemment utilisées avec rsync, notamment :

  • L’option (ou ) : si vous devez restaurer un fichier plus tard, il aura conservé ses droits d’origine (propriétaire, groupe, permissions), ce qui est vraiment pratique ! Cette option active implicitement d’autres options individuelles, comme le mode récursif (sinon activez en l’absence de l’option pour avoir la récursivité).
  • L’option (ou ) : active la compression gzip pour optimiser le transfert des données. En local, peu d’intérêt, mais sur des transferts via le réseau, c’est essentiel.

Le résultat obtenu est bien celui attendu, car les permissions sont conservées. L’utilisation de sudo est importante pour que les permissions soient copiées, sinon ce ne sera pas forcément le cas selon les permissions de l’utilisateur qui exécute la commande (vous le verrez dans les prochaines images).

Dans le cas de la copie d’un dossier et de l’ensemble de son contenu, je vous recommande d’ajouter une option supplémentaire (dans le cas où vous êtes devant l’écran) :

  • L’option : active le mode verbeux, ce qui permet d’avoir le nom des fichiers traités dans la console. Pour avoir des informations plus précises, avec notamment la vitesse de transfert, préférez l’option .

L’exemple ci-dessous sert à copier le contenu du répertoire vers .


Ci-dessous, vous pouvez visualiser la sortie proposée avec chacune de ces deux options.

Enfin, pour illustrer ce que j’évoquais précédemment, voici ce qu’il se passe avec ou sans slash à la fin du chemin de la source. À vous de jouer sur ce petit détail en fonction de vos besoins.

Cette utilisation basique de rsync est utile pour effectuer la sauvegarde d’un répertoire, notamment un répertoire avec des données personnelles ou des fichiers de configuration. Si vous avez un disque externe connecté à votre machine, vous pourriez l’utiliser comme destination.

Exclure ou inclure certains fichiers

Rsync prend en charge plusieurs options pour inclure/exclure certains dossiers et fichiers. Il y a notamment ces deux options :

  • : exclure certains fichiers ou dossiers lors de la synchronisation.
  • : inclure certains fichiers ou dossiers lors de la synchronisation.

Voici un exemple où les deux options sont utilisées conjointement pour conserver uniquement les fichiers . Ici, si une exclusion sur n’est pas appliquée, alors rsync copiera tous les fichiers ! Encore une subtilité à connaître.


Note : vous pouvez spécifier plusieurs fois ces directives pour indiquer plusieurs valeurs.

Exclure certaines extensions de la copie

Lors de la synchronisation d’une arborescence complète, il n’est généralement pas nécessaire de tout copier. En écrivant cette phrase, je pense notamment aux fichiers temporaires et aux caches. Vous pourriez aussi décider d’ignorer les fichiers de logs. Pour être exhaustif, il y a donc plusieurs extensions à exclure.

Sachez que rsync peut importer une liste d’exclusion à partir d’un fichier, ce qui facilite les filtres multiples et l’exclusion des données qui n’ont pas une réelle valeur ajoutée. L’option à utiliser est .

Créez le fichier avec le contenu suivant :


Puis, appelez le fichier :


Mettre à jour un miroir local

Rsync dispose d’une option pour mettre en miroir la source et la destination. Autrement dit, si vous synchronisez régulièrement deux répertoires, cela permet de supprimer dans la destination un fichier supprimé dans la source. Bien entendu, les nouveaux fichiers ou ceux modifiés seront aussi transférés. L’option à ajouter pour avoir ce comportement se nomme : .


Voici un exemple en image :

Synchronisation distante via SSH avec rsync

C’est ici que rsync prend tout son sens. Il utilise SSH comme couche de transport, garantissant le chiffrement des données en transit entre deux machines. Couplé à son efficacité et à sa flexibilité, c’est redoutable ! Tout en gardant à l’esprit que la source est toujours spécifiée avant la destination, vous pouvez envisager de pousser ou de tirer des données.

Quand vous ciblez un serveur distant avec une commande rsync, vous devez respecter cette syntaxe :


Pousser des données (Push)

Pour envoyer des données vers un serveur distant (upload), ce dernier doit être précisé au niveau de la destination. Prenons un exemple.

Vous demandez à votre serveur (local) de prendre le dossier , de se connecter à un serveur distant () en tant qu’utilisateur , et de déposer ce dossier dans en utilisant les droits administrateur (root) des deux côtés. Le fait d’utiliser des deux côtés est indispensable pour conserver les permissions via le mode archive, sinon la récupération de ces informations échouera (mais pas la copie en elle-même).

Voici la commande à exécuter :


Quelques explications sur deux options non évoquées jusqu’ici :

  • : dit à rsync d’utiliser le SSH en effectuant une connexion sur le port 22 (l’idée étant de pouvoir spécifier un port personnalisé).
  • : affiche la progression et permet de reprendre le transfert s’il est coupé (cette option active les options Partials + Progress).

Il y a une autre option qui mérite une attention particulière : .

Le problème : la connexion est établie en tant que (un utilisateur normal). Or, nous voulons écrire dans sur le serveur distant, qui n’est pas directement autorisé pour .

La solution : cette option dit au serveur distant de lancer rsync avec l’élévation de privilèges, soit de faire un . Cela permet d’écrire dans des dossiers protégés sans se connecter directement en root (ce qui est souvent interdit). Pour que cela fonctionne sans bloquer, l’utilisateur doit avoir le droit de faire des sans mot de passe sur le serveur distant (ou bien le mot de passe sera demandé). Une règle comme dans le fichier suffit.

Remarque : l’option n’est plus strictement obligatoire sur les versions modernes, mais elle permet de spécifier des paramètres SSH, comme un port différent ou une clé SSH.

Récupérer des données (Pull)

Pour télécharger des données depuis un serveur distant (download), vous devez inverser la source et la destination. En effet, la source fera référence à un serveur distant, tandis que la destination sera un chemin local.

Si nous reprenons l’exemple précédent, la commande est donc quasiment la même ! Attention tout de même à bien gérer le slash à la fin de la source selon le résultat attendu. La commande ci-dessous permet d’obtenir le même résultat, sauf qu’ici les données sont tirées depuis la source.


La synchronisation de données entre deux machines est très utile pour la réplication ou la sauvegarde de données.

Les sauvegardes différentielles avec les liens physiques

Par défaut, si vous relancez plusieurs fois la même tâche de synchronisation Rsync, ce dernier va transférer uniquement les données modifiées vers la destination. En réalité, vous pouvez jouer sur les options de rsync pour créer plusieurs versions de sauvegardes différentielles grâce à l’option .

Le principe est le suivant :

  • Vous effectuez une première synchronisation avec rsync (sans cette option). Par exemple, une sauvegarde du répertoire vers sur le serveur distant.

  • Vous effectuez une seconde synchronisation avec rsync (vers cette fois-ci), avec l’option , et il va transférer dans un nouveau répertoire uniquement ce qui a changé en comparaison de la sauvegarde de référence (soit ) située à la suite de cette fameuse option.

Ce qu’il faut comprendre, c’est que la seconde tâche va transférer uniquement les modifications, soit ici le fichier . Pour autant, côté destination, dans le répertoire , toutes les données seront visibles. Cela s’explique par l’utilisation de liens physiques, ce qui présente aussi l’avantage de ne pas consommer plus d’espace disque.

L’image ci-dessous montre bien qu’il y a un lien physique créé pour le fichier : l’inode est le même entre les deux fichiers, et le nombre de liens est passé de 1 à 2, entre la première et la seconde synchronisation.

Automatisation d’une tâche rsync

Si vous désirez automatiser l’exécution de tâches rsync, que ce soit pour des opérations locales ou distantes, vous pouvez utiliser une tâche cron. Cela est particulièrement intéressant pour automatiser des sauvegardes avec rsync.

Vous n’avez qu’à éditer la crontab :


Puis, ajoutez une ligne pour déclarer la tâche à exécuter de façon régulière et automatique. La syntaxe habituelle pour spécifier une tâche cron doit être utilisée. L’exemple ci-dessous sert à exécuter la tâche tous les jours à 04h00 du matin. Pour une synchronisation entre deux machines distantes, attention à l’authentification SSH : vous devez utiliser une clé pour que l’authentification soit automatique et sécurisée ()


Ici, nous appelons directement rsync, mais il est envisageable d’exécuter plutôt un script Bash qui appelle lui-même rsync en plus d’autres instructions. Le fait de spécifier permet d’envoyer la sortie vers un fichier de log, sans l’écraser à chaque fois.

Voici un script Bash tout simple où la gestion des logs va un peu plus loin.


Vous pouvez planifier ensuite l’exécution de ce script (et même le lancer à la main).


Au-delà de synchroniser les données, chaque nouvelle exécution viendra alimenter le fichier de log. Nous pourrions aussi modifier le script pour avoir un fichier de log par exécution… Vous l’aurez compris, c’est pleinement personnalisable.

Les options incontournables rsync à connaître

Ci-dessous, un récapitulatif global des options à connaître pour tirer profit de la puissance de rsync.

Nom de l’option Objectif
ou Simuler l’opération sans l’effectuer. Permet de voir la liste des fichiers qui seraient touchés par la synchronisation sans risque. Indispensable avant de lancer une commande complexe ou potentiellement destructive.
Exclure certains fichiers ou dossiers spécifiques de la copie.
Exemple :
Forcer l’inclusion de fichiers, souvent utilisé en combinaison avec des exclusions pour affiner le filtre.
Exemple :
Supprime les fichiers du dossier source une fois le transfert réussi. Utile pour déplacer des archives, mais à manier avec précaution.
ou L’option “couteau suisse”. Elle active la récursivité et préserve presque tout (permissions, propriétaires, groupes, dates de modification, liens symboliques). C’est le standard pour les sauvegardes.
ou Active le mode “verbeux”. Affiche le détail des fichiers en cours de transfert. Sans cette option, rsync reste muet tant qu’il n’y a pas d’erreur, à moins d’activer l’option .
Synchronisation miroir. Supprime sur la destination les fichiers qui n’existent plus sur la source.
Attention : irréversible. Toujours tester avec avant.
ou Compresse les données pendant le transfert. Très efficace pour économiser la bande passante réseau (notamment sur Internet), mais peu utile en local.
Ajuste le niveau de compression, de 1 à 6. Par défaut, le niveau le plus élevé est utilisé (6), ce qui sollicite le plus le CPU. Si vous avez besoin de moins charger votre machine, ajustez le niveau de compression.
Exemple :
Affiche une barre de progression pour chaque fichier et permet la reprise des transferts interrompus (combine et ).
ou Ignore les fichiers sur la destination s’ils sont plus récents que ceux de la source. Utile pour ne pas écraser un travail effectué sur la destination.
Limite la bande passante (I/O) de l’opération. Valeur en KB/s.
Exemple :
Copie uniquement les fichiers dont la taille est inférieure à celle spécifiée.
Exemple :

Une interface graphique pour rsync

Suite à la lecture de ce guide, une question va peut-être vous venir en tête : “Comment faire pour mémoriser toutes ces options ?“. La pratique jouera en votre faveur pour bien prendre en main rsync. Néanmoins, il y a un site web en ligne nommé Rsyncinator, que l’on pourrait qualifier de “générateur de commandes rsync” où vous n’avez qu’à sélectionner les options souhaitées et il traduit cela en commandes rsync. L’avantage, c’est qu’il est accessible depuis n’importe quel navigateur : vous n’aurez qu’à copier-coller la commande à exécuter après l’avoir vérifiée.

Voici lien vers l’outil Rsyncinator :

Ci-dessous, un aperçu de l’utilisation de rsyncinator.

En complément, et si vous avez besoin d’une réelle interface graphique pour rsync, je vous recommande Grsync. Cette application s’installe sur Linux et elle permet d’utiliser rsync sans toucher au terminal !

Conclusion

Rsync est bien plus qu’une simple commande de copie de données : c’est un outil de synchronisation de données très puissant. Sa capacité à optimiser les transferts, à sécuriser les échanges via SSH et sa flexibilité en font un incontournable. Il apporte une réponse concrète à de nombreux besoins, comme nous avons pu le voir au travers de ces quelques exemples.

FAQ Rsync

Quelle est la différence majeure entre cp et rsync ?

La commande copie systématiquement le fichier entier, tandis que analyse les différences et ne transfère que les blocs modifiés, ce qui est beaucoup plus rapide pour les mises à jour de données.

Rsync est-il sécurisé pour le transfert de données via Internet ?

Oui, lorsqu’il est utilisé avec SSH (comportement par défaut aujourd’hui), toutes les données transférées sont chiffrées. Avec l’authentification par clé SSH, c’est une excellente façon d’effectuer des transferts sécurisés.

Peut-on utiliser rsync sous Windows ?

Oui, via des sous-systèmes comme WSL (Windows Subsystem for Linux), Cygwin, ou un outil comme cwRsync (une version recompilée avec Cygwin directement). Si vous avez le choix, utilisez plutôt robocopy : il est natif sur Windows.

Comment reprendre un transfert interrompu sans tout recommencer ?

Il faut utiliser l’option (qui cumule ) ou l’option seule. Ainsi, rsync conservera le fichier partiellement transféré et reprendra la suite de la copie au prochain lancement.

Est-il nécessaire d’être root pour utiliser rsync ?

Non, mais pour conserver l’ensemble des informations, comme les propriétaires et les permissions (via l’option ) ou lire des fichiers système, les privilèges root (ou via ) sont souvent nécessaires.

Avec rsync, comment exclure plusieurs dossiers spécifiques ?

Vous pouvez répéter l’option au sein d’une même commande rsync. Ce qui donne, par exemple : ou alors, utilisez directement un fichier avec une liste que vous appelez via .

SOURCE