Przestać blokować uszkodzony katalog NFS przed zablokowaniem katalogu?

17

Mam nieco ciekawą konfigurację: serwer z wieloma zdalnymi serwerami NFS zamontowanymi w folderze, a następnie ten folder jest ponownie eksportowany przez Sambę. Pomyśl o tym jak o udostępnianym proxy, przechowującym wszystkie udostępnione foldery w jednym miejscu.

Mój problem polega jednak na tym, że za każdym razem, gdy jeden z montowań ulegnie awarii (serwer zrestartowany, usługa zrestartowana, zewnętrzny dysk twardy, który eksportował serwer usunięty itp.) Każda próba odczytania bloków montowania na zawsze. Oznacza to również, że działanie lsw tym katalogu zawiesza się, a użytkownicy łączący się przez Sambę również się zawieszają. Spowodowało to również kilkakrotne zablokowanie jednego z moich zadań cron, co prawie zawiesiło serwer, ponieważ miał setki zablokowanych procesów. Staje się to bardzo denerwujące, ponieważ zwykle muszę przywołać terminal, który nie czeka na lszakończenie (nie mogę go anulować), uruchomić for i in *; do sudo umount -l -f $i; done;, mieć nadzieję, że działa, naprawić problem, a następnie zamontować wszystko ponownie.

Czy istnieje sposób na zamontowanie udziału NFS z zastrzeżeniem, że jeśli połączenie z jakiegoś powodu nie powiedzie się (najlepiej z okresem ponownej próby), to samo podłączenie się odinstaluje lub przynajmniej nie blokuje?

TheLQ
źródło
Czy możesz pisać /etc/fstab?
Karlson,

Odpowiedzi:

19

Zwykle podczas montowania NFS dobrze jest ustawić flagi podobne do tych:

bg,intr,soft
   bg      If  the  first  NFS  mount  attempt times out, retry the mount in the 
           background.  After a mount operation is backgrounded, all subsequent mounts
           on the same NFS  server  will  be  backgrounded immediately, without first
           attempting the mount.  A missing mount point is treated as a timeout, to
           allow for nested NFS mounts.
   soft    If  an  NFS  file operation has a major timeout then report an I/O error
           to the calling program.  The default is to continue retrying NFS file
           operations indefinitely.
   intr    If  an  NFS  file  operation  has  a major timeout and it is hard mounted,
           then allow signals to interupt the file operation and cause it to return
           EINTR to the calling program.  The default is to not allow file operations
           to be interrupted.

Możesz dodatkowo ustawić:

timeo=5,retrans=5,actimeo=10,retry=5

co powinno pozwolić limitowi czasu NFS na przekroczenie limitu czasu i uniemożliwić dostęp do katalogu, jeśli serwer NFS przerwie połączenie, zamiast czekać na ponowienie prób.

Spójrz na ten link, aby uzyskać więcej informacji o opcjach montowania NFS

Karlson
źródło
używanie tylko bg, intr, soft wciąż pozostawia 120 sekund zawieszenia w Fedorze 20. Ale dodanie timeo = 5, retrans = 5, actimeo = 10, retry = 5 sprawia, że ​​jest to przyjemne i szybkie. Dzięki!
Greg Sheremeta
4
„Opcja montowania intr / nointr jest przestarzała po jądrze 2.6.25. Tylko SIGKILL może przerwać oczekującą operację NFS na tych jądrach, a jeśli jest określona, ​​ta opcja montowania jest ignorowana, aby zapewnić zgodność wsteczną ze starszymi jądrami.” „Ta opcja jest zapewniona dla kompatybilności wstecznej. Jest ignorowana po jądrze 2.6.25.”
David C. Bishop
1
@ DavidC.Bishop, skąd pochodzi ten cytat? Czy możesz podać link? Dzięki.
becko
2
@becko: Cytat SIGKILL pochodzi ze strony podręcznika nfs (po prostu wyszukaj „nointr”). Nowsze wersje, takie jak ta w moim systemie, teraz po prostu czytają „Ta opcja zapewnia kompatybilność wsteczną. Jest ona ignorowana po jądrze 2.6.25”. linky .
David C. Bishop,