Maitriser la commande rsync
Mise à jour :
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
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
La commande rsync utilise une syntaxe simple mais très puissante. Voici sa structure générale :
rsync [options] source destination
Le 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
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
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 :
Terminal window 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 :
Terminal window 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
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
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
- -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
-
Copier un répertoire personnel vers un dossier de sauvegarde :
Terminal window rsync -avz /home/utilisateur/Documents/ /home/utilisateur/Sauvegardes/Documents/ -
Mettre à jour une sauvegarde sans recopier les fichiers inchangés :
Terminal window rsync -avz /home/utilisateur/Photos/ /media/backup/Photos/ -
Tester une synchronisation sans rien modifier :
Terminal window 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
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
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
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
-
Exclure tous les fichiers temporaires :
Terminal window rsync -avz --exclude '*.tmp' /home/utilisateur/ /media/backup/ -
Inclure seulement des fichiers PDF et ignorer le reste :
Terminal window rsync -avz --include '*.pdf' --exclude '*' /home/utilisateur/Documents/ /media/backup/Documents/ -
Utiliser un fichier d’exclusion personnalisé :
Terminal window 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
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
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
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
rsync propose de nombreuses options avancées permettant d’améliorer la gestion des synchronisations complexes.
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
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
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
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
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>&1
De 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
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 :
Terminal window 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.
Terminal window 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.
Terminal window 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
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
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.sh
Vous pouvez ainsi exécuter votre sauvegarde d’un simple appel :
./sauvegarde.sh
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 -e
Ajoutez une ligne pour exécuter la sauvegarde tous les jours à 2h00 :
0 2 * * * /chemin/vers/sauvegarde.sh
Si vous ne maitrisez pas cron, consultez mon guide sur l’utilisation de cron.
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
Pourquoi ce contrôle ?
Cet contrôle va vous permettre de valider vos connaissances sur le sujet abordé dans le guide. Il comporte des QCM, des questions vrai/faux et des réponses ouvertes à un mot.
🕒 Le chronomètre commence dès que vous cliquez sur Démarrer le test. Vous devrez terminer l’examen avant la fin du temps imparti.
🎯 Pour réussir, vous devez obtenir au moins 80% de bonnes réponses.
💡 Je ne fournis pas directement les réponses aux questions. Cependant, si certaines sont complexes, des pistes d’explication pourront être proposées dans le guide ou après l’examen.
Bonne chance ! 🚀
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é.