# Das EXT2 Dateisystem

Im Wesentlichen entspricht das Second Extended Filesystem (EXT2) von Linux dem Unix-Inode-System, das an anderer Stelle schon beschrieben wurde. Es gibt aber ein paar wesentliche Unterschiede, die hier kurz erläutert werden sollen.

### Der Aufbau einer EXT2 Inode

Die wesentlichen Unterschiede des EXT2 Systems zum "normalen" I-Node-System liegen in der Struktur der I-Nodes selbst. Hier sind einige Felder hinzugekommen, die für bestimmte Erweiterungen vorgesehen wurden, die im folgenden genauer erklärt werden. Doch zunächst einmal die Struktur der Inode selbst:

permission | links | owner | group
--- | --- | --- | ---
size | creation time
modification time | access time
deletion time | blockcount
flags | file version (NFS)
file ACL | dir ACL
fragment addr. | fr. size | frag. nr | reserved
1. block data | 2. block data
3. block data | 4. block data
5. block data | 6. block data
7. block data | 8. block data
9. block data | 10. block data
11. block data | 12. block data
simple indirect | double indirect
triple indirect | reserved
reserved | reserved

Die wesentlichen Unterschiede zum bisher beschriebenen I-Node-System sind:

- Neben den drei Standard-POSIX-Zeitmarken (ctime, atime, mtime) gibt es hier eine vierte Zeitmarke, die die Löschzeit (deletion time) speichert. Das ist gedacht für Spezialprogramme zum Wiederherstellen versehentlich gelöschter Dateien.
- Ein Feld für flags ist hinzugekommen. Diese Flags ermöglichen es, daß Dateien bestimmte Eigenschaften bekommen, die weiter unten genauer beschrieben werden.
- Der Eintrag file version kann vom NFS-Server zur Unterscheidung verschiedener Versionen einer Datei verwendet werden.
- Zwei Einträge für eine erweiterte Zugriffskontrolle für Dateien (file ACL) und Verzeichnisse (dir ACL) sind hinzugekommen. ACL steht für Access Control List.
- Die Unterstützung fragmentierter Datenzonen ist vorgesehen.
- Es stehen 12 direkte Adressfelder für Datenblocks zur Verfügung.

### Die Flags des EXT2 Filesystems

Jede Datei in einem EXT2 Dateisystem kann neben den normalen Unix-Zugriffsrechten noch einen Satz zusätzlicher Flags bekommen, die hier noch erläutert werden sollen. Um sich die Flags (oder auch Attribute) anzusehen, wird das Programm lsattr benutzt, zum Ändern der Attribute wird chattr benutzt. Es gibt die Attribute A,a,c,d,i,S,s und u.

- Wenn eine Datei mit gesetztem A-Attribut verändert wird, so wird das atime Feld nicht verändert.
- Eine Datei, die das a-Attribut gesetzt hat, kann nur im Append-Mode geöffnet werden. Das heißt, Daten können an diese Datei angehängt werden, bestehende Daten jedoch nicht gelöscht.
- Eine Datei mit dem c-Attribut wird automatisch vom Kernel komprimiert, bevor sie auf die Platte geschrieben wird. Wenn sie gelesen wird, dann entkomprimiert der Kernel die Datei wieder, ein Anwender merkt also nichts von der Kompression.
- Eine Datei mit gesetztem d-Attribut ist kein Kandidat für ein Backup mit dem dump Befehl.
- Eine Datei mit gesetztem i-Attribut kann nicht verändert werden, sie kann nicht gelöscht oder umbenannt werden, kein Link kann auf sie erstellt werden und keine Daten können in ihr verändert werden. Dieses Attribut kann nur vom Superuser gesetzt oder entfernt werden.
- Wenn eine Datei mit gesetztem s-Attribut gelöscht wird, dann werden die Bytes der Datei mit Nullen überschrieben. Ein sicheres Löschen, das keine Wiederherstellung erlaubt.
- Wenn eine Datei, deren S-Attribut gesetzt ist, verändert wird, dann wird diese Veränderung synchron auf die Platte geschrieben, ohne lange im Cache zu liegen.
- Wenn eine Datei mit gesetztem u-Attribut gelöscht wird, dann wird ihr Inhalt gesichert, so daß sie wiederhergestellt werden kann.

### Erweiterungen des Superblocks

Der Superblock eines EXT2-Dateisystems enthält ein sogenanntes Valid-Flag. Sobald dieses Dateisystem gemountet wird, wird das Valid-Flag gelöscht. Erst beim Umount wird es wieder gesetzt. Sollte das System abstürzen, so bleibt das Valid-Flag ungesetzt - beim nächsten Start kann also erkannt werden, daß dieses Dateisystem nicht ordnungsgemäß abgehängt worden ist.

Das Programm zur Überprüfung eines EXT2 Dateisystems (e2fsck) überprüft dieses Valid-Flag und prüft (falls es nicht durch die -f Option gezwungen wurde) nur dann das Dateisystem, wenn das Valid-Flag nicht gesetzt war. So kann beim Systemstart einfach für jede Partition das e2fsck-Programm aufgerufen werden. Es wird nur dann aktiv, wenn es nötig ist.

Der Superblock enthält weiterhin eine Angabe über die maximale Anzahl von Mount-Vorgängen, die zwischen zwei System-Checks ablaufen dürfen. Jedesmal, wenn ein Dateisystem gemountet wird, wird ein Zähler (mount-count) um eins erhöht. Wird bei einem Systemstart festgestellt, daß der Wert des Zählers den Wert der maximalen Mountvorgänge überschreitet, so wird ein Systemcheck erzwungen.

Im Superblock steht noch eine Angabe, die festlegt, wieviel Prozent eines Dateisystems für den Superuser root reserviert wird. Standardmäßig sind es 5 Prozent.

Um diese Werte zu manipulieren steht das Programm tune2fs zur Verfügung. Dieses Programm sollte aber nur für Dateisysteme verwendet werden, die gerade nicht read-write gemountet sind!