Ext3
- Der korrekte Titel dieses Artikels lautet „ext3“. Leider ist dieser Titel in der Wikipedia aufgrund technischer Einschränkungen nicht möglich. Ext3
Das ext3 (third extended filesystem) ist ein Journalingdateisystem, entwickelt für das Linux-Betriebssystem. Bei vielen Linux-Distributionen ist es das Standard-Dateisystem.
Die von Stephen Tweedie entwickelte Journalingerweiterung für ext2 sorgt dafür, dass Metadaten nicht mehr korrumpiert werden können, und somit auf einen kompletten Durchlauf von e2fsck nach einem Rechnerabsturz verzichtet werden kann. Ein solches Dateisystem wird meist als ext3-Dateisystem bezeichnet. Das Datenformat des Datenträgers ändert sich bei Verwendung eines Journals nicht. Das Journal ist eine reguläre Datei, in die die Metadaten (optional auch die Nutzdaten) geschrieben werden, bevor sie auf das tatsächliche Dateisystem geschrieben werden. Aus einem ext2- kann man daher ein ext3-Dateisystem machen, ohne irgendwelche Daten konvertieren zu müssen.
ext3 fügt dem ext2-System folgende Eigenschaften hinzu:
- Ein Journal
- H-Baum-Verzeichnisindizes
- Directory Filetypes
Wenn eine Änderung am Dateisystem (z. B. die Umbenennung einer Datei) durchgeführt wird, wird sie als Transaktion im Journal vermerkt und kann dann im Fall eines Absturzes entweder abgeschlossen oder noch nicht abgeschlossen sein. Wenn eine Transaktion zum Absturzzeitpunkt (oder im Normalfall, wenn das System nicht abstürzt) abgeschlossen war, ist garantiert, dass alle an dieser Transaktion beteiligten Blöcke einen gültigen Dateisystemstatus repräsentieren. Diese Blöcke werden dann ins Dateisystem kopiert. Wenn eine Transaktion zum Absturzzeitpunkt nicht abgeschlossen war, kann nicht garantiert werden, dass die beteiligten Blöcke konsistent sind, daher wird eine solche Transaktion verworfen (das bedeutet, dass die Dateisystemänderung, die diese Transaktion repräsentierte, verloren geht).
Bei abgebrochenen Schreiboperationen kann es passieren, dass ein Teil einer Datei bereits aus den neuen Daten besteht und ein Teil noch aus den alten, was manchmal noch schlimmer sein kann als ein inkonsistentes Dateisystem. ext3 bietet daher einen besonderen Modus, in dem auch Daten zunächst im Journal abgelegt werden. ext3 schützt nicht davor, dass Daten verloren gehen, die zum Absturzzeitpunkt zwar eigentlich bereits auf die Platte geschrieben sein sollten, vom Kernel jedoch noch in so genannten schmutzigen Puffern gehalten wurden, um sie später zurückzuschreiben. Nach dem Abspielen des Journals ist nur garantiert, dass man mit einem konsistenten Datenbestand zu einem gegebenen Zeitpunkt weiterarbeiten kann.
Die Linux-Implementation von ext3 bietet drei Journaling-Stufen:
- Full (Option data=journal), wobei sowohl Metadaten als auch Dateiinhalte erst ins Journal geschrieben werden, bevor sie ins Dateisystem geschrieben werden. Dies erhöht die Zuverlässigkeit, ist aber recht langsam, da alle Daten zweimal auf den Datenträger geschrieben werden müssen.
- Writeback (Option data=writeback), wobei nur Metadaten ins Journal geschrieben werden. Dies ist wesentlich schneller, birgt aber die Gefahr von Datenkorruption durch abgebrochene Out-of-Order-Schreibvorgänge im Absturzfall. Dateien, die sich zu diesem Zeitpunkt im Schreibzugriff befanden, können beim nächsten Einhängen des Dateisystems an ihrem Ende Datenmüll enthalten.
- Ordered (Option data=ordered) funktioniert wie Writeback, erzwingt aber dass Dateiinhalte erst nach ihren Metadaten auf den Datenträger geschrieben werden. Dies gilt als akzeptabler Kompromiss zwischen Zuverlässigkeit und Geschwindigkeit, und ist daher die Standardeinstellung.
Anders als ext2 schreibt ext3 Nullen in die Block-Pointer der Inodes gelöschter Dateien. Dadurch wird es sehr schwer gelöschte Dateien wiederherzustellen.
