0 Votes

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"
Warning

Avec delete, si le disque de destination n'est pas monté, rsync écrit dans le dossier vide qui sert de point de montage, sur le disque système : la sauvegarde précédente devient invisible et l'espace se remplit. Toujours vérifier le montage avant, avec mountpoint -q.


Options

OptionEffet
-aMode archive : droits, dates, liens symboliques
-vAffiche les fichiers traités
-hTailles lisibles
deleteSupprime dans la destination ce qui n'existe plus dans la source
-n ou dry-runSimule sans rien écrire
exclude=Ignore un motif
link-dest=Crée un instantané en partageant les fichiers inchangés
Information

La barre oblique finale compte : "$SOURCE/" copie le contenu du dossier, "$SOURCE" copie le dossier lui-même dans la destination.


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
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/"

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-run avant 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

Liens utiles


Liens internes