0 Votes

Code source wiki de Sauvegarde

Modifié par john le 2026/09/20 20:36

Masquer les derniers auteurs
john 1.1 1 {{toc/}}
2
3 == Objectif ==
4
john 4.1 5 Sauvegarder un ou plusieurs dossiers automatiquement avec ##rsync##, en conservant les permissions, en journalisant les actions, et en pouvant être planifié avec ##cron##.
john 1.1 6
john 2.1 7 ----
john 1.1 8
john 4.1 9 == Pourquoi rsync ? ==
john 1.1 10
john 4.1 11 * Synchronisation incrémentale : copie uniquement ce qui a changé
john 1.1 12 * Conservation des permissions, dates et liens symboliques
13 * Prise en charge des exclusions
john 4.1 14 * Rapide, fiable et disponible partout
john 1.1 15
john 2.1 16 ----
john 1.1 17
john 4.1 18 == Script ==
john 1.1 19
20 {{code language="bash"}}
21 #!/bin/bash
22 set -euo pipefail
23
24 SOURCE="$HOME/Documents"
25 DEST="/mnt/backup/Documents"
26 LOGFILE="$HOME/rsync_backup.log"
27
john 4.1 28 echo "[$(date '+%F %T')] Sauvegarde de $SOURCE vers $DEST" >> "$LOGFILE"
29
30 # La destination doit être réellement montée
31 if ! mountpoint -q /mnt/backup; then
32 echo "[$(date '+%F %T')] ERREUR : /mnt/backup n'est pas monté, abandon." >> "$LOGFILE"
33 exit 1
34 fi
35
36 rsync -avh --delete --exclude='*.bak' "$SOURCE/" "$DEST/" >> "$LOGFILE" 2>&1
37
38 echo "[$(date '+%F %T')] Terminé." >> "$LOGFILE"
john 1.1 39 {{/code}}
40
john 4.1 41 {{warning}}
42 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##.
43 {{/warning}}
44
john 2.1 45 ----
john 1.1 46
john 4.1 47 == Options ==
john 1.1 48
john 4.1 49 |=Option|=Effet
50 |##-a##|Mode archive : droits, dates, liens symboliques
51 |##-v##|Affiche les fichiers traités
52 |##-h##|Tailles lisibles
53 |##--delete##|Supprime dans la destination ce qui n'existe plus dans la source
54 |##-n## ou ##--dry-run##|Simule sans rien écrire
55 |##--exclude=##|Ignore un motif
56 |##--link-dest=##|Crée un instantané en partageant les fichiers inchangés
john 1.1 57
john 4.1 58 {{info}}
59 La barre oblique finale compte : ##"$SOURCE/"## copie le **contenu** du dossier, ##"$SOURCE"## copie le **dossier lui-même** dans la destination.
60 {{/info}}
61
john 2.1 62 ----
john 1.1 63
john 4.1 64 == Essayer sans risque ==
john 1.1 65
john 4.1 66 {{code language="bash"}}
67 rsync -avhn --delete "$SOURCE/" "$DEST/"
68 {{/code}}
john 1.1 69
john 4.1 70 ##-n## affiche ce qui serait fait, sans rien modifier. À lancer systématiquement après une modification du script.
john 1.1 71
john 4.1 72 ----
73
74 == Ajout à cron ==
75
john 1.1 76 {{code language="bash"}}
john 4.1 77 chmod +x sauvegarde.sh
78 ./sauvegarde.sh # test manuel d'abord
79 crontab -e
80 {{/code}}
81
82 {{code language="text"}}
john 1.1 83 0 3 * * * /chemin/vers/sauvegarde.sh
84 {{/code}}
85
john 4.1 86 ----
john 1.1 87
john 4.1 88 == Exclusions ==
john 1.1 89
john 4.1 90 {{code language="bash"}}
91 rsync -avh --delete --exclude='*.bak' --exclude='node_modules/' "$SOURCE/" "$DEST/"
92 {{/code}}
john 1.1 93
john 4.1 94 Pour une liste longue, un fichier d'exclusions :
john 1.1 95
96 {{code language="bash"}}
john 4.1 97 rsync -avh --delete --exclude-from="$HOME/.rsync-exclude" "$SOURCE/" "$DEST/"
john 1.1 98 {{/code}}
99
john 2.1 100 ----
john 1.1 101
john 4.1 102 == Sauvegardes datées ==
john 1.1 103
john 4.1 104 Un dossier par jour, en partageant les fichiers inchangés avec la veille (peu d'espace occupé) :
john 1.1 105
106 {{code language="bash"}}
107 DEST="/mnt/backup/Documents_$(date +%F)"
john 4.1 108 rsync -a --link-dest="/mnt/backup/Documents_$(date -d yesterday +%F)" "$SOURCE/" "$DEST/"
john 1.1 109 {{/code}}
110
john 2.1 111 ----
john 1.1 112
john 4.1 113 == Notification ==
john 1.1 114
115 {{code language="bash"}}
john 4.1 116 notify-send "Sauvegarde terminée" "Documents sauvegardés"
john 1.1 117 {{/code}}
118
john 4.1 119 Nécessite ##libnotify## et un environnement graphique. Sur un serveur, envoyer plutôt un message par un bot de messagerie ou par courriel.
john 1.1 120
john 2.1 121 ----
john 1.1 122
123 == Bonnes pratiques ==
124
john 4.1 125 * Tester avec ##--dry-run## avant d'automatiser
126 * Vérifier que la destination est montée avant tout ##--delete##
127 * Journaliser, et vérifier le journal de temps en temps
128 * Restaurer un fichier au hasard de temps à autre : une sauvegarde jamais restaurée n'est pas vérifiée
129 * 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
john 1.1 130
john 2.1 131 ----
john 1.1 132
133 == Liens utiles ==
134
john 4.1 135 * [[Manuel de rsync>>https://linux.die.net/man/1/rsync]]
136 * [[explainshell : décomposer une commande rsync>>https://explainshell.com/explain?cmd=rsync+-avh+--delete+source%2F+destination%2F]]
john 1.1 137
john 2.1 138 ----
john 1.1 139
140 == Liens internes ==
141
john 4.1 142 * [[Retour aux scripts perso>>doc:Wiki Batcave John.TutosLinux.ScriptsPerso.WebHome]]
143 * [[Sauvegarde de l'infrastructure (Plakar)>>doc:Wiki Batcave John.Infrastructure.Sauvegarde.WebHome]]
john 3.1 144 * [[Retour à l’accueil>>doc:Wiki Batcave John.WebHome]]