« Script de double sauvegarde alternée + clonage » : différence entre les versions
m (chg "dossier" par "répertoire") |
m (change <code bash> en <pre>) |
||
Ligne 37 : | Ligne 37 : | ||
Attention aussi de ne pas modifier les espaces. | Attention aussi de ne pas modifier les espaces. | ||
< | <pre>mount_rep="/mnt/autre"</pre> | ||
--la première donnée, vide, figure le [0], de façon à commencer par [1] | --la première donnée, vide, figure le [0], de façon à commencer par [1] | ||
< | <pre>ddext=('' '/dev/sdb9' '/dev/sdb10' '/dev/sdb7' '/dev/sdb1')</pre> | ||
< | <pre>systeme_fich=('' 'ext3' 'ext2' 'ext3' 'ext3')</pre> | ||
< | <pre>exclure=('' '/root/exclure' '/home/ricardo/exclure' '/root/exclure' '/home/ricardo/exclure')</pre> | ||
< | <pre>sauve=('' '/mnt/autre/sauve' '/mnt/autre/sauve-ricardo' '/mnt/autre' '/mnt/autre/ricardo')</pre> | ||
< | <pre>répertoire_a_sauvegarder=('' '/' '/home/ricardo/' '/' '/home/ricardo/')</pre> | ||
Ligne 54 : | Ligne 54 : | ||
< | <pre>mount_rep="/mnt/autre"</pre> | ||
il s'agit du répertoire qui sera monté temporairement et qui recevra votre partition de sauvegarde. | il s'agit du répertoire qui sera monté temporairement et qui recevra votre partition de sauvegarde. | ||
Ligne 61 : | Ligne 61 : | ||
< | <pre> ddext=('' '/dev/sdb9' '/dev/sdb10' '/dev/sdb7' '/dev/sdb1')</pre> | ||
À vous de modifier selon l'emplacement exact de vos partitions. Il est souhaitable que ces partitions soient sur un DD (disque dur) différent de celui qui abrite votre système. Ces partitions peuvent être sur des DDs internes ou externes. | À vous de modifier selon l'emplacement exact de vos partitions. Il est souhaitable que ces partitions soient sur un DD (disque dur) différent de celui qui abrite votre système. Ces partitions peuvent être sur des DDs internes ou externes. | ||
Il vous appartiendra, là aussi de créer ces partitions. Elles devront être de capacité suffisante pour recevoir tout votre système, plus une certaine réserve de sécurité. | Il vous appartiendra, là aussi de créer ces partitions. Elles devront être de capacité suffisante pour recevoir tout votre système, plus une certaine réserve de sécurité. | ||
< | <pre> systeme_fich=('' 'ext3' 'ext2' 'ext3' 'ext3')</pre> | ||
Là, c'est à vous de voir ce que vous aimez comme système de fichiers. À mon avis, ext2 doit suffire pour les sauvegardes mais pour le clone et sa /home, ext3 ou 4 sont peut-être à préférer. | Là, c'est à vous de voir ce que vous aimez comme système de fichiers. À mon avis, ext2 doit suffire pour les sauvegardes mais pour le clone et sa /home, ext3 ou 4 sont peut-être à préférer. | ||
Bien sûr, chaque système doit être en rapport avec son adresse du dessus, attention de ne pas inverser s'ils sont différents. | Bien sûr, chaque système doit être en rapport avec son adresse du dessus, attention de ne pas inverser s'ils sont différents. | ||
< | <pre> exclure=('' '/root/exclure' '/home/ricardo/exclure' '/root/exclure' '/home/ricardo/exclure')</pre> | ||
Là, il s'agit de créer deux "fichiers texte" dans lesquels vous inscrirez la liste de tous les répertoires/fichiers qui vous semblent devoir être exclus des sauvegardes. Le premier de ces fichiers sera placé dans le répertoire /root, tandis que le second le sera dans le répertoire ~/ c'est à dire /home/"vous". En effet, il est inutile de sauvegarder les répertoires/fichiers temporaires, et certains autres qui sont régénérés à chaque reboute. Si vous voulez un exemple de ces fichiers "exclure", vous le trouverez dans le tuto du forum, à cette URL : http://www.debian-fr.org/sauvegarde-clonage-d-une-sid-t25179.html | Là, il s'agit de créer deux "fichiers texte" dans lesquels vous inscrirez la liste de tous les répertoires/fichiers qui vous semblent devoir être exclus des sauvegardes. Le premier de ces fichiers sera placé dans le répertoire /root, tandis que le second le sera dans le répertoire ~/ c'est à dire /home/"vous". En effet, il est inutile de sauvegarder les répertoires/fichiers temporaires, et certains autres qui sont régénérés à chaque reboute. Si vous voulez un exemple de ces fichiers "exclure", vous le trouverez dans le tuto du forum, à cette URL : http://www.debian-fr.org/sauvegarde-clonage-d-une-sid-t25179.html | ||
< | <pre> sauve=('' '/mnt/autre/sauve' '/mnt/autre/sauve-ricardo' '/mnt/autre' '/mnt/autre/ricardo')</pre> | ||
Inutile de créer ces fichiers, ils le seront lors de la première sauvegarde. Il vous appartient toutefois de renommer le second, en fonction de votre nom d'utilisateur. | Inutile de créer ces fichiers, ils le seront lors de la première sauvegarde. Il vous appartient toutefois de renommer le second, en fonction de votre nom d'utilisateur. | ||
< | <pre> répertoire_a_sauvegarder=('' '/' '/home/ricardo/' '/' '/home/ricardo/')</pre> | ||
La première donnée '/' n'est pas à modifier, elle concerne l'ensemble du système, sauf les répertoires et fichiers exclus, portés dans le fichier 'exclure'. La seconde concerne votre répertoire personnel ~/ qu'il est préférable d'écrire en entier : /home/"vous". | La première donnée '/' n'est pas à modifier, elle concerne l'ensemble du système, sauf les répertoires et fichiers exclus, portés dans le fichier 'exclure'. La seconde concerne votre répertoire personnel ~/ qu'il est préférable d'écrire en entier : /home/"vous". | ||
Ligne 85 : | Ligne 85 : | ||
'''''============ SCRIPT PROPREMENT DIT ===============''''' | '''''============ SCRIPT PROPREMENT DIT ===============''''' | ||
< | <pre> | ||
#!/bin/bash | #!/bin/bash | ||
Ligne 226 : | Ligne 226 : | ||
fi | fi | ||
</ | </pre> | ||
[[Catégorie:Sécurité]] | [[Catégorie:Sécurité]] | ||
[[Catégorie:Scripts]] | [[Catégorie:Scripts]] |
Version du 19 mai 2016 à 02:03
Cette page fait suite à la page : Sauvegarde et clonage d'un système que je vous engage à lire.
Dans un premier temps, j'avais fait ce script uniquement pour les sauvegardes alternées. Je l'ai modifié de façon à y inclure un choix de sauvegarde supplémentaire pour un clone et, séparément, pour la /home dudit clone. Quatre possibilités vous seront donc offertes : sauvegarde complète -1 ; sauvegarde complète -2 ; sauvegarde clone ; sauvegarde /home du clone.
Pourquoi double sauvegarde ? C'est tout simplement une sécurité supplémentaire. Ce n'est toutefois pas une obligation et on peut parfaitement ne consacrer qu'une seule partition à notre sauvegarde (voir la partie "AIDE À LA PERSONNALISATION DE CE SCRIPT".
- Fonctionnement : Selon la périodicité désirée des sauvegardes, vous en aurez toujours une plus ancienne et une plus récente sous la main.
Mon exemple personnel : j'effectue une sauvegarde chaque fin de semaine, avant une mise à jour, elle aussi hebdomadaire. Les semaines impaires, j'utilise la 'sauve', tandis que les semaines paires, je choisis la 'sauve2'. À vous de juger des périodicités de sauvegarde du clone et/ou de sa /home.
Ainsi, en cas d'accroc, j'ai sous la main une vue de ma machine qui date de moins d'une semaine et, si par manque de chance, cette sauvegarde est, elle aussi, défaillante, il m'en reste une seconde qui n'aura que moins de deux semaines d'ancienneté. En cas d'urgence, sans avoir à remplacer les répertoires, vous aurez en plus un clone "prêt à l'emploi".
Pour utiliser ce script, il convient, bien entendu, d'y entrer vos données en regard des "variables".
Comme pour tout script, une fois vos modifications apportées, vous devrez lui donner un nom (perso, je ne me suis pas fatigué : 'sauvegarde') et rendre le fichier exécutable (# chmod +x /chemin/nom_fichier).
Bien que cela ne soit pas une obligation, vous pouvez le placer dans un répertoire présent dans le PATH, ainsi, vous pourrez envoyer ce script de n'importe quel endroit de votre architecture. Pour connaître ces répertoires, tapez en tant qu' 'user' : echo $PATH. Toutefois, l'habitude la plus fréquente veut qu'on place ses scripts perso dans /usr/local/bin
- Comme pré-requis, il faut installer, si ce n'est fait 'sudo' (voir les tutos existants).
À installer aussi 'rsync', qui est le moteur même de la sauvegarde (Merci à Loreleil de l'avoir rappelé) Il faut disposer d'au moins un DDext ou d'un second DD sur sa machine de façon à pouvoir y créer deux partitions de dimension suffisante pour recevoir nos sauvegardes. Si on est encore plus parano, on peut sauvegarder une semaine dans une partition d'un DDext et la suivante dans celle d'un autre. Pour le clone et sa /home, deux autres partitions distinctes sont à prévoir.
Ce script peut encore être modifié mais il est testé et fonctionne parfaitement. Si vous avez des questions : un MP à ricardo sur le forum.
AIDE À LA PERSONNALISATION DE CE SCRIPT
En principe, vous ne devriez avoir à intervenir que sur la seule partie ..........Variables ......... Vous ne devez modifier que la partie droite, c'est à dire après le signe '=' en dehors des parenthèses, des guillemets et des apostrophes. Attention aussi de ne pas modifier les espaces.
mount_rep="/mnt/autre"
--la première donnée, vide, figure le [0], de façon à commencer par [1]
ddext=('' '/dev/sdb9' '/dev/sdb10' '/dev/sdb7' '/dev/sdb1')
systeme_fich=('' 'ext3' 'ext2' 'ext3' 'ext3')
exclure=('' '/root/exclure' '/home/ricardo/exclure' '/root/exclure' '/home/ricardo/exclure')
sauve=('' '/mnt/autre/sauve' '/mnt/autre/sauve-ricardo' '/mnt/autre' '/mnt/autre/ricardo')
répertoire_a_sauvegarder=('' '/' '/home/ricardo/' '/' '/home/ricardo/')
====================================================
mount_rep="/mnt/autre"
il s'agit du répertoire qui sera monté temporairement et qui recevra votre partition de sauvegarde. il vous appartient de le créer et de le nommer comme bon vous semble. '/mnt' étant le répertoire habituel pour les montages temporaires, j'ai préféré créer un sous-répertoire.
ddext=('' '/dev/sdb9' '/dev/sdb10' '/dev/sdb7' '/dev/sdb1')
À vous de modifier selon l'emplacement exact de vos partitions. Il est souhaitable que ces partitions soient sur un DD (disque dur) différent de celui qui abrite votre système. Ces partitions peuvent être sur des DDs internes ou externes. Il vous appartiendra, là aussi de créer ces partitions. Elles devront être de capacité suffisante pour recevoir tout votre système, plus une certaine réserve de sécurité.
systeme_fich=('' 'ext3' 'ext2' 'ext3' 'ext3')
Là, c'est à vous de voir ce que vous aimez comme système de fichiers. À mon avis, ext2 doit suffire pour les sauvegardes mais pour le clone et sa /home, ext3 ou 4 sont peut-être à préférer. Bien sûr, chaque système doit être en rapport avec son adresse du dessus, attention de ne pas inverser s'ils sont différents.
exclure=('' '/root/exclure' '/home/ricardo/exclure' '/root/exclure' '/home/ricardo/exclure')
Là, il s'agit de créer deux "fichiers texte" dans lesquels vous inscrirez la liste de tous les répertoires/fichiers qui vous semblent devoir être exclus des sauvegardes. Le premier de ces fichiers sera placé dans le répertoire /root, tandis que le second le sera dans le répertoire ~/ c'est à dire /home/"vous". En effet, il est inutile de sauvegarder les répertoires/fichiers temporaires, et certains autres qui sont régénérés à chaque reboute. Si vous voulez un exemple de ces fichiers "exclure", vous le trouverez dans le tuto du forum, à cette URL : http://www.debian-fr.org/sauvegarde-clonage-d-une-sid-t25179.html
sauve=('' '/mnt/autre/sauve' '/mnt/autre/sauve-ricardo' '/mnt/autre' '/mnt/autre/ricardo')
Inutile de créer ces fichiers, ils le seront lors de la première sauvegarde. Il vous appartient toutefois de renommer le second, en fonction de votre nom d'utilisateur.
répertoire_a_sauvegarder=('' '/' '/home/ricardo/' '/' '/home/ricardo/')
La première donnée '/' n'est pas à modifier, elle concerne l'ensemble du système, sauf les répertoires et fichiers exclus, portés dans le fichier 'exclure'. La seconde concerne votre répertoire personnel ~/ qu'il est préférable d'écrire en entier : /home/"vous".
============ SCRIPT PROPREMENT DIT ===============
#!/bin/bash ### BEGIN INIT INFO # Nom du script : sauvegarde # Auteur : Ricardo, aidé de l'équipe de 'debian-fr.org' # Date de création : juillet 2011 # Utilité : faciliter les sauvegardes # Version : cette version est écrite pour l'utilisation avec deux partitions de sauvegarde, à alterner dans le temps. #+ Il est souhaitable que ces partitions soient sur un DD différent de celui qui abrite le système. #+ Ce script a été écrit de façon à ce qu'il soit le plus générique possible. Les seules données que vous devriez devoir changer, #+ se trouvent dans la partie droite des variables. # Pre-requis : voir tuto = http://www.debian-fr.org/sauvegarde-clonage-d-une-sid-t25179.html #+ et page du WIKI = http://www.isalo.org/wiki.debian-fr/index.php?title=Script_de_double_sauvegarde_altern%C3%A9e # Description : script permettant d'effectuer, régulièrement et de façon simple, les sauvegardes de son système # Droits : entièrement libres mais en cas de copie, la citation de "debian-fr.org" nous serait agréable # Modifié le : 12 août 2011, puis le 11 février 2012 # Objet de la modification : amélioration du test sur l'existence et la validité des partitions de sauvegarde. ### END INIT INFO #----------------- Fonctions ---------------------------- function sauvegarde() { sudo rsync -av --del --exclude-from="$1" "$2" "$3" # Teste si la sauvegarde a abouti ( = 0), sinon, on sort. if (("$?" > 0)) then printf "\nErreur lors de la sauvegarde de %s\n" "$3" else printf '\E[30;45m'"\nSauvegarde de %s : OK\n" "$3"; tput sgr0 sleep 5 # juste le temps de pouvoir lire le résultat de la sauvegarde de '/' fi } function sortie_propre() { # Si la partition de sauvegarde n'était pas montée lors de l'appel, on la démonte avant de sortir. if [ "${deja_montee}" = 0 ] then sudo umount "${mount_rep}" else # Si la partition de sauvegarde était déjà montée lors de l'appel, on sort sans la démonter mais en s'assurant que les données ont bien été écrites. sync fi exit } #----------------- Variables ------------------- # CETTE PARTIE DOIT RETENIR TOUTE VOTRE ATTENTION, C'EST LÀ QUE VOUS PERSONNALISEREZ CE SCRIPT #+ POUR CE FAIRE, JE VOUS CONSEILLE DE VOUS RÉFÉRER AU TUTO ET AU SCRIPT INDIQUÉS DANS LE "PRE-REQUIS" DU "BEGIN INIT INFO" mount_rep="/mnt/autre" # la première donnée, vide, figure le [0], de façon à commencer par [1] ddext=('' '/dev/sdb9' '/dev/sdb10' '/dev/sdb7' '/dev/sdb1') systeme_fich=('' 'ext3' 'ext2' 'ext3' 'ext3') exclure=('' '/root/exclure' '/home/ricardo/exclure' '/root/exclure' 'home/ricardo/exclure') sauve=('' '/mnt/autre/sauve' '/mnt/autre/sauve-ricardo' '/mnt/autre/sauve' '/mnt/autre/sauve-ricardo') répertoire_a_sauvegarder=('' '/' '/home/ricardo/' '/' '/home/ricardo/') #----------------- Départ du script ---------------------------- # Teste l'existence du répertoire de montage, sinon, on sort avec erreur 1. mkdir -p "${mount_rep}" # Choix, puis test de la partition de sauvegarde. Si le montage ne s'effectue pas, on sort via la fonction sortie_propre() deja_montee=0 PS3="Entrez le N° de la sauvegarde choisie : " select choix_sauvegarde in "sauve" "sauve2" "sauve-clone" "sauve-Home-clone" quitter do case ${REPLY} in [1,2,3,4]) index=${REPLY} if [ ! -e "${ddext[$index]}" ] then printf "\n Impossible de se connecter à %s \n Vérifiez qu'il s'agit de la bonne partition et recommencez \n" "${ddext[$index]}" >&2; exit 1; else if ! grep -q "^${ddext[$index]} "${mount_rep}" ${systeme_fich[$index]}" /etc/mtab then sudo mount -t "${systeme_fich[$index]}" "${ddext[$index]}" "${mount_rep}" || { deja_montee=1; sortie_propre; } break else printf "Info : La partition ${ddext[$index]} est déjà montée\n" deja_montee=1 break fi fi ;; 3) echo "On sort du script"; sortie_propre ;; *) echo "Saisie non valide !" ;; esac done # Teste l'emplacement de la corbeille et si elle est pleine (présence de fichier(s) dans ... /files). Si elle l'est, liste les fichiers qu'elle contient echo -e "\033[4mCONTENU de la CORBEILLE\033[0m\n" chemin_trash="${XDG_DATA_HOME:-$HOME/.local/share}/Trash" corbeille="$chemin_trash/files" if [ -z $(ls -A "$corbeille") &> /dev/null ] then echo "LA CORBEILLE EST VIDE" else ls -a "$corbeille" read -p "on peut la vider ? o/* : " vider if [ "$vider" = o ] then shopt -s dotglob rm -rf "$chemin_trash"/{files/,info/,metadata}* shopt -u dotglob echo "CORBEILLE VIDÉE" else echo -e "\033[4mCORBEILLE CONSERVÉE PLEINE\033[0m" fi fi # Ordre de sauvegarde faisant appel à la fonction 'sauvegarde()' read -p "prêt pour la sauvegarde ? o/* : " onyva if [ "$onyva" = o ] then case "$index" in 1|2) for choix in '1' '2' do sauvegarde "${exclure[$choix]}" "${répertoire_a_sauvegarder[$choix]}" "${sauve[$choix]}" done ;; 3|4) sauvegarde "${exclure[$index]}" "${répertoire_a_sauvegarder[$index]}" "${sauve[$index]}" ;; esac else sortie_propre fi