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,121 +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, enloguant 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 9 ---- 10 10 11 -== Pourquoi `rsync`? ==9 +== Pourquoi rsync ? == 12 12 13 -* Synchronisation incrémentale (copie uniquementlesfichiers 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 etlargementdisponible14 +* Rapide, fiable et disponible partout 17 17 18 18 ---- 19 19 20 -== Exemple de scriptde 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 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 + 39 39 ---- 40 40 41 -== Explicationdesoptions==47 +== Options == 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-- 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 47 47 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 + 48 48 ---- 49 49 50 -== Ajoutàcron==64 +== Essayer sans risque == 51 51 52 -Pour exécuter ce script tous les jours à 3h du matin : 66 +{{code language="bash"}} 67 +rsync -avhn --delete "$SOURCE/" "$DEST/" 68 +{{/code}} 53 53 54 -1. Lancer `crontab -e` 55 -2. Ajouter la ligne suivante : 70 +##-n## affiche ce qui serait fait, sans rien modifier. À lancer systématiquement après une modification du script. 56 56 72 +---- 73 + 74 +== Ajout à cron == 75 + 57 57 {{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"}} 58 58 0 3 * * * /chemin/vers/sauvegarde.sh 59 59 {{/code}} 60 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 - 66 66 ---- 67 67 68 -== Ajouter une exclusion ==88 +== Exclusions == 69 69 70 -Par exemple pour **ignorer les fichiers `.bak`** : 71 - 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 96 +{{code language="bash"}} 97 +rsync -avh --delete --exclude-from="$HOME/.rsync-exclude" "$SOURCE/" "$DEST/" 98 +{{/code}} 99 + 79 79 ---- 80 80 81 -== Sauvegarde avecdatedansle nom==102 +== Sauvegardes datées == 82 82 83 - Pourcréerunnouveaudossierparjour:104 +Un dossier par jour, en partageant les fichiers inchangés avec la veille (peu d'espace occupé) : 84 84 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 90 ---- 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 100 ---- 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 109 ---- 110 110 111 111 == Liens utiles == 112 112 113 -* Manuel de rsync https~://linux.die.net/man/1/rsync)//114 -* Tutorielrsyncavancé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 116 ---- 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]] 121 121 * [[Retour à l’accueil>>doc:Wiki Batcave John.WebHome]]