So finden Sie heraus, auf welchem ​​Client eine Dateisperre für NFS vorliegt

556
Peter Scott

Wir haben einen Centos 7-Cluster, der von NFS4 unterstützt wird. Es gibt einige Dateien, die Flock mit LOCK_EX-Blöcken ausführen (und mit LOCK_NB eine Ressource zurückgibt, die vorübergehend nicht verfügbar ist). Nur eine Handvoll Dateien, und das sind alles Dateien, für die ein Benutzer einen Grund zur Flock () hatte.

Ergo hat etwas diese Dateien gesperrt. Aber wer? Wir haben versucht, lsof auf jedem Computer im Cluster auszuführen, und es kam nichts dazu, aber möglicherweise gibt es einige Clients, von denen wir nichts wissen. Das lslocks-Programm hilft nicht.

Wie kann ich herausfinden, welche Maschine, ganz zu schweigen von welchem ​​Prozess, die Sperre hat?
Oder ist es möglich, dass NFS verwirrt ist und der Meinung ist, dass es eine Sperre gibt, auch wenn der Prozess längst vorbei ist? In welchem ​​Fall, wie würde ich herausfinden, ob dies der Fall ist und wie würde ich es löschen? Für den Neustart des NFS-Servers ist eine Änderungsanforderung erforderlich.
Gleiches gilt für die Strategie, alle Clients nacheinander neu zu starten.

Obwohl viele Webseiten angeben, dass flock () nicht für NFS funktioniert, sagen andere, dass dies der Fall ist (z. B. https://serverfault.com/questions/66919/file-locks-on-an-nfs ), und meine Tests bestätigen dies aus. Zum Beispiel:

perl -E 'open $ fh, ">>", verschieben oder sterben "Open: $!"; sag "Fertig" Flock ($ fh, 2) oder sterben "Flock: $!"; Sagen Sie "Fertig Herde", schlafen Sie 10 'Dateiname

Führen Sie es auf einem Client aus, warten Sie 5 Sekunden, führen Sie es auf einem anderen aus, und der zweite druckt "Done flock" nicht, bis der erste nach 5 Sekunden beendet wird. Genau das, was Sie erwarten würden. Der NFS-Server weiß also, dass die Datei gesperrt ist. Wie bekomme ich es, mir zu sagen, von wem es denkt, es sei gesperrt?

2

0 Antworten auf die Frage