[linux-l] samba und grosse dateien unter ext3, datenverlust

olafBuddenhagen at web.de olafBuddenhagen at web.de
Fr Apr 2 22:56:46 CEST 2004


Hallo,

On Fri, Apr 02, 2004 at 08:46:28PM +0200, Jan-Benedict Glaw wrote:

> Naja, alle neueren Betriebssysteme haben Caches; sie schreiben Daten
> nicht direkt auf die Platte, sondern behalten die Daten erstmal im RAM
> (man könnte sie ja in najer Zukunft nochmal brauchen, vielleicht
> werden die Daten ja auch nochmal verändert...).

Soweit OK.

> Dateisysteme, die ein Journal haben, schreiben zumindest die
> veränderten Meta-Informationen (Zeitstempel, Eigentümer, Rechte,
> geänderte Größe) _sofort_ auf die Platte (erst in einen
> Zwischenspeicher, später an den entgültigen Ort). Die eigentlichen
> Nutzdaten werden entweder später (ganz normal) geschrieben, oder auch
> in diesen Zwischenspeicher.
> 
> Im ersteren Fall sind die (Nutz-)Daten weg, wenn Du den Resetknopf
> drückst; nur die Metadaten sind noch da. Im zweiten Fall hast Du
> grottige Performance...

Diese Erklärung ist zwar streng genommen fast richtig, aber so
verwirrend, dass garantiert alle die es nicht eh schon wissen, es falsch
verstehen.

Also für alle zum Mitschreiben:

Bei einem journaling Filesystem vermerkt der Treiber, bevor er eine
Schreibaktion (Transaktion) tatsächlich durchführt, zunächst in einem
speziellen Bereich der Platte (Journal), was er vorhat. (Das muss im
übrigen keinesfalls unbedingt *sofort* passieren; es muss lediglich
garantiert sein, dass es erledigt ist, bevor der eigentliche
Schreibvorgang beginnt.)

Nachdem die Absicht im Journal protokoliert wurde, beginnt der Treiber
den eigentlichen Schreibvorgang. Erst wenn dieser vollständig
abgeschlossen ist, wird das Journal wieder gelöscht.

Der Trick dabei: Wenn während des eigentlichen Schreibvorgangs eine
Unterbrechung auftritt, ist immer noch im Jounal beschrieben, was
geplant war. So kann der Treiber beim nächsten Boot die Aktion zu Ende
führen.

> Wenn Du den Rechner abwürgen mußtest, dann sind solche Störungen
> "normal". Dafür hat man ja eine USV ...  Wenn Du die Daten sicherer
> haben willst, dann solltest Du das "sync"-Flag für die entsprechenden
> Dateisysteme (/etc/fstab) setzen.

Das ist völliger Blödsinn.

Richtig ist, dass auch bei einem journalling Filesystem der Dateiinhalt
normaler Weise verloren geht, wenn eine Datei während oder wenige
Sekunden vor einem Absturz verändert wird. Das kann nur verhindert
werden, wenn man "full data journaling" (oder so ähnlich) aktiviert, was
aber -- wie richtig geschrieben -- ziemlich langsam ist. (Bei einer
reinen Backuppartition dürfte es trotzdem Sinn machen -- schließlich
geht es da gerade um Sicherheit...)

Hingegen darf es niemals passieren, dass eine ältere Datei kaputt geht,
oder gar Inkonsistenzen im Dateisystem auftreten. Genau das soll das
Journalling ja verhindern!

-Olaf-



Mehr Informationen über die Mailingliste linux-l