rsync est un outil de synchronisation de fichiers rapide et efficace, largement utilisé pour les sauvegardes, la migration de données et la réplication de répertoires, aussi bien en local qu’à distance. Contrairement à des commandes comme cp, scp ou tar, rsync ne transfère que les différences entre les fichiers, ce qui permet d’économiser du temps et de la bande passante. Que ce soit pour sauvegarder un serveur, déplacer des données ou maintenir des copies à jour, rsync s’impose comme un allié indispensable pour tout administrateur système.
Concepts fondamentaux de rsync
Section intitulée « Concepts fondamentaux de rsync »Pour bien utiliser rsync, il est important de connaître les principes techniques qui expliquent sa rapidité et son efficacité. Voici les notions clés à maîtriser :
- Synchronisation différentielle : Seuls les blocs modifiés sont transférés, ce qui minimise la quantité de données envoyées.
- Comparaison sur métadonnées : rsync détecte les changements en comparant la taille, la date de modification et les permissions ; pour une comparaison plus précise, l’option -c utilise des checksums.
- Mode local et distant : La synchronisation peut s’effectuer sur la même machine ou à distance via une connexion sécurisée SSH.
- Conservation des attributs : Avec -a, rsync préserve les droits d’accès, les dates, les liens symboliques et les structures de répertoires.
- Gestion des suppressions : L’option —delete permet d’aligner la destination avec la source en supprimant les fichiers devenus obsolètes.
- Résilience aux coupures : Grâce aux options —partial et —append, un transfert interrompu peut être repris sans tout recommencer.
Ces concepts expliquent pourquoi rsync est devenu un outil incontournable pour la sauvegarde, la migration et la synchronisation de données.
Syntaxe de base de rsync
Section intitulée « Syntaxe de base de rsync »La commande rsync utilise une syntaxe simple mais très puissante. Voici sa structure générale :
rsync [options] source destinationLe source est le fichier ou le répertoire que vous souhaitez copier, tandis que destination est l’endroit où vous voulez le transférer. Cette destination peut être locale ou distante, selon vos besoins.
Options courantes
Section intitulée « Options courantes »Voici quelques options fréquemment utilisées avec rsync :
- -a : active le mode archive pour préserver les permissions, les dates et les liens symboliques.
- -v : affiche les détails des opérations en cours (verbose).
- -z : compresse les données durant le transfert.
- —progress : affiche la progression détaillée du transfert.
Ces options peuvent être combinées pour former des commandes très flexibles, adaptées à de nombreux scénarios.
Importance du slash final
Section intitulée « Importance du slash final »Un point fondamental à comprendre avec rsync est la différence d’interprétation selon la présence d’une barre oblique finale :
-
Sans barre oblique à la fin de la source :
Fenêtre de terminal rsync -avz /source /destinationCette commande copie le dossier source et son contenu dans destination. On obtient donc un répertoire /destination/source. Cela signifie que le dossier source lui-même est créé dans la destination, et son contenu est copié à l’intérieur.
-
Avec barre oblique à la fin de la source :
Fenêtre de terminal rsync -avz /source/ /destinationIci, seul le contenu du dossier source est copié et non le dossier lui-même. La destination devient donc /destination/ et le contenu de source est directement placé à l’intérieur.
Ce détail peut sembler anodin, mais il change totalement le résultat de la synchronisation. Prenez donc toujours soin de vérifier la syntaxe avant d’exécuter une commande en production. Vous pouvez utiliser —dry-run pour simuler le transfert sans rien modifier réellement.
Synchronisation locale de fichiers
Section intitulée « Synchronisation locale de fichiers »Utiliser rsync pour synchroniser des fichiers ou des répertoires sur une même machine est une excellente manière de sécuriser vos données rapidement et efficacement.
Copier un fichier ou un répertoire localement
Section intitulée « Copier un fichier ou un répertoire localement »Pour copier un fichier avec rsync, la commande est simple :
rsync -avz /chemin/source/fichier.txt /chemin/destination/Pour copier un répertoire entier :
rsync -avz /chemin/source/ /chemin/destination/La barre oblique après source/ assure que seul le contenu du répertoire est copié et non le répertoire lui-même.
Utilisation des options -a, -v, -z
Section intitulée « Utilisation des options -a, -v, -z »- -a : Le mode archive conserve les droits d’accès, les liens symboliques, les propriétaires et les groupes.
- -v : Avec l’option verbose, chaque fichier copié est affiché dans le terminal.
- -z : La compression (gzip) réduit la taille des données en transit, même si ce gain est plus notable lors de synchronisations réseau.
Ces options sont souvent utilisées ensemble pour garantir une copie fiable et rapide.
Exemples pratiques
Section intitulée « Exemples pratiques »-
Copier un répertoire personnel vers un dossier de sauvegarde :
Fenêtre de terminal rsync -avz /home/utilisateur/Documents/ /home/utilisateur/Sauvegardes/Documents/ -
Mettre à jour une sauvegarde sans recopier les fichiers inchangés :
Fenêtre de terminal rsync -avz /home/utilisateur/Photos/ /media/backup/Photos/ -
Tester une synchronisation sans rien modifier :
Fenêtre de terminal rsync -avzn /home/utilisateur/Vidéos/ /media/backup/Vidéos/L’option -n active le mode —dry-run, très utile pour vérifier ce qui serait copié.
Grâce à sa capacité à ne transférer que les fichiers modifiés, rsync est idéal pour maintenir des copies de travail locales à jour sans perte de performance.
Exclusion et inclusion de fichiers
Section intitulée « Exclusion et inclusion de fichiers »rsync offre une grande flexibilité pour choisir précisément quels fichiers synchroniser grâce aux options —exclude et —include.
Utilisation des options —exclude et —include
Section intitulée « Utilisation des options —exclude et —include »Pour exclure certains fichiers ou répertoires lors d’une synchronisation, utilisez —exclude :
rsync -avz --exclude 'fichier.log' /chemin/source/ /chemin/destination/Cela ignore le fichier fichier.log pendant la copie.
Pour inclure des fichiers spécifiques tout en excluant d’autres, combinez —include et —exclude :
rsync -avz --include 'important.txt' --exclude '*' /chemin/source/ /chemin/destination/Cette commande synchronise uniquement important.txt et ignore tout le reste.
Astuce : L’ordre des options —include et —exclude est important. rsync les interprète dans l’ordre où elles apparaissent.
Création de fichiers d’exclusion
Section intitulée « Création de fichiers d’exclusion »Lorsque les règles deviennent nombreuses, il est préférable d’utiliser un fichier d’exclusion. Ce fichier liste les motifs à ignorer :
excludes.txt :
*.tmp*.bak.cache/logs/Puis utilisez la commande suivante :
rsync -avz --exclude-from='excludes.txt' /chemin/source/ /chemin/destination/Cela rend les synchronisations plus lisibles et plus faciles à maintenir.
Exemples pratiques
Section intitulée « Exemples pratiques »-
Exclure tous les fichiers temporaires :
Fenêtre de terminal rsync -avz --exclude '*.tmp' /home/utilisateur/ /media/backup/ -
Inclure seulement des fichiers PDF et ignorer le reste :
Fenêtre de terminal rsync -avz --include '*.pdf' --exclude '*' /home/utilisateur/Documents/ /media/backup/Documents/ -
Utiliser un fichier d’exclusion personnalisé :
Fenêtre de terminal rsync -avz --exclude-from='/home/utilisateur/excludes.txt' /var/www/ /media/backup/www/
La maîtrise de —exclude et —include permet d’optimiser vos sauvegardes, en limitant la copie aux données réellement utiles.
Synchronisation distante via SSH
Section intitulée « Synchronisation distante via SSH »rsync excelle également dans la synchronisation de fichiers entre une machine locale et un serveur distant en utilisant SSH pour sécuriser les transferts.
Transfert de fichiers vers un serveur distant
Section intitulée « Transfert de fichiers vers un serveur distant »Pour envoyer un fichier ou un répertoire vers un serveur distant, la commande est :
rsync -avz -e ssh /chemin/local/ utilisateur@serveur:/chemin/distant/Exemple concret :
rsync -avz -e ssh /home/utilisateur/Projet/ utilisateur@192.168.1.10:/home/utilisateur/Backup/Cette commande copie le contenu du répertoire Projet vers le dossier Backup du serveur distant, en utilisant SSH comme canal sécurisé.
Transfert de fichiers depuis un serveur distant
Section intitulée « Transfert de fichiers depuis un serveur distant »Pour récupérer des fichiers depuis un serveur distant vers la machine locale :
rsync -avz -e ssh utilisateur@serveur:/chemin/distant/ /chemin/local/Exemple :
rsync -avz -e ssh utilisateur@192.168.1.10:/var/www/html/ /home/utilisateur/Sauvegardes/html/Cette commande télécharge tout le contenu du répertoire html du serveur vers la machine locale.
Il est également possible de personnaliser la commande ssh, par exemple pour spécifier un port différent :
rsync -avz -e "ssh -p 2222" utilisateur@192.168.1.10:/var/www/html/ /home/utilisateur/Sauvegardes/html/Ici, rsync utilise le port 2222 au lieu du port SSH par défaut (22).
Utiliser SSH avec rsync permet non seulement de sécuriser les transferts, mais aussi d’éviter d’ouvrir des ports non sécurisés sur les serveurs de production.
Options avancées de rsync
Section intitulée « Options avancées de rsync »rsync propose de nombreuses options avancées permettant d’améliorer la gestion des synchronisations complexes.
Suppression des fichiers obsolètes avec —delete
Section intitulée « Suppression des fichiers obsolètes avec —delete »Pour que la destination reflète exactement la source, y compris en supprimant les fichiers qui n’existent plus dans cette dernière :
rsync -avz --delete /chemin/source/ /chemin/destination/Attention, cette option est puissante : elle efface définitivement les fichiers absents de la source. Il est recommandé d’utiliser —dry-run pour tester avant l’exécution réelle.
Affichage de la progression avec —progress
Section intitulée « Affichage de la progression avec —progress »Pour surveiller le déroulement précis d’un transfert, ajoutez l’option —progress :
rsync -avz --progress /chemin/source/ /chemin/destination/Chaque fichier copié affiche sa taille, le pourcentage transféré et la vitesse de transmission. Pratique pour les gros fichiers !
Limitation de la bande passante avec —bwlimit
Section intitulée « Limitation de la bande passante avec —bwlimit »Pour éviter de saturer la connexion réseau, utilisez —bwlimit pour limiter le débit en kilobits par seconde :
rsync -avz --bwlimit=500 /chemin/source/ /chemin/destination/Ici, le transfert est limité à 500 Kbps. Cette option est particulièrement utile sur des liaisons réseau partagées ou lentes.
Utilisation du mode —dry-run pour les tests
Section intitulée « Utilisation du mode —dry-run pour les tests »Avant d’exécuter une commande sensible, il est fortement conseillé de faire un test avec —dry-run :
rsync -avz --delete --dry-run /chemin/source/ /chemin/destination/Cela simule l’opération, affiche ce qui serait transféré ou supprimé, sans rien modifier réellement. Un excellent moyen d’éviter des erreurs irréversibles.
En combinant ces options avancées, rsync devient un outil extrêmement précis et adaptable à toutes sortes de scénarios de synchronisation.
Gestion des erreurs et des logs
Section intitulée « Gestion des erreurs et des logs »Pour assurer une meilleure traçabilité des opérations de rsync, redirigez la sortie standard et la sortie d’erreur vers un fichier de log :
rsync -avz /chemin/source/ /chemin/destination/ > /var/log/rsync.log 2>&1De plus, l’option —ignore-errors permet de poursuivre la synchronisation même si une erreur survient :
rsync -avz --ignore-errors /chemin/source/ /chemin/destination/Cela est utile dans les scénarios où il est plus important de sauvegarder le maximum de données possibles, même en cas de problème ponctuel.
Optimisation des performances
Section intitulée « Optimisation des performances »Quelques options pour accélérer vos synchronisations :
-
—compress-level=N : Ajuste le niveau de compression (par défaut à 6). Un niveau plus bas diminue la charge CPU.
Exemple :
Fenêtre de terminal rsync -avz --compress-level=1 /chemin/source/ /chemin/destination/ -
—inplace : Modifie les fichiers directement sur place sans créer de copie temporaire. Attention, cela peut être risqué si la synchronisation est interrompue.
Fenêtre de terminal rsync -avz --inplace /chemin/source/ /chemin/destination/ -
—whole-file : Désactive l’algorithme de delta pour transférer les fichiers en entier, ce qui peut être plus rapide sur des réseaux très rapides.
Fenêtre de terminal rsync -avz --whole-file /chemin/source/ /chemin/destination/
Enfin, pour les très gros volumes de données, pensez à associer rsync à des systèmes de fichiers optimisés comme ZFS ou Btrfs qui offrent des fonctionnalités avancées de snapshots et de compression native.
Avec ces bonnes pratiques, vous exploitez pleinement toute la puissance de rsync tout en assurant la fiabilité et la rapidité de vos transferts.
Automatisation des tâches avec rsync
Section intitulée « Automatisation des tâches avec rsync »Pour rendre vos synchronisations régulières et sans intervention manuelle, rsync peut être intégré dans des scripts et planifié avec cron.
Création de scripts de sauvegarde
Section intitulée « Création de scripts de sauvegarde »Un script de sauvegarde simple avec rsync peut être créé en quelques lignes :
#!/bin/bash# Script de sauvegarde
rsync -avz --delete /home/utilisateur/Documents/ /media/backup/Documents/N’oubliez pas de rendre le script exécutable :
chmod +x sauvegarde.shVous pouvez ainsi exécuter votre sauvegarde d’un simple appel :
./sauvegarde.shPlanification avec cron
Section intitulée « Planification avec cron »Pour automatiser l’exécution du script, utilisez cron, le planificateur de tâches de Linux.
Ouvrez la table des tâches de l’utilisateur avec :
crontab -eAjoutez une ligne pour exécuter la sauvegarde tous les jours à 2h00 :
0 2 * * * /chemin/vers/sauvegarde.shSi vous ne maitrisez pas cron, consultez mon guide sur l’utilisation de cron.
Sauvegardes incrémentielles et différentielles
Section intitulée « Sauvegardes incrémentielles et différentielles »rsync est naturellement incrémentiel : il ne transfère que les fichiers modifiés. Pour aller plus loin et conserver plusieurs versions, vous pouvez utiliser l’option —link-dest :
rsync -avz --link-dest=/media/backup/sauvegarde_precedente/ /home/utilisateur/Documents/ /media/backup/nouvelle_sauvegarde/Cela crée une nouvelle sauvegarde en utilisant des liens physiques pour les fichiers inchangés, économisant énormément d’espace disque.
rsync devient ainsi un véritable outil de sauvegarde différentielles, idéal pour les environnements professionnels comme personnels.
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 »Maîtriser rsync transforme la gestion des fichiers en une tâche simple, rapide et fiable. Grâce à ses nombreuses options, de la synchronisation locale aux transferts distants sécurisés, rsync s’adapte à tous les besoins. Que vous souhaitiez automatiser vos sauvegardes, optimiser vos transferts ou sécuriser vos données, cet outil reste un incontournable pour tout administrateur système souhaitant gagner en efficacité.
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).