← Retour au portail

Fiche 14 - rsync — Synchronisation et sauvegardes automatisées

Utiliser rsync pour synchroniser des répertoires en local ou via SSH, et automatiser les sauvegardes avec cron.

Intermédiaire — SISR 1ère année ⏱️ 20 min 📁 Administration système

🎯 Objectifs de la fiche

  1. Principe de rsync — Synchronisation incrémentale, algorithme delta
  2. Syntaxe et options essentielles — Les options les plus utiles
  3. Synchronisation locale — Copier entre répertoires locaux
  4. Sauvegarde via SSH — Synchroniser vers un serveur distant
  5. 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.

AvantageExplication
IncrémentalNe copie que les fichiers modifiés ou nouveaux — très rapide après la première synchro
CompressionOption -z pour compresser les données pendant le transfert
SSH natifTransfert sécurisé via SSH sans configuration supplémentaire
PréservationConserve les permissions, dates, liens symboliques
SimulationOption --dry-run pour voir ce qui serait fait sans l'exécuter

2. Syntaxe et options essentielles

rsync [options] source/ destination/
OptionSignificationUtilité
-aArchiveÉquivaut à -rlptgoD — préserve tout (permissions, dates, liens...)
-vVerboseAffiche les fichiers transférés
-zCompressCompresse les données pendant le transfert (réseau lent)
-hHuman-readableAffiche les tailles en Ko/Mo/Go
-PProgress + PartialAffiche la progression et reprend les transferts interrompus
--deleteSupprimeSupprime dans la destination les fichiers absents de la source
--dry-runSimulationSimule sans rien modifier — toujours tester avant
--excludeExclure--exclude='*.tmp' exclut les fichiers .tmp
--backupSauvegardeRenomme les fichiers écrasés (ajoute un suffixe)
-e sshVia SSHUtilise SSH comme transport (optionnel si déjà configuré)
--progressProgressionAffiche la progression fichier par fichier
💡 La combinaison -avzh --progress est la plus utilisée en pratique : archive, verbose, compression, tailles lisibles et progression.

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/
⚠️ Attention à la barre oblique finale : rsync -a /source /dest/ copie le dossier source DANS dest. rsync -a /source/ /dest/ copie le CONTENU de source dans dest. La différence est importante !

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/
ℹ️ Pour automatiser les sauvegardes SSH sans saisir de mot de passe, configurez une authentification par clé SSH (voir fiche SSH). rsync utilisera automatiquement la clé.

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"
Que fait l'option --delete dans rsync ?
  • Supprime les fichiers source après transfert
  • Supprime dans la destination les fichiers absents de la source
  • Supprime les fichiers corrompus
  • Efface les logs de transfert

✅ Réponse : Supprime dans la destination les fichiers absents de la source

Quelle option rsync simule le transfert sans rien modifier ?
  • --simulate
  • --test
  • --dry-run
  • --preview

✅ Réponse : --dry-run

Quelle est la différence entre rsync -a /src /dest et rsync -a /src/ /dest ?
  • Aucune différence
  • Sans / final : copie le dossier src DANS dest. Avec / : copie le CONTENU de src dans dest
  • Avec / final : copie récursivement. Sans / : copie uniquement les fichiers
  • Le / final active la compression

✅ 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 ?
  • rsync --port 2222
  • rsync -e ssh -p 2222
  • rsync -e "ssh -p 2222"
  • rsync --ssh-port 2222

✅ Réponse : rsync -e "ssh -p 2222"

Quelle combinaison d'options est la plus courante pour une sauvegarde rsync ?
  • -rvf
  • -avzh
  • -Pzr
  • -m --all

✅ Réponse : -avzh