[linux-l] NFS file locking: es geht einfach nicht...

Peter Ross Peter.Ross at alumni.tu-berlin.de
Sa Apr 3 09:29:32 CEST 2004


On Fri, 2 Apr 2004, Steffen Dettmer wrote:

>  - warum es bei Server funktioniert

Wenn Du beim Urschleim anfaengst, bist Du bei der Entwicklung von NFS bei
Sun. Unter SunOS 4.x gab es auch ohne NFS einem lockd, der ueber lokale
Locks wachte. Da war es fuer NFS nur logisch, dass man hier schnell lockd
aufbohrte, damit die lokal/remote in Zusammenarbeit das Locking ueber NFS
erledigten.

Wobei auch dass nicht so trivial ist, wie es ausschaut. Was z.B. wenn der
lockende Client wegstirbt? Man will ja schliesslich nicht fuer alle Zeiten
locken..

Andere Betriebssysteme hatten es mit der korrekten Implementierung des
NFS-Lockings schwerer, da hier lokales Locking auf Filesystemebene
stattfand. Hier musste der lockd erst erfunden und dann auch erst an die
Filesystem-Logik angepasst werden.

>  - warum es sonst einen Fehler zurückgibt, anstatt "lokal" zu
>    locken. Da wäre wenigstens konsistent zu älteren NFS/Kernel
>    Versionen.

Wenn Du lokal locken wuerdest, wuerdest Du Deinem Programm vorgaukeln, Du
waerst erfolgreich gewesen, und dann zieht Dir doch jemand das Original
auf dem NFS-Server weg.

Das hatte ich unter FreeBSD-3.x mal, da hatte ich uebersehen, dass der
lockd "broken" war (stand da, aber ich habe es nicht bemerkt:-(. Das
locking gab immer Success zurueck - ohne wirklich was zu tun. Und prompt
gab es kurz nach dem Bewegen eines Produktionsverzeichnisses von Solaris
zu FreeBSD am Montag ein paar stunden Trouble, weil ich wieder
zurueckziehen musste.. Natuerlich wurde das erst nach ein paar Stunden
offenbar, war lebenswichtig, um die Produktion zu erhalten, und zu spaet,
um einfach den alten Server wieder anzuknipsen (damit haette ich ein paar
Stunden Montagsarbeit geloescht). Also rsync ueber ordentlich ein paar GB
-> lange Mittagspause.

(Dass der BWLer, der mich, eigentlich gegen meinen Willen, zu einem
Fileserver auf PC getrieben hatte, damit wir billiger werden, der gleiche
Mensch war, der mir dann aus diesem Anlass meine erste und einzige
schriftliche Abmahnung gegeben hat, hat mich zu einem gluecklichen
unausgesprochenn "Du A****" veranlasst;-)

>  - warum man flock nicht auf "deprecated" setzt, weil es ja dann
>    die Transparenz von NFS zerstört (man darf es nicht benutzen,
>    wenn man evtl. mal per NFS arbeiten möchte, was IMHO der Admin
>    und nicht der Entwickler bestimmt).

Das haben die Linux-NFS-Entwickler in ihrer grenzenlosen Guete intern
gemacht, unter 2.4.18 steht in dn Quellen: wir brauchen kein flock, es
gibt ja lockf:-(

Das gehoert gefixt und nicht das Programm (auch wenn man es
pragmatischerweise sicher tut) Eine saubere NFS-Implementierung erfordert
sauberes flock(2), basta. Zumal POSIX-lockf und BSD-flock nicht das
Gleiche sind - das eine machts mit einem Filenamen, das andere mit einem
Inode.

Es gruesst
Peter



Mehr Informationen über die Mailingliste linux-l