Utiliser rsync pour synchroniser des répertoires en local ou via SSH, et automatiser les sauvegardes avec cron.
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).
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 |
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 |
# 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/
# 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/
#!/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
#!/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"
✅ Réponse : Supprime dans la destination les fichiers absents de la source
✅ Réponse : --dry-run
✅ Réponse : Sans / final : copie le dossier src DANS dest. Avec / : copie le CONTENU de src dans dest
✅ Réponse : rsync -e "ssh -p 2222"
✅ Réponse : -avzh