[BraLUG] File auf NFS Freigabe sperren

Markus Dahms dahms at fh-brandenburg.de
Mo Okt 16 15:16:01 CEST 2006


Hallo Karsten,

> ich habe das Problem, dass Dateien auf den NFS Freigaben zur gleichen 
> Zeit von mehreren Benutzern geöffnet werden können. Bekanntlich gewinnt 
> hier immer der Letzte.
> Auf dem lokalen Filesystem werden Dateien gesperrt wenn sie jemand 
> geöffnet hat.
> Weiss jemand Rat, wie es auch auf der NFS Freigabe gesperrt wird?

soweit ich die Manpages und so verstehe, ist Locking auch bei NFS
vorgesehen und standardmaessig aktiviert. Auf der Debian-Kiste sollte
ein lockd laufen (rpcinfo -p localhost nennt das Teil hier scheinbar
nlockmgr), der Locking-Anfragen des NFS-Clients an den Kernel weiter-
gibt. Es gibt sowohl Client- als auch Server-seitige optionen, um
Locking auszuschalten, Standard ist aber wohl "an".

Entgegen meiner Aussagen sagt open(2) aber folgendes:

| O_EXCL When used with O_CREAT, if the file  already  exists  it  is  an
|        error and the open() will fail. In this context, a symbolic link
|        exists, regardless of where it points to.  O_EXCL is  broken  on
|        NFS file systems; programs which rely on it for performing lock-
|        ing tasks will contain a race condition.  The solution for  per-
|        forming  atomic  file  locking  using  a lockfile is to create a
|        unique file on the same file system (e.g.,  incorporating  host-
|        name  and  pid),  use link(2) to make a link to the lockfile. If
|        link() returns  0,  the  lock  is  successful.   Otherwise,  use
|        stat(2)  on  the  unique  file  to  check  if its link count has
|        increased to 2, in which case the lock is also successful.

Ich bin mir aber nicht sicher, ob das wirklich noch zutrifft.

Muss mal 'nen Test schreiben...

Markus

-- 
An elephant is a mouse with an operating system.



Mehr Informationen über die Mailingliste Bralug