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, 08:18 Uhr