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!