Re: konkurrierende Dateizugriffe

From: Bernd Walter <ticso(at)cicely12.cicely.de>
Date: Tue, 1 Mar 2005 18:12:22 +0100

On Tue, Mar 01, 2005 at 05:48:36PM +0100, Marc Santhoff wrote:
> Am Di, den 01.03.2005 schrieb Bernd Walter um 17:00:
> > On Tue, Mar 01, 2005 at 03:53:27PM +0100, Marc Santhoff wrote:
> > > Hi,
> > >
> > > was passiert eigentlich, wenn ein Prozeß ein Verzeichnis anlegt und dort
> > > Dateien reinschreibt und ein anderer Prozeß dieses Verzeichnis
> > > gleichzeitig mit "rm -r" löscht?
> >
> > Kommt darauf an was der schreibende Prozess offen hat.
> > Dateien und Verzeichnisse, die er offen hat kann keiner löschen.
> > Es können zwar alle Verzeichnisseintrþage gelöscht werden, aber
> > solange es noch eine Referenz zu dem Objekt gibt bleibt es physikalisch
> > auf der Platte bestehen.
> > Per Filename kann der schreibende Prozess diese allerdings nicht
> > mehr referieren, da diese ja weg sind, allerdings kann er durchaus
> > Filedescriptoren zu den noch offenen Objekten an andere Prozesse
> > übergeben.
>
> Das heißt irgendwelche Merkwürdigkeiten bezüglich vergebener oder schon
> wieder leerer Sektoren treten nicht auf weil der Prozeß selbst ja
> (normalerweise) für's Schreiben exklusiv sperrt.

Normalerweise wird nichts gesperrt, solange eine Software nicht
explizit dafür sorgt.
Was für Merkwürdigkeiten meinst du genau?

> Der einzige kritische Fall ist, wenn eine Datei geschrieben wird, diese
> gleichzeitig gelöscht wird (das geht trotz Lock?) und dann am Ende der
> schreibende Prozeß den Verzeichniseintrag aktualisieren will.

Die Datei wird ja nicht gelöscht, sondern nur eine Referenz darauf
entfernt.
Erst wenn die letzte Referenz weg ist wird die Datei gelöscht.
Ein offenes Filehandle ist dabei ebenso eine Referenz, wie ein Eintrag
in einem Verzeichniss.
Der Verzeichnisseintrag wird genau dann gemacht, wenn die Datei
angelegt wird (bzw ein hardlink darauf erzeugt wird) und danach ist
der Zeitlebens statisch.
Alles was sich ändert ist der Dateiinhalt.

Soweit die logische Seite.
FreeBSD weiß durchaus wenn eine Datei keinen Verzeichnisseintrag mehr
hat und geht damit anders um, da die Datei ja eh keinen reboot
überleben kann.

> > Das einzige was passiert ist, dass du Objekte ohne Referenz im
> > Filesystem hast, welche nach einem unsauberen shutdown erst durch
> > den fsck gefunden werden - derartige Inkonsistenzen treten aber
> > grundsätzlich im normalen Betrieb auf und sind absolut harmlos.
>
> Das beruhigt mich sehr. Ich hatte eben ein tar-Archiv ausgepackt und
> schon angefangen, Teile davon wegzulöschen, obwohl das Auspacken
> nochlief ... das brachte mich zu der prinzipiellen Frage.

Das ist dumm, weil du nachher nicht weißt welche Files du hast
und welche nicht, das ist alles.
tar hält die Files ja nicht lange offen, sodass der Plattenplatz
auch recht schnell wieder frei wird.

-- 
B.Walter                   BWCT                http://www.bwct.de
bernd(at)bwct.de                                  info(at)bwct.de
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Tue 01 Mar 2005 - 18:14:51 CET

search this site