Script de double sauvegarde alternée + clonage
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.
- !/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
- Pre-requis : voir tuto = http://www.debian-fr.org/sauvegarde-clonage-d-une-sid-t25179.html
- 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 :
- Objet de la modification :
- END INIT INFO
- ---------------------------------------------
function test_sauvegarde()
{
- 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
}
- -----------------Variables-------------------
mount_rep="/mnt/autre"
- 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')
- ---------------------------------------------
- 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; }
- 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
- 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
- Test de l'état de la sauvegarde avec la fonction "test_sauvegarde", qui se chargera de quitter le script si celle-ci est KO
- 1er paramètre : $? = statut de la dernière commande, c.a.d le rsync
- 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
- 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