Wichtigste Größe in einem UNIX-Dateisystem und damit auch in ext2 sind die Inodes
(oder auch Informationsknoten), die mit Ausnahme des Dateinamens alle für eine Datei
relevanten Daten enthalten. So werden hier gespeichert:
Benutzer- und Gruppen-ID
Zugriffsrechte
Größe der Datei
Anzahl der Links, die auf diese Datei verweisen
Daten der Erstellung, letzten Änderung oder Löschung dieser Datei
Verweise auf die ersten zwölf Blöcke dieser Datei
wenn nötig: Ein-, zwei- oder gar dreifach indirekte Verweise auf weitere Datenblöcke
Eine Datei besteht also aus ihrem entsprechenden Inode und aus mehreren Datenblöcken,
die die eigentlichen Daten enthalten. Die Verwaltungsinformationen im Inode und der eigentliche
Dateninhalt der Datei sind vollkommen getrennt und können auch unabhängig voneinander bearbeitet werden.
Wer eine Datei in ein neues Verzeichnis verschiebt, ändert den Inode und die entsprechenden
Verzeichniseinträge, aber niemals wird er die Daten direkt ändern.
Umfasst eine Datei mehr als 12 KByte (12 mal 1024 Byte oder zwölf Datenblöcke),
birgt ein weiterer Inode im Inode einen Verweis auf einen Block, der selbst keine Daten,
dafür aber Verweise auf bis zu 256 weitere Datenblöcke enthält. Hier spricht man vom
einfach indirekten Verweis. Bei Dateien einer über einer Größe von 268 KByte
(12 Blöcke direkt referenziert, 256 einfach indirekt) verweist ein weiter Inode
auf einen Block, der auch selbst wieder auf 256 Datenblöcke zeigt, die wiederum
selbst auf 256 Datenblöcke zeigen können. In diesem Fall redet man vom zweifach
indirekten Verweis. Natürlich lässt sich auch ein dreifach indirekter Verweis realisieren.
Struktur eines Inodes (ext2fs), Größere Dateien benötigen mehr Plattenzugriffe,
weil mehr indirekte, doppelt-indirekte oder sogar dreifach-indirekte Blöcke benötigt werden. [ 3]
Dadurch, dass die Platte in Blöcke gleicher Länge unterteilt wird entsteht in
jedem Block, der nicht komplett gefüllt wird ein Bereich, der zwar leer ist dennoch
aber als belegt ausgewiesen wird. Der Verschnitt beträgt im Mittel 50% der Größe eines Blockes.
Man kann also davon ausgehen, dass der letzte Block jeder Datei im Mittel nur zu 50% belegt ist.
Bei einer Blockgröße von 1024 Byte und 100.000 Dateien entspricht das also einem
Verschnitt von ca. 50 Mbyte.
External fragmentation bezeichnet die Situation, in der die Blöcke einer Datei
auf dem Speichermedium (Festplatte) verteilt und nicht zusammenhängend gespeichert werden.
Dies hat zur Folge, dass Operationen, die auf diese Datei ausgeführt werden,
langsamer ablaufen, da mehr Schreib-/Lesekopf - Bewegungen benötigt werden.
Extents sind Bereiche zusammenhängender Blöcke wie sie von verschiedenen
Dateisystemen und auch Datenbanksystemen verwendet werden.
Ein Verweis auf einen solchen Extent besteht aus drei Angaben. Der Anfangsadresse,
der Länge und dem Offset. Die Anfangsadresse gibt die Adresse des ersten Blockes an,
die Länge ist die Anzahl der zugehörigen Blöcke und Offset gib an, welche Position
der erste Block in dem gesamten File hat.
Extents : Speichern einer 1.041.377 bytes großen Datei
Speichern in einem Stück (1 Extent)
flag not discussed here
offset 0 /* the beginning of the file */
length 1017 /* 1017 1KB aggregate blocks */
address xxxx /* aggregate block # */
Speichern in drei Teilen (3 Extents)
xad #0:
flag not discussed here
offset 0 /* the beginning of the file */
length 495 /* 495 1KB aggregate blocks */
address xxxxx /* aggregate block # */
xad #1:
flag not discussed here
offset 495 /* the beginning of the file */
length 22 /* 22 1KB aggregate blocks */
address yyyyy /* aggregate block # */
xad #2:
flag not discussed here
offset 517 /* the beginning of the file */
length 500 /* 500 1KB aggregate blocks */
address zzzzz /* aggregate block # */
Das Virtual File System (VFS) stellt eine einheitliche Schnittstelle zwischen
Betriebssystem und verschiedenen Dateisystemen zur Verfügung, so daß man mittels
einer einheitlichen Benutzerschnittstelle auf die verschiedenen Dateisysteme zugreifen kann.
Dies ermöglicht, dass ein "vi myfile.foo" auf einem ext2 genauso läuft wie auf einem
ReiserFS, DOS oder JFS.