Szenario:
Wir verwenden eine NFS-Freigabe, damit Kunden Rohvideomaterial hochladen können. Die Dateien werden dann aus dem Verzeichnis auf dem (NFS) Server abgefragt, um verarbeitet zu werden. Da wir keine Dateien verarbeiten möchten, deren Upload noch nicht abgeschlossen ist, möchte ich im serverseitigen Skript (Bash) feststellen, ob die Datei noch verwendet wird.
Wie in den Manpages angegeben, sollen beide fuser
und lsof -N
die Erkennung von verwendeten Dateien auf NFS-Freigaben ermöglichen. Ich "sehe" jedoch nicht die Dateien, die auf dem Server verwendet werden, was später in der Verarbeitung zu beschädigten Dateien führt.
Installieren:
Mein NFS /etc/exports
enthält die folgenden Einstellungen (UID und GID sind Eigentümer des freigegebenen Verzeichnisses auf dem Server, Zeile zur besseren Anzeige umbrochen):
/export/foo 10.3.2.0/255.255.255.0
(rw,sync,no_subtree_check,all_squash,anonuid=1001,anongid=1001)
Der Client stellt diese Freigabe bereit mit:
10.3.2.197:/export/foo /data002/ nfs defaults 0 0
Der Server ist ein Ubuntu 10.04 mit "nfs-kernel-server 1: 1.2.0-4ubuntu4", der Client ist ein SLES 10 SP2
Wenn ich eine Datei auf dem Client (innerhalb des freigegebenen Verzeichnisses) mit öffne
echo "Hello" > test.txt && tail -f foo.txt
und überprüfen Sie dann (noch auf dem Client), ob die Datei verwendet wird
fuser foo.txt
Ich kann sehen, dass die Datei verwendet wird. Bei der Überprüfung auf der Serverseite (sowohl fuser foo.txt
als auch lsof -N | grep foo.txt
) erhalte ich jedoch keine Nutzungsinformationen.
Wie kann ich auf dem Server überprüfen, ob derzeit eine Datei auf der NFS-Freigabe verwendet wird (unabhängig davon, ob lokal oder remote)? Oder was mache ich in meinem aktuellen Setup falsch?