Portál AbcLinuxu, 27. května 2024 10:19


Dotaz: Automatické připojení síťových disků

16.3.2013 09:32 tom
Automatické připojení síťových disků
Přečteno: 1101×
Odpovědět | Admin
Ahoj, potřeboval bych poradit s nastavením automatického připojování sítových disků.

Mám několik notebooků, které se mohou nacházet doma, v práci nebo kdekoliv jinde. Doma i v práci jsou NASy a je možné připojovat sdílení přes Sambu.

Očekávané chování je takové, že je-li některý s NASů dostupný, automaticky se připojí některá sdílení do zadané složky. Případně by stačilo, aby se připojil až ve chvíli, kdy do dané složky vstoupím.

Zkoušel jsem několik postupů. Jednak fstab, jenže tam dochází k připojení jen při startu počítače. Poté autofs, který sdílení připojí automaticky, pokud do dané složky vstoupím (popř. se spustí zálohování Backintime, který tam chce zapisovat). Ten by i vyhovoval, kdyby se nestávalo to, že při uspání počítače se disk neodpojí (např. proto, že jej v tu chvíli něco využívá, většinou otevřený Krusader nebo často i nepomuk nebo Backintime) a při vzbuzení se pak zasekne Plasma, popř. další aplikace. Navíc, připojení docela dlouhou dobu trvá (ale to by nebyl tak velký problém). Zkoušel jsem si i napsal vlastní skript, který dělal mount při připojení k síti a umount při odpojení, jenže právě to odpojování moc nefungovalo. V podstatě bych rád, aby se odpojení nějak vynutilo (jenže ani umount -fl často nepomůže), když už to sdílení není dostupné.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

16.3.2013 11:53 Petr MOTEJLEK | skóre: 6
Rozbalit Rozbalit vše Re: Automatické připojení síťových disků
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ahoj,

Jsi trochu v začarovaném kruhu ;).

Pokud se nejdříve budeme bavit o naprosto ideálních podmínkách, přijde mi tvůj mount/umount skript při připojení k síti/odpojení od sítě asi nejlepší řešení, protože tak máš plně pod kontrolou, kdy se co bude připojovat/odpojovat. Pokud ti neprochází umount -fl (protože něco pravděpodobně drží zámek (i.e. má otevřený file descriptor někde tam, co se pokoušíš odpojit) - tady ti nepomůže ani force, ani cokoliv ;)). Koukni se na prográmek fuser, ten umí dělat to, že ti pro daný mount point najde všechny procesy, co si někde v něm drří file descriptor. Mimo toho, že ty procesy najde, je umí taky ustřelit (což je to, co budeš muset udělat před tím, než se pokusíš udělat umount). Píšu to rychle, takže to moc neřeší chybové use casy, ale ten umount skript bych koncipoval asi takto. Funguje tak, že se nejdřív pokusí udělat běžný umount - když projde, tak skončí, protože není co dál dělat. Když neprojde, tak se spustí fuser - parametr -m určuje soubor (v našem případě adresář, resp. mount point), parametr -k říká zabít, -s je tiše (takže se nic zbytečně nevypisuje) a -INT je zabít signálem INT, -TERM zabít signálem TERM a -KILL zabít signálem KILL. Proč po řadě zabíjím procesy nejdřív INT, pak TERM a pak KILL? Protože INT je v podstatě shodný s tím, když do nějakého konzolového prográmku pošleš Ctrl-C, a pro prográmek je to to nejlepší, protože má dost času, aby zavřel svoje file descriptory, vyčistila se paměť, atd. Pokud by se náhodou stalo, že nějaké procesy nebudou na INT reagovat (na něco čekají, atd.), dostanou TERM (ten je trochu hrubší než INT, ale pořád docela v pohodě, protože procesy pořád mají čas si všechno zavřít a vyčistit). No a pokud i přesto zůstatnou nějaké procesy, odstřelí se signálem KILL, který na nic nečeká a proces prostě odstřeli (tohle je dobé používat obravdu jako rezervní řešení, protože ti to bude nechávat bordel v paměti, ve file descriptorech, atd). Nakonec se opět pokusíme o umount - ten by měl už proběhnout bez chyb.

#!/bin/bash

MOUNTPOINT=/mnt/myNAS/

umount "${MOUNTPOINT}" && exit 0 sleep 1s

fuser -m "${MOUNTPOINT}" -k -s -INT sleep 1s

fuser -m "${MOUNTPOINT}" -k -s -TERM sleep 1s

fuser -m "${MOUNTPOINT}" -k -s -KILL sleep 1s

umount /mnt/myNAS

exit $?

No a teď už k těm neúplně ideálním podmínkám, na které si je potřeba dát pozor. Pokud se ti například stane, že ztratíš spojení s NASem a nějaký proces se pokusí z něho číst/zapsat na něj, dostane se nejspíš do Waiting for I/O stavu (ze kterého se prakticky nejde dostat jinak, než nějak obnovit to spojení ;)). Jde o to, že ten proces prostě čeká na interrupt z toho zařízení, ze kterého zrovna čte/na které zapisuje (ten pravděpodobně nikdy nepřijde, protože zařízení nereaguje), a žádný jiný signál nepřijme... V tule chvíli je nejlepší PC prostě vypnout ;). Tohle by se ti mělo stávat minimálně, ale měl bys o tom vědět.
16.3.2013 11:56 Petr MOTEJLEK | skóre: 6
Rozbalit Rozbalit vše Re: Automatické připojení síťových disků
Ahoj,

Koukám, že se mi to trochu rozhodilo. Přikládám skript znovu, teď snad hezčeji ;).

#!/bin/bash

MOUNTPOINT=/mnt/myNAS/

umount "${MOUNTPOINT}" && exit 0
sleep 1s

fuser -m "${MOUNTPOINT}" -k -s -INT
sleep 1s

fuser -m "${MOUNTPOINT}" -k -s -TERM
sleep 1s

fuser -m "${MOUNTPOINT}" -k -s -KILL
sleep 1s

umount "${MOUNTPOINT}"

exit $?
17.3.2013 21:07 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Automatické připojení síťových disků
Netestoval jsem to, ale můj mount.cifs(8) tvrdí, že implementuje soft, a dokonce je to výchozí nastavení. Pak je jen otázka, jaký je časový limit. Jestli standardní TCP, tak to se trochu načeká.

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.