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
Conclusion
Section intitulée « Conclusion »rsync est l’outil incontournable pour les sauvegardes et synchronisations sous Linux. Son algorithme delta le rend bien plus efficace que cp ou scp pour les mises à jour régulières, et son intégration native avec SSH en fait un choix idéal pour les transferts distants sécurisés. Maîtriser rsync, c’est disposer d’un outil fiable pour protéger vos données et automatiser vos déploiements.
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).