Sauvegardes planifiées sur un disque additionnel
Mes filles commençant à être grandes, il me faut effectuer une sauvegarde régulières de leurs données, car ça rigole plus, il s’agit de leurs travaux de collège et lycée.. Leurs PC étant nomades, la sauvegarde réseau n’est plus suffisante, et surtout il faut qu’elles puissent en voir le résultat par elles mêmes ( d’ou l’utilisation de zenity )
Une partition dédiée ou un disque supplémentaire est monté dans /mnt/sauvegardes et j’y ai créé deux dossiers save.linux et save.windows (ben oui y’a aussi des jeux ! )
Le script effectue plusieurs vérifications ( espace disponible, présence des dossiers sources et destinations etc.) et affiche une fenêtre avec le résultat, elles sont donc informées.
Le script est ensuite planifié dans le crontab, en indiquant le display pour que zenity puisse afficher la fenêtre
# m h dom mon dow command #* * * * * DISPLAY=:0 zenity --info --text="Test zenity en crontab" 0 20 * * 3,7 DISPLAY=:0 /home/user/sauveg.linux
Le script « sauveg.linux » :
#!/bin/bash # #script de sauvegarde des dossiers importants du profil linux et du profil windows (tant qu'on y est..) # note : zenity requiert DISPLAY=:0 dans la commande crontab # Declarer la liste des dossiers dans le tableau ci dessous (photo Documents Musique Vidéos ) liste=(photo Documents Musique Vidéos) # profil windows : profilWin="/mnt/windows/Documents and Settings/user1" user="user" dossierDestination="save.linux" dossierWin="save.windows" montageDestination="/mnt/sauvegardes/" now=$(date +%s) # date en secondes log="/tmp/sauve.linux.user.log" erreur=0 echo "*** Sauvegarde Linux dans $montageDestination$dossierDestination" > $log date >> $log
#suppression log erreur si existe
if [ -e $log.$now.err ];then
rm $log.$now.err
fi
# tester espace disque disponible
# % espace disque occupé sur partitions locales :
#df -hl | awk '{ print $5 }'|grep %|cut -d% -f 1
#df -k | grep /dev | while read FS
df -k $montageDestination |grep /dev |while read FS
do
FS_NAME=`echo $FS | awk -F' ' '{print $6}'`
FS_SIZE=`echo $FS | awk -F' ' '{print $5}'|cut -d% -f1`
# echo "FS_NAME=$FS_NAME"
# echo "FS_SIZE=$FS_SIZE"
if [ $FS_SIZE -gt 98 ]; then #la partition de sauvegarde n'a plus assez de place!
date >> $log.$now.err
echo "ERREUR la partition $montageDestination n'a plus assez de place !"
echo "ERREUR la partition $montageDestination n'a plus assez de place !" >> $log
echo "\nERREUR la partition $montageDestination n'a plus assez de place !" >> $log.$now.err
erreur=$(( erreur +1 ))
fi
done
# on verifie qu'il y a bien le dossier de destination ( disque ok )
destination=$montageDestination$dossierDestination
if [ -d $destination ];then
echo "Le dossier destination $destination existe." >> $log
else
date >> $log.$now.err
echo "ERREUR le dossier destination $destination n'existe pas !"
echo "ERREUR le dossier destination $destination n'existe pas !" >> $log
echo "\nERREUR le dossier destination \n $destination \nn'existe pas !" >> $log.$now.err
erreur=$(( erreur +1 ))
fi
#idem pour win
destinationWin=$montageDestination$dossierWin
if [ -d $destinationWin ];then
echo "Le dossier destination $destinationWin existe." >> $log
else
date >> $log.$now.err
echo "ERREUR le dossier destination $destinationWin n'existe pas !"
echo "ERREUR le dossier destination $destinationWin n'existe pas !" >> $log
echo "\nERREUR le dossier destination \n $destinationWin \nn'existe pas !" >> $log.$now.err
erreur=$(( erreur +1 ))
fi
#copier les dossiers importants : ##############################################
if [ $erreur -eq "0" ];then
echo "Copie des dossiers ..."
echo "Copie des dossiers ..." >> $log
sleep 1
for i in "${liste[@]}"
do
#echo ~/$i;
#du -hs ~/$i;
# le dossier source existe-t-il ?
if [ ! -d ~/$i ];then #n'existepas
echo "le dossier source $i n'existe pas !"
echo "le dossier source $i n'existe pas !" >> $log
echo "\nle dossier source $i n'existe pas !" >> $log.$now.err
erreur=$(( erreur +1 ))
else # le dossier existe
# copie du dossier ...
#echo "cpier ~/$i $destination"
cp -ax ~/$i $destination # copie
#du -hs ~/$i >> $log # taille dossier
du -hs $destination/$i >> $log # taille dossier
dossiers=$dossiers" ("$(du -hs $destination/$i)")\n"
fi
done
fi #############################################################################
# sauvegarde profil windows //////////////////////////////////////////////////////
if [ $erreur -eq "0" ];then
if [ -d "$profilWin" ];then
echo "copie profil windows.. $profilWin"
echo "copie profil windows.." >> $log
#copie du profil....
cp -ax "$profilWin" $destinationWin # copie
#du -hs "$profilWin" >> $log # taille dossier
du -hs "$destinationWin" >> $log # taille dossier
dossiers=$dossiers" ("$(du -hs "$destinationWin")")\n"
else
echo "'$profilWin' n'existe pas !"
echo "'$profilWin' n'existe pas !" >> $log
echo "\nle dossier source '$profilWin' n'existe pas !" >> $log.$now.err
erreur=$(( erreur +1 ))
fi
fi # //////////////////////////////////////////////////////////////////////////////
# fin
date >> $log
echo " fin" >> $log
# si erreurs existent afficher un message :
if [ -e $log.$now.err ];then
erreur=$(( erreur +1 ))
echo "." >> $log.$now.err
fi
if [ $erreur -gt "0" ];then
# afficher fenetre alerte sur le bureau ?
texte=$( cat $log.$now.err )"\n"$(date +%HH:%Mmn)
zenity --warning --display=:0.0 --width=600 --title=SAUVEGARDE_ERREUR --text="$texte"
else
#tout est OK
heure=$(date +%HH:%Mmn) texte="$heure\nSauvegardes OK\n$dossiers" zenity --info --display=:0.0 --width=600 --title=SAUVEGARDE_OK --text="$texte" fi #archivage du log cp $log ~/sauvegarde.linux.log
Leave a comment