0 Votes

Modifications pour le document Sauvegarde

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

Depuis la version 1.1
modifié par john
sur 2025/05/24 23:47
Commentaire de modification : Imported from XAR
À 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

Résumé

Détails

Propriétés de la Page
Titre
... ... @@ -1,1 +1,1 @@
1 -ScriptsPerso/Sauvegarde
1 +Sauvegarde
Contenu
... ... @@ -1,120 +3,144 @@
1 -= Script de sauvegarde automatique =
2 -
3 3  {{toc/}}
4 4  
5 5  == Objectif ==
6 6  
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`.
5 +Sauvegarder un ou plusieurs dossiers automatiquement avec ##rsync##, en conservant les permissions, en journalisant les actions, et en pouvant être planifié avec ##cron##.
8 8  
9 ------
7 +----
10 10  
11 -== Pourquoi `rsync` ? ==
9 +== Pourquoi rsync ? ==
12 12  
13 -* Synchronisation incrémentale (copie uniquement les fichiers modifiés)
11 +* Synchronisation incrémentale : copie uniquement ce qui a changé
14 14  * Conservation des permissions, dates et liens symboliques
15 15  * Prise en charge des exclusions
16 -* Très rapide, fiable et largement disponible
14 +* Rapide, fiable et disponible partout
17 17  
18 ------
16 +----
19 19  
20 -== Exemple de script de sauvegarde ==
18 +== Script ==
21 21  
22 22  {{code language="bash"}}
23 23  #!/bin/bash
24 -
25 25  set -euo pipefail
26 26  
27 -# === Configuration ===
28 28  SOURCE="$HOME/Documents"
29 29  DEST="/mnt/backup/Documents"
30 30  LOGFILE="$HOME/rsync_backup.log"
31 -DATE=$(date "+%Y-%m-%d %H:%M:%S")
32 32  
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"
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"
37 37  {{/code}}
38 38  
39 ------
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}}
40 40  
41 -== Explication des options ==
45 +----
42 42  
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--
47 +== Options ==
47 47  
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
49 49  
50 -== Ajout à cron ==
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}}
51 51  
52 -Pour exécuter ce script tous les jours à 3h du matin :
62 +----
53 53  
54 -1. Lancer `crontab -e`
55 -2. Ajouter la ligne suivante :
64 +== Essayer sans risque ==
56 56  
57 57  {{code language="bash"}}
58 -0 3 * * * /chemin/vers/sauvegarde.sh
67 +rsync -avhn --delete "$SOURCE/" "$DEST/"
59 59  {{/code}}
60 60  
61 -Pour s’assurer que le script fonctionne :
70 +##-n## affiche ce qui serait fait, sans rien modifier. À lancer systématiquement après une modification du script.
62 62  
63 -* Rendre le fichier exécutable : `chmod +x sauvegarde.sh`
64 -* Tester manuellement d’abord : `./sauvegarde.sh`
72 +----
65 65  
66 ------
74 +== Ajout à cron ==
67 67  
68 -== Ajouter une exclusion ==
76 +{{code language="bash"}}
77 +chmod +x sauvegarde.sh
78 +./sauvegarde.sh # test manuel d'abord
79 +crontab -e
80 +{{/code}}
69 69  
70 -Par exemple pour **ignorer les fichiers `.bak`** :
82 +{{code language="text"}}
83 +0 3 * * * /chemin/vers/sauvegarde.sh
84 +{{/code}}
71 71  
86 +----
87 +
88 +== Exclusions ==
89 +
72 72  {{code language="bash"}}
73 -rsync -avh --delete --exclude='*.bak' "$SOURCE/" "$DEST/"
91 +rsync -avh --delete --exclude='*.bak' --exclude='node_modules/' "$SOURCE/" "$DEST/"
74 74  {{/code}}
75 75  
76 -On peut aussi exclure un dossier spécifique avec :
77 -{{code language="bash"}}--exclude='node_modules/'{{/code}}
94 +Pour une liste longue, un fichier d'exclusions :
78 78  
79 ------
96 +{{code language="bash"}}
97 +rsync -avh --delete --exclude-from="$HOME/.rsync-exclude" "$SOURCE/" "$DEST/"
98 +{{/code}}
80 80  
81 -== Sauvegarde avec date dans le nom ==
100 +----
82 82  
83 -Pour créer un nouveau dossier par jour :
102 +== Sauvegardes datées ==
84 84  
104 +Un dossier par jour, en partageant les fichiers inchangés avec la veille (peu d'espace occupé) :
105 +
85 85  {{code language="bash"}}
86 86  DEST="/mnt/backup/Documents_$(date +%F)"
87 -rsync -a "$SOURCE/" "$DEST/"
108 +rsync -a --link-dest="/mnt/backup/Documents_$(date -d yesterday +%F)" "$SOURCE/" "$DEST/"
88 88  {{/code}}
89 89  
90 ------
111 +----
91 91  
92 -== Astuce : envoi de notification à la fin ==
113 +== Notification ==
93 93  
94 94  {{code language="bash"}}
95 -notify-send "Sauvegarde terminée" "Documents sauvegardés avec succès"
116 +notify-send "Sauvegarde terminée" "Documents sauvegardés"
96 96  {{/code}}
97 97  
98 -(Nécessite `libnotify` et un environnement graphique)
119 +Nécessite ##libnotify## et un environnement graphique. Sur un serveur, envoyer plutôt un message par un bot de messagerie ou par courriel.
99 99  
100 ------
121 +----
101 101  
102 102  == Bonnes pratiques ==
103 103  
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 !
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
108 108  
109 ------
131 +----
110 110  
111 111  == Liens utiles ==
112 112  
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)
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]]
115 115  
116 ------
138 +----
117 117  
118 118  == Liens internes ==
119 119  
120 -* [[Retour aux scripts personnels>>doc:Wiki Batcave John.TutosLinux.ScriptsPerso.WebHome]]
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]]
144 +* [[Retour à l’accueil>>doc:Wiki Batcave John.WebHome]]