0 Votes

Modifications pour le document Sauvegarde

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

Depuis la version 4.1
modifié par john
sur 2026/09/20 20:36
Commentaire de modification : Il n'y a aucun commentaire pour cette version
À la version 3.2
modifié par john
sur 2026/09/20 19:45
Commentaire de modification : Update document after refactoring.

Résumé

Détails

Propriétés de la Page
Contenu
... ... @@ -1,144 +1,121 @@
1 += Script de sauvegarde automatique =
2 +
1 1  {{toc/}}
2 2  
3 3  == Objectif ==
4 4  
5 -Sauvegarder un ou plusieurs dossiers automatiquement avec ##rsync##, en conservant les permissions, en journalisant les actions, et en pouvant être planifié avec ##cron##.
7 +Ce script permet de **sauvegarder un ou plusieurs dossiers automatiquement** avec `rsync`, en conservant les permissions, en loguant les actions, et en pouvant être planifié avec `cron`.
6 6  
7 7  ----
8 8  
9 -== Pourquoi rsync ? ==
11 +== Pourquoi `rsync` ? ==
10 10  
11 -* Synchronisation incrémentale : copie uniquement ce qui a changé
13 +* Synchronisation incrémentale (copie uniquement les fichiers modifiés)
12 12  * Conservation des permissions, dates et liens symboliques
13 13  * Prise en charge des exclusions
14 -* Rapide, fiable et disponible partout
16 +* Très rapide, fiable et largement disponible
15 15  
16 16  ----
17 17  
18 -== Script ==
20 +== Exemple de script de sauvegarde ==
19 19  
20 20  {{code language="bash"}}
21 21  #!/bin/bash
24 +
22 22  set -euo pipefail
23 23  
27 +# === Configuration ===
24 24  SOURCE="$HOME/Documents"
25 25  DEST="/mnt/backup/Documents"
26 26  LOGFILE="$HOME/rsync_backup.log"
31 +DATE=$(date "+%Y-%m-%d %H:%M:%S")
27 27  
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"
33 +# === Sauvegarde ===
34 +echo "[$DATE] Sauvegarde de $SOURCE vers $DEST" >> "$LOGFILE"
35 +rsync -avh --delete "$SOURCE/" "$DEST/" >> "$LOGFILE" 2>&1
36 +echo "[$DATE] Terminé." >> "$LOGFILE"
39 39  {{/code}}
40 40  
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 -
45 45  ----
46 46  
47 -== Options ==
41 +== Explication des options ==
48 48  
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
43 +* `-a` : archive (conserve tout : droits, dates, etc.)
44 +* `-v` : mode verbeux (affiche les fichiers copiés)
45 +* `-h` : taille lisible par l'humain
46 +* `--delete` : supprime les fichiers dans la destination s'ils n'existent plus dans la source--
57 57  
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 -
62 62  ----
63 63  
64 -== Essayer sans risque ==
50 +== Ajout à cron ==
65 65  
66 -{{code language="bash"}}
67 -rsync -avhn --delete "$SOURCE/" "$DEST/"
68 -{{/code}}
52 +Pour exécuter ce script tous les jours à 3h du matin :
69 69  
70 -##-n## affiche ce qui serait fait, sans rien modifier. À lancer systématiquement après une modification du script.
54 +1. Lancer `crontab -e`
55 +2. Ajouter la ligne suivante :
71 71  
72 -----
73 -
74 -== Ajout à cron ==
75 -
76 76  {{code language="bash"}}
77 -chmod +x sauvegarde.sh
78 -./sauvegarde.sh # test manuel d'abord
79 -crontab -e
80 -{{/code}}
81 -
82 -{{code language="text"}}
83 83  0 3 * * * /chemin/vers/sauvegarde.sh
84 84  {{/code}}
85 85  
86 -----
61 +Pour s’assurer que le script fonctionne :
87 87  
88 -== Exclusions ==
63 +* Rendre le fichier exécutable : `chmod +x sauvegarde.sh`
64 +* Tester manuellement d’abord : `./sauvegarde.sh`
89 89  
90 -{{code language="bash"}}
91 -rsync -avh --delete --exclude='*.bak' --exclude='node_modules/' "$SOURCE/" "$DEST/"
92 -{{/code}}
66 +----
93 93  
94 -Pour une liste longue, un fichier d'exclusions :
68 +== Ajouter une exclusion ==
95 95  
70 +Par exemple pour **ignorer les fichiers `.bak`** :
71 +
96 96  {{code language="bash"}}
97 -rsync -avh --delete --exclude-from="$HOME/.rsync-exclude" "$SOURCE/" "$DEST/"
73 +rsync -avh --delete --exclude='*.bak' "$SOURCE/" "$DEST/"
98 98  {{/code}}
99 99  
76 +On peut aussi exclure un dossier spécifique avec :
77 +{{code language="bash"}}--exclude='node_modules/'{{/code}}
78 +
100 100  ----
101 101  
102 -== Sauvegardes datées ==
81 +== Sauvegarde avec date dans le nom ==
103 103  
104 -Un dossier par jour, en partageant les fichiers inchangés avec la veille (peu d'espace occupé) :
83 +Pour créer un nouveau dossier par jour :
105 105  
106 106  {{code language="bash"}}
107 107  DEST="/mnt/backup/Documents_$(date +%F)"
108 -rsync -a --link-dest="/mnt/backup/Documents_$(date -d yesterday +%F)" "$SOURCE/" "$DEST/"
87 +rsync -a "$SOURCE/" "$DEST/"
109 109  {{/code}}
110 110  
111 111  ----
112 112  
113 -== Notification ==
92 +== Astuce : envoi de notification à la fin ==
114 114  
115 115  {{code language="bash"}}
116 -notify-send "Sauvegarde terminée" "Documents sauvegardés"
95 +notify-send "Sauvegarde terminée" "Documents sauvegardés avec succès"
117 117  {{/code}}
118 118  
119 -Nécessite ##libnotify## et un environnement graphique. Sur un serveur, envoyer plutôt un message par un bot de messagerie ou par courriel.
98 +(Nécessite `libnotify` et un environnement graphique)
120 120  
121 121  ----
122 122  
123 123  == Bonnes pratiques ==
124 124  
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
104 +* **Toujours tester** le script avant de l’automatiser
105 +* **Logger les opérations** pour savoir ce qui a été fait
106 +* **Monter le disque de destination automatiquement**
107 +* Penser à vérifier les sauvegardes régulièrement !
130 130  
131 131  ----
132 132  
133 133  == Liens utiles ==
134 134  
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]]
113 +* Manuel de rsync https~://linux.die.net/man/1/rsync)//
114 +* Tutoriel rsync avancé https~://explainshell.com/explain?cmd=rsync+-avh+--delete+source%2F+destination%2F)--//
137 137  
138 138  ----
139 139  
140 140  == Liens internes ==
141 141  
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]]
120 +* [[Retour aux scripts personnels>>doc:Wiki Batcave John.TutosLinux.ScriptsPerso.WebHome]]
144 144  * [[Retour à l’accueil>>doc:Wiki Batcave John.WebHome]]