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 patterns prêts à l’emploi pour les cas d’usage fréquents.
Ces recettes couvrent les cas d'usage les plus fréquents. Cliquez sur un pattern pour voir la formule complète et un exemple prêt à copier.
Synchronisation locale basique Base Copier/mettre à jour un dossier vers un autre en local.
rsync -av ~/Documents/ /media/backup/Documents/
rsync -av <source>/ <destination>/ rsync -av ~/Documents/ /media/backup/Documents/ -
-a— Mode archive : récursif + préserve tout -
-v— Verbose : affiche les fichiers traités
Envoi vers serveur distant Base Transférer des fichiers vers un serveur via SSH.
rsync -avz ~/projet/ deployer@prod:/var/www/app/
rsync -avz <source>/ user@serveur:<destination>/ rsync -avz ~/projet/ deployer@prod:/var/www/app/ -
-z— Compression pendant le transfert -
user@serveur:— Connexion SSH
Récupération depuis serveur distant Base Télécharger des fichiers depuis un serveur.
rsync -avz root@backup:/var/backups/ ~/local-backups/
rsync -avz user@serveur:<source>/ <destination>/ rsync -avz root@backup:/var/backups/ ~/local-backups/ -
user@serveur:— Source distante -
<destination>/— Destination locale
Miroir exact avec suppression Inter. Rendre la destination identique à la source (y compris suppressions).
rsync -av --delete ~/master/ /media/usb/mirror/
rsync -av --delete <source>/ <destination>/ rsync -av --delete ~/master/ /media/usb/mirror/ -
--delete— Supprime les fichiers absents de la source
Exclusion de fichiers/dossiers Inter. Ignorer certains fichiers pendant la synchronisation.
rsync -av --exclude "*.log" --exclude ".git/" src/ backup/
rsync -av --exclude "pattern" <source>/ <destination>/ rsync -av --exclude "*.log" --exclude ".git/" src/ backup/ -
--exclude— Pattern glob à exclure -
--exclude-from— Fichier contenant les exclusions
Exclusions depuis un fichier Inter. Gérer de nombreuses exclusions via un fichier dédié.
rsync -av --exclude-from=.rsyncignore ~/projet/ /backup/
rsync -av --exclude-from=<fichier> <source>/ <destination>/ rsync -av --exclude-from=.rsyncignore ~/projet/ /backup/ -
--exclude-from— Chemin vers le fichier d'exclusions
Sauvegarde incrémentielle Avancé Créer des sauvegardes qui économisent l'espace avec des liens durs.
rsync -av --link-dest=/backup/2024-01-01 ~/data/ /backup/2024-01-02/
rsync -av --link-dest=<backup-précédent> <source>/ <backup-nouveau>/ rsync -av --link-dest=/backup/2024-01-01 ~/data/ /backup/2024-01-02/ -
--link-dest— Référence pour les liens durs
Reprise de transfert interrompu Inter. Continuer un transfert qui a été coupé.
rsync -avP grosfichier.iso user@serveur:/data/
rsync -avP <source>/ <destination>/ rsync -avP grosfichier.iso user@serveur:/data/ -
-P— Équivalent à --partial --progress -
--partial— Conserver les fichiers partiels
Limitation de bande passante Inter. Ne pas saturer la connexion réseau.
rsync -avz --bwlimit=1000 ~/data/ backup-server:/data/
rsync -avz --bwlimit=<KBPS> <source>/ <destination>/ rsync -avz --bwlimit=1000 ~/data/ backup-server:/data/ -
--bwlimit— Limite en Ko/s
SSH personnalisé (port, clé) Avancé Utiliser un port SSH différent ou une clé spécifique.
rsync -avz -e "ssh -p 2222 -i ~/.ssh/backup_key" ~/data/ backup@srv:/data/
rsync -avz -e "ssh -p <port> -i <clé>" <source>/ user@serveur:<dest>/ rsync -avz -e "ssh -p 2222 -i ~/.ssh/backup_key" ~/data/ backup@srv:/data/ -
-e— Commande de shell distant -
-p— Port SSH -
-i— Fichier de clé privée
Aucune recette ne correspond à votre recherche.
Les pièges à éviter
Section intitulée « Les pièges à éviter »Ces erreurs courantes peuvent faire perdre du temps ou causer des dégâts. Les pièges les plus critiques sont affichés en premier.
--delete sans test préalable rsync -av --delete source/ dest/ exécuté directement
Danger
rsync -av --delete source/ dest/ exécuté directement
rsync -av --delete --dry-run source/ dest/ # puis sans --dry-run Inversion source/destination rsync -av --delete backup/ source/ (inverse !)
Danger
rsync -av --delete backup/ source/ (inverse !)
rsync -av source/ backup/ Le piège du slash final rsync -av /source /destination vs rsync -av /source/ /destination
Attention
rsync -av /source /destination vs rsync -av /source/ /destination
rsync -av /source/ /destination/ Ordre des --include/--exclude --exclude "*" --include "*.txt" n'inclut rien
Attention
--exclude "*" --include "*.txt" n'inclut rien
rsync -av --include "*.txt" --exclude "*" source/ dest/ Erreurs de permissions sur destination rsync -av ~/files/ /backup/ en tant qu'utilisateur normal
Info
rsync -av ~/files/ /backup/ en tant qu'utilisateur normal
rsync -av --no-owner --no-group source/ dest/ Espaces dans les chemins distants rsync -av user@srv:/path/with spaces/ local/
Info
rsync -av user@srv:/path/with spaces/ local/
rsync -av "user@srv:/path/with\ spaces/" local/ Dépannage
Section intitulée « Dépannage »🔧 Quand ça ne marche pas
Méthodes de debug
Simuler avec --dry-run
Voir ce qui serait fait sans rien modifier.
rsync -av --dry-run source/ dest/ Mode très verbose
Afficher tous les détails de la synchronisation.
rsync -avvv source/ dest/ Tester la connexion SSH
Vérifier que SSH fonctionne avant rsync.
ssh -v user@serveur "ls /chemin/" Afficher les stats
Voir les statistiques de transfert.
rsync -av --stats source/ dest/ Erreurs fréquentes
rsync: mkstemp ... failed: Permission denied
- Vérifier les permissions : ls -la /destination
- Vérifier le contexte SELinux : ls -Z
Utiliser sudo ou ajuster les permissions du dossier destination
sudo rsync -av source/ dest/ rsync: failed to connect to serveur: Connection refused
- Le serveur SSH n'est pas démarré
- Le pare-feu bloque le port SSH
- Mauvais port SSH
- Tester SSH : ssh user@serveur
- Vérifier le port : nc -zv serveur 22
Démarrer sshd, ouvrir le pare-feu, ou spécifier le bon port
rsync -avz -e "ssh -p 22" source/ user@serveur:/dest/ Host key verification failed
- Première connexion au serveur
- Le serveur a été réinstallé (clé changée)
- Se connecter en SSH pour accepter la clé
- Vérifier ~/.ssh/known_hosts
ssh user@serveur une première fois pour accepter la clé
ssh-keygen -R serveur && ssh user@serveur rsync: write failed: No space left on device
- Disque destination plein
- Quota utilisateur atteint
- Vérifier l'espace : df -h
- Vérifier les quotas : quota -v
Libérer de l'espace ou augmenter le quota
df -h /destination Cheatsheet
Section intitulée « Cheatsheet » 📋
Cheatsheet rsync
📝 Syntaxe :
rsync [OPTIONS] SOURCE DEST Format général de la commande rsync ... user@host:path Transfert distant via SSH source/ Copie le CONTENU de source source Copie le DOSSIER source 🚀 Commandes types :
rsync -av ~/Documents/ /media/backup/Documents/ rsync -avz ~/projet/ deployer@prod:/var/www/app/ rsync -avz root@backup:/var/backups/ ~/local-backups/ ⚙️ Options
-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 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 | Limiter bande passante | --bwlimit=1000 |
--compress-level=N | Niveau compression (0-9) | --compress-level=1 |
--partial | Conserver fichiers partiels | --partial |
-e "ssh ..." | Personnaliser SSH | -e "ssh -p 2222" |
-e "ssh -i key" | Clé SSH spécifique | -e "ssh -i ~/.ssh/backup" |
-c (checksum) | Comparer par checksum | rsync -avc source/ dest/ |
--stats | Afficher statistiques | rsync -av --stats source/ dest/ |
🔍 Filtres
--exclude "pattern" | Exclure des fichiers | --exclude "*.log" |
--exclude-from=FILE | Exclusions depuis fichier | --exclude-from=.rsyncignore |
--include "pattern" | Inclure (avant exclude) | --include "*.txt" --exclude "*" |
⚡ Actions
--delete | Supprime fichiers absents de source | rsync -av --delete source/ dest/ |
--delete-after | Supprime après le transfert | rsync -av --delete-after source/ dest/ |
--update | Ignore fichiers plus récents sur dest | rsync -av --update source/ dest/ |
🔗 Composition
--link-dest=DIR | Liens durs (incrémentiel) | --link-dest=/backup/prev |
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).