Sommaire
Utiliser rsync pour synchroniser des répertoires en local ou via SSH, et automatiser les sauvegardes avec cron.
🎯 Objectifs de la fiche
- Principe de rsync — Synchronisation incrémentale, algorithme delta
- Syntaxe et options essentielles — Les options les plus utiles
- Synchronisation locale — Copier entre répertoires locaux
- Sauvegarde via SSH — Synchroniser vers un serveur distant
- Automatiser avec cron — Script de sauvegarde planifié
Prérequis
Debian avec accès root ou sudo. rsync installé (sudo apt install rsync). Pour la synchronisation SSH, une clé SSH configurée (voir fiche SSH).
1. Principe de rsync
rsync (Remote Sync) est un outil de synchronisation de fichiers extrêmement efficace. Il utilise un algorithme delta qui ne transfère que les différences entre la source et la destination — idéal pour les sauvegardes incrémentales sur de gros volumes de données.
| Avantage | Explication |
|---|---|
| Incrémental | Ne copie que les fichiers modifiés ou nouveaux — très rapide après la première synchro |
| Compression | Option -z pour compresser les données pendant le transfert |
| SSH natif | Transfert sécurisé via SSH sans configuration supplémentaire |
| Préservation | Conserve les permissions, dates, liens symboliques |
| Simulation | Option --dry-run pour voir ce qui serait fait sans l'exécuter |
2. Syntaxe et options essentielles
rsync [options] source/ destination/
| Option | Signification | Utilité |
|---|---|---|
| -a | Archive | Équivaut à -rlptgoD — préserve tout (permissions, dates, liens...) |
| -v | Verbose | Affiche les fichiers transférés |
| -z | Compress | Compresse les données pendant le transfert (réseau lent) |
| -h | Human-readable | Affiche les tailles en Ko/Mo/Go |
| -P | Progress + Partial | Affiche la progression et reprend les transferts interrompus |
| --delete | Supprime | Supprime dans la destination les fichiers absents de la source |
| --dry-run | Simulation | Simule sans rien modifier — toujours tester avant |
| --exclude | Exclure | --exclude='*.tmp' exclut les fichiers .tmp |
| --backup | Sauvegarde | Renomme les fichiers écrasés (ajoute un suffixe) |
| -e ssh | Via SSH | Utilise SSH comme transport (optionnel si déjà configuré) |
| --progress | Progression | Affiche la progression fichier par fichier |
3. Synchronisation locale
# Synchroniser un répertoire local vers un autre rsync -avh /var/www/ /backup/www/ # Simulation d'abord (voir ce qui serait fait) rsync -avh --dry-run /var/www/ /backup/www/ # Avec suppression des fichiers obsolètes dans la destination rsync -avh --delete /var/www/ /backup/www/ # Exclure certains fichiers rsync -avh --exclude='*.log' --exclude='*.tmp' /var/www/ /backup/www/
4. Sauvegarde via SSH
# Copier en local vers un serveur distant rsync -avzh /var/www/ user@192.168.1.20:/backup/www/ # Copier depuis un serveur distant vers le local rsync -avzh user@192.168.1.20:/var/www/ /backup/www/ # Avec port SSH personnalisé (ex: 2222) rsync -avzh -e "ssh -p 2222" /var/www/ user@192.168.1.20:/backup/www/ # Avec suppression des fichiers obsolètes rsync -avzh --delete -e "ssh -p 2222" /var/www/ user@192.168.1.20:/backup/www/
5. Script de sauvegarde complet
#!/bin/bash # backup-web.sh — Sauvegarde quotidienne de /var/www vers serveur distant SOURCE="/var/www/" DEST="backup@192.168.1.20:/backups/web/" LOG="/var/log/rsync-backup.log" DATE=$(date "+%Y-%m-%d %H:%M:%S") echo "[$DATE] Début sauvegarde" >> "$LOG" rsync -avzh --delete \ --exclude="*.tmp" \ --exclude="*.log" \ -e "ssh -p 22 -i /root/.ssh/id_backup" \ "$SOURCE" "$DEST" >> "$LOG" 2>&1 if [ $? -eq 0 ]; then echo "[$DATE] Sauvegarde OK" >> "$LOG" else echo "[$DATE] ERREUR sauvegarde" >> "$LOG" fi
# Rendre le script exécutable chmod +x /opt/scripts/backup-web.sh # Planifier avec cron (tous les jours à 2h00) crontab -e # Ajouter : 0 2 * * * /opt/scripts/backup-web.sh # Vérifier les logs tail -f /var/log/rsync-backup.log
6. Sauvegarde avec rotation (garder N jours)
#!/bin/bash # backup-rotation.sh — Sauvegarde avec rotation sur 7 jours SOURCE="/var/www/" BACKUP_DIR="/backup" DATE=$(date +%Y%m%d) DEST="$BACKUP_DIR/www-$DATE" # Créer la sauvegarde du jour mkdir -p "$DEST" rsync -avh "$SOURCE" "$DEST/" # Supprimer les sauvegardes de plus de 7 jours find "$BACKUP_DIR" -maxdepth 1 -name "www-*" -type d -mtime +7 -exec rm -rf {} \; echo "Sauvegarde du $DATE terminée"
- ☐ rsync installé (rsync --version)
- ☐ Synchronisation locale testée avec --dry-run d'abord
- ☐ Synchronisation SSH fonctionnelle
- ☐ Script de sauvegarde créé et exécutable
- ☐ Cron configuré pour lancer la sauvegarde automatiquement
- ☐ Logs de sauvegarde consultés et vérifiés
Que fait l'option --delete dans rsync ?
✅ Réponse : Supprime dans la destination les fichiers absents de la source
Quelle option rsync simule le transfert sans rien modifier ?
✅ Réponse : --dry-run
Quelle est la différence entre rsync -a /src /dest et rsync -a /src/ /dest ?
✅ Réponse : Sans / final : copie le dossier src DANS dest. Avec / : copie le CONTENU de src dans dest
Comment spécifier un port SSH différent (ex: 2222) avec rsync ?
✅ Réponse : rsync -e "ssh -p 2222"
Quelle combinaison d'options est la plus courante pour une sauvegarde rsync ?
✅ Réponse : -avzh