rsync : ce que tu choisis quand tu décides de sauvegarder
C'est ça, rsync. Pas un logiciel de sauvegarde avec une interface et des cases à cocher. Un outil qui compare deux arborescences et n'envoie que ce qui a changé. Version 3.4.1, sortie le 15 janvier 2025, maintenue au sein du projet Samba.
Tu le trouves sur presque toutes les distributions. Sur Debian et Ubuntu :
``` apt install rsync ```
Sur RHEL et dérivés :
``` dnf install rsync ```
Et là, tu peux déjà copier un dossier entier d'une machine à l'autre. Mais avant d'y aller, il faut savoir ce que tu veux vraiment : une copie, une sauvegarde, ou un miroir. Ce sont trois choses différentes, et rsync fait les trois — ce qui est justement le piège.
L'algorithme qui fait tout le travail
rsync ne recopie pas un fichier parce qu'il a changé. Il le découpe en blocs, calcule une empreinte pour chacun, et compare avec la version distante. Seuls les blocs qui diffèrent traversent le réseau.Conséquence directe : si tu modifies une ligne dans un fichier de 10 Go, ce n'est pas 10 Go qui passent. C'est cette ligne, plus les métadonnées.
Ça change tout quand tu synchronises un dump de base de données ou une image disque. Sur un réseau lent, c'est la différence entre une nuit et une semaine. Sur un réseau rapide, c'est la différence entre rien et quelque chose.
Local, SSH, ou daemon
Trois façons de faire parler deux machines.En local, rsync travaille directement sur le système de fichiers. C'est rapide et sans surprise.
``` rsync -aAHX --delete /srv/data/ /mnt/backup/data/ ```
À distance via SSH, tu gardes le chiffrement et l'authentification par clé. C'est la méthode que la plupart des gens devraient utiliser.
``` rsync -aAHX --delete /srv/data/ backup@backup.example.be:/srv/backup/data/ ```
Via un daemon rsync, tu montes un service dédié sur le port 873. C'est plus rapide quand tu enchaînes beaucoup de synchronisations, et c'est la seule option quand tu ne veux pas exposer SSH. En échange, tu configures `/etc/rsyncd.conf`, tu gères les modules, les secrets, le filtrage IP.
Le daemon, c'est pratique. C'est aussi une porte que tu ouvres sur un réseau, et une porte mal configurée ne prévient pas.
Si tu veux du chiffrement avec un daemon, `rsync-ssl` existe. Le script enveloppe la connexion dans TLS, à condition d'utiliser une adresse de la forme `hostname::` ou `rsync://hostname/`. rsync lui-même n'a pas de TLS intégré, donc `rsync-ssl` est un contournement, pas une fonctionnalité native.
Les options qui comptent vraiment
`--archive` (`-a`) embarque les permissions, les horodatages, les liens symboliques et la structure des dossiers. Pour une sauvegarde, tu la veux. Toujours.`-H` préserve les hardlinks. `-A` les ACL. `-X` les attributs étendus. Sans elles, tu perds des choses que tu ne remarques qu'au moment de restaurer.
`--compress` réduit le trafic réseau. Utile sur un lien lent, inutile sur un lien local — le CPU travaille pour rien.
`--delete` supprime dans la destination ce qui n'existe plus dans la source. C'est ce qui transforme une copie en miroir. C'est aussi l'option qui efface des données quand tu t'es trompé de sens dans la commande. Un slash inversé, et ta sauvegarde devient la source.
Les sauvegardes incrémentales, version rsync
rsync ne fait pas de déduplication à la Borg ou à la restic. Il fait autre chose : il garde les anciennes versions dans un dossier daté.``` rsync -aAHX --delete \ --backup --backup-dir=/srv/backup/archive/$(date +%Y-%m-%d) \ /srv/data/ /srv/backup/current/ ```
Chaque jour, un dossier `2025-01-15`, `2025-01-16` se crée. Dedans, uniquement les fichiers modifiés ou supprimés ce jour-là. Tu retrouves une version précise d'un fichier à une date précise, sans avoir payé le coût d'un snapshot complet.
Ce que ça coûte : de la discipline. Si ta tâche cron ne tourne pas, il n'y a pas de dossier, et personne ne te prévient. Un système de sauvegarde qui échoue en silence est pire qu'une absence de sauvegarde, parce que tu crois être couvert.
Automatiser sans se marcher dessus
Une tâche cron quotidienne suffit pour beaucoup de cas.``` 0 3 * /usr/bin/rsync -aAHX --delete /srv/data/ backup@backup.example.be:/srv/backup/data/ ```
Le problème arrive quand la synchronisation dépasse les 24 heures, ou quand une tâche manuelle démarre pendant la tâche planifiée. Deux rsync en parallèle sur les mêmes arborescences, et tu ne sais plus quel état est le bon.
`run-one` règle le cas simple : il empêche une seconde instance de démarrer tant que la première tourne. Pour le reste, un verrou avec `flock` fait le travail.
SSH, cron, exclusion : ce que tu vas oublier
Les exclusions. `--exclude` et `--exclude-from` évitent de copier des caches, des fichiers temporaires, des sockets. Sur un serveur web, tu exclus `*.tmp`, `cache/`, `.git/` si tu ne veux pas les embarquer. Chaque octet que tu exclus est un octet que tu ne restaures pas par erreur.La restauration, justement. rsync fait le chemin inverse sans rien changer à la commande : tu inverses source et destination.
``` rsync -aAHX /srv/backup/data/ /srv/data/ ```
Les permissions suivent. Les horodatages suivent. Les liens symboliques suivent. C'est précisément pour ça qu'on garde `-aAHX` dès le départ : une sauvegarde qui a perdu les droits au moment de la copie ne les retrouve pas au moment du retour.
Un backup que tu n'as jamais testé n'est pas un backup. C'est une intention.
Ce que rsync n'est pas
rsync ne versionne pas. Il ne déduplique pas entre machines. Il ne chiffre pas le dépôt au repos. Il ne te dit pas si ta sauvegarde est complète ou si elle a échoué à mi-chemin sans code de retour visible.Pour ça, il y a Borg, restic, ou une solution commerciale. Ces outils font plus, et ils te demandent plus : une configuration, un dépôt, une gestion de clés, parfois un agent.
rsync fait une chose : synchroniser deux arborescences de façon efficace. C'est peu. C'est aussi ce qui fait qu'il est présent partout, qu'il tient dans une ligne de cron, et qu'il ne tombe pas en panne parce qu'un composant tiers a changé d'API.
Le choix dépend de ce que tu es prêt à porter. Un rsync bien configuré avec `--backup-dir` te couvre pour la plupart des erreurs humaines. Il ne te couvre pas pour un disque qui meurt, un chiffrement par rançongiciel, ou une suppression qui date de trois semaines. Pour ça, il faut une copie hors ligne, et une copie hors site, et c'est un autre sujet — un sujet que rsync peut servir, mais qu'il ne résout pas à ta place.