← Sommaire SkyLinux

63 - rsync — Synchronisation de fichiers

Dans cette leçon, tu vas découvrir rsync, l'outil de synchronisation de fichiers le plus puissant sous Linux. Il permet de copier et synchroniser des fichiers localement ou à distance, en ne transférant que les différences pour optimiser la bande passante.

1. Pourquoi rsync ?

Comparé à cp ou scp, rsync offre plusieurs avantages :

2. Syntaxe de base

rsync [options] source destination

3. Options essentielles

OptionDescription
-aMode archivage (preserve permissions, timestamps, symlinks, etc.)
-vMode verbeux (affiche les fichiers traités)
-zCompression pendant le transfert
-PAffiche la progression et conserve les fichiers partiellement transférés
--deleteSupprime dans la destination les fichiers qui n'existent plus dans la source
-n ou --dry-runSimulation (aucun fichier n'est réellement modifié)
--excludeExclut certains fichiers ou répertoires
-rCopie récursive (sous-répertoires)
-uNe remplace pas les fichiers plus récents sur la destination

4. Exemples locaux

Copie simple d'un répertoire vers un autre

# Synchroniser /home/user/documents vers /backup/documents rsync -av /home/user/documents/ /backup/documents/ # Le slash à la fin de la source est important : # /home/user/documents/ → copie le contenu du répertoire # /home/user/documents → copie le répertoire lui-même

Synchronisation avec suppression des fichiers absents

# Supprime aussi dans destination les fichiers qui n'existent plus dans la source rsync -av --delete /home/user/documents/ /backup/documents/
⚠️ Attention : L'option --delete peut détruire des données si elle est mal utilisée. Toujours tester d'abord avec --dry-run.

Exclure des fichiers ou répertoires

# Exclure tous les fichiers .log rsync -av --exclude="*.log" /source/ /dest/ # Exclure plusieurs patterns rsync -av --exclude="*.log" --exclude="node_modules/" --exclude=".git/" /source/ /dest/ # Exclure un répertoire précis rsync -av --exclude="cache/" /home/user/ /backup/user/

5. Simulation avant exécution

# Tester sans rien modifier rsync -avn --delete /source/ /dest/ # Ajouter -P pour voir ce qui serait fait rsync -avnP /source/ /dest/ # La sortie indique : # >f+++++++++ fichier_nouveau.txt (fichier serait créé) # >f..t....... fichier_existant.txt (timestamps seraient mis à jour) # >deleting fichier_supprime.txt (fichier serait supprimé)

6. Transferts distants via SSH

# Syntaxe avec SSH rsync -avP -e ssh /local/path/ user@serveur:/remote/path/ # Spécifier un port SSH différent rsync -avP -e "ssh -p 2222" /local/ user@serveur:/remote/ #Télécharger depuis un serveur distant rsync -avP user@serveur:/remote/backup.tar.gz /local/backup/
💡 Astuce : Si tu utilises une clé SSH sans passphrase, tu peux automatiser les synchronisations sans干预 humaine.

7. Options de compression et vitesse

# Avec compression (réduit la bande passante, ralentit le CPU) rsync -avzP /source/ user@serveur:/dest/ # Sans compression (rapide pour les fichiers déjà compressés comme .zip, .mp4, .jpg) rsync -avP /source/ /dest/ # Taille du buffer (par défaut 8192 octets,augmenter pour gros fichiers) rsync --block-size=32768 -avP /source/ /dest/

8. Utilisation avancée

Sauvegarde incrémentale avec suppression

# Synchroniser et supprimer les fichiers absents de la source rsync -av --delete /home/user/ /backup/user/ # Pour une vraie sauvegarde avec historique, utiliser --backup rsync -av --backup --backup-dir=/backup/old /source/ /dest/

Lister les différences sans copier

# Voir ce qui diffère entre deux répertoires rsync -avn /source/ /dest/ | grep "^[<>]" # Ou utiliser l'option -i pour un affichage détaillé rsync -avni /source/ /dest/

Limiter la bande passante

# Limiter à 500 Ko/s (utile pour ne pas saturer la connexion) rsync -avzP --bwlimit=500 /source/ user@serveur:/dest/ # --bwlimit en Ko/s (kilobytes), pas kb/s (kilobits)

9. Cas d'usage courants

Sauvegarde vers un disque externe

# Monter le disque et synchroniser sudo mount /dev/sdb1 /mnt/backup rsync -av --delete /home/ /mnt/backup/home/ sudo umount /mnt/backup

Synchronisation de sites web via SSH

# Envoyer les fichiers du site vers le serveur de production rsync -avzP -e ssh --exclude="node_modules/" --exclude=".git/" \ /local/website/ user@monserveur.com:/var/www/html/

Mirroring un dossier distant

# Mirror complet (supprime tout ce qui n'existe plus à la source) rsync -avzP --delete -e ssh user@serveur:/remote/dossier/ /local/dossier/

10. Script de sauvegarde automatique

#!/bin/bash # script_backup.sh SOURCE="/home/user/documents" DEST="/backup/documents" SERVER="user@serveur.example.com" REMOTE_PATH="/backup/user-documents" # Sync local rsync -av --delete "$SOURCE/" "$DEST/" # Sync distant via SSH (compression + progress) rsync -avzP -e ssh --delete "$SOURCE/" "$SERVER:$REMOTE_PATH/" echo "Sauvegarde terminée le $(date)"

Pour automatiser, ajoute-le dans crontab :

# Sauvegarde quotidienne à 2h du matin 0 2 * * * /home/user/script_backup.sh >> /home/user/logs/backup.log 2>&1

11. Tableau récapitulatif

CommandeDescription
rsync -av source/ dest/Synchronisation locale avec détails
rsync -avP source/ dest/Avec barre de progression
rsync -avz source/ dest/Avec compression
rsync -av --delete source/ dest/Supprime les fichiers absents de la source
rsync -avn source/ dest/Simulation (dry-run)
rsync -av --exclude="*.tmp" source/ dest/Exclure certains fichiers
rsync -avzP -e ssh source/ user@host:dest/Transfert distant chiffré
rsync -avzP --bwlimit=500 source/ dest/Limiter la bande passante (Ko/s)

12. Exercice pratique

Exercice : Synchroniser ton répertoire Documents

Objectif : Créer une sauvegarde de ton répertoire ~/Documents vers un dossier de backup.

# 1. Créer le dossier de backup
mkdir -p ~/backup_test

# 2. Synchroniser avec dry-run pour voir ce qui serait fait
rsync -avn ~/Documents/ ~/backup_test/

# 3. Si tout est correct, exécuter réellement
rsync -avP ~/Documents/ ~/backup_test/

# 4. Vérifier que les fichiers sont copiés
ls ~/backup_test/

# 5. Ajouter un fichier dans Documents et resynchroniser
echo "Nouveau fichier de test" > ~/Documents/test_sync.txt
rsync -avP ~/Documents/ ~/backup_test/

# 6. Vérifier que le nouveau fichier est présent
ls ~/backup_test/test_sync.txt

Bonus : Exclure tous les fichiers temporaires (*.tmp) et vérifier avec -n que le pattern fonctionne avant de lancer la vraie sync.

rsync est l'outil indispensable pour toute sauvegarde ou synchronisation sous Linux. Sa capacité à ne transférer que les différences en fait l'outil le plus efficace pour maintenir des copies synchronisées, que ce soit en local ou à distance via SSH.