Quand on sauvegarde des serveurs, déploie des applications ou synchronise des dossiers entre machines, rsync est l'outil de référence. Contrairement à cp ou scp, rsync ne transfère que les différences : si 1% d'un fichier a changé, seul ce 1% traverse le réseau. Résultat : des sauvegardes rapides, reprises possibles si coupure, et un contrôle fin sur ce qui est copié.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Synchroniser des dossiers en local avec
-avz - Transférer vers/depuis un serveur distant via SSH
- Exclure des fichiers avec
--excludeet--exclude-from - Utiliser
--deletepour un miroir exact (avec précautions) - Créer des sauvegardes incrémentielles avec
--link-dest
La commande rsync dans l'écosystème Linux
Section intitulée « La commande rsync dans l'écosystème Linux »rsync fait partie des outils de transfert et de sauvegarde sous Linux. Chaque outil a sa spécialité :
| Commande | Spécialité | Quand l'utiliser |
|---|---|---|
rsync | Synchronisation intelligente (delta) | Sauvegardes, déploiements, gros fichiers |
cp | Copie locale simple | Fichiers ponctuels, scripts simples |
scp | Copie distante via SSH | Transfert rapide one-shot |
tar | Archivage avec compression | Créer des archives, backups complets |
dd | Copie bit-à-bit | Images disques, clonage bas niveau |
Quand utiliser rsync plutôt que les autres :
| Situation | Meilleur outil | Pourquoi |
|---|---|---|
| Sauvegarde quotidienne | rsync | Ne transfère que les changements |
| Copie d'un fichier vers serveur | scp ou rsync | scp plus simple, rsync reprend si coupé |
| Synchronisation bi-directionnelle | unison | rsync est unidirectionnel |
| Cloner un disque | dd | Copie bit-à-bit exacte |
| Archive compressée à envoyer | tar + ssh | Un seul fichier à transférer |
Combinaisons fréquentes :
# rsync + cron : sauvegarde automatique quotidienne0 2 * * * rsync -avz --delete /data/ backup-srv:/backups/
# rsync + find : sauvegarder uniquement les fichiers modifiés récemmentfind /data -mtime -1 -type f -exec rsync -av {} backup:/ \;
# rsync + ssh personnalisé : port non standardrsync -avz -e "ssh -p 2222" source/ user@server:/dest/Comprendre rsync en 2 min
Section intitulée « Comprendre rsync en 2 min »🧠 Modèle mental — Comment fonctionne rsync
rsync = Source → [Filtres] → Destination (ne transfère que les différences)
Points clés
- rsync compare les fichiers par taille et date (ou checksum avec -c)
- Seuls les blocs modifiés sont transférés (algorithme delta)
- Le slash final sur la source change tout : /source/ ≠ /source
- Mode archive (-a) préserve permissions, dates, liens symboliques
- Toujours tester avec --dry-run avant --delete
- SSH est le transport par défaut pour les transferts distants
Règles d'or
Vocabulaire essentiel
- -a (archive)
- Préserve permissions, dates, liens, récursif
- -v (verbose)
- Affiche les fichiers traités
- -z (compress)
- Compresse les données pendant le transfert
- -n (dry-run)
- Simule sans rien modifier
- --delete
- Supprime les fichiers absents de la source
- --progress
- Affiche la progression du transfert
📚 Pour aller plus loin — 12 options avancées
- --exclude
- Exclure des fichiers/dossiers par pattern
- --exclude-from
- Lire les exclusions depuis un fichier
- --include
- Inclure explicitement (priorité sur exclude)
- --partial
- Conserver les fichiers partiellement transférés
- --append
- Reprendre un transfert interrompu
- --bwlimit
- Limiter la bande passante (Ko/s)
- --link-dest
- Sauvegardes incrémentielles avec liens durs
- -e ssh
- Spécifier la commande SSH (port, clé...)
- --inplace
- Modifier les fichiers sur place (risqué)
- -c (checksum)
- Comparer par checksum au lieu de taille/date
- --ignore-errors
- Continuer malgré les erreurs
- -P
- Équivalent à --partial --progress
L'algorithme delta : rsync divise les fichiers en blocs, calcule des checksums, et ne transfère que les blocs modifiés. Sur un fichier de 1 Go modifié à 1%, seuls ~10 Mo transitent.
Syntaxe minimale
Section intitulée « Syntaxe minimale »rsync [OPTIONS] SOURCE DESTINATIONLes 3 scénarios d'utilisation
Section intitulée « Les 3 scénarios d'utilisation »| Scénario | Syntaxe | Exemple |
|---|---|---|
| Local → Local | rsync source/ dest/ | rsync -av ~/docs/ /backup/docs/ |
| Local → Distant | rsync source/ user@srv:dest/ | rsync -avz ~/data/ admin@srv:/backup/ |
| Distant → Local | rsync user@srv:source/ dest/ | rsync -avz srv:/logs/ ~/local-logs/ |
Le piège du slash final
Section intitulée « Le piège du slash final »C'est la source d'erreur n°1 avec rsync :
| Commande | Résultat |
|---|---|
rsync -av source dest/ | Crée dest/source/... (copie le dossier) |
rsync -av source/ dest/ | Copie le contenu dans dest/... |
Règle simple : slash sur source = copie le contenu. Pas de slash = copie le dossier.
rsync -av ~/projet /backup/
# Avec slash, résultat : /backup/src/... (contenu directement)rsync -av ~/projet/ /backup/Les options essentielles
Section intitulée « Les options essentielles »| Option | Signification | Usage |
|---|---|---|
-a | Archive | Mode standard : récursif + préserve permissions, dates, liens |
-v | Verbose | Affiche les fichiers traités |
-z | Compress | Compresse pendant le transfert (utile en réseau) |
-n | Dry-run | Simule sans modifier (indispensable avant --delete) |
-P | Progress + Partial | Affiche progression + conserve fichiers partiels |
--delete | Supprimer | Supprime de dest ce qui n'existe plus dans source |
La combo standard :
# Sauvegarde locale basiquersync -av ~/Documents/ /media/backup/Documents/
# Transfert distant avec compressionrsync -avz ~/projet/ deployer@prod:/var/www/app/
# Test avant suppressionrsync -avn --delete ~/master/ /backup/mirror/Le delta-transfer en action
Section intitulée « Le delta-transfer en action »L'atout de rsync sur un simple cp ou scp : il ne transfère que les différences. La première synchronisation copie tout, les suivantes ne touchent que ce qui a changé. Démonstration sur trois fichiers :
# 1. Première synchro : tout est copié$ rsync -av src/ dst/sending incremental file listapp.confdata.txtlogs/app.logsent 320 bytes received 85 bytes total size is 35
# 2. Rien n'a changé : aucun fichier n'est transféré$ rsync -av src/ dst/sending incremental file listsent 141 bytes received 13 bytes total size is 35
# 3. Un seul fichier modifié : seul lui repart$ echo "version 2" > src/app.conf$ rsync -av src/ dst/sending incremental file listapp.confsent 205 bytes received 36 bytes total size is 35C'est ce qui rend rsync rapide et économe sur les gros volumes : sur une sauvegarde de plusieurs Go, seuls les blocs modifiés circulent, pas les fichiers entiers. La ligne sending incremental file list puis l'absence de nom de fichier à l'étape 2 prouvent que rien n'a été retransféré.
Exclure des fichiers et dossiers
Section intitulée « Exclure des fichiers et dossiers »Deux méthodes pour ignorer certains fichiers :
Méthode 1 : options --exclude
rsync -av --exclude '*.log' --exclude 'cache/' source/ dest/Méthode 2 : fichier d'exclusions
# Créer un fichier .rsyncignorecat > .rsyncignore << 'EOF'*.log*.tmpcache/.git/node_modules/EOF
# Utiliser le fichierrsync -av --exclude-from=.rsyncignore source/ dest/Ordre des règles : --include doit venir AVANT --exclude :
# Incorrect : exclude * matche tout avant includersync -av --exclude '*' --include '*.txt' source/ dest/
# Correct : include d'abordrsync -av --include '*.txt' --exclude '*' source/ dest/Miroir exact avec --delete
Section intitulée « Miroir exact avec --delete »L'option --delete rend la destination identique à la source en supprimant les fichiers qui n'existent plus côté source.
Danger : sans test, vous pouvez perdre des données.
# Étape 1 : TOUJOURS prévisualiserrsync -avn --delete ~/source/ /backup/mirror/# Vérifier la liste des fichiers qui seraient supprimés
# Étape 2 : exécuter seulement si la liste est correctersync -av --delete ~/source/ /backup/mirror/Variantes de --delete :
| Option | Comportement |
|---|---|
--delete | Supprime avant le transfert |
--delete-after | Supprime après le transfert (plus sûr) |
--delete-excluded | Supprime aussi les fichiers exclus |
Transferts distants via SSH
Section intitulée « Transferts distants via SSH »SSH est le transport par défaut pour les transferts distants :
# Syntaxe de basersync -avz source/ user@serveur:/chemin/dest/
# Récupérer depuis un serveurrsync -avz user@serveur:/var/log/ ~/logs-serveur/SSH personnalisé (port différent, clé spécifique) :
# Port SSH non standardrsync -avz -e "ssh -p 2222" source/ user@srv:/dest/
# Clé SSH spécifiquersync -avz -e "ssh -i ~/.ssh/backup_key" source/ backup@srv:/data/
# Combinérsync -avz -e "ssh -p 2222 -i ~/.ssh/backup_key" source/ user@srv:/dest/Reprise de transfert et bande passante
Section intitulée « Reprise de transfert et bande passante »Pour les gros fichiers ou connexions instables :
# -P = --partial + --progress# --partial conserve les fichiers partiellement transférésrsync -avP grosfichier.iso user@serveur:/data/
# Limiter la bande passante (en Ko/s)rsync -avz --bwlimit=1000 source/ user@serveur:/dest/
# Reprendre un transfert coupérsync -avP --append source/ dest/Sauvegardes incrémentielles avec --link-dest
Section intitulée « Sauvegardes incrémentielles avec --link-dest »--link-dest crée des sauvegardes qui semblent complètes mais n'utilisent de l'espace que pour les fichiers modifiés :
# Structure de sauvegardes/backup/├── 2024-01-01/ # Sauvegarde complète├── 2024-01-02/ # Liens durs vers 2024-01-01 + nouveaux fichiers└── 2024-01-03/ # Liens durs vers 2024-01-02 + nouveaux fichiers
# Commandersync -av --link-dest=/backup/2024-01-01 ~/data/ /backup/2024-01-02/Script de sauvegarde incrémentielle :
#!/bin/bashBACKUP_DIR="/backup"SOURCE="/home/user/data"TODAY=$(date +%Y-%m-%d)YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
# Créer la sauvegarde en utilisant l'ancienne comme référencersync -av --link-dest="$BACKUP_DIR/$YESTERDAY" \ "$SOURCE/" "$BACKUP_DIR/$TODAY/"Économie d'espace : si vous avez 100 Go de données et 1% change par jour, une semaine de sauvegardes n'utilise que ~107 Go au lieu de 700 Go.
Automatisation avec cron
Section intitulée « Automatisation avec cron »Exemple de sauvegarde quotidienne :
# Éditer la crontabcrontab -e
# Ajouter (sauvegarde à 2h du matin)0 2 * * * rsync -avz --delete /data/ backup-server:/backups/$(date +\%Y-\%m-\%d)/ >> /var/log/rsync-backup.log 2>&1Script complet avec rotation :
#!/bin/bash# backup.sh - Sauvegarde avec rotation sur 7 jours
REMOTE="backup@srv:/backups"SOURCE="/home/user/data"LOG="/var/log/rsync-backup.log"
echo "=== Backup started: $(date) ===" >> $LOG
# Sauvegardersync -avz --delete "$SOURCE/" "$REMOTE/current/" >> $LOG 2>&1
# Rotation (garder 7 jours)ssh backup@srv 'cd /backups && rm -rf day.7 && \ mv day.6 day.7 && mv day.5 day.6 && mv day.4 day.5 && \ mv day.3 day.4 && mv day.2 day.3 && mv day.1 day.2 && \ cp -al current day.1'
echo "=== Backup completed: $(date) ===" >> $LOGLes pièges à éviter
Section intitulée « Les pièges à éviter »Ces erreurs reviennent constamment avec rsync. Les connaître à l'avance vous évite des pertes de données et des heures de diagnostic.
Le piège du slash final
Section intitulée « Le piège du slash final »rsync -av /source /destinationSymptôme : un dossier source/ inattendu apparaît dans destination/.
Cause : sans slash final, rsync copie le dossier lui-même ; avec slash, il copie son contenu.
rsync -av /source/ /destination/--delete sans test préalable
Section intitulée « --delete sans test préalable »rsync -av --delete source/ dest/Symptôme : des fichiers importants disparaissent de la destination.
Cause : --delete supprime tout ce qui n'est pas présent dans la source, une erreur de chemin devient destructrice.
rsync -av --delete --dry-run source/ dest/ # vérifier, puis relancer sans --dry-runInversion source/destination
Section intitulée « Inversion source/destination »rsync -av --delete backup/ source/Symptôme : les fichiers de travail sont écrasés par une vieille sauvegarde.
Cause : confusion entre source et destination, rsync copie toujours ce qui est à gauche vers ce qui est à droite.
rsync -av source/ backup/Ordre des --include / --exclude
Section intitulée « Ordre des --include / --exclude »rsync -av --exclude "*" --include "*.txt" source/ dest/Symptôme : aucun fichier n'est copié malgré le --include.
Cause : rsync applique les règles dans l'ordre ; --exclude "*" capture tout avant que --include ne soit évalué.
rsync -av --include "*.txt" --exclude "*" source/ dest/Erreurs de permissions sur la destination
Section intitulée « Erreurs de permissions sur la destination »rsync -av ~/files/ /backup/Symptôme : message Permission denied ou attributs non préservés.
Cause : l'utilisateur courant n'a pas les droits d'écriture, ou ne peut pas appliquer le propriétaire d'origine (chown).
rsync -av --no-owner --no-group source/ dest/Espaces dans les chemins distants
Section intitulée « Espaces dans les chemins distants »rsync -av user@srv:/path/with spaces/ local/Symptôme : erreur de syntaxe ou fichiers inattendus.
Cause : le shell interprète l'espace comme un séparateur d'arguments.
rsync -av "user@srv:/path/with\ spaces/" local/Garder rsync à jour : le réflexe sécurité 2026
Section intitulée « Garder rsync à jour : le réflexe sécurité 2026 »rsync est un outil mûr, mais ce n'est pas une raison pour le laisser vieillir. La version 3.4.3 (mai 2026) est une release de sécurité qui corrige six CVE, dont deux importantes : CVE-2026-43618 (CVSS 8.1, dépassement d'entier dans le décodeur de jetons compressés, fuite mémoire) et CVE-2026-29518 (CVSS 7.3, race condition TOCTOU permettant une élévation de privilèges en mode daemon sans chroot). La 3.4.4 (8 juin 2026) backporte des corrections de régression. Vérifiez votre version :
rsync --version | head -1# rsync version 3.4.4 protocol version 32Deux réflexes en découlent. D'abord, mettre rsync à jour sur les machines qui l'exposent (serveurs de sauvegarde, relais de transfert). Ensuite, ne jamais exposer un daemon rsync nu : la plupart des usages passent par SSH (rsync -e ssh), qui chiffre et authentifie le transfert. Le mode daemon (rsync://) reste réservé à des réseaux de confiance, idéalement derrière un pare-feu et avec chroot.
Travaux pratiques
Section intitulée « Travaux pratiques »Ce lab vous fait manipuler rsync sur une arborescence réelle, de la synchronisation basique à la sauvegarde incrémentielle. Comptez 15 minutes.
Préparer le terrain
Section intitulée « Préparer le terrain »Le script suivant crée une arborescence de test avec des fichiers de tailles et de dates variées :
# Créer le labmkdir -p ~/rsync-lab/{source,backup,remote-sim}cd ~/rsync-lab/source
# Créer des fichiers variésecho "Configuration principale" > config.confecho "Application logs" > app.logdd if=/dev/zero of=data.bin bs=1M count=5 2>/dev/nullmkdir -p docsecho "Documentation" > docs/readme.mdecho "Notes" > docs/notes.txt
# Fichiers à exclureecho "Temporaire" > temp.tmpmkdir -p cacheecho "Cache data" > cache/data.cache
# Fichier avec espace dans le nomecho "Rapport important" > "rapport 2024.pdf"
# Fichier ancientouch -d "30 days ago" docs/old-doc.md
echo "Lab créé dans ~/rsync-lab"ls -laR ~/rsync-lab/sourcePour tout nettoyer à la fin : rm -rf ~/rsync-lab.
Les 8 étapes du lab
Section intitulée « Les 8 étapes du lab »-
Synchronisation basique, copiez le contenu de
source/versbackup/en mode archive :rsync -av ~/rsync-lab/source/ ~/rsync-lab/backup/. Tous les fichiers sont copiés avec leurs attributs préservés. -
Test avec
--dry-run, simulez une synchronisation avec--deletesans rien modifier :rsync -av --delete --dry-run ~/rsync-lab/source/ ~/rsync-lab/backup/. La sortie affiche ce qui serait fait, sans toucher aux fichiers. -
Exclure des fichiers, synchronisez en ignorant les
.tmpet le dossiercache/:rsync -av --exclude "*.tmp" --exclude "cache/" ~/rsync-lab/source/ ~/rsync-lab/backup/.temp.tmpetcache/ne sont pas copiés. -
Miroir exact avec
--delete, créez un fichier orphelin puis synchronisez :touch ~/rsync-lab/backup/fichier-orphelin.txtsuivi dersync -av --delete ~/rsync-lab/source/ ~/rsync-lab/backup/. Le fichier orphelin est supprimé car absent de la source. -
Transfert distant (simulé en local), utilisez la compression :
rsync -avz ~/rsync-lab/source/ ~/rsync-lab/remote-sim/. Pour un vrai serveur, la destination seraituser@serveur:/chemin/, et avec un port SSH personnalisé :rsync -avz -e "ssh -p 2222" source/ user@serveur:/backup/. -
Afficher la progression, synchronisez
data.binavec la barre de progression :rsync -av --progress ~/rsync-lab/source/data.bin ~/rsync-lab/backup/. Taille, vitesse et pourcentage s'affichent pendant le transfert. -
Limiter la bande passante, transférez
data.binà 500 Ko/s maximum :rsync -avz --bwlimit=500 ~/rsync-lab/source/data.bin ~/rsync-lab/backup/. Le transfert est plafonné, utile pour ne pas saturer le réseau. -
Sauvegarde incrémentielle, créez une sauvegarde avec liens durs vers la précédente :
rsync -av --link-dest=../backup ~/rsync-lab/source/ ~/rsync-lab/backup-new/. Les fichiers inchangés deviennent des liens durs, ce qui économise l'espace disque.
Exercices progressifs
Section intitulée « Exercices progressifs »Ces exercices vont du réflexe de base à la sauvegarde professionnelle. Lisez l'énoncé, cherchez la commande, puis dépliez la solution pour vérifier.
Niveau fondations
Section intitulée « Niveau fondations »Exercice 1, Première synchronisation. Synchronisez le dossier ~/Documents vers /media/backup/Documents en préservant les attributs.
Indice : -a pour archive, -v pour voir ce qui se passe.
Voir la solution
rsync -av ~/Documents/ /media/backup/Documents/-a préserve tout (permissions, dates, liens). N'oubliez pas le slash final sur la source.
Exercice 2, Test avant exécution. Simulez une synchronisation avec --delete sans rien modifier.
Indice : --dry-run (ou -n) simule sans modifier.
Voir la solution
rsync -av --delete --dry-run ~/source/ ~/backup/--dry-run est essentiel avant toute commande --delete : il montre l'impact réel sans risque.
Niveau composition
Section intitulée « Niveau composition »Exercice 3, Exclusion de fichiers. Synchronisez en excluant tous les fichiers .log et le dossier cache/.
Indice : --exclude peut être utilisé plusieurs fois.
Voir la solution
rsync -av --exclude "*.log" --exclude "cache/" ~/source/ ~/backup/--exclude accepte des motifs glob et se répète autant de fois que nécessaire.
Exercice 4, Transfert vers serveur distant. Envoyez le dossier ~/projet vers user@serveur:/var/www/app avec compression.
Indice : -z active la compression, utile sur le réseau.
Voir la solution
rsync -avz ~/projet/ user@serveur:/var/www/app/-z compresse les données pendant le transfert. SSH est le transport par défaut.
Exercice 5, Miroir exact. Créez un miroir exact de ~/master vers /backup/mirror en supprimant les fichiers obsolètes.
Indice : --delete supprime ce qui n'existe plus dans la source.
Voir la solution
rsync -av --delete ~/master/ /backup/mirror/--delete rend la destination identique à la source. Testez toujours avec --dry-run d'abord.
Niveau industrialisation
Section intitulée « Niveau industrialisation »Exercice 6, SSH avec port personnalisé. Synchronisez vers un serveur qui utilise le port SSH 2222.
Indice : -e permet de spécifier la commande SSH.
Voir la solution
rsync -avz -e "ssh -p 2222" ~/data/ user@serveur:/backup/-e "ssh -p 2222" change le port. La même syntaxe accepte -i pour une clé privée dédiée.
Exercice 7, Transfert avec reprise. Transférez un gros fichier avec possibilité de reprise si la connexion est coupée.
Indice : -P combine --partial et --progress.
Voir la solution
rsync -avP grosfichier.iso user@serveur:/data/-P conserve les fichiers partiels et affiche la progression : le transfert reprend où il s'était arrêté.
Niveau sécurité
Section intitulée « Niveau sécurité »Exercice 8, Sauvegarde incrémentielle. Créez une sauvegarde datée utilisant des liens durs vers la précédente.
Indice : --link-dest référence la sauvegarde précédente.
Voir la solution
rsync -av --link-dest=/backup/2024-01-01 ~/data/ /backup/2024-01-02/--link-dest économise énormément d'espace : seuls les fichiers modifiés sont réellement dupliqués.
Dépannage
Section intitulée « Dépannage »Quand un transfert échoue ou se comporte mal, ces méthodes de diagnostic et ces erreurs fréquentes couvrent la grande majorité des cas.
Méthodes de diagnostic
Section intitulée « Méthodes de diagnostic »# Simuler sans rien modifierrsync -av --dry-run source/ dest/
# Mode très verbeux : tous les détailsrsync -avvv source/ dest/
# Tester la connexion SSH avant rsyncssh -v user@serveur "ls /chemin/"
# Afficher les statistiques de transfertrsync -av --stats source/ dest/Erreurs fréquentes
Section intitulée « Erreurs fréquentes »| Erreur | Cause probable | Solution |
|---|---|---|
mkstemp ... failed: Permission denied | Pas de droits d'écriture sur la destination, ou SELinux/AppArmor bloque | Utiliser sudo ou ajuster les permissions du dossier destination |
failed to connect to serveur: Connection refused | sshd arrêté, pare-feu, ou mauvais port SSH | Démarrer sshd, ouvrir le pare-feu, ou préciser le bon port avec -e "ssh -p ..." |
Host key verification failed | Première connexion, ou serveur réinstallé (clé changée) | ssh-keygen -R serveur puis ssh user@serveur pour accepter la clé |
write failed: No space left on device | Disque destination plein ou quota atteint | Vérifier avec df -h, libérer de l'espace ou augmenter le quota |
Aide-mémoire rsync
Section intitulée « Aide-mémoire rsync »À garder sous la main : la syntaxe générale, les options de base et les filtres les plus utilisés au quotidien.
Syntaxe et slash final
Section intitulée « Syntaxe et slash final »| Syntaxe | Signification | Exemple |
|---|---|---|
rsync [OPTIONS] SOURCE DEST | Format général de la commande | rsync -av source/ dest/ |
rsync ... user@host:path | Transfert distant via SSH | rsync -avz data/ user@srv:/backup/ |
source/ | Copie le contenu de source | rsync -av source/ dest/ |
source | Copie le dossier source | rsync -av source dest/ |
Options courantes
Section intitulée « Options courantes »| Syntaxe | Signification | Exemple |
|---|---|---|
-a (archive) | Récursif + préserve tout | rsync -a source/ dest/ |
-v (verbose) | Affiche les fichiers traités | rsync -av source/ dest/ |
-z (compress) | Compresse pendant le transfert | rsync -avz source/ dest/ |
-n (dry-run) | Simule sans modifier | rsync -avn --delete source/ dest/ |
-P | --partial + --progress | rsync -avP gros.iso dest/ |
--bwlimit=KBPS | Limite la bande passante | --bwlimit=1000 |
-c (checksum) | Compare par checksum | rsync -avc source/ dest/ |
--stats | Affiche les statistiques | rsync -av --stats source/ dest/ |
-e "ssh ..." | Personnalise SSH (port, clé) | -e "ssh -p 2222" |
Synchronisation et filtres
Section intitulée « Synchronisation et filtres »| Syntaxe | Signification | Exemple |
|---|---|---|
--delete | Supprime les fichiers absents de la source | rsync -av --delete source/ dest/ |
--delete-after | Supprime après le transfert | rsync -av --delete-after source/ dest/ |
--update | Ignore les fichiers plus récents sur la destination | rsync -av --update source/ dest/ |
--exclude "pattern" | Exclut des fichiers | --exclude "*.log" |
--exclude-from=FILE | Exclusions depuis un fichier | --exclude-from=.rsyncignore |
--include "pattern" | Inclut (à placer avant --exclude) | --include "*.txt" --exclude "*" |
--link-dest=DIR | Liens durs pour sauvegarde incrémentielle | --link-dest=/backup/prev |
Checklist de maîtrise
Section intitulée « Checklist de maîtrise »Vous maîtrisez rsync quand vous pouvez cocher chacun de ces points sans hésiter :
- Je sais utiliser
-a,-v,-zpour une synchronisation standard. - Je sais tester avec
--dry-runavant d'exécuter. - Je sais exclure des fichiers avec
--exclude. - Je sais transférer vers et depuis un serveur distant.
- Je sais utiliser
--deletepour un miroir exact. - Je sais personnaliser SSH (port, clé).
- Je sais reprendre un transfert interrompu avec
-P. - Je sais faire des sauvegardes incrémentielles avec
--link-dest. - Je comprends l'importance du slash final sur la source.
- Je sais diagnostiquer une erreur de connexion SSH.
Contrôle de connaissances
Section intitulée « Contrôle de connaissances »Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Vérification
(0/0)Profil de compétences
Quoi faire maintenant
Ressources pour progresser
Des indices pour retenter votre chance ?
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications
À retenir
Section intitulée « À retenir »-avz: la combinaison standard (archive + verbose + compression)- Slash final :
/source/copie le contenu,/sourcecopie le dossier --dry-run: TOUJOURS tester avant--delete--link-dest: sauvegardes incrémentielles économes en espace-P: reprise possible des transferts interrompus
FAQ - Questions Fréquemment Posées
Section intitulée « FAQ - Questions Fréquemment Posées »Définition
rsync (Remote Sync) est un outil de synchronisation incrémentale qui transfère uniquement les différences entre source et destination, localement ou via réseau (SSH).| Caractéristique | Description |
|---|---|
| Type | Synchroniseur différentiel |
| Protocole | rsync natif, SSH, rsync daemon |
| Algorithme | Delta-transfer (uniquement changements) |
| Direction | Unidirectionnelle (source → destination) |
| Métadonnées | Préserve permissions, timestamps, ACL |
| Reprise | Transferts interrompus reprenables |
Modes de fonctionnement
# Local (même machine)
rsync -avz /source/ /destination/
# Distant SSH (push)
rsync -avz /local/ user@serveur:/distant/
# Distant SSH (pull)
rsync -avz user@serveur:/distant/ /local/
# Daemon rsync (port 873)
rsync -avz rsync://serveur/module/ /local/
Algorithme delta-transfer
1. Calcul checksums destination (blocs 512o)
2. Comparaison avec source
3. Transfert UNIQUEMENT blocs modifiés
4. Reconstruction côté destination
Gain : Fichier 1Go avec 10Mo modifiés → transfert ~10Mo (vs 1Go avec scp).Contexte DevOps : Backups incrémentaux, déploiements, miroirs, synchro contenus statiques.Comparaison outils
| Outil | Transfert | Réseau | Incrémental | Reprise | Compression | Métadonnées |
|---|---|---|---|---|---|---|
| cp | Complet | ❌ Non | ❌ Non | ❌ Non | ❌ Non | Partiel |
| scp | Complet | ✅ SSH | ❌ Non | ❌ Non | ❌ Non | Basique |
| rsync | Delta | ✅ SSH/rsync | ✅ Oui | ✅ Oui | ✅ Oui | Complet |
Avantages rsync
1. Efficacité bande passante
# Exemple : synchro 100 Go avec 500 Mo modifiés
# scp : retransfert TOUT (100 Go, 2h sur 100 Mbps)
scp -r /data user@backup:/backup
# rsync : seulement diff (500 Mo, 1 min)
rsync -avz /data/ user@backup:/backup/
2. Reprise après interruption
# Transfert interrompu à 75%
rsync -avz --partial /gros_fichier.iso user@serveur:/dst
# Relance : reprend à 75% (pas de redépart à 0%)
3. Synchronisation bidirectionnelle
# cp/scp : écrasement aveugle
cp -r /source /dest # Remplace tout
# rsync : synchro intelligente
rsync -av --delete /source/ /dest/
# Ajoute nouveaux, met à jour modifiés, supprime obsolètes
Cas d'usage spécifiques
| Scénario | Outil recommandé | Raison |
|---|---|---|
| Copie locale 1 fois | cp |
Simple, rapide |
| Transfert distant 1 fois | scp |
Simplicité syntaxe |
| Backup répété | rsync | Incrémental |
| Synchro répertoires | rsync | Delta-transfer |
| Transfert massif instable | rsync --partial | Reprise |
| Miroir serveur web | rsync --delete | Synchro exacte |
Syntaxe générale
rsync [OPTIONS] SOURCE DESTINATION
Options fondamentales
| Option | Signification | Effet |
|---|---|---|
-a |
Archive | Mode préservation total (= -rlptgoD) |
-v |
Verbose | Affiche fichiers transférés |
-z |
Compress | Compression durant transfert |
-h |
Human-readable | Tailles lisibles (Mo/Go) |
-P |
Progress + Partial | Barre progression + reprise |
-n |
Dry-run | Simulation (pas de modification) |
--delete |
Delete extraneous | Supprime fichiers obsolètes destination |
Décomposition -a (archive)
# -a est équivalent à
rsync -rlptgoD source/ dest/
# ||||||
# |||||+-> Devices + special files
# ||||+---> Owner
# |||+----> Permissions
# ||+-----> Times (timestamps)
# |+------> Links (liens symboliques)
# +-------> Recursive
Combinaisons courantes
# Standard local
rsync -av /source/ /destination/
# Distant avec compression
rsync -avz /local/ user@serveur:/distant/
# Avec progression
rsync -avzP /data/ user@backup:/backup/
# Simulation (dry-run)
rsync -avn --delete /source/ /dest/
Slash final critique
# SANS slash : copie dossier lui-même
rsync -av /source /dest
# Résultat : /dest/source/...
# AVEC slash : copie CONTENU
rsync -av /source/ /dest
# Résultat : /dest/...
Exemples typés
# Backup incrémental quotidien
rsync -avz --delete /var/www/ user@backup:/backups/www/
# Synchro SSH avec port custom
rsync -avz -e 'ssh -p 2222' /data/ user@srv:/data/
# Transfert avec exclusions
rsync -avz --exclude='*.log' /app/ deploy@prod:/app/
Mode archive (-a)
-a est l'option la plus utilisée, combinaison de 7 options pour préservation complète.Décomposition
rsync -a = rsync -rlptgoD
| Lettre | Option longue | Description |
|---|---|---|
| -r | --recursive |
Récursif (sous-dossiers) |
| -l | --links |
Préserve liens symboliques |
| -p | --perms |
Préserve permissions (chmod) |
| -t | --times |
Préserve timestamps (mtime) |
| -g | --group |
Préserve groupe |
| -o | --owner |
Préserve propriétaire (root requis) |
| -D | --devices --specials |
Périphériques + fichiers spéciaux |
Ce que -a préserve
# Fichier source
-rwxr-xr-x 1 deploy www-data 4096 2026-01-08 14:30 script.sh
# Copie avec -a
rsync -a script.sh user@serveur:/backup/
# Résultat identique (permissions, dates, propriétaire)
# Copie sans -a
rsync script.sh user@serveur:/backup/
# Permissions : 0644 (défauts), timestamps actuels
Options supplémentaires utiles
# Archive + compression
rsync -az source/ dest/
# Archive + progression
rsync -aP source/ dest/
# Archive + ACL + extended attributes
rsync -aAX source/ dest/
# ||
# |+-> eXtended attributes
# +---> ACL (Access Control Lists)
Cas spéciaux
# Backup système (root)
sudo rsync -aAXv --exclude={'/dev/*','/proc/*','/sys/*'} / /mnt/backup/
# Synchro web (sans propriétaire -o)
rsync -rlptgDvz /var/www/ deploy@prod:/var/www/
Conseil : Toujours utiliser -a sauf besoin spécifique de modifier permissions.Exclusion simple
# Exclure extension
rsync -avz --exclude='*.log' /source/ /dest/
# Exclure dossier
rsync -avz --exclude='node_modules' /app/ /backup/
Exclusions multiples
# Plusieurs patterns
rsync -avz \
--exclude='*.tmp' \
--exclude='*.cache' \
--exclude='node_modules' \
--exclude='.git' \
/projet/ /backup/
Fichier d'exclusions
# Créer liste
cat > rsync-exclude.txt <<EOF
*.log
*.tmp
.git/
node_modules/
__pycache__/
*.pyc
EOF
# Utiliser
rsync -avz --exclude-from=rsync-exclude.txt /source/ /dest/
Patterns avancés
| Pattern | Effet | Exemple |
|---|---|---|
*.log |
Tous .log partout | Logs applicatifs |
logs/ |
Dossier "logs" partout | Répertoires temporaires |
/logs/ |
Dossier "logs" racine | Spécifique chemin |
**/*.tmp |
Tous .tmp récursifs | Fichiers temporaires |
Exemples DevOps
# Backup code sans dépendances
rsync -avz \
--exclude='node_modules' \
--exclude='vendor' \
--exclude='.git' \
--exclude='*.log' \
/app/ deploy@prod:/app/
# Synchro avec exclusion cache
rsync -avz --exclude='cache/*' /var/www/ /backup/
# Backup système (exclusions critiques)
rsync -aAXv \
--exclude={'/dev/*','/proc/*','/sys/*','/tmp/*','/run/*'} \
/ /mnt/backup/
Combinaison include/exclude
# Synchroniser SEULEMENT .conf
rsync -avz \
--include='*.conf' \
--exclude='*' \
/etc/ /backup/configs/
Ordre important : include avant exclude.Règle du slash final
# SANS slash (/) : copie le dossier complet
rsync -av /source /dest
# AVEC slash (/) : copie le CONTENU
rsync -av /source/ /dest
Comparaison visuelle
Source initiale :
/source/
├── file1.txt
├── file2.txt
└── subdir/
└── file3.txt
Sans slash
rsync -av /source /dest
# Résultat :
/dest/
└── source/ # Dossier "source" créé
├── file1.txt
├── file2.txt
└── subdir/
Avec slash
rsync -av /source/ /dest
# Résultat :
/dest/
├── file1.txt # Contenu direct
├── file2.txt
└── subdir/
Impact destination
| Commande | Destination finale |
|---|---|
rsync -av /data /backup |
/backup/data/* |
rsync -av /data/ /backup |
/backup/* |
rsync -av /data /backup/ |
/backup/data/* |
rsync -av /data/ /backup/ |
/backup/* |
Cas pratiques
# Backup : conserver nom dossier
rsync -avz /var/www /backups/
# Résultat : /backups/www/...
# Déploiement : fusion contenu
rsync -avz /build/ /var/www/html/
# Résultat : /var/www/html/index.html (pas /var/www/html/build/index.html)
# Synchro exacte (miroir)
rsync -avz --delete /source/ /dest/
# /dest devient clone exact de /source
Piège courant
# ERREUR : double nesting
rsync -av /app /var/www/app # Résultat : /var/www/app/app
# CORRECT
rsync -av /app/ /var/www/app/ # Résultat : /var/www/app/...
Mémoire : Slash final = "contenu seulement".Syntaxe SSH
# Par défaut (SSH port 22)
rsync -avz /local/ user@serveur:/distant/
# Avec -e pour options SSH
rsync -avz -e ssh /local/ user@serveur:/distant/
Port SSH custom
# Port 2222
rsync -avz -e 'ssh -p 2222' /data/ user@srv:/backup/
# Avec clé SSH spécifique
rsync -avz -e 'ssh -i ~/.ssh/backup_key' /data/ backup@srv:/dst/
# Combinaison port + clé
rsync -avz -e 'ssh -p 2222 -i ~/.ssh/key' /src/ user@srv:/dst/
Modes transfert
# PUSH (local → distant)
rsync -avz /local/ user@serveur:/distant/
# PULL (distant → local)
rsync -avz user@serveur:/distant/ /local/
# Distant → Distant (via local)
rsync -avz user1@srv1:/data/ user2@srv2:/backup/
Optimisations réseau
| Option | Effet | Usage |
|---|---|---|
-z |
Compression gzip | Réseaux lents |
--bwlimit=KBPS |
Limite bande passante | Éviter saturation |
-W |
Whole file (pas delta) | LAN rapide |
--compress-level=N |
Niveau compression (0-9) | Ajuster CPU/réseau |
Exemples production
# Backup quotidien avec compression
rsync -avz --delete \
-e 'ssh -i /root/.ssh/backup_key' \
/var/www/ backup@nas:/backups/www/
# Limite à 5 Mbps (pas saturer)
rsync -avz --bwlimit=5000 \
/data/ user@distant:/backup/
# LAN rapide (désactiver delta)
rsync -avW /gros_fichiers/ nas:/backup/
# Progression détaillée
rsync -avzP --stats \
/local/ user@srv:/distant/
Sécurité
# Utiliser SSH config
# ~/.ssh/config
Host backup
Hostname backup.example.com
Port 2222
User backup
IdentityFile ~/.ssh/backup_key
# Commande simplifiée
rsync -avz /data/ backup:/backups/
Performance : -z utile si réseau < 100 Mbps, sinon CPU overhead inutile.Option --delete
# Synchro avec suppression obsolètes
rsync -avz --delete /source/ /dest/
Effet : /dest devient miroir exact de /source (fichiers supprimés dans source = supprimés destination).Variantes --delete
| Option | Comportement | Usage |
|---|---|---|
--delete |
Supprime avant transfert | Standard |
--delete-after |
Supprime après transfert | Plus sûr (rollback possible) |
--delete-during |
Supprime pendant transfert | Économie espace disque |
--delete-excluded |
Supprime fichiers exclus | Nettoyage patterns |
Exemples pratiques
# Miroir site web (supprimer anciens assets)
rsync -avz --delete /build/ /var/www/html/
# Backup avec nettoyage (delete-after plus sûr)
rsync -avz --delete-after /data/ backup@nas:/backups/
# Synchro avec exclusions + nettoyage
rsync -avz --delete \
--exclude='*.log' \
--exclude='cache/' \
/app/ deploy@prod:/app/
Protection accidentelle
# Dry-run AVANT --delete réel
rsync -avn --delete /source/ /dest/
# Vérifie ce qui serait supprimé
# Limite suppressions (max 100 fichiers)
rsync -avz --delete --max-delete=100 /src/ /dst/
# Backup avant --delete
rsync -avz --backup --backup-dir=/backups/deleted-$(date +%F) \
--delete /source/ /dest/
Cas d'usage DevOps
# Déploiement avec nettoyage
rsync -avz --delete \
--exclude='uploads/' \
--exclude='.env' \
/releases/v1.2/ /var/www/app/
# Synchro contenus statiques
rsync -avz --delete s3-mirror/ /var/www/cdn/
Danger : --delete peut supprimer fichiers critiques si mauvaise source. Toujours tester avec -n.Option --dry-run (-n)
# Simulation complète (aucune modification)
rsync -avn /source/ /dest/
# |
# +-> dry-run (simulation)
# Simulation avec détails
rsync -avvn --delete /source/ /dest/
# ||
# |+-> dry-run
# +---> très verbeux (double -v)
Ce que --dry-run affiche
$ rsync -avn --delete /source/ /dest/
sending incremental file list
deleting obsolete_file.txt
file1.txt
file2.txt
new_directory/
new_directory/file3.txt
sent 450 bytes received 25 bytes 950.00 bytes/sec
total size is 4,523,128 speedup is 9,522.38 (DRY RUN)
Analyse pré-synchro
# Lister seulement nouveaux fichiers
rsync -avn /source/ /dest/ | grep -v 'deleting'
# Compter fichiers à transférer
rsync -avn /source/ /dest/ | grep -v '^sent\|^total\|^$' | wc -l
# Voir seulement suppressions (avec --delete)
rsync -avn --delete /source/ /dest/ | grep '^deleting'
# Estimation taille transfert
rsync -avn --stats /source/ /dest/
Workflow sécurisé
# Étape 1 : Simulation
rsync -avn --delete /source/ user@prod:/app/ > rsync-preview.txt
# Étape 2 : Vérification manuelle
cat rsync-preview.txt
# Étape 3 : Exécution réelle
rsync -avz --delete /source/ user@prod:/app/
Cas pratiques
# Tester déploiement production
rsync -avn --delete \
--exclude='node_modules' \
/build/ deploy@prod:/var/www/ > deploy-plan.txt
# Vérifier backup avant --delete
rsync -avn --delete /data/ /backup/
# Estimer temps transfert
rsync -avn --stats --progress /gros_data/ user@distant:/backup/
Combinaisons utiles
| Commande | Usage |
|---|---|
rsync -avn |
Simulation basique |
rsync -avvn |
Détails complets |
rsync -avn --stats |
Statistiques transfert |
rsync -avn --itemize-changes |
Changements détaillés par fichier |
-n avant --delete en production.Option --bwlimit
# Limite en kilobits par seconde
rsync -avz --bwlimit=5000 /data/ user@serveur:/backup/
# |
# +-> 5000 Kbps = 5 Mbps
Unités et conversions
| Valeur | Signification | Vitesse effective |
|---|---|---|
--bwlimit=500 |
500 Kbps | ~62 Ko/s |
--bwlimit=1000 |
1 Mbps | ~125 Ko/s |
--bwlimit=5000 |
5 Mbps | ~625 Ko/s |
--bwlimit=10000 |
10 Mbps | ~1.25 Mo/s |
Cas d'usage
# Backup de nuit (pas saturer ligne)
rsync -avz --bwlimit=2000 /data/ backup@nas:/backups/
# Synchro durant heures bureau (limite stricte)
rsync -avz --bwlimit=500 /logs/ user@archive:/logs/
# Transfert gros volume (priorité basse)
rsync -avz --bwlimit=1000 --partial \
/backups/database.tar.gz user@distant:/restore/
Calcul limite optimale
# Bande passante totale : 100 Mbps
# Laisser 80% dispo pour production
# → Limite rsync : 20 Mbps = 20000 Kbps
rsync -avz --bwlimit=20000 /data/ user@srv:/backup/
Monitoring vitesse
# Avec progression (voir vitesse réelle)
rsync -avzP --bwlimit=5000 /data/ user@srv:/backup/
# Sortie exemple :
# fichier.iso
# 1,234,567,890 45% 4.8MB/s 0:02:15
Limitation dynamique
# Script avec limite horaire
#!/bin/bash
heure=$(date +%H)
if [ $heure -ge 8 ] && [ $heure -le 18 ]; then
# Heures bureau : limite stricte
bw=1000
else
# Nuit : bande passante max
bw=50000
fi
rsync -avz --bwlimit=$bw /data/ backup:/backups/
Alternatives
# Limite via trickle (outil externe)
trickle -d 5000 rsync -av /data/ user@srv:/backup/
# Limite SSH (via OpenSSH IPQoS)
rsync -av -e 'ssh -o IPQoS=throughput' /data/ user@srv:/backup/
Astuce : --bwlimit s'applique côté émetteur (source).Prochaines étapes
Section intitulée « Prochaines étapes »rsync prend toute sa valeur combiné aux outils qui l'entourent : un transport SSH durci, une planification régulière et des outils d'archivage. Voici les suites logiques pour industrialiser vos sauvegardes.