Re: konkurrierende Dateizugriffe

From: Marc Santhoff <M.Santhoff(at)t-online.de>
Date: Tue, 01 Mar 2005 21:27:32 +0100

Am Di, den 01.03.2005 schrieb Bernd Walter um 18:12:
> 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.

Ist klar, das würde ich dann einen Bug nennen. Wenn man Dateien zum
schreiben öffnet, müssen sie auch adäquat gesperrt werden.

> Was für Merkwürdigkeiten meinst du genau?

Z.B. das es inkonsistente Sektoren gibt, aber das kann offenbar nicht
sein.

> > 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.

Ich sollte wohl doch erstmal ein paar Grundlagenpapiere einsaugen, mein
Vorstellung von einem Dateisystem gleitet immer wieder auf FAT-Niveau
ab. ;)

> > > 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.

Hab ich gemerkt. Ich brauchte etwa die Hälfte der darin enthaltenen
Verzeichnisse und wollte mir sparen, die alle auf der Kommandozeile zu
nennen. Beim Blick auf die "tar xvf"-Ausgabe durfte ich dann
feststellen, daß die Verzeichnisse darin doch nicht alphabetisch
sortiert sind, wie ich naiverweise angenommen hatte. Das ist aber nicht
so wichtig, hat mich nur aufmerksam gemacht.

> tar hält die Files ja nicht lange offen, sodass der Plattenplatz
> auch recht schnell wieder frei wird.

Am Schluß frage ich ich natürlich: Was sollte man gelesen haben, damit
man diese Zusammenhänge versteht?

Ich finde auf die Schnelle

/usr/share/doc/smm/05.fastfs/paper.ascii.gz

das sollte für's Grundverständnis doch schon genug sein.

Grüße und Danke schön auch an Oliver,
Marc

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 - 21:29:08 CET

search this site