Code source wiki de ScriptsPerso/Sauvegarde
Masquer les derniers auteurs
| author | version | line-number | content |
|---|---|---|---|
![]() |
1.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 | |||
| 9 | ----- | ||
| 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 | |||
| 18 | ----- | ||
| 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 | |||
| 39 | ----- | ||
| 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 | |||
| 48 | ----- | ||
| 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 | |||
| 66 | ----- | ||
| 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 | |||
| 79 | ----- | ||
| 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 | |||
| 90 | ----- | ||
| 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 | |||
| 100 | ----- | ||
| 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 | |||
| 109 | ----- | ||
| 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 | |||
| 116 | ----- | ||
| 117 | |||
| 118 | == Liens internes == | ||
| 119 | |||
| 120 | * [[Retour aux scripts personnels>>doc:Wiki Batcave John.TutosLinux.ScriptsPerso.WebHome]] |
