Sauvegarde
Modifié par john le 2026/09/20 20:36
Objectif
Sauvegarder un ou plusieurs dossiers automatiquement avec rsync, en conservant les permissions, en journalisant les actions, et en pouvant être planifié avec cron.
Pourquoi rsync ?
- Synchronisation incrémentale : copie uniquement ce qui a changé
- Conservation des permissions, dates et liens symboliques
- Prise en charge des exclusions
- Rapide, fiable et disponible partout
Script
#!/bin/bash
set -euo pipefail
SOURCE="$HOME/Documents"
DEST="/mnt/backup/Documents"
LOGFILE="$HOME/rsync_backup.log"
echo "[$(date '+%F %T')] Sauvegarde de $SOURCE vers $DEST" >> "$LOGFILE"
# La destination doit être réellement montée
if ! mountpoint -q /mnt/backup; then
echo "[$(date '+%F %T')] ERREUR : /mnt/backup n'est pas monté, abandon." >> "$LOGFILE"
exit 1
fi
rsync -avh --delete --exclude='*.bak' "$SOURCE/" "$DEST/" >> "$LOGFILE" 2>&1
echo "[$(date '+%F %T')] Terminé." >> "$LOGFILE"
set -euo pipefail
SOURCE="$HOME/Documents"
DEST="/mnt/backup/Documents"
LOGFILE="$HOME/rsync_backup.log"
echo "[$(date '+%F %T')] Sauvegarde de $SOURCE vers $DEST" >> "$LOGFILE"
# La destination doit être réellement montée
if ! mountpoint -q /mnt/backup; then
echo "[$(date '+%F %T')] ERREUR : /mnt/backup n'est pas monté, abandon." >> "$LOGFILE"
exit 1
fi
rsync -avh --delete --exclude='*.bak' "$SOURCE/" "$DEST/" >> "$LOGFILE" 2>&1
echo "[$(date '+%F %T')] Terminé." >> "$LOGFILE"
Options
| Option | Effet |
|---|---|
| -a | Mode archive : droits, dates, liens symboliques |
| -v | Affiche les fichiers traités |
| -h | Tailles lisibles |
| Supprime dans la destination ce qui n'existe plus dans la source | |
| -n ou | Simule sans rien écrire |
| Ignore un motif | |
| Crée un instantané en partageant les fichiers inchangés |
Essayer sans risque
rsync -avhn --delete "$SOURCE/" "$DEST/"
-n affiche ce qui serait fait, sans rien modifier. À lancer systématiquement après une modification du script.
Ajout à cron
chmod +x sauvegarde.sh
./sauvegarde.sh # test manuel d'abord
crontab -e
./sauvegarde.sh # test manuel d'abord
crontab -e
0 3 * * * /chemin/vers/sauvegarde.sh
Exclusions
rsync -avh --delete --exclude='*.bak' --exclude='node_modules/' "$SOURCE/" "$DEST/"
Pour une liste longue, un fichier d'exclusions :
rsync -avh --delete --exclude-from="$HOME/.rsync-exclude" "$SOURCE/" "$DEST/"
Sauvegardes datées
Un dossier par jour, en partageant les fichiers inchangés avec la veille (peu d'espace occupé) :
DEST="/mnt/backup/Documents_$(date +%F)"
rsync -a --link-dest="/mnt/backup/Documents_$(date -d yesterday +%F)" "$SOURCE/" "$DEST/"
rsync -a --link-dest="/mnt/backup/Documents_$(date -d yesterday +%F)" "$SOURCE/" "$DEST/"
Notification
notify-send "Sauvegarde terminée" "Documents sauvegardés"
Nécessite libnotify et un environnement graphique. Sur un serveur, envoyer plutôt un message par un bot de messagerie ou par courriel.
Bonnes pratiques
- Tester avec
dry-runavant d'automatiser - Vérifier que la destination est montée avant tout
delete - Journaliser, et vérifier le journal de temps en temps
- Restaurer un fichier au hasard de temps à autre : une sauvegarde jamais restaurée n'est pas vérifiée
- Garder une copie hors de la machine : une sauvegarde sur le même hôte ne protège ni du vol ni de l'incendie