#! /bin/bash # #Provadi zalohovani systemu "Michaluv notebook pro chude" na lokalni disk pocitace v praci nebo doma. # #(c) Michal Kandrac 2007 # # Ve skriptu predpokladam, ze: # - oddil hda2 na internim disku pocitace ma prava nastavena tak, ze jej muze pripojovat uzivatel, # ktery skript spustil, # - na oddile jsou vytvoreny adresare pro jednotlive zalohovane oddily, tedy sda1, sda2 atd. # - tyto adresare maji pravo k otevreni a zapisu prislusnym uzivatelem. # - skript je spusten ze systemu nainstalovaneho na oddile sda2, a ze mimo tento oddil jsou pripojeny # jeste oddily sda3 jako /home a sda6 jako /home/michal/media. Skript tyto oddily nepripojuje a # nekontroluje opravneni ke cteni. # Pokud oddil hda2 neni pripojen, pokusi se jej skript pripojit, v pripade uspesneho pripojeni pokracuje. # Pokud oddily sda1 a sda5 nejsou pripojeny, pokusi se je skript pripojit, v pripade uspesneho pripojeni # pokracuje a po ukonceni tyto disky odpoji stejne jako oddil hda2. # function test_pripojeni_hda2 () { #Overime, zda je zalozni disk pripojen, pokud neni provede se pokus o pripojeni. echo -n Kontroluji připojení diskového oddílu hda2......................... if grep "hda2" /proc/mounts > /dev/null then : #echo Diskovy oddil hda2 je pripojen. else # echo Diskovy oddil hda2 neni pripojen, zkusime ho pripojit... if mount /dev/hda2 > /dev/null then : #echo Diskovy oddil hda2 je pripojen. else echo Nepodařilo se připojit diskový oddíl hda2, někde je chyba. return 1 fi fi echo OK } function test_pripojeni_sdaX () { #Overeni, zda jsou pripojeny i dalsi disky, ktere maji byt zalohovany echo -n Kontroluji připojení oddílu sda1 a sda5............................ for x in sda1 sda5; do if mount | grep $x > /dev/null then : #echo $x je pripojen else # echo $x neni pripojen, zkusime ho pripojit... if mount /dev/$x > /dev/null then : #echo je to ok, $x pripojen else echo Připojení $x se nepodařilo. return 1 fi fi done echo OK } function test_adresaru_prav () { echo -n Kontroluji existenci cílových adresářů a oprávnění k zápisu........ for x in sda1 sda2 sda3 sda5 sda6; do if [ -d /mnt/hda2/$x -a -x /mnt/hda2/$x -a -w /mnt/hda2/$x ] then : #echo Adresar $x existuje, je spustitelny a mame opravneni k zapisu else echo Adresář $x neexistuje nebo nemáme práva pro zápis. return 1 fi done echo OK } function odpojeni_oddilu () { echo -n Odpojuji diskove oddily sda1, sda5 a hda2.......................... sync for x in sda1 sda5 hda2; do if umount /mnt/$x then : else echo Odpojení disku $x se nezdařilo. return 1 fi done echo OK } function co_synchronizovat () { echo "Chceš synchronizovat vše [f|F], nebo jen /home [h|H]?" echo "Zadej f/F nebo h/H: " while true do read CO_SYNCHRONIZOVAT case "$CO_SYNCHRONIZOVAT" in f | F | h | H ) return 0;; * ) echo "Spatne zadani - zadej f/F nebo h/H: " ;; esac done } function synchronizuj () { echo "Datum: $(date)" >> /home/michal/.msync.log if [ -e /home/michal/.msync_bug.log ] then rm /home/michal/.msync_bug.log fi # Výběr z možností synchronizovat vše co lze nebo jen /home. co_synchronizovat if [[ "$CO_SYNCHRONIZOVAT" == [hH] ]] then echo "Synchronizován jen adresář /home." >> /home/michal/.msync.log echo -e "Zadáno bylo h|H => bude synchronizován jen adresář /home a adresář /home/michal/media/photo.\nZbývající obsah adresáře /home/michal/media nebude zálohován." echo "Bude to chvíli trvat..." rsync -avh --delete --exclude=/michal/media/ --exclude=/michal/.opera/cache4/ --exclude=/michal/.opera/widgets/ --exclude=/michal/.mozilla/firefox/u07ze4n9.default/ /home/ /mnt/hda2/sda3/ 2>>/home/michal/.msync_bug.log rsync -avh --delete /home/michal/media/photo/ /mnt/hda2/sda6/photo/ 2>>/home/michal/.msync_bug.log else echo "Synchronizováno fšecko." >> /home/michal/.msync.log echo -e "Zadáno bylo f|F => bude synchronizován adresář /home, adresář /home/michal/media/photo/ a ./install/,\nkořenový adresář root a obsah diskových oddílů /dev/sda1 a /dev/sda5." echo "Bude to trvat docela dlouhou chvíli..." rsync -avh --delete --exclude=/michal/media/ --exclude=/michal/.opera/cache4/ --exclude=/michal/.opera/widgets/ --exclude=/michal/.mozilla/firefox/u07ze4n9.default/ /home/ /mnt/hda2/sda3/ 2>>/home/michal/.msync_bug.log rsync -avh --delete /home/michal/media/photo/ /mnt/hda2/sda6/photo/ 2>>/home/michal/.msync_bug.log rsync -avh --delete /home/michal/media/install/ /mnt/hda2/sda6/install/ 2>>/home/michal/.msync_bug.log # Nevim proc tady musi byt rsyncovani adresare / uvedeno takto, ale prikaz rsync / /kam # nefungoval rsync -avh --delete /bin/ /mnt/hda2/sda2/bin/ 2>>/home/michal/.msync_bug.log rsync -avh --delete /boot/ /mnt/hda2/sda2/boot/ 2>>/home/michal/.msync_bug.log rsync -avh --delete /dev/ /mnt/hda2/sda2/dev/ 2>>/home/michal/.msync_bug.log rsync -avh --delete /etc/ /mnt/hda2/sda2/etc/ 2>>/home/michal/.msync_bug.log rsync -avh --delete /lib/ /mnt/hda2/sda2/lib/ 2>>/home/michal/.msync_bug.log rsync -avh --delete /opt/ /mnt/hda2/sda2/opt/ 2>>/home/michal/.msync_bug.log rsync -avh --delete /root/ /mnt/hda2/sda2/root/ 2>>/home/michal/.msync_bug.log rsync -avh --delete /sbin/ /mnt/hda2/sda2/sbin/ 2>>/home/michal/.msync_bug.log rsync -avh --delete /tmp/ /mnt/hda2/sda2/tmp/ 2>>/home/michal/.msync_bug.log rsync -avh --delete /usr/ /mnt/hda2/sda2/usr/ 2>>/home/michal/.msync_bug.log rsync -avh --delete /var/ /mnt/hda2/sda2/var/ 2>>/home/michal/.msync_bug.log rsync -avh --delete /mnt/sda1/ /mnt/hda2/sda1/ 2>>/home/michal/.msync_bug.log rsync -avh --delete /mnt/sda5/ /mnt/hda2/sda5/ 2>>/home/michal/.msync_bug.log fi if [ -s /home/michal/.msync_bug.log ] then echo "Při synchronizaci se vyskytly chyby. Výpis chyb:" echo "Při synchronizaci se vyskytly chyby." >> /home/michal/.msync.log echo "Ukončeno: $(date)" >> /home/michal/.msync.log cat /home/michal/.msync_bug.log echo "Výpis chyb byl uložen do souboru /home/michal/.msync_bug.log." else echo "Synchronizace proběhla bez chybových hlášení." echo "Synchronizace proběhla bez chybových hlášení." >> /home/michal/.msync.log echo "Ukončeno: $(date)" >> /home/michal/.msync.log fi } echo -e "\n SKRIPT PRO ZÁLOHOVÁNÍ MICHALOVA NOTEBOOKU PRO CHUDÉ\n" # Overeni, zda je skript spusten pod rootem x=$(whoami) if [ $x != root ] then echo Skript musí být spuštěn pod uživatelem root. echo Synchronizace nebyla provedena. else #Vycucnuti MAC adresy prvniho ethernetoveho rozhrani (pouzito tez ve skriptu "muj_start2"): MACaddr=$(ip address list | grep -A 1 'eth0' | grep 'link\/ether' | sed 's/\s*link\/ether\ //' | sed 's/\ brd.*//' ); # A podle toho, na kterem pocitaci je skript spusten, provedou se prikazy. Zatim v podstate zcela # stejne az na odlisny zapis do logu, ale mozna se to casem zmeni, tak je to zde pripravene. if [ $MACaddr = '11:02:3f:ba:1d:ca' ] # Je to MAC adresa Elizabeth?00:02:3f:ba:1d:ca then echo MAC adresa patří počítači Elizabeth, jsme tedy doma. if test_pripojeni_hda2 then if test_adresaru_prav then if test_pripojeni_sdaX then echo Provedou se příkazy pro synchronizaci. echo -e "\nSynchronizace na počítači Elizabeth:" >> /home/michal/.msync.log synchronizuj # pokud se nejak zmeni soucasny stav, kdy je na obou # pocitacich shodne k zalohovani pouzit oddil hda2, # bude nutne tuto funkci rozdelit na dve, prozatim # staci takto. odpojeni_oddilu else echo Synchronizace nebyla provedena. fi else echo Synchronizace nebyla provedena. fi else echo Synchronizace nebyla provedena. fi elif [ $MACaddr = '00:07:e9:0d:86:16' ] # Nebo je to MAC adresa pocitace v praci? then echo MAC adresa patří počítači v práci, asi budeme muset makat :-\( if test_pripojeni_hda2 then if test_adresaru_prav then if test_pripojeni_sdaX then echo Provedou se příkazy pro synchronizaci. echo -e "\nSynchronizace na počítači v práci:" >> /home/michal/.msync.log synchronizuj # pokud se nejak zmeni soucasny stav, kdy je na obou # pocitacich shodne k zalohovani pouzit oddil hda2, # bude nutne tuto funkci rozdelit na dve, prozatim # staci takto. odpojeni_oddilu else echo Synchronizace nebyla provedena. fi else echo Synchronizace nebyla provedena. fi else echo Synchronizace nebyla provedena. fi else echo Ha! Neznámý počítač, tady to nepůjde, leda bychom přepsali majiteli nějaký disk. echo Synchronizace nebyla provedena. fi fi