Re: NFS locking

From: Oliver Brandmueller <ob(at)e-Gitt.NET>
Date: Mon, 24 Jan 2011 12:45:44 +0100

Hallo,

On Sat, Jan 22, 2011 at 08:20:16PM +0100, Marc Santhoff wrote:
> ich teste gerade ein paar Sachen unter FreeBSD 9 und mir fiel auf, daß
> vi bei auf NFS-Dateisystemen liegenden Dateien ein freundliches "NOT
> LOCKED" (o.ä., aus dem Gedächtnis) ausgibt.
>
> Ich habe als nicht sonderlich aktuelle Information und Leitlinie im
> Hinterkopf, daß es mit Dateisperren auf NFS früher mal Probleme gab und
> "man das besser nicht benutzt".
>
> Da scheint sich einiges geändert zu haben, ich habe den Eindruck man
> soll(te) mittlerweile doch Sperren nutzen. Meine Fragen also:
>
> Ist das richtig, ist "NFS Locking" sicher, stabil und empfehlenswert?
>
> Falls es eine passende Informationsquelle zu dm Thema gibt, welche?
>
> Der Handbuchabschnitt auf meinem 7er FBSD ist etwas knapp und sagt nur,
> daß man es benutzen kann, wenn eine Programm, etwa mutt, es verlangt.
> Betroffen sind hier Systeme von Version 6 bis 8 und womöglich weiter 9.

Ich denke mal, wir reden von NFSv3, die Angaben unten beziehen sich
darauf - komme mir also keiner mit "bei NFSv4 ...", anderes Thema.

Also, es funktioniert (für gewisse Werte von "Funktionieren"), wenn auf
Client und server statd und lockd laufen.

ABER: Locking auf NFS ist broken by design. Grob gesagt behält der lockd
eine Liste von Locks und kommuniziert mit dem lockd des Servers darüber.
Im Idealfall sind die Ideen darüber, welche Datei gelockt ist, auf dem
Server und allen Clients gleich. In einer Situation, wo der Server außer
NFS nichts mit den Daten tut (also keine lokalen Locks erstellt) und es
nur einen Client gibt wird das i.d.R. gutgehen. Bei vielen Clients gibt
es dann lustige Effekte, wenn Clients oder gar der Server zwischendurch
mal booten (oder es andere Probleme mit dem lockd oder der Kommunikation
gibt). Dann kommt es gut und gerne mal vor, daß sich nicht mehr alle
einig sind darüber, was denn nun genau gelockt ist. Das wiederum kann
dan dazu führen, daß manche Programm ewiglich darauf warten, daß sie den
lock für eine Datei bekommen etc.

In einem kleinen Setup und unter entsprechend kontrollierten Bedingungen
gibt es die mount-Option -L für NFS-Mounts. Dann werden Locks (wir reden
von fcntl locks) nur lokal behandelt und gar nicht mehr an den Server
gemeldet. Das sollte man aber tunlichst nur dann versuchen, wenn man
ganz genau weiß, was man da tut.

Neben fcntl-Locking gibt es dann natürlich noch das Dotlocking (ja, auch
im Jahre 2010). Dabei passiert im wesentlichen sowas wie das Anlegen
einer lock-Datei, auf deren Existenz dann geprüft wird. Da NFS durch
sein Caching allerdings nicht wirklich Realtime-Operationen liefert ist
auch das eher ein gefährliches Spiel.

Sehr nette Effekte lassen sich ggf. auch mit verschiedenen
Implementierungen erzielen, also wenn man da nicht nur FreeBSD
(vorzugsweise einer Generation) evrwendet, sondern einem auch noch
Linuxe, Solarise und Macs dazwischen funken.

Fazit: Für kleinere Anwendungen geht das, in größerem Maßstab ist man
bei NFSv3 besser bedient, wenn man weitgehend auf Locking verzichten
kann. Ein mbox file shared zugreifen via NFS mit einem client und dem
Server, der versucht, dort Mail auszuliefert wird fast unweigerlich
irgendwann mal zu Problemen führen. Ein Maildir, was ohne Locking
auskommt ist problemlos.

So. Und jetzt übergebe ich das Wort an die Optimisten, die Dir erklären
dürfen, daß das alles völlig problemlos ist :-)

- Olli

-- 
| Oliver Brandmueller          http://sysadm.in/         ob@sysadm.in |
|                        Ich bin das Internet. Sowahr ich Gott helfe. |
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Mon 24 Jan 2011 - 12:45:48 CET

search this site