ein Kapitel zurück                                           ein Kapitel weiter

Aufgrund des etwas, für Anfänger auf Linux, komplexen Dateisystems möchte ich hier ein kleines Tutorial für Linux - Anfänger schreiben bezüglich des Dateisystems. Wer sich das Thema vertiefen will den möchte ich auf dementsprechende Literatur verweisen. Ich werde hier nur kurz zusammenfassen, was für den weiteren Verlauf des Kurses zum besseren Verständnis dient.

Aufbau des ext2 - Dateisystems

Die Verwaltung des ext2 - Dateisystems geschieht unter Linux in Blöcken zu je 1024 Byte (1KB). Diese Blöcke werden Strukturiert und Durchnummeriert. Diese Blöcke werden in mehreren Gruppen geteilt.
Die ersten beiden Blöcke bestehen aus einem einzelnen Block (1024 Byte). Der erste Block, der Bootblock enthält ein Programm zum starten des Betriebssystem.
Im zweiten Block, dem Superblock steht, wie groß die restlichen 4 Blöcke oder auch Gruppen sind.
Die Gruppen 3 und 4 bestehen aus mehreren Blöcken, die als Bitmap organisiert sind. Die Bits innerhalb dieser Bitmaps geben an ob der dazugehörende I-Node bzw. Datenblock in den Gruppen 5 bzw. 6 frei oder belegt sind. Diese Bitmaps sind dafür da um beim Anlegen einer neuen Datei zu bestimmen wo auf der Festplatte sich noch freie Datenblöcke befinden.
In der Größten Gruppe Nummer 6 befinden sich nun die Dateien. Während sich ja in den anderen 5 Gruppen die Verwaltungsinformationen befinden. Hier nochmals der Überblick über die ext2 - Datenblocktypen.....

Block 1 Gruppe 1 Bootblock
Block 2 Gruppe 2 Superblock
Block 3 bis n1 Gruppe 3 I-Node-Bitmap (Welche Blöcke für I-Nodes sind noch frei?)
Block n1+1 bis n2 Gruppe 4 Daten-Bitmaps (Welche Blöcke für Daten sind noch frei?)
Block n2+1 bis n3 Gruppe 5 Speicherplatz für I-Nodes (je 8 I-Nodes pro Block = 8*128Byte=1024 Bytes)
Block n3+1 bis n4 Gruppe 6 Speicherplatz für Daten (je 1024 Bytes pro Block)


I-Nodes

I-Nodes (Informationsknoten) beinhalten den Schlüssel zur Verwaltung von Dateien. In einem I-Node (128 Byte) werden alle Verwaltungsinformationen zu einer Datei außer des Dateinamens verwaltet. Hier einige Informationen die in den I-Nodes gespeichert sind....

  • Die ID-Nummer des Besitzers und der Gruppe
  • Die Dateigröße
  • Die Zugriffsrechte
  • Die Anzahl der Links
  • Der Zeitpunkt der Erstellung, Änderung, des letzten Zugriffes und des Löschens der Datei
  • Verweise auf die ersten 12 Blöcke Datenblöcke einer Datei
  • u.s.w.


Dateien

Eine Datei besteht aus einem I-Node (siehe oben) mit den Verwaltungsinformationen und mehreren Datenblöcken mit den Daten. Im Gegensatz zu MS-Dos und das ist das entscheidende, können sie die Daten und Verwaltungsinformationen getrennt voneinander bearbeiten. Beispiel wenn sie eine Datei in ein anderes Verzeichnis schieben müssen sie nur die Verwaltungsinformationen und nicht die ganze Datei verändern.

Die Dateigröße ergibt sich aus der Anzahl der erfolgreichen Datenblöcke. Die Information des I-Node besteht aus hauptsächlich aus der Angabe von wo die Daten der Datei gespeichert sind. Wie schon oben erwähnt sind die ersten 12 Datenblöcken der Datei im I-Node gespeichert. Falls diese 12 Datenblöcke nicht für die Datei nicht ausreichen verweist ein weiterer I-Node-Wert auf einen weiteren Block (Gruppe 5) der keine Daten enthält, sondern Verweise auf weitere 256 Datenblöcke enthält. Man nennt diese einfach indirekt.

Und Daten die wiederum Größer als 268 KB sind verweist ein weiterer I-Node-Wert auf einen weiteren Block der auf weitere 256 Blöcke verweist. Und 256*256 Datenblöcke sind somit eine Dateigröße von 65796 Bytes (zweifach indirekt). Noch größere Dateien erfordern ein dreifach indirekte Adressierung. Somit könnten wir 256*256*256 Datenblöcke ansprechen.

Verzeichnisse

Verzeichnisse werden unter Linux wie Dateien behandelt. Man kann sie ein Verzeichnis als eine Textdatei vorstellen. In dieser Textdatei sind alle Dateien und Unterverzeichnisse enthalten. Jede Zeile dieser 'Textdatei' enthält den Namen der Datei sowie die I-Node-Nummer dieser Datei. Außerdem enthält unsere 'Textdatei' einen Verweis auf sich selbst (.) und einen auf das Übergeordnete Verzeichnis (..).
Der erste I-Node verweist auf das Wurzelverzeichnis. Im Wurzelverzeichnis befinden sich alle Informationen über die I-Nodes und Namen der darin gespeicherten Dateien und Unterverzeichnisse. Über die I-Nodes ist ein Zugriff zu diesen Dateien und Unterverzeichnissen möglich.

Feste Links

Mit festen Links kann von mehreren Orten in Verzeichnissen auf den selben I-Node einer Datei verwiesen werden. Die Datei auf die mehrere Links zeigen hat aber dennoch nur einen I-Node. Wir haben zum Beispiel in einem Verzeichnis die Datei 'hallo'. Nun erzeugen wir mit dem Kommando....

ln hallo hallo2

.....somit haben wir im Verzeichnis stehen die Datei 'hallo' und 'hallo2' mit der selben I-Node-Nummer was uns das Kommando....

ls -li

auch bestätigt. Sollten sie nun eine dieser Dateien ändern, egal welche, ändern sie somit auch die andere Datei. Löschen sie eine dieser Dateien, somit löschen sie nur einen Link der auf diese Datei zeigt.

Symbolische Links

Symbolische Links werden nicht nur, wie feste Links, für Dateien sondern auch für Verzeichnisse verwendet. Sie haben zum Beispiel im Fantasieverzeichnis.....

/usr/bin/programme/dateien/texte

...eine Datei Namens 'datei.txt' Nun müssen sie jedes Mal wenn sie auf dieses Unterverzeichnis zugreifen wollen eingeben.......

cd /usr/bin/programme/dateien/texte/

Einfacher könne wir uns dies mit Symbolische Links machen. Wir benutzen wieder unser 'ln' Kommando.....

ln -s cd /usr/bin/programme/dateien/texte/ meinetexte

Jetzt können sie ganz bequem auf unser Verzeichnis mit...

ls -l meinetexte/

...zugreifen. Um zu testen auf welches Verzeichnis unser neues symbolisches Verzeichnis zeigt können wir mit dem Kommando...

ls -l meinetexte

...testen. Sollten sie nun das Verzeichnis '/meinetexte' löschen so hat dies keine Auswirkung auf das Verzeichnis...

/usr/bin/programme/dateien/texte/

Gerätedatei

Bei Unix-und Linuxsystemen wird aus einer Gerätedatei genauso gelesen oder geschrieben wie von einer Datei. Es wird hierbei nicht der normale Dateizugriff aktiviert, sondern der entsprechende Gerätetreiber (device driver). Zwei Arten von Geräten sind dabei zu unterscheiden.....

  • Zeichenorientierte Geräte wie Terminal, Drucker, Monitor....
    Datentransfer erfolgt hierbei Zeichenweise
  • Blockorientierte Geräte wie z.B. Festplatte, Floppy.....
    Datentransfer erfolgt Blockweise


FIFO (First in first out, Named Pipes)

FIFO's dienen zur Kommunikation zwischen verschiedenen Prozessen und Synchronisationen. Auch FIFO's (Named Pipes) können im Prinzip wie einfache Dateien behandelt werden nur kann man aus diesen nur einmal lesen. Außerdem kann aus FIFO's nur in der Reihenfolge gelesen werden wie in diesen geschrieben wurde.

Sockets

Sockets dienen zur Kommunikation von Prozessen im Netzwerk. Man kann sie aber auch für den lokalen Rechner benutzen.

ReiserFS

Das Dateisystem ext2 wird wohl demnächst von dem Dateisystem ReiserFS. Als hervorhebende Vorteile von ReiserFS gegenüber ext2 darf man zählen...

  • Die Datengröße zur Verwaltung von Dateien kann bis in den Terrabytebereich erfolgen. ext2 macht schon bei großen Gigabyte-Festplatten schlapp.
  • Journaling Fähigkeit zur System-Wiederherstellung. Sie kennen das wenn Ihr System abgestürzt ist aus welchem Grund auch immer, beginnt das Tool fsck die Konsistenz des Dateisystems zu überprüfen und bei Bedarf wiederherzustellen. Bei Riesenfestplatten oder gar bei Fileservern kann das schon mal Stunden dauern. Mit dem Journaling wird das damit der Vergangenheit angehören.
  • Schnellerer Dateizugriff, speziell auf kleinere Dateien.


Natürlich gibt es noch weitere Dateisysteme wie z.B. XFS, JFS, ext3. Welches in Zukunft sich aber tatsächlich durchsetzen wird steht noch in den Sternen.

Ich hoffe Ihnen ein bisschen das Interna von Dateien und Verzeichnissen zu Linux näher gebracht zu haben. Diese kurze Einführung stellt nur einen kleinen Überblick da um die nächsten Kapitel etwas besser zu verstehen.

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf