La première n’est pas à proprement parler du domaine de la programmation mais plutôt de la logique :
Dans le cas présent qui propose une “double sauvegarde alternée”, qui, dans un exemple de sauvegarde hebdomadaire, offre un “cliché” de ‘jour -7’ et un plus ancien de ‘jour - 14’.
Sachant que quand on effectue la sauvegarde, on va remplacer le “cliché” ‘jour -14’ par le “clich锑jour’, il n’est ptet pas utile d’effectuer une copie ‘backup’, puisque celle-ci sera identique au “cliché” ‘jour -7’, lequel n’est pas concerné par l’actuelle sauvegarde.
Je sais que mon explication n’est pas très claire mais si vous arrivez à me traduire, j’aimerais votre avis.
La seconde réflexion est ce qui pourrait être une erreur que je viens de relever.
Voici d’abord un rappel du script complet :
[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.
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é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]
Dans cette partie des variables :
sauve=(’’ ‘/mnt/autre/sauve’ ‘/mnt/autre/sauve-ricardo’)
dossier_a_sauver=(’’ ‘/’ ‘/home/ricardo’)
Comme elle est proposée, /home/ricardo sera sauvegardé en créant un dossier supplémentaire ‘sauve-ricardo’
D’après ce que j’ai compris du man rsync, pour que seul le contenu soit ajouté, il faut placer une ‘/’ en fin de dossier source.
Ce qui devrait donc donner
dossier_a_sauver=(’’ ‘/’ ‘/home/ricardo[size=150]/[/size]’)