Modifications pour le document Sauvegarde
Modifié par john le 2026/09/20 20:36
Résumé
-
Propriétés de la Page (1 modifications, 0 ajouts, 0 suppressions)
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, enjournalisant 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 uniquementcequiachangé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 disponiblepartout16 +* 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 -== Essayersansrisque==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 listelongue, unfichierd'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 -== Sauvegarde sdatées ==81 +== Sauvegarde avec date dans le nom == 103 103 104 - Un dossier par jour,en partageant les fichiersinchangésavec laveille(peu d'espaceoccupé):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écomposerunecommande 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]]