Linux Dateisystem: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Die Seite wurde neu angelegt: „ ==Interna '''Unix''' Dateisysteme== Generell werden die Verwaltungsinformationen von den eigentlichen Daten getrennt. Die Verwaltungsdaten werden in so genan…“
 
Die Seite wurde geleert.
Markierung: Geleert
 
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).

Aktuelle Version vom 25. August 2021, 10:18 Uhr