Aller au contenu

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 :

Terminal window
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 /destination

    Cette 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/ /destination

    Ici, 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 :

Terminal window
rsync -avz /chemin/source/fichier.txt /chemin/destination/

Pour copier un répertoire entier :

Terminal window
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

  1. Copier un répertoire personnel vers un dossier de sauvegarde :

    Terminal window
    rsync -avz /home/utilisateur/Documents/ /home/utilisateur/Sauvegardes/Documents/
  2. Mettre à jour une sauvegarde sans recopier les fichiers inchangés :

    Terminal window
    rsync -avz /home/utilisateur/Photos/ /media/backup/Photos/
  3. 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 :

Terminal window
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 :

Terminal window
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 :

Terminal window
rsync -avz --exclude-from='excludes.txt' /chemin/source/ /chemin/destination/

Cela rend les synchronisations plus lisibles et plus faciles à maintenir.

Exemples pratiques

  1. Exclure tous les fichiers temporaires :

    Terminal window
    rsync -avz --exclude '*.tmp' /home/utilisateur/ /media/backup/
  2. Inclure seulement des fichiers PDF et ignorer le reste :

    Terminal window
    rsync -avz --include '*.pdf' --exclude '*' /home/utilisateur/Documents/ /media/backup/Documents/
  3. 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 :

Terminal window
rsync -avz -e ssh /chemin/local/ utilisateur@serveur:/chemin/distant/

Exemple concret :

Terminal window
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 :

Terminal window
rsync -avz -e ssh utilisateur@serveur:/chemin/distant/ /chemin/local/

Exemple :

Terminal window
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 :

Terminal window
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 :

Terminal window
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 :

Terminal window
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 :

Terminal window
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 :

Terminal window
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 :

Terminal window
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 :

Terminal window
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 :

Terminal window
chmod +x sauvegarde.sh

Vous pouvez ainsi exécuter votre sauvegarde d’un simple appel :

Terminal window
./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 :

Terminal window
crontab -e

Ajoutez une ligne pour exécuter la sauvegarde tous les jours à 2h00 :

Terminal window
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 :

Terminal window
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é.