Script de double sauvegarde alternée + clonage

De Le Wiki du Forum-Debian.fr
Aller à la navigation Aller à la recherche

Cette page fait suite à la page : Sauvegarde et clonage d'un système que je vous engage à lire.

Pourquoi double sauvegarde ? C'est tout simplement une sécurité supplémentaire.

Fonctionnement : Selon la périodicité désirée des sauvegardes, vous en aurez toujours sous la main une plus ancienne et une plus récente. 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'.

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é.

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).

Vous devrez aussi le placer dans un dossier mentionné dans le PATH. Pour connaître ces dossiers, tapez en tant quuser' : $PATH. Personnellement, je me suis créé un dossier qui contient tous mes scripts -maison, que j'ai appelé 'bin' et que j'ai placé dans /home/ricardo. Comme pré-requis, il faut installer, si ce n'est fait 'sudo' (voir les tutos existants).

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. Il faudra aussi créer les dossiers de controle /home/control et /home/controle-vous.

Cela est expliqué dans le tuto dont le lien est indiqué plus haut. Ce script peut encore être modifié mais il est testé et fonctionne parfaitement. Si vous avez des questions : un MP à ricardo sur le forum.

  1. !/bin/bash
      1. BEGIN INIT INFO
  2. Nom du script : sauvegarde
  3. Auteur : Ricardo, aidé de l'équipe de 'debian-fr.org'
  4. Date de création : juillet 2011
  5. Utilité : faciliter les sauvegardes
  6. Version : cette version est écrite pour l'utilisation avec deux partitions de sauvegarde, à alterner dans le temps.
  7. + Il est souhaitable que ces partitions soient sur un DD différent de celui qui abrite le système
  8. Pre-requis : voir tuto = http://www.debian-fr.org/sauvegarde-clonage-d-une-sid-t25179.html
  9. Description : script permettant d'effectuer, régulièrement et de façon simple, les sauvegardes de son système
  10. Droits : entièrement libres mais en cas de copie, la citation de "debian-fr.org" nous serait agréable
  11. Modifié le :
  12. Objet de la modification :
      1. END INIT INFO
  13. ---------------------------------------------

function test_sauvegarde() {

  1. Teste si la sauvegarde a abouti (premier paramètre = 0), sinon, on sort.

if (("$1" > 0)) then

  		printf "\nErreur lors de la sauvegarde de %s\n" "$2" >&2
  		exit 1

else printf "\nSauvegarde de %s : OK\n" "$2" fi }

  1. -----------------Variables-------------------

mount_rep="/mnt/autre"

  1. la première donnée, vide, figure le [0], de façon à commencer par [1]

ddext=( '/dev/sdb9' '/dev/sdb10') systeme_fich=( 'ext3' 'ext2') controle=( '/home/controle' '/home/controle-ricardo') exclure=( '/root/exclure' '/home/ricardo/.exclure') sauve=( '/mnt/autre/sauve' '/mnt/autre/sauve-ricardo')

  1. ---------------------------------------------
  1. Teste l'existence des partitions de sauvegarde et celle du dossier de montage, sinon, on sort avec erreur 1.

[ -e "${ddext[1]}" ] && [ -e "${ddext[2]}" ] || { echo "Le DDext ne répond pas !" >&2; exit 1; }

mkdir -p "$mount_rep" || { echo "Le dossier de montage n'existe pas !" >&2; exit 1; }

  1. Choix de la sauvegarde. Si le montage ne s'effectue pas, on sort avec erreur 1.

deja_montee=0 PS3="Entrez le N° de la sauvegarde choisie : " select sauvegarde in "sauve" "sauve2" quitter do case ${REPLY} in

  	[1-2]) 	

index=${REPLY} if ! grep -q "^${ddext[$index]} "$mount_rep" ${systeme_fich[$index]}" /etc/mtab then sudo mount -t "${systeme_fich[$index]}" "${ddext[$index]}" "$mount_rep" || exit 1; break else printf "Info : La partition ${ddext[$index]} est déjà montée\n" deja_montee=1 break fi

3) echo "On sort du menu"; break

*) echo "Saisie non valide !"

esac done

  1. Teste si la corbeille 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" if [ -e ~/.local/share/Trash/files/ ] then

		ls ~/.local/share/Trash/files	

read -p "on peut la vider  ? o/* : " corbeille if [ "$corbeille" = o ] then rm -rf ~/.local/share/Trash/* echo -e "\033[4mCORBEILLE VIDÉE\033[0m" fi else echo "La corbeille est vide" fi

  1. Test de l'état de la sauvegarde avec la fonction "test_sauvegarde", qui se chargera de quitter le script si celle-ci est KO
  2. 1er paramètre : $? = statut de la dernière commande, c.a.d le rsync
  3. 2nd paramètre : / puis ~/ = dossier à sauvegarder

read -p "prêt pour la sauvegarde ? o/* : " onyva

  	if [ "$onyva" = o ]
  	then
     		sudo rsync -av --del --backup --backup-dir="${controle[1]}" --exclude-from="${exclure[1]}" / "${sauve[1]}"

test_sauvegarde $? /

     		sudo rsync -av --del --backup --backup-dir="${controle[2]}" --exclude-from="${exclure[2]}" ~/ "${sauve[2]}"
     		test_sauvegarde $? ~/
  	else
     		exit 1
  	fi
  1. Si la partition de sauvegarde était déjà montée lors de l'appel, on sort sans la démonter.

if [ "$deja_montee" = 0 ] then sudo umount "$mount_rep"

       else
               sync 

fi