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 (CRITIQUE)
Section intitulée « ⚠️ Le piège du slash final (CRITIQUE) »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/
# ✅ 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/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 patterns de synchronisation courants
Section intitulée « Les patterns de synchronisation courants »Maintenant que vous maîtrisez les bases, voici des recettes prêtes à l'emploi pour les cas d'usage fréquents. Chacune combine une formule générique et un exemple concret que vous pouvez adapter à votre contexte.
Synchronisation locale basique
Section intitulée « Synchronisation locale basique »Copier et mettre à jour un dossier vers un autre sur la même machine. C'est le socle de toute sauvegarde locale.
# Formulersync -av <source>/ <destination>/
# Exemplersync -av ~/Documents/ /media/backup/Documents/-a: mode archive — récursif et préserve permissions, dates, liens.-v: verbose — affiche les fichiers traités.
Envoi vers un serveur distant
Section intitulée « Envoi vers un serveur distant »Transférer des fichiers vers un serveur via SSH, typiquement pour un déploiement d'application.
# Formulersync -avz <source>/ user@serveur:<destination>/
# Exemplersync -avz ~/projet/ deployer@prod:/var/www/app/-z: compresse les données pendant le transfert.user@serveur:: ouvre une connexion SSH vers la destination.
Récupération depuis un serveur distant
Section intitulée « Récupération depuis un serveur distant »L'opération inverse : télécharger des fichiers depuis un serveur vers la machine locale.
# Formulersync -avz user@serveur:<source>/ <destination>/
# Exemplersync -avz root@backup:/var/backups/ ~/local-backups/user@serveur:: désigne ici la source distante.<destination>/: le dossier local qui reçoit les fichiers.
Miroir exact avec suppression
Section intitulée « Miroir exact avec suppression »Rendre la destination strictement identique à la source, suppressions comprises. À tester impérativement avec --dry-run avant exécution réelle.
# Formulersync -av --delete <source>/ <destination>/
# Exemplersync -av --delete ~/master/ /media/usb/mirror/--delete: supprime de la destination les fichiers absents de la source.
Exclusion de fichiers et dossiers
Section intitulée « Exclusion de fichiers et dossiers »Ignorer certains fichiers pendant la synchronisation — caches, journaux, dossiers de build.
# Formulersync -av --exclude "pattern" <source>/ <destination>/
# Exemplersync -av --exclude "*.log" --exclude ".git/" src/ backup/--exclude: motif glob à exclure, peut être répété.--exclude-from: lit les exclusions depuis un fichier dédié.
Exclusions depuis un fichier
Section intitulée « Exclusions depuis un fichier »Gérer un grand nombre d'exclusions de façon maintenable en les centralisant dans un fichier.
# Formulersync -av --exclude-from=<fichier> <source>/ <destination>/
# Exemplersync -av --exclude-from=.rsyncignore ~/projet/ /backup/--exclude-from: chemin du fichier listant les motifs, un par ligne.
Sauvegarde incrémentielle
Section intitulée « Sauvegarde incrémentielle »Créer des sauvegardes datées qui économisent l'espace grâce aux liens durs : seuls les fichiers modifiés occupent réellement de la place.
# Formulersync -av --link-dest=<backup-précédent> <source>/ <backup-nouveau>/
# Exemplersync -av --link-dest=/backup/2024-01-01 ~/data/ /backup/2024-01-02/--link-dest: sauvegarde de référence pour les liens durs.
Reprise de transfert interrompu
Section intitulée « Reprise de transfert interrompu »Continuer un transfert coupé sans tout recommencer — indispensable sur les gros fichiers et les connexions instables.
# Formulersync -avP <source>/ <destination>/
# Exemplersync -avP grosfichier.iso user@serveur:/data/-P: équivalent à--partial --progress.--partial: conserve les fichiers partiellement transférés.
Limitation de bande passante
Section intitulée « Limitation de bande passante »Synchroniser sans saturer la connexion réseau, par exemple pendant les heures ouvrées.
# Formulersync -avz --bwlimit=<KBPS> <source>/ <destination>/
# Exemplersync -avz --bwlimit=1000 ~/data/ backup-server:/data/--bwlimit: limite la bande passante en Ko/s.
SSH personnalisé (port, clé)
Section intitulée « SSH personnalisé (port, clé) »Utiliser un port SSH non standard ou une clé privée dédiée à la sauvegarde.
# Formulersync -avz -e "ssh -p <port> -i <clé>" <source>/ user@serveur:<dest>/
# Exemplersync -avz -e "ssh -p 2222 -i ~/.ssh/backup_key" ~/data/ backup@srv:/data/-e: commande de shell distant à utiliser.-p: port SSH ;-i: fichier de clé privée.
Les 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/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
Points clés à retenir :
Section intitulée « Points clés à 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).