{"id":636,"date":"2011-05-05T16:25:40","date_gmt":"2011-05-05T14:25:40","guid":{"rendered":"http:\/\/smolensk.homelinux.org\/?p=636"},"modified":"2014-05-18T11:42:55","modified_gmt":"2014-05-18T09:42:55","slug":"sauvegardes-planifiees-sur-un-disque-additionnel","status":"publish","type":"post","link":"https:\/\/2d6.fr\/?p=636","title":{"rendered":"Sauvegardes planifi\u00e9es sur un disque additionnel"},"content":{"rendered":"<p>Mes filles commen\u00e7ant \u00e0 \u00eatre grandes, il me faut effectuer une sauvegarde r\u00e9guli\u00e8res de leurs donn\u00e9es, car \u00e7a rigole plus, il s&rsquo;agit de leurs travaux de coll\u00e8ge et lyc\u00e9e.. Leurs PC \u00e9tant nomades, la sauvegarde r\u00e9seau n&rsquo;est plus suffisante, et surtout il faut qu&rsquo;elles puissent en voir le r\u00e9sultat par elles m\u00eames ( d&rsquo;ou l&rsquo;utilisation de <em>zenity<\/em> )<\/p>\n<p>Une partition d\u00e9di\u00e9e ou un disque suppl\u00e9mentaire est mont\u00e9 dans<em> \/mnt\/sauvegardes<\/em> et j&rsquo;y ai cr\u00e9\u00e9 deux dossiers\u00a0 <em>save.linux<\/em> et <em>save.windows<\/em> (ben oui y&rsquo;a aussi des jeux ! )<\/p>\n<p>Le script effectue plusieurs v\u00e9rifications ( espace disponible,\u00a0 pr\u00e9sence des dossiers sources et destinations etc.) et affiche une fen\u00eatre avec le r\u00e9sultat, elles sont donc inform\u00e9es.<\/p>\n<p>Le script est ensuite planifi\u00e9 dans le crontab, en indiquant le display pour que zenity puisse afficher la fen\u00eatre<\/p>\n<pre># m h\u00a0 dom mon dow\u00a0\u00a0 command\r\n#* * * * * DISPLAY=:0 zenity --info --text=\"Test zenity en crontab\"\r\n0 20 * * 3,7 DISPLAY=:0 \/home\/user\/sauveg.linux\r\n<\/pre>\n<p>&nbsp;<\/p>\n<h4>Le script \u00ab\u00a0sauveg.linux\u00a0\u00bb :<\/h4>\n<p>&nbsp;<\/p>\n<pre>#!\/bin\/bash\r\n#\r\n#script de sauvegarde des dossiers importants du profil linux et du profil windows (tant qu'on y est..)\r\n# note :\u00a0 zenity requiert DISPLAY=:0 dans la commande crontab\r\n\r\n# Declarer la liste des dossiers dans le tableau ci dessous (photo Documents Musique Vid\u00e9os )\r\nliste=(photo Documents Musique Vid\u00e9os)\r\n\r\n# profil windows :\r\nprofilWin=\"\/mnt\/windows\/Documents and Settings\/user1\"\r\n\r\nuser=\"user\"\r\n\r\ndossierDestination=\"save.linux\"\r\ndossierWin=\"save.windows\"\r\nmontageDestination=\"\/mnt\/sauvegardes\/\"\r\n\r\nnow=$(date +%s) # date en secondes\r\nlog=\"\/tmp\/sauve.linux.user.log\"\r\nerreur=0\r\n\r\necho \"*** Sauvegarde Linux dans $montageDestination$dossierDestination\" &gt; $log\r\ndate &gt;&gt; $log<\/pre>\n<pre>#suppression log erreur si existe\r\nif [ -e $log.$now.err ];then\r\n rm $log.$now.err\r\nfi\r\n\r\n# tester espace disque disponible\r\n# % espace disque occup\u00e9 sur partitions locales :\r\n#df -hl | awk '{ print $5 }'|grep %|cut -d% -f 1\r\n#df -k | grep \/dev | while read FS\r\ndf -k $montageDestination |grep \/dev |while read FS\r\ndo\r\nFS_NAME=`echo $FS | awk -F' ' '{print $6}'`\r\nFS_SIZE=`echo $FS | awk -F' ' '{print $5}'|cut -d% -f1`\r\n#\u00a0\u00a0\u00a0 echo \"FS_NAME=$FS_NAME\"\r\n#\u00a0\u00a0\u00a0 echo \"FS_SIZE=$FS_SIZE\"\r\n\r\nif [ $FS_SIZE -gt 98 ]; then #la partition de sauvegarde n'a plus assez de place!\r\n date &gt;&gt; $log.$now.err\r\n echo \"ERREUR la partition $montageDestination n'a plus assez de place !\"\r\n echo \"ERREUR la partition $montageDestination n'a plus assez de place !\" &gt;&gt; $log\r\n echo \"\\nERREUR la partition $montageDestination n'a plus assez de place !\" &gt;&gt; $log.$now.err\r\n erreur=$(( erreur +1 ))\r\nfi\r\ndone\r\n<\/pre>\n<pre># on verifie qu'il y a bien le dossier de destination ( disque ok )\r\ndestination=$montageDestination$dossierDestination\r\nif [ -d $destination ];then\r\n echo \"Le dossier destination $destination existe.\" &gt;&gt; $log\r\nelse\r\n date &gt;&gt; $log.$now.err\r\n echo \"ERREUR le dossier destination $destination n'existe pas !\"\r\n echo \"ERREUR le dossier destination $destination n'existe pas !\" &gt;&gt; $log\r\n echo \"\\nERREUR le dossier destination \\n $destination \\nn'existe pas !\" &gt;&gt; $log.$now.err\r\n erreur=$(( erreur +1 ))\r\nfi\r\n#idem pour win\r\ndestinationWin=$montageDestination$dossierWin\r\nif [ -d $destinationWin ];then\r\n echo \"Le dossier destination $destinationWin existe.\" &gt;&gt; $log\r\nelse\r\n date &gt;&gt; $log.$now.err\r\n echo \"ERREUR le dossier destination $destinationWin n'existe pas !\"\r\n echo \"ERREUR le dossier destination $destinationWin n'existe pas !\" &gt;&gt; $log\r\n echo \"\\nERREUR le dossier destination \\n $destinationWin \\nn'existe pas !\" &gt;&gt; $log.$now.err\r\n erreur=$(( erreur +1 ))\r\nfi\r\n\r\n#copier les dossiers importants : ##############################################\r\nif [ $erreur -eq \"0\" ];then\r\n echo \"Copie des dossiers ...\"\r\n echo \"Copie des dossiers ...\" &gt;&gt; $log\r\n sleep 1\r\n for i in \"${liste[@]}\"\r\n do\r\n #echo ~\/$i;\r\n #du -hs ~\/$i;\r\n # le dossier source existe-t-il ?\r\n if [ ! -d ~\/$i ];then #n'existepas\r\n echo \"le dossier source $i n'existe pas !\"\r\n echo \"le dossier source $i n'existe pas !\" &gt;&gt; $log\r\n echo \"\\nle dossier source $i n'existe pas !\" &gt;&gt; $log.$now.err\r\n erreur=$(( erreur +1 ))\r\n else\u00a0\u00a0\u00a0 # le dossier existe\r\n # copie du dossier ...\r\n #echo \"cpier ~\/$i $destination\"\r\n cp -ax ~\/$i $destination # copie\r\n #du -hs ~\/$i &gt;&gt; $log # taille dossier\r\n du -hs $destination\/$i &gt;&gt; $log # taille dossier\r\n dossiers=$dossiers\" (\"$(du -hs $destination\/$i)\")\\n\"\r\n fi\r\n done<\/pre>\n<pre>fi #############################################################################\r\n\r\n# sauvegarde profil windows \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\nif [ $erreur -eq \"0\" ];then\r\n if [ -d \"$profilWin\" ];then\r\n echo \"copie profil windows.. $profilWin\"\r\n echo \"copie profil windows..\" &gt;&gt; $log\r\n #copie du profil....\r\n cp -ax \"$profilWin\" $destinationWin # copie\r\n #du -hs \"$profilWin\" &gt;&gt; $log # taille dossier\r\n du -hs \"$destinationWin\" &gt;&gt; $log # taille dossier\r\n dossiers=$dossiers\" (\"$(du -hs \"$destinationWin\")\")\\n\"\r\n else\r\n echo \"'$profilWin' n'existe pas !\"\r\n echo \"'$profilWin' n'existe pas !\" &gt;&gt; $log\r\n echo \"\\nle dossier source '$profilWin' n'existe pas !\" &gt;&gt; $log.$now.err\r\n erreur=$(( erreur +1 ))\r\n fi\r\nfi # \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n\r\n# fin\r\ndate &gt;&gt; $log\r\necho \" fin\" &gt;&gt; $log\r\n\r\n# si erreurs existent afficher un message :\r\nif [ -e $log.$now.err ];then\r\n erreur=$(( erreur +1 ))\r\n echo \".\" &gt;&gt; $log.$now.err\r\nfi\r\n\r\nif [ $erreur -gt \"0\" ];then\r\n # afficher fenetre alerte sur le bureau ?\r\n texte=$( cat $log.$now.err )\"\\n\"$(date +%HH:%Mmn)\r\n zenity --warning --display=:0.0 --width=600 --title=SAUVEGARDE_ERREUR --text=\"$texte\"\r\nelse\r\n #tout est OK<\/pre>\n<pre>heure=$(date +%HH:%Mmn)\r\n texte=\"$heure\\nSauvegardes OK\\n$dossiers\"\r\n zenity --info --display=:0.0 --width=600 --title=SAUVEGARDE_OK --text=\"$texte\"\r\nfi\r\n#archivage du log\r\ncp $log ~\/sauvegarde.linux.log\r\n<\/pre>\n<h4>mat pell&rsquo;zo !<\/h4>\n","protected":false},"excerpt":{"rendered":"<p><img src=http:\/\/2d6.fr\/acw\/linux20.png> Sauvegardes sur un 2e ou 3e disque &#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,5],"tags":[97,99],"class_list":["post-636","post","type-post","status-publish","format-standard","hentry","category-linux","category-sauvegarde","tag-linux","tag-sauvegarde"],"_links":{"self":[{"href":"https:\/\/2d6.fr\/index.php?rest_route=\/wp\/v2\/posts\/636","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/2d6.fr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/2d6.fr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/2d6.fr\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/2d6.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=636"}],"version-history":[{"count":0,"href":"https:\/\/2d6.fr\/index.php?rest_route=\/wp\/v2\/posts\/636\/revisions"}],"wp:attachment":[{"href":"https:\/\/2d6.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=636"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/2d6.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=636"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/2d6.fr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=636"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}