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

mat pell’zo !

Leave a comment