0 Votes

Code source wiki de ScriptsPerso/Sauvegarde

Version 2.7 par john le 2025/05/24 23:21

Masquer les derniers auteurs
john 2.1 1 = Script de sauvegarde automatique =
2
3 {{toc/}}
4
5 == Objectif ==
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`.
8
john 2.3 9 ----
john 2.1 10
11 == Pourquoi `rsync` ? ==
12
13 * Synchronisation incrémentale (copie uniquement les fichiers modifiés)
14 * Conservation des permissions, dates et liens symboliques
15 * Prise en charge des exclusions
16 * Très rapide, fiable et largement disponible
17
john 2.3 18 ----
john 2.1 19
20 == Exemple de script de sauvegarde ==
21
22 {{code language="bash"}}
23 #!/bin/bash
24
25 set -euo pipefail
26
27 # === Configuration ===
28 SOURCE="$HOME/Documents"
29 DEST="/mnt/backup/Documents"
30 LOGFILE="$HOME/rsync_backup.log"
31 DATE=$(date "+%Y-%m-%d %H:%M:%S")
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"
37 {{/code}}
38
john 2.3 39 ----
john 2.1 40
41 == Explication des options ==
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
john 2.3 48 ----
john 2.1 49
50 == Ajout à cron ==
51
52 Pour exécuter ce script tous les jours à 3h du matin :
53
54 1. Lancer `crontab -e`
55 2. Ajouter la ligne suivante :
56
57 {{code language="bash"}}
58 0 3 * * * /chemin/vers/sauvegarde.sh
59 {{/code}}
60
61 Pour s’assurer que le script fonctionne :
62
63 * Rendre le fichier exécutable : `chmod +x sauvegarde.sh`
64 * Tester manuellement d’abord : `./sauvegarde.sh`
65
john 2.3 66 ----
john 2.1 67
68 == Ajouter une exclusion ==
69
70 Par exemple pour **ignorer les fichiers `.bak`** :
71
72 {{code language="bash"}}
73 rsync -avh --delete --exclude='*.bak' "$SOURCE/" "$DEST/"
74 {{/code}}
75
76 On peut aussi exclure un dossier spécifique avec :
77 {{code language="bash"}}--exclude='node_modules/'{{/code}}
78
john 2.3 79 ----
john 2.1 80
81 == Sauvegarde avec date dans le nom ==
82
83 Pour créer un nouveau dossier par jour :
84
85 {{code language="bash"}}
86 DEST="/mnt/backup/Documents_$(date +%F)"
87 rsync -a "$SOURCE/" "$DEST/"
88 {{/code}}
89
john 2.3 90 ----
john 2.1 91
92 == Astuce : envoi de notification à la fin ==
93
94 {{code language="bash"}}
95 notify-send "Sauvegarde terminée" "Documents sauvegardés avec succès"
96 {{/code}}
97
98 (Nécessite `libnotify` et un environnement graphique)
99
john 2.3 100 ----
john 2.1 101
102 == Bonnes pratiques ==
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 !
108
john 2.3 109 ----
john 2.1 110
111 == Liens utiles ==
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)
115
john 2.3 116 ----
john 2.1 117
118 == Liens internes ==
119
john 2.7 120 * [[Retour aux scripts personnels>>doc:TutosLinux.ScriptsPerso.WebHome]]