|
|
| Zeile 1: |
Zeile 1: |
|
| |
|
| ==Interna '''Unix''' Dateisysteme==
| |
|
| |
| Generell werden die Verwaltungsinformationen von den eigentlichen Daten
| |
| getrennt. Die Verwaltungsdaten werden in so genannten Information Nodes - kurz
| |
| Inodes - gehalten, deren vereinfachten Aufbau diese Abbildung zeigt.
| |
| Jede Datei (und das gilt für jeden Dateityp) wird durch genau einen Inode
| |
| repräsentiert. Innerhalb einer Partition besitzt jeder Inode eine eindeutige
| |
| Nummer.
| |
|
| |
| [[Image:datsys.png|alt text]]
| |
|
| |
| Abbildung: Speicherung der Dateien mit Hilfe von Inodes.
| |
|
| |
| Im Laufe der Installation wird auf jeder Partition ein Dateisystem angelegt. Alle
| |
| '''Unix'''-Dateisysteme lassen sich in das in dieser Abbildung skizzierte Schema
| |
| einordnen
| |
|
| |
| [[Image:datsys2.png|alt text]]
| |
|
| |
| {| Border=1 Cellpadding=2
| |
| |Bootblock
| |
| |Der erste Block jeder Partition kann einen Bootloader (zum Start eines Betriebssystems) enthalten, er wird beim Einschalten des Rechners vom BIOS gelesen. Dieser Block existiert bei allen Dateisystemen.
| |
| |-
| |
| |Superblock
| |
| |Hier stehen Informationen zum Typ und internen Aufbau des Dateisystems. Der Inhalt ist also systemabhängig
| |
| |-
| |
| |Inode-Blöcke
| |
| |Inodes werden innerhalb der Filesysteme in Inode-Listen geführt, und sind definierte Datenstrukturen, die eine Datei eindeutig beschreiben und verwalten können.
| |
| Im einfachsten Fall stehen alle Inodes hintereinander auf der Platte.
| |
| Ist die Datei sehr klein (<= 60 Bytes), werden ihre Daten direkt im Inode
| |
| gespeichert, ansonsten verweist ein Eintrag im Inode auf einen (oder
| |
| mehrere) Datenblock, in dem nun der Inhalt der Datei gespeichert wird.
| |
| Reichen die in einem Inode referenzierten Blöcke (maximal 12) für eine
| |
| Datei nicht aus, zeigt ein Eintrag im Inode auf einen (oder mehrere)
| |
| Datenblock, welcher nun die eigentlichen Verweise zu den Datenblöcken
| |
| beinhaltet. Man spricht von einem einfach indirekten Block.
| |
| Bis zu dreifach indirekte Blöcke sind möglich, so dass theoretisch als
| |
| maximale Dateigröße 8 TByte bei einer Blockgröße von 4 KByte erzielt
| |
| werden ( [ 12 + 1024 + 1024*1024 + 1024*1024*1024 ] * 4 kb ). Durch
| |
| weitere Faktoren auf 32 Bit Architekturen ist dieser Wert bei Kernel 2.2
| |
| allerdings auf 2 GByte begrenz
| |
| |-
| |
| |Datenblöcke
| |
| |Gehört ein Block zu einer normalen Datei, dann stehen hier die Daten zu dieser. Gehört der Block zu einem Verzeichniseintrag, so enthält er den
| |
| Inhalt des Verzeichnisses, also eine Tabelle aus Dateinamen und
| |
| zugehöriger Inode. Ein Datenblock lässt (aus Sicht des Systems) keinen
| |
| Rückschluss auf den zugehörigen Inode zu.
| |
| Da die Blockgröße festliegt, wird im Falle, dass die Dateigröße diese
| |
| nicht erreicht, Plattenplatz verschwendet. In Anbetracht der
| |
| durchschnittlichen Dateigrößen in einem Unix-System hat sich 4096
| |
| Byte als optimale Blockgröße herausgestellt. Wählt man einen kleineren
| |
| Wert, erhöht sich zwar die mittlere Auslastung der einzelnen Blöcke,
| |
| allerdings benötigt man ggf. mehr indirekte Datenblöcke (sowie im
| |
| konkreten Falle des Linux-Dateisystems größere Bitmaps).
| |
| |}
| |
|
| |
| ==Optimierungen im '''Linux'''-Dateisystem==
| |
|
| |
| Schauen wir uns nun die Einteilung einer Partition im ext2 an:
| |
|
| |
| [[Image:qwe.png|alt text]]
| |
| Abbildung: Aufteilung einer ext2-Partition
| |
|
| |
| Scheinbar besitzt das ext2 keinerlei Änlichkeit mit herkömmlichen Unix-
| |
| Dateisystemen. Abgesehen vom Bootblock, aber über diesen verfügt bekanntlich
| |
| jedes Dateisystem. Aber das täuscht... Vergleichen wir einmal die Struktur einer
| |
| Gruppe mit dem Unix-Prinzip:
| |
|
| |
| [[Image:qwe2.png|alt text]]
| |
| Abbildung: Struktur einer ext2-Gruppe
| |
|
| |
| Superblock, Inode-Tabelle und Datenblöcke sind hier enthalten. Aber der Reihe
| |
| nach:
| |
|
| |
| {| Border=1 Cellpadding=2
| |
| |Superblock
| |
| |Die Superblöcke der einzelnen Gruppen sind exakte Kopien
| |
| des Superblockes aus Gruppe 0. Er enthält in einer 1024
| |
| Bytes großen Struktur alle wichtigen Informationen zum
| |
| Dateisystem, wie die Anzahl von Inodes und Datenblöcken
| |
| (gesamt/frei), Blockgröße der Datenblöcke (ein Inode ist
| |
| immer 128 Byte groß), Zeitpunkt des letzten Mountens,
| |
| Zähler der Anzahl der Mountvorgänge, Status, Zeit der
| |
| letzten Überprüfung usw.
| |
| |-
| |
| |Gruppendeskriptoren
| |
| |Hier wurde zusätzliche Sicherheit eingebaut. Die
| |
| Deskriptoren enthalten alle notwendigen Informationen zu
| |
| allen anderen Gruppen, um diese nach einem Defekt
| |
| restaurieren zu können. Sind in einer Gruppe also die
| |
| Verwaltungsinformationen (Superblock,
| |
| Gruppendeskriptoren oder Bitmaps) zerstört worden, können
| |
| diese repariert werden und die Daten sind weiterhin
| |
| verfügbar
| |
| |-
| |
| |Bitmaps
| |
| |Sie dienen dem schnellen Auffinden von freien
| |
| Inode/Datenblöcken. Ihre Größe entspricht der
| |
| Datenblockgröße und beschränkt die Anzahl der
| |
| Datenblöcke einer Gruppe (bei einer Blockgröße von 4096
| |
| Bytes sind es somit 32768).
| |
| |-
| |
| |Inodetabelle/Datenblöcke
| |
| |Hier gilt das schon in der allgemeinen Beschreibung gesagte.
| |
| |}
| |
|
| |
| Aber warum haben die ext2 Entwickler sich für eine solch komplizierte Struktur
| |
| entschieden?
| |
|
| |
| Weil die entscheidende Bremse auf heutigen Festplatten die Bewegung der
| |
| Schreib-Lese-Köpfe darstellt. Die gewählte Aufteilung stellt nun sicher, dass die
| |
| Datenblöcke relativ nahe bei den zugehörigen Inodes liegen. Also muss der
| |
| Schreib-Lese-Kopf nicht erst wild über die Platte eilen. Darüber hinaus wird
| |
| ebenso versucht, die Inodes der Dateien nahe dem zugehörigen Verzeichnis-Inode
| |
| zu halten. Und beim Allokieren von Speicher für eine neue Datei werden
| |
| vorsorglich gleich mehrere (hintereinander liegende) Datenblöcke reserviert,
| |
| obwohl sie womöglich niemals benötigt werden (beim Schließen der Datei oder
| |
| bei Bedarf werden alle vorgemerkten, aber nicht benötigten Blöcke freigegeben).
| |