Rsync est un outil libre de synchronisation de fichiers : il copie un dossier source vers une destination, locale ou distante, en n’envoyant que les fichiers et les parties de fichiers modifiés. Utilisé par SSH, il sert à sauvegarder des données, à répliquer un serveur ou à rapatrier de gros volumes sans tout recopier.
Qu’est-ce que rsync ?
Rsync (pour « remote sync », synchronisation distante) est un logiciel en ligne de commande pour Linux et les systèmes Unix. Son fonctionnement est simple à résumer : la commande compare un répertoire source et un répertoire de destination, sur la même machine ou entre un ordinateur local et un serveur distant, puis copie seulement les fichiers à modifier. Le transfert passe en général par SSH (port 22), avec une compression possible des données sur le réseau, et rsync sait mettre en place une sauvegarde aussi bien que la copie d’un site web ou d’un système entier. Plus efficace que scp ou une simple copie, il calcule une somme de contrôle par bloc pour ne pas renvoyer ce qui existe déjà. Le logiciel a été créé par Andrew Tridgell et Paul Mackerras, qui en ont annoncé la première version en juin 1996 ; distribué sous licence libre GPL et hébergé par le projet Samba, il est installé par défaut ou disponible en paquet sur presque toutes les distributions Linux.
Ce qui distingue rsync d’une copie classique, c’est son algorithme de transfert différentiel, décrit par Andrew Tridgell dans sa thèse de doctorat. Quand un fichier existe déjà des deux côtés, rsync ne le renvoie pas en entier : il découpe la version de la destination en blocs, calcule une somme de contrôle pour chacun, et la source n’envoie que les blocs qui ont changé, accompagnés des instructions pour reconstruire le fichier. Sur un réseau lent ou une connexion facturée au volume, l’économie de bande passante est considérable.
Cet outil polyvalent sert aussi bien à l’administrateur qui réplique un serveur web qu’au particulier qui sauvegarde ses photos sur un disque externe, ou à l’utilisateur d’une seedbox, serveur distant loué pour télécharger et stocker des fichiers, qui veut récupérer ses données chez lui. Rsync s’utilise dans un terminal et ne fournit pas d’interface graphique, mais plusieurs logiciels en utilisent le moteur sous une fenêtre plus accueillante, et de nombreux NAS l’intègrent à leurs fonctions de sauvegarde.
Comment fonctionne la synchronisation avec rsync ?
Au lancement, rsync dresse la liste des fichiers de la source (la « file list ») et la compare à ce qui existe à la destination. Par défaut, il applique un contrôle rapide : un fichier dont la taille et la date de modification sont identiques des deux côtés est considéré comme à jour et laissé de côté. Seuls les fichiers nouveaux ou modifiés passent à l’étape suivante, ce qui rend une deuxième synchronisation presque instantanée quand peu de choses ont changé.
Pour un fichier modifié, la destination envoie les sommes de contrôle de ses blocs : une somme « roulante », rapide à recalculer en décalant la fenêtre d’un octet, et une somme forte qui confirme qu’un bloc est bien identique. La source parcourt sa propre version, repère les blocs déjà présents à la destination et ne transmet que les données manquantes. Le fichier est ensuite reconstruit dans un fichier temporaire, puis mis à sa place une fois complet, si bien qu’un transfert interrompu ne laisse pas de fichier à moitié écrit.
Pour une synchronisation distante, rsync doit être présent sur les deux machines : un processus tourne côté local, un autre sur le serveur distant, et ils dialoguent à travers un canal de communication, en général une connexion SSH. Ce fonctionnement à deux processus explique l’efficacité de l’outil, mais aussi une limite : un simple serveur de fichiers qui ne sait pas lancer rsync ne permet pas de profiter du transfert différentiel.
La syntaxe de la commande rsync
La commande rsync suit toujours le même schéma : des options, puis une ou plusieurs sources, puis une destination. Un chemin distant s’écrit sous la forme utilisateur@serveur:/chemin, avec deux-points entre le nom de la machine et le dossier :
rsync -av ~/Photos/ /media/disque/Photos/: copie locale d’un dossier vers un disque externe ;rsync -av ~/Documents/ user@serveur:/var/backup/documents/: envoi d’un dossier local vers un serveur distant ;rsync -av user@serveur:/home/user/data/ ~/data/: récupération d’un dossier distant vers l’ordinateur local.
Un détail de syntaxe trompe presque tous les débutants : la barre oblique finale du dossier source. Avec rsync -av photos/ sauvegarde/, rsync copie le contenu du dossier photos directement dans sauvegarde. Sans la barre finale, rsync -av photos sauvegarde/ crée un sous-dossier sauvegarde/photos et y place les fichiers. La barre oblique à la fin du chemin de destination, elle, ne change rien. Mieux vaut décider une fois pour toutes d’une convention, par exemple toujours terminer la source et la destination par une barre, et la vérifier par un essai à blanc avant toute commande qui supprime des fichiers.
Quelles sont les options de rsync ?
Rsync compte plus d’une centaine d’options, décrites dans sa page de manuel (man rsync) ; une dizaine suffit pour l’essentiel des usages. L’option -a, pour « archive », est la plus utilisée : elle regroupe la copie récursive des dossiers, la conservation des liens symboliques, des droits, des dates de modification, du groupe, du propriétaire et des fichiers spéciaux. Elle ne conserve pas, en revanche, les liens physiques, les listes de contrôle d’accès ni les attributs étendus, qui demandent -H, -A et -X.
| Option | Effet |
|---|---|
-a | mode archive : récursif, droits, dates, liens symboliques, propriétaire |
-v | affiche le nom de chaque fichier transféré |
-z | compression des données pendant le transfert |
-h | tailles lisibles (Ko, Mo, Go) |
--partial | garde un fichier interrompu pour reprendre plus tard |
--progress | affiche l’avancement de chaque fichier |
-P | raccourci de --partial --progress |
--delete | supprime à la destination les fichiers absents de la source |
-n | essai à blanc (--dry-run) : rien n’est modifié |
--exclude | ignore les fichiers qui correspondent à un motif |
D’autres options rendent service au quotidien. --bwlimit plafonne le débit, utile pour ne pas saturer une connexion partagée pendant la journée. -u ne remplace jamais un fichier plus récent à la destination. -c compare les fichiers par leur somme de contrôle plutôt que par leur taille et leur date, plus sûr mais beaucoup plus lent, car chaque fichier doit être lu en entier. --remove-source-files efface les fichiers de la source une fois copiés, ce qui transforme la copie en déplacement. Quant à -z, la compression n’a d’intérêt que sur des fichiers compressibles et une liaison lente : pour des vidéos, des archives ou des images déjà compressées, elle consomme du processeur sans réduire le volume.
Comment effectuer un dry run avec rsync ?
Un essai à blanc, ou « dry run », simule la synchronisation sans rien modifier : rsync affiche la liste des fichiers qu’il copierait ou supprimerait, puis s’arrête. Il suffit d’ajouter l’option -n, ou sa forme longue --dry-run, à la commande prévue :
rsync -avn --delete ~/Musique/ /media/disque/Musique/
Cette précaution est indispensable avant toute commande qui comporte --delete. Une erreur d’ordre entre la source et la destination, ou une barre oblique oubliée, peut sinon effacer en quelques secondes les fichiers qu’on voulait protéger. La sortie de l’essai indique les fichiers à supprimer par la mention « deleting », ce qui permet de repérer d’un coup d’œil une commande inversée. Une fois la liste vérifiée, on relance la même commande sans -n.
Pour exclure des fichiers de la synchronisation, l’option --exclude accepte un motif : --exclude="*.tmp" ignore les fichiers temporaires, --exclude="cache/" un dossier entier. Plusieurs exclusions peuvent se suivre dans la même commande, ou se regrouper dans un fichier texte lu par --exclude-from=exclusions.txt, une ligne par motif. Les motifs sont relatifs à la racine du transfert, ce qui évite d’exclure par erreur un dossier homonyme ailleurs dans l’arborescence.
Pour un script, l’option --itemize-changes (-i) détaille la raison de chaque transfert : fichier nouveau, taille différente, date modifiée, droits changés. Combinée à l’essai à blanc, elle explique pourquoi rsync juge qu’un fichier doit être recopié.
Comment utiliser rsync avec SSH ?
Depuis longtemps, rsync utilise SSH comme transport par défaut dès qu’une source ou une destination porte un nom de machine. La commande rsync -avP user@serveur:/data/ ~/data/ ouvre donc une connexion SSH, lance rsync sur le serveur et fait passer tout le transfert dans ce canal chiffré, avec les mêmes comptes et les mêmes clés que pour une session SSH ou un transfert de fichiers chiffré en SFTP.
L’option -e précise la commande du shell distant, par exemple pour un port différent du 22 : rsync -av -e "ssh -p 2222" ~/projet/ user@serveur:/srv/projet/. Pour une synchronisation automatique, l’authentification par clé SSH est la règle : on crée une paire de clés, on dépose la clé publique sur le serveur, et rsync se connecte sans demander de mot de passe. Une clé dédiée à la sauvegarde peut être restreinte, côté serveur, à la seule commande rsync, ce qui limite les dégâts si elle venait à fuiter.
La différence avec SFTP tient à la logique du transfert. SFTP et la commande scp recopient un fichier en entier ; rsync compare d’abord les deux côtés et n’envoie que ce qui manque. Pour un dossier de plusieurs dizaines de gigaoctets dont seuls quelques fichiers changent chaque jour, la deuxième synchronisation ne dure que le temps de comparer les listes. Pour parcourir un serveur et récupérer trois fichiers à la souris, un client SFTP graphique reste plus commode.
Comment utiliser rsync pour sauvegarder des fichiers ?
La sauvegarde la plus simple consiste à synchroniser un dossier vers un disque externe ou un serveur, puis à relancer régulièrement la même commande. Une tâche planifiée avec cron, sous Linux, s’en charge chaque nuit : la ligne 0 2 * * * rsync -a --delete /home/user/ /mnt/backup/home/ lance la synchronisation à 2 h du matin. Ajouter --log-file=/var/log/rsync-backup.log garde une trace de chaque passage, à consulter en cas de doute.
Cette sauvegarde incrémentielle se contente de copier les fichiers nouveaux ou modifiés : après la première copie complète, chaque passage ne transfère que les changements du jour. Le même script peut utiliser plusieurs exclusions, par exemple --exclude=".cache/", pour ne pas copier les fichiers inutiles d’un répertoire personnel.
Un miroir exact a pourtant un défaut : un fichier supprimé ou abîmé par erreur l’est aussi dans la copie au passage suivant. Deux options y remédient. --backup associée à --backup-dir déplace les fichiers remplacés ou supprimés dans un dossier à part, daté par exemple, au lieu de les perdre. --link-dest permet de créer des sauvegardes incrémentielles complètes : chaque jour, rsync crée un nouveau dossier, copie les fichiers modifiés et remplace les fichiers inchangés par des liens physiques vers la sauvegarde de la veille. Chaque dossier contient alors une image complète du jour, mais n’occupe que l’espace des fichiers modifiés.
Des logiciels de sauvegarde reposent sur ce principe, comme rsnapshot sous Linux, qui pilote rsync et fait tourner les copies horaires, quotidiennes et hebdomadaires. Une bonne pratique reste de garder au moins une copie hors du domicile ou du bureau, et de tester de temps en temps la restauration d’un fichier : une sauvegarde jamais relue peut se révéler incomplète le jour où l’on en a besoin.
Le démon rsync et le fichier rsyncd.conf
Rsync peut aussi tourner en service permanent, le démon rsync, qui écoute sur le port TCP 873 et répond aux adresses de la forme rsync://serveur/module. La configuration se trouve dans le fichier /etc/rsyncd.conf : chaque section entre crochets définit un module, c’est-à-dire un dossier partagé, avec son chemin, ses droits en lecture ou en écriture, la liste des utilisateurs autorisés et le fichier de mots de passe associé.
Ce mode sert surtout aux miroirs publics : de nombreux miroirs de distributions Linux et de logiciels libres proposent un accès rsync pour que d’autres serveurs se synchronisent avec eux chaque heure. Il évite d’ouvrir un compte SSH à chaque client. Son inconvénient majeur est l’absence de chiffrement : le protocole du démon fait circuler les données en clair. Pour des données privées, on préfère SSH, ou un démon accessible seulement dans un réseau local ou à travers un tunnel chiffré.
Configurer rsync sur un serveur ne demande souvent rien de plus que son installation, par exemple sudo apt install rsync sous Debian ou Ubuntu : en mode SSH, aucun service ne tourne, le programme est lancé à chaque connexion. Le démon n’est utile que pour ce partage par modules.
Rsync sous Windows, macOS et sur un NAS
Windows ne fournit pas rsync. La solution la plus simple sous Windows 10 et 11 est le sous-système Windows pour Linux (WSL), qui installe une distribution Linux complète dans laquelle rsync s’utilise comme sur un serveur ; les disques de Windows y sont accessibles sous /mnt/c/. Les environnements Cygwin et MSYS2 proposent aussi un paquet rsync, et cwRsync en est une distribution prête à l’emploi pour Windows. Les chemins doivent alors suivre la convention de l’outil utilisé, ce qui demande un peu d’attention avec les lettres de lecteur.
Sur un NAS, rsync est souvent intégré au système : le centre de connaissances de Synology décrit ainsi l’activation du service rsync de DSM, qui permet à un autre appareil de sauvegarder ses fichiers sur le NAS. Les outils de sauvegarde des fabricants s’appuient sur ce même service. Sous macOS, une commande rsync est fournie dans le terminal, mais sa version dépend du système, et certaines options récentes peuvent manquer : mieux vaut vérifier avec rsync --version avant d’utiliser un script écrit pour Linux. Pour le stockage en cloud, qui ne sait pas lancer rsync à l’autre bout, l’outil libre rclone reprend la même logique de synchronisation avec les services de stockage d’objets. Pour ceux qui préfèrent une interface graphique sous Linux, Grsync présente les principales options sous forme de cases à cocher et affiche la commande correspondante.
Rapatrier les fichiers d’un serveur distant avec rsync
Pour l’utilisateur d’un serveur loué qui télécharge de gros fichiers, rsync est l’outil de rapatriement le plus robuste. La commande rsync -avP user@serveur:~/downloads/ ~/Telechargements/ récupère le dossier, affiche la progression et garde les fichiers partiels si la connexion tombe ; relancée, elle reprend là où elle s’était arrêtée et ignore ce qui est déjà arrivé. L’option --bwlimit évite de saturer la box familiale pendant la journée.
Cette méthode convient à tout contenu légal : l’image ISO d’une distribution Linux, une archive de photos de famille, des œuvres du domaine public ou des fichiers sous licence libre. Le transport chiffré par SSH ne change pas la nature des fichiers : une œuvre protégée obtenue sans l’accord de ses ayants droit reste une contrefaçon, qu’elle soit passée par un serveur de téléchargement BitTorrent, par rsync ou par une clé USB, et le serveur garde la trace des connexions.
Sécurité et erreurs fréquentes avec rsync
Comme tout logiciel exposé au réseau, rsync doit être tenu à jour. La version 3.4.0, publiée en janvier 2025, a corrigé six vulnérabilités, dont certaines permettaient à un client malveillant d’exécuter du code sur un serveur rsync accessible depuis internet. Les distributions Linux diffusent ces correctifs par leurs mises à jour habituelles ; un démon rsync ouvert sur internet sans raison est à fermer.
Côté utilisation, quelques messages reviennent souvent. « rsync: command not found » sur le serveur distant signifie que rsync n’y est pas installé, alors qu’il doit l’être des deux côtés. « Permission denied » indique un problème de clé, de mot de passe ou de droits sur le dossier de destination. Un transfert qui recopie tout à chaque passage vient souvent d’un système de fichiers qui ne conserve pas les dates, comme certains disques au format FAT32 ou exFAT : l’option --modify-window=1 tolère alors un écart d’une seconde.
Rsync au quotidien : réponses courtes
Rsync doit-il être installé sur le serveur distant ?
Oui. Pour une synchronisation distante par SSH, rsync doit être présent sur les deux machines, car un processus tourne de chaque côté pour comparer les fichiers.
Quelle est la différence entre rsync et scp ?
Scp copie toujours les fichiers en entier. Rsync compare la source et la destination et n’envoie que les fichiers nouveaux ou modifiés, ce qui accélère les synchronisations répétées.
Que fait l’option --delete de rsync ?
Elle supprime à la destination les fichiers qui n’existent plus dans la source, pour obtenir une copie exacte. Un essai à blanc avec -n est recommandé avant de l’utiliser.
