POUR DISCUTER, C’EST LÀ
-C) : CE ‘POST’ VOUS PROPOSE UN SCRIPT QUI PERMET DE CUMULER LES DEUX POSSIBILITÉS : SAUVEGARDE ET CLONAGE.
Rassurez-vous, tout ce qui suit n’est qu’informations qui ne devraient vous demander que peu d’intervention, mais qu’il me semble nécessaire de lire
Ce script propose une “double sauvegarde”, mais ce n’est pas une obligation et on peut parfaitement ne consacrer qu’une seule partition à notre sauvegarde
De même, vous n’êtes pas obligé de créer un clone .
Votre choix sera donc :
[ul][li]créer et exploiter une seule sauvegarde,[/li]
[li]créer et exploiter deux sauvegardes,[/li]
[li]créer et exploiter un clone,[/li]
[li]créer et exploiter une sauvegarde et un clone,[/li]
[li]créer et exploiter deux sauvegardes et un clone.[/li][/ul]
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, j’ai toujours à disposition une sauvegarde vieille au plus d’une semaine. Si cette dernière venait à faillir, il me resterait l’autre dont l’ancienneté ne dépasse pas 14 jours.
J’ai un clone de mon système fonctionnel, que je mets à jour environ une fois par mois. Ce dernier, accompagné d’une /home séparée, clonée, elle aussi, me permets, en cas de besoin, d’avoir à disposition un système complet en quelques secondes.
Il faudra donc commencer par copier le script et coller cette copie dans un fichier que vous nommerez, par exemple “sauvegarde”.
Je vous conseille, mais ce n’est pas une obligation, de le placer dans /home/user/bin (ce dernier dossier devant être créé s’il n’existe pas). Il conviendra de placer ce dossier ‘bin’ dans le PATH, afin de pouvoir envoyer ce script de n’importe quel endroit de votre architecture :
$ echo ‘export PATH=$PATH:/home/user/bin’ >> /home/user/.bashrc
MODIFICATION DE LA PARTIE CI-DESSUS EN ROUGE :
[color=#40BF00][b]Placez ce script dans /usr/local/bin/ donnez-lui root comme propriétaire et comme groupe :
chown root:root /usr/local/bin/sauvegarde
et donnez-lui les droit 755 pour pouvoir l’exécuter en tant qu’‘user’ :
chmod 755 /usr/local/bin/sauvegarde
Comme pour tout script, il faudra le rendre exécutable avec :
chmod +x /usr/local/bin/sauvegarde[/b]
[/color]
AIDE À LA PERSONNALISATION DE CE SCRIPT :
Il faut maintenant passer à la personnalisation du script et pour ce faire, le seul endroit où vous devriez avoir à intervenir est la partie droite du bloc “variables”, après le signe ‘=’. Prenez garde de bien respecter les espacements et de ne pas supprimer les apostrophes, ni les parenthèses.
Ne pas modifier les 2 premières apostrophes (’’) qui représentent le zéro de façon à indexer à partir de ‘1’.
Pour ne pas utiliser une des 4 possibilité, il suffit de laisser un vide à la place de la donnée dans la ligne “ddext=…”. Par exemple, si vous ne voulez créer qu’une seule sauvegarde plus un clone, accompagné d’une /home séparée, modifiez la ligne ‘ddext’ ainsi :
Ne pouvant pas trouver la partition, le script vous affichera une erreur et vous demandera de recommencer. À vous de ne pas taper le chiffre (2 pour l’exemple).
Ne modifiez pas les autres lignes.
mount_rep="/mnt/autre"
il s’agit du dossier qui sera monté temporairement et qui recevra votre partition de sauvegarde. S’il n’existe pas, il sera créé automatiquement lors de la première utilisation. ‘/mnt’ étant le dossier habituel pour les montages temporaires, j’ai préféré créer un sous-dossier “autre”, mais là encore, ce n’est pas une obligation.
Attention à la confusion possible entre 2 apostrophes ‘’ et un guillemet ". Dans les lignes que vous aurez à personnaliser à partir d’ici, il s’agit de 2 apostrophes
ddext=('' '/dev/sdb9' '/dev/sdb10' '/dev/sdb7' '/dev/sdb1')
À la place de /dev/sdb9, vous porterez l’adresse de la première partition de sauvegarde et à la place de /dev/sdb10, celle de votre seconde partition de sauvegarde. Il est souhaitable que ces partitions soient sur un DD différent de celui qui abrite votre système. Ces deux 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é.
/dev/sdb7 sera remplacé par la partition qui hébergera votre clone et /dev/sdb1 par celle qui abritera la /home séparée du clone.
Là, ce sont les systèmes de fichiers en rapport avec les partitions du dessus.
Ce sont les deux “fichiers texte” dont il est question dans le premier ‘post’ de ce fil.
Ce sont les dossiers de sauvegarde à proprement parler.
Là, on a les dossiers que l’on veut sauver
La première donnée ‘/’ n’est pas à modifier, elle concerne l’ensemble du système, sauf les dossiers et fichiers exclus, portés dans le fichier ‘exclure’. La seconde concerne votre dossier personnel ~/ qu’il est préférable d’écrire en entier : /home/user.
Je pense avoir fait un tour assez exhaustif des questions mais si vous rencontrez un problème non évoqué ici, n’hésitez pas à poser votre question sur le lien en rouge, en tête et en fin de ce post.
------------------- LE SCRIPT À COPIER COMMENCE APRÈS CETTE LIGNE -----------------
[code]#!/bin/bash
BEGIN INIT INFO
Nom du script : sauvegarde & clone
Auteur : Ricardo, aidé de l’équipe du forum Debian-fr.org
Date de création : octobre 2011
Utilité : faciliter les sauvegardes
Version : cette version est écrite pour l’utilisation avec deux partitions de sauvegarde, à alterner dans le temps, plus un clone.
#+ 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 du premier ‘post’
Droits : entièrement libres
Modifié le : octobre 2011
Objet de la modification : ajout de la sauvegarde d’un clone complet et/ou d’une /home séparée
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[33;45m’”\nSauvegarde de %s : OK\n" “$3”; tput sgr0
sleep 5 # pour permettre de voir 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 INDIQUÉ 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’ ‘/mnt/autre/ricardo’)
dossier_a_sauver=(’’ ‘/’ ‘/home/ricardo/’ ‘/’ ‘/home/ricardo/’)
#----------------- Départ du script ----------------------------
Teste l’existence du dossier de montage et le crée s’il n’existe pas.
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
;;
5) 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]}” “${dossier_a_sauver[$choix]}” "${sauve[$choix]}"
done
;;
3|4)
sauvegarde “${exclure[$index]}” “${dossier_a_sauver[$index]}” “${sauve[$index]}”
;;
esac
else
sortie_propre
fi
sortie_propre [/code]
----------------------- FIN DU SCRIPT-------------------
POUR DISCUTER, C’EST LÀ