next up previous contents index
Next: Bewertung Up: Dateisysteme Previous: Das Minix-Dateisystem

Subsections


Die neuen Dateisysteme

Das Minix-Dateisystem weist einige wichtige Eigenschaften eines Unix-Dateisystems auf. Die Vereinfachungen, die es einerseits zu einem hervorragenden Lehrbeispiel machen, erweisen sich auf der anderen Seite aber als ein Mangel. Vor allem die Beschränkung auf 64 Megabyte je Partition ist für das umfangreiche Linux-System äußerst unpraktisch. Die Beschränkung der Dateinamen auf 14 Zeichen ist ebenfalls unbefriedigend. Die Unterstützung nur einer Zeitmarke (mtime) entspricht darüberhinaus nicht dem POSIX-Standard, der drei Zeitmarken für eine Datei vorsieht.

Die Zeitmarken in der I-Node

      

Eine Zeitmarke, in der automatisch das Datum und die Uhrzeit der letzten Veränderung einer Datei gespeichert wird, gibt es bei den meisten Betriebssystemen (mtime). Diese Zeitmarke ermöglicht beispielsweise die Unterscheidung verschieden aktueller Versionen der gleichen Datei. Die von Unix bekannte und in den neuen Linux Dateisystemen unterstützte Speicherung von zwei zusätzlichen Zeitmarken, das Datum der letzten Statusänderung[*] und das Datum des letzten Zugriffs, gibt den Dateien zusätzliche interessante Merkmale. Mit geeigneten Kommandos wie find ($\to$ Seite [*]) und ls ($\to$ Seite [*]) kann so beispielsweise festgestellt werden, ob ein Brief bereits gelesen wurde oder ob ein Text bereits überarbeitet ist.

Die Vorteile mehrerer Zeitmarken können übrigens auch bei den einfachen Dateisystemen, die nur eine Zeitmarke speichern, beobachtet werden, weil der Kernel intern im sogenannten virtuellen  Dateisystem (virtual file system, vfs) eine abstrakte Verallgemeinerung aller I-Nodes benutzt. Solange sich die I-Node im Speicher befindet, werden alle Zeitmarken festgehalten und benutzt. Erst wenn die I-Node auf die Platte geschrieben werden muß, weil der Arbeitsspeicher für eine neue Aufgabe benötigt wird, gehen die zusätzlichen Zeitmarken verloren.

Entwicklung

  Der Weg zu einem neuen Dateisystem für Linux ist mit dem ``extended filesystem'' (extfs) von Remy Card begonnen worden. Dieses Dateisystem erlaubt bereits Partitionsgrößen von 2 Gigabyte und Dateinamen mit einer Länge von bis zu 255 Zeichen. Freie I-Nodes und Datenzonen werden im extfs durch verkettete Listen anstelle der Bitmaps verwaltet.[*]

Die Entwicklung eines ``passenden'' Dateisystems für Linux war mit dem extfs nicht zu Ende. Der experimentelle Charakter des extfs ist von Anfang an betont worden und seine Ablösung lange angekündigt.

Das neue, zweite erweiterte Dateisystem (ext2fs) hat sich als das Linux-Dateisystem der Zukunft durchgesetzt. In seiner 128 Bytes großen I-Node enthält es neben den erwarteten Ergänzungen, wie zum Beispiel der Unterstützung aller von POSIX definierten Zeitmarken, eine Reihe ganz neuer Attribute, die erst zum Teil implementiert sind und zu einem größeren Teil Raum für zukünftige Entwicklungen lassen.

Neben diesem sehr weitsichtig angelegten Modell gibt es noch weitere Entwicklungen, von denen das von Q. Frank Xia entwickelte xiafs eine gewisse Bedeutung erlangt hat.

Das zweite erweiterte Dateisystem (ext2fs)

  

Die Haupteigenschaften des ext2fs sind:

Die Abbildung A.6 stellt die I-Node des ext2fs dar.

Viele der Komponenten haben ihre Entsprechung in der Minix-I-Node. Der auffällige Größenunterschied resultiert nur zum Teil aus den vielen zusätzlichen Einträgen. Vor allem die Vergrößerung der Zonenzeiger von zwei auf vier Bytes trägt einen weiteren Teil bei. Diese Verdoppelung ermöglicht auf der einen Seite die Adressierung von bis zu 4 Terabyte großen Partitionen.[*] Auf der anderen Seite können in einem indirekten Block nur noch 256 Zeiger untergebracht werden, was die Einführung eines dreifach indirekten Blockes sinnvoll gemacht hat. Der dreifach indirekte Block enthält Zeiger auf bis zu 256 weitere doppelt indirekte Blöcke, die jeweils wieder Zeiger auf einfach indirekte Blöcke enthalten.

Der Eintrag für die Gruppenkennzahl ist bereits seit dem ersten erweiterten Dateisystem auf zwei Bytes (unsigned short) gewachsen.


 
Abbildung A.6:  Extended 2 FS I-node

Das Valid-Flag

  

Ein spezielles Byte im Superblock, das Valid-Flag, wird vom Kernel beim Aufsetzen einer ext2fs-Partition gelöscht. Wenn das Dateisystem beim regulären Systemhalt wieder abgesetzt wird, setzt der Kernel das Valid-Flag wieder. Bei einem Systemabsturz bleibt das Flag selbstverständlich ungesetzt. Indem es vor dem Aufsetzen eines ext2fs dieses Flag prüft, kann das Betriebssystem feststellen, ob es sich um ein gültiges (valid) Dateisystem handelt, und nötigenfalls eine Warnung ausgeben.

Das e2fsck-Programm testet ebenfalls dieses Flag, bevor es das Dateisystem überprüft, und überspringt die Prüfung gültiger Dateisysteme, wenn es nicht durch die entsprechende Option dazu gezwungen wird. Auf diese Weise kann das e2fsck-Kommando automatisch beim Booten des Systems mit den Bootutilities aufgerufen werden, bevor das Dateisystem zusammengesetzt wird, ohne daß deshalb nach jedem regulären Systemhalt gleich das ganze Dateisystem durchgekämmt werden muß.

Seit der Kernel-Version 0.99.10 wird auch das Root-Filesystem beim regulären Systemhalt mit den anderen Dateisystemen zusammen abgesetzt und das Valid-Flag gesetzt.

Zusätzlich zu der passiven Indikatorfunktion kann das Valid-Flag auch vom Kernel benutzt werden, um ausdrücklich ein fehlerhaftes Dateisystem zu markieren. Beim Aufsetzen eines ext2fs führt der Kernel immer eine minimale Konsistenzprüfung durch. Wenn bei diesem Test ein Fehler festgestellt wird, setzt der Kernel das Valid-Flag auf einen speziellen Wert, um damit dem e2fsck und den Bootutilities die Notwendigkeit eines Dateisystem-Checks zu signalisieren.

Außer dem Valid-Flag wird im Superblock des ext2fs noch die maximale Anzahl normaler Mounts festgehalten[*]. Beim Aufsetzen eines ext2fs wird automatisch ein Zähler im Superblock erhöht; wenn dieser Zähler größer wird als die festgelegte Maximalzahl, wird beim automatischen Aufruf durch die Bootutilities ein File-System-Check durchgeführt, sonst wird eine Warnung ausgegeben.

Dateiattribute

  In den I-Nodes des ext2fs steht ein vier Bytes großes Feld für ``Flags'' zur Verfügung. Von diesem 32 Bit großen Bereich ist zur Zeit nur die Bedeutung der ersten sieben Bits für bestimmte Dateiattribute definiert, der Rest des Feldes steht für zukünftige Erweiterungen bereit.

Die sieben definierten Attribute haben folgende Bedeutung:

a
(append) Eine mit diesem Attribut gekennzeichnete Datei kann nur durch Anhängen zusätzlicher Daten verändert werden. Das überschreiben der bereits gespeicherter Daten, das Löschen, Umbenennen oder Verschieben ist nicht möglich.
d
(dump) Mit diesem Attribut können Dateien markiert werden, die von der inkrementellen Sicherung durch dump ausgenommen werden sollen.
i
(immutable) Eine Datei, die mit diesem Attribut ausgestattet ist, läßt sich in keiner Weise verändern. Sie kann nicht gelöscht oder umbenannt werden, es können keine Links auf sie erzeugt werden und der Inhalt der Datei läßt sich nicht überschreiben oder erweitern.

Zum Setzen oder Löschen dieses Attributs sind Rootprivilegien erforderlich.

s
(secure) Durch dieses Attribut können Dateien, deren Inhalt besonders vor dem unberechtigten Zugriff anderer Systembenutzer geschützt werden soll, zum sicheren Löschen markiert werden. Die Datenblöcke werden dann beim Löschen durch zufällige Daten überschrieben.[*]
S
(Sync) Dieses Attribut veranlaßt den Kernel, jede Veränderung der I-Node synchron durchzuführen. Die veränderten Daten werden ungepuffert sofort auf das Speichermedium geschrieben.
u
(undelete) Noch ohne Funktion. Durch dieses Attribut soll eine Datei zukünftig auch nach dem Löschen noch intakt gehalten werden, damit das Retten der Daten durch die noch zu entwickelnde undelete-Funktion möglich ist.
c
(compressed) Noch ohne Funktion. Dieses Attribut wird einmal den Kernel veranlassen, die entsprechende Datei komprimiert zu speichern.

Die Dateiattribute können Sie mit dem Kommando lsattr für alle Dateien eines ext2-Verzeichnisses anzeigen lassen. Zum Ändern der Attribute gibt es das chattr-Kommando. Veränderungen an den Dateiattributen können nur die Benutzer vornehmen, die auch die Datei selbst verändern dürfen (also schreibberechtigt sind).

 

Gruppierung der Datenzonen

Das ext2fs benutzt nicht die beim Minix-Dateisystem vorgestellte einfache Unterteilung der Partition in sechs Bereiche, sondern es unterteilt eine Partition zusätzlich in sogenannte Gruppen. In der aktuellen Version des ext2fs ist jede der Gruppen genau 8192 Blöcke groß; eine variable Gruppengröße ist für zukünftige Versionen vorgesehen. Die Gruppen enthalten jeweils eine Kopie des Superblockes sowie einen dem Superblock in seiner Funktion ähnlichen Gruppenblock, die Bitmaps und die I-Nodes für die Datenblöcke. Damit werden die einzelnen Gruppen fast so verwaltet wie ganze Partitionen im Minix-Dateisystem.

Neben dem Geschwindigkeitsvorteil, den die räumliche Nähe der I-Nodes zu den Datenblöcken vor allem bei großen Partitionen bringt, erhöht diese Unterteilung die Datensicherheit. Weil auf der Partition mehrere Kopien des Superblocks an genau definierten Stellen zu finden sind, kann der eventuell beschädigte erste Superblock vom e2fsck-Programm oder von dem speziell zu diesem Zweck entworfenen mksuper-Kommando  repariert werden. Außerdem kann dem mount-Kommando als zusätzliche Option beim Mounten eines Ext2-Dateisystems eine Blocknummer angegeben werden, aus der es dann den Superblock liest.  

Das xiafs

  

Das von Frank Q. Xia entwickelte xiafs ist eine Weiterentwicklung des Minix-Dateisystems. Die hervorstechenden Eigenschaften sind:

Besonders interessant ist die Bootfähigkeit von primären xiafs Partitionen der ersten Festplatte. Der Kernel wird in einem reservierten Bereich am Anfang der Partition gespeichert und automatisch geladen, wenn die Partition aktiviert ist. Der Kernel und der Loader werden mit dem mkboot Programm installiert. Zusätzlich kann das mkboot Programm einen Master Boot Loader installieren, der die Auswahl zwischen mehreren Bootpartitionen erlaubt.[*]


next up previous contents index
Next: Bewertung Up: Dateisysteme Previous: Das Minix-Dateisystem

Das Linux Anwenderhandbuch
(C) 1997 LunetIX