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