Portál AbcLinuxu, 26. dubna 2024 14:23


Dotaz: bash - podmienka - ktory sposob je lepsi

12.5.2014 13:08 GeorgeWH | skóre: 42
bash - podmienka - ktory sposob je lepsi
Přečteno: 360×
Odpovědět | Admin
zdravim.

pisem jednoduchy skript na zautomatizovanie zalohovania. jedna z veci, ktoru kontrolujem je, ci je disk na zalohovanie (vlozeny do e-sata docku) pripojeny. sposob ako to urobit je:

1. zisit to pomocou prikazov: napr.
if mount | grep -q "/mnt/backup-hdd"; then
   zalohuj
else
   chyba
fi
2. po uspesnom pripojeni hdd touchnut kontrolny subor
mount /mnt/backup-hdd && touch /var/tmp/backup-hdd-mounted
a potom testovat jeho existenciu
if [ -f /var/tmp/backup-hdd-mounted ]; then
    zalohuj
else
    chyba
fi
ktory z tychto sposobov je lepsi? ten prvy mi pride vhodnejsi pripade, ak vyskytne nejaka chyba a hdd sa odmountuje. v tom pripade podmienka nebude splnena. druhy sposob mi zase pride rychlejsi a cistejsi. vdaka.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

12.5.2014 13:27 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: bash - podmienka - ktory sposob je lepsi
Odpovědět | | Sbalit | Link | Blokovat | Admin
Mně to hlavně připadá jako řešení dvou zcela odlišných zadání. První varianta testuje, jestli už je ten filesystém přimountovaný, a pokud není, vyhodí chybu. Druhá varianta naopak skončí chybou, pokud už filesystém přimountovaný je (protože selže pokus přimountovat ho ještě jednou), a pokud není, zkusí ho přimountovat.
12.5.2014 13:40 GeorgeWH | skóre: 42
Rozbalit Rozbalit vše Re: bash - podmienka - ktory sposob je lepsi
hmmm... asi som to zle opisal. cely skript robi to, ze primountuje hdd, pocka, kym zbehne zalohovanie (hdd je vyexportovany cez nfs na druhy server, kde bezi samotne zalohovanie), potom disk unexportne, odmountuje a odstrani zo systemu (/sys/block/sdX/device/delete). skript bezi v crone - staci disk vlozit do docku a o vsetko sa postara automaticky skript. mam ho uz napisany. a hned prva vec, ktoru potrebujem urcite je, ci je disk uz primountovany alebo nie. a otazka je, ktory sposob je lepsi.
12.5.2014 14:49 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: bash - podmienka - ktory sposob je lepsi
Ten disk se montuje automaticky? Toho bych se trochu bál...
12.5.2014 15:12 cronin | skóre: 49
Rozbalit Rozbalit vše Re: bash - podmienka - ktory sposob je lepsi
V prvom kole by som skontroloval, či na očakávanom mount-pointe je niečo namountované.

V druhom kole by som skontroloval, či to, čo tam namountované je, je to, čo tam má byť, napr. podľa existencie nejakého "magic" súboru.

V treťom kole by som skontroloval práva na zápis, voľné miesto, a pod.

Až potom by som disk exportoval na účely zálohy.

Detaily celého riešenia sú stále trochu fuzzy.
12.5.2014 15:33 GeorgeWH | skóre: 42
Rozbalit Rozbalit vše Re: bash - podmienka - ktory sposob je lepsi
vsetko uz mam osetrene, vyskusane, funckne.

mam len dilemu, co pouzit na kontrolu, ci je disk mountnuty. napadli ma dva sposoby (mozno ich je viac):

1. zistim priamo pomocou mount a grep, ci je disk mountnuty:
if mount | grep -q 'mount_point'
2. alebo v casti skriptu, kde mountujem hdd, vytvorim po uspesnom moutnuti nejaky subor:
mount /nieco/niekde && touch /var/tmp/disk_bol_uspesne_pripojeny
a potom v casti skriptu, kde kontrolujem, ci disk je alebo nie disk pripojeny pouzijem
if [ -f /var/tmp/disk_bol_uspesne_pripojeny ]
3. alebo pouzijem
if grep -q 'mount_point' /proc/mounts
4. alebo
if grep -q 'mount_point' /etc/mtab
ktora z tychto metod je nalepsia a preco?
12.5.2014 15:54 GeorgeWH | skóre: 42
Rozbalit Rozbalit vše Re: bash - podmienka - ktory sposob je lepsi
teda vlastne uz 3 sposoby, kedze posledne 2 su v podstate rovnake.
12.5.2014 15:59 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: bash - podmienka - ktory sposob je lepsi
Já bych disk namontoval ručně ve skriptu a pokračoval v případě, že se mount povedl. Pak už bych to nekontroloval, proč.

Ale montoval bych jen disk s určitým UUID, aby se nestalo, že se přepíše úplně jiný disk.
12.5.2014 16:18 GeorgeWH | skóre: 42
Rozbalit Rozbalit vše Re: bash - podmienka - ktory sposob je lepsi
ok. tak este raz cele od znova :). zabudnime na nejake zalohovanie, mountovanie atd.

ZADANIE: napiste skript, ktory:

1. zisti, ci je pripojena particia /dev/sdb1 do adresara /mnt/sdb1

2. ak nie je pripojena, nech ju pripoji a skonci

3. ak je pripojena, nech vypise obsah adresara a skonci
12.5.2014 17:47 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: bash - podmienka - ktory sposob je lepsi
Přesně jak píšeš, možností máš spoustu, záleží, co je ti bližší. Já bych grepnul /proc/mount na partišnu a ten adresář s parametrem -q a kontroloval exit value. Ale někdo jiný by to dělal třeba jinak.

Je to fuk, řekl bych, že to zbytečně řešíš. Spíš si ohlídej, aby ti to nepřepsalo úplně jiný disk, až jej někdo nedopatřením strčí do té kolíbky. Ale to už jsem říkal...
12.5.2014 19:28 pavele
Rozbalit Rozbalit vše Re: bash - podmienka - ktory sposob je lepsi
Já třeba používám něco takového (máš tam dvě varianty):
if mountpoint -q "$mpointclient"
  then
    timestart=`date +"%Y%m%d%H%M"`
    echo "Start zalohy v $timestart"  >>/data/backup-cal/log-backup
    #nice -n 19 rsync -avx "$source1" "$BACKUP_TO"
    #Rdiff driven backup, rdiff itself makes log
    sudo /bin/ionice -c 3 sudo rdiff-backup --exclude '**.iso' "$source1" "$BACKUP_TO" >/dev/null
    #Chown rdiff-backup files
    #chown -R $USER:users /backup/$USER/rdiff-backup-data/
    #Removes older backups
    nice -n 19 sudo ionice -c 3 sudo rdiff-backup --remove-older-than 12M --force "$BACKUP_TO" >/dev/null 
    sudo umount.cifs "$mpointclient" >/dev/null || sudo umount.cifs -l "$mpointclient" >/dev/null
    timestop=`date +"%Y%m%d%H%M"`
    echo "Konec zalohy v $timestop"  >>/datalog_bin/backup-cal/log
  else
    sudo umount.cifs "$mpointclient" >/dev/null || sudo umount.cifs -l "$mpointclient" >/dev/null
    echo "Zaloha nebyla provedena v $cas" >>/data/backup-cal/log
fi
#Pokud je mpointclient odpojen a je prazdny, smaz mpointclient
if ! mountpoint -q "$mpointclient" && [ -z "$(ls -A $mpointclient/)" ]
  then
    rmdir "$mpointclient"
  else
     echo "Pripojny bod nebyl odpojen! v  $cas" >>/data/backup/log-backup
fi    
12.5.2014 22:04 GeorgeWH | skóre: 42
Rozbalit Rozbalit vše Re: bash - podmienka - ktory sposob je lepsi
mountpoint som nepoznal.

vdaka vsetkym za postrehy.
12.5.2014 21:55 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: bash - podmienka - ktory sposob je lepsi
Já si v tomto případě kontroluji i sériové číslo disku. ;-)
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
12.5.2014 22:07 GeorgeWH | skóre: 42
Rozbalit Rozbalit vše Re: bash - podmienka - ktory sposob je lepsi
ano, to robim aj ja - v podstate nim identifikujem spravny disk.
13.5.2014 02:03 blindp
Rozbalit Rozbalit vše Auto odpojeni
Odpovědět | | Sbalit | Link | Blokovat | Admin
Dobrý den, mám podobný problém.. Připojuji sdílenou složku windows pomocí mount.cifs na serveru ubuntu. V php potom testuji, jestli je přípojný bod prázdný nebo ne, vše funguje jak má, ale když počítač s windows vypnu tak při testování systém na pár vteřin nereaguje a potom správně vrátí, že přípojný bod je prázdný. Jak se zbavit ale toho vytuhnutí? Testovat skriptem na pozadí jestli je přípojný bod prázdný, ale neměl by ->odpoj nebo existuje nějaká volba při mount.cifs která to udělá sama? díky.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.