Unterbrochene NFS-Bereitstellungen daran hindern, ein Verzeichnis zu sperren?

17

Ich habe ein etwas interessantes Setup: Ein Server mit mehreren entfernten NFS-Servern, die in einem Ordner gemountet sind, wobei dieser Ordner dann über Samba erneut exportiert wird. Stellen Sie sich das als einen Freigabe-Proxy vor, der alle freigegebenen Ordner an einem Ort aufbewahrt.

Mein Problem ist jedoch, dass jedes Mal, wenn einer der Mount-Blöcke ausfällt (Server neu gestartet, Dienst neu gestartet, externe Festplatte, die der Server exportiert hat, entfernt usw.), jeder Versuch, die Mount-Blöcke für immer zu lesen. Dies bedeutet auch, dass das Ausführen lsin diesem Verzeichnis einfriert und Benutzer, die über Samba eine Verbindung herstellen, ebenfalls einfrieren. Dies hat auch dazu geführt, dass einer meiner Cron-Jobs einige Male blockiert hat, wodurch der Server fast abgestürzt wäre, weil er Hunderte blockierter Prozesse hatte. Dies wird sehr ärgerlich, da ich normalerweise ein Terminal aufrufen muss , das nicht darauf wartet ls, beendet zu werden (es kann nicht for i in *; do sudo umount -l -f $i; done;abgebrochen werden ), laufe , hoffe, dass es funktioniert, behebe das Problem und mounte dann alles neu.

Gibt es eine Möglichkeit, eine NFS-Freigabe zu mounten, wenn die Verbindung aus irgendeinem Grund fehlschlägt (vorzugsweise mit einer Wiederholungsperiode), dann wird das Mounten selbst abgebrochen oder zumindest nicht blockiert?

TheLQ
quelle
Kannst du posten /etc/fstab?
Karlson

Antworten:

19

Normalerweise ist es beim Mounten von NFS ratsam, Flags wie folgt zu setzen:

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.

Sie können zusätzlich einstellen:

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

Dies sollte dem NFS-Mount eine Zeitüberschreitung ermöglichen und den Zugriff auf das Verzeichnis unmöglich machen, wenn der NFS-Server die Verbindung beendet, anstatt erneut zu warten.

Weitere Informationen zu den NFS-Mount-Optionen finden Sie unter diesem Link

Karlson
quelle
Wenn Sie nur bg, intr, soft verwenden, bleibt Fedora 20 immer noch 120 Sekunden lang hängen. Wenn Sie jedoch timeo = 5, retrans = 5, actimeo = 10, retry = 5 hinzufügen, ist dies angenehm und schnell. Vielen Dank!
Greg Sheremeta
4
"Die Mount-Option intr / nointr ist nach Kernel 2.6.25 veraltet. Nur SIGKILL kann einen ausstehenden NFS-Vorgang auf diesen Kerneln unterbrechen. Wenn angegeben, wird diese Mount-Option ignoriert, um die Abwärtskompatibilität mit älteren Kerneln zu gewährleisten." "Diese Option wird aus Gründen der Abwärtskompatibilität bereitgestellt. Sie wird nach Kernel 2.6.25 ignoriert."
David C. Bishop
1
@ DavidC.Bishop woher kommt das Zitat? Kannst du einen Link geben? Vielen Dank.
Becko
2
@becko: Das SIGKILL-Zitat stammt aus der nfs-Manpage (suche einfach nach 'nointr'). Die neueren Versionen, wie die auf meinem System, lesen jetzt einfach "Diese Option wird aus Gründen der Abwärtskompatibilität bereitgestellt. Sie wird nach Kernel 2.6.25 ignoriert." linky .
David C. Bishop