Le script complet est ici, je demande qu’il ne soit plus proposé d’autre modifications, sauf si une erreur grave était découverte. Merci à tous pour l’aide apportée.
[code]#!/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.
#+ et page du WIKI = http://www.isalo.org/wiki.debian-fr/index.php?title=Script_de_double_sauvegarde_alternée
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 : 22 août 2011
Objet de la modification : améliorations diverses
END INIT INFO
#----------------- Fonctions ----------------------------
function sauvegarde()
{
sudo rsync -av --del --backup --backup-dir="$1" --exclude-from="$2" “$3” “$4”
# 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 "\nSauvegarde de %s : OK\n" "$3"
sleep 10
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’)
systeme_fich=(’’ ‘ext3’ ‘ext2’)
controle=(’’ ‘/home/controle’ ‘/home/controle-ricardo’)
exclure=(’’ ‘/root/exclure’ ‘/home/ricardo/.exclure’)
sauve=(’’ ‘/mnt/autre/sauve’ ‘/mnt/autre/sauve-ricardo’)
dossier_a_sauver=(’’ ‘/’ ‘/home/ricardo’)
#----------------- Départ du script ----------------------------
Teste l’existence du dossier de montage, sinon, on sort avec erreur 1.
mkdir -p "${mount_rep}" || { echo "Le dossier de montage n'existe pas !" >&2; exit 1; }
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” quitter
do
case ${REPLY} in
[1-2])
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”
[ -z “$XDG_DATA_HOME” ] && chemin_trash="$HOME/.local/share/Trash" || chemin_trash="$XDG_DATA_HOME/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
for((index=1; index < ${#controle[@]}; index++))
do
sauvegarde “${controle[$index]}” “${exclure[$index]}” “${dossier_a_sauver[$index]}” "${sauve[$index]}"
done
fi
sortie_propre
[/code]