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