05_Dateisysteme Flashcards
Charakteristiken der Dateinutzung
- Dateien sind meist klein (wenige KByte)
- Dateien werden häufig gelesen, selten geschrieben und kaum gelöscht
- Benutzung einer Datei durch mehrere Benutzer geschieht häufig (Zugriffsrechte)
- gleichzeitige Benutzung einer Datei durch mehrere Benutzer ist selten (Synchronisation)
Festplatten
- drehende, magnetisierbare Scheiben, über die Schreib-Lese-Köpfe positioniert werden
- Orientierung der Magnetisierung repräsentiert Speicherwert (links = 0, rechts = 1)
- Datenablage in Spuren (kompletter Kreis) -> unterteilt in Sektoren mit 512 Bytes („Block Device“)
- Sektor nur als Ganzes gelesen o. beschrieben
- enthält Prüfsumme
-
Partition = zusammenhängender Bereich von Zylindern (direkt übereinanderliegenden Spuren)
- max. 4 primäre Partitionen auf einer Festplatte
- Vorteil: nicht flüchtig

Festplatten
Adressierung
- LBA – Logical Block Address -> direkte Adressierung der Blöcke
- Controller sieht fortlaufend nummerierte Anzahl von Blöcken für Gerätetreiber (defekte Sektoren werden von Platte ausgeblendet) -> Umrechnung in Plattengeometrie über Firmware der Platte

Dateisichten
- Anwender sieht Datei als Bytestrom
- Festplattensektoren zu Dateien zusammengefasst und unter Dateinamen zur Verfügung gestellt
- Information darüber (Metadaten wie Zuordnung und Reihenfolge der Blöcke der Datei) auf Festplatte hinterlegt -> nach Abschalten erhalten
- Aufgabe des Gerätetreibers/Festplatte: reale Platte als Folge von intakten Sektoren anbieten = abstrakte Platte

Dateisysteme
Verzeichnisse
- als Baumstrukturen angelegt
- Wurzelknoten -> Verzeichnisse/Dateien -> ggf. Unterverzeichnisse/Dateien
- Dateien absolut über Pfad (Beginn mit „/“) oder relativ referenziert
- Links: Erweiterung der Baumstruktur zu Netzstruktur
-
Soft Links: enthalten Verweis auf andere Datei – keine Kopie -> Löschen: Ursprungsdatei erhalten
- Löschen der Ursprungsdatei: Link ins Leere
-
Hard Links: im Dateisystem weiterer Eintrag mit anderem Namen – selbe Zieldatei
- Löschen: Link-Zähler der Datei heruntergezählt
- Löschen des letzten Hard-Links: Inhalt der Datei gelöscht

Aufbau einer Festplatte
MBR = Master Boot Record - 512 Byte
- erster Sektor
- enthält 440 Byte Boot-Code -> beim Start vom BIOS in Hauptspeicher geladen u. ausgeführt
- 16 Byte lange Einträge für Lage und Typ von Partitionen auf der Festplatte
- mit UEFI: GUID Partition Table -> beliebig viele Partitionen
Partitionen
- nur 4 primäre Partitionen möglich
- extended partition: Schachtelung von sekundären Partitionen in primäre Partitionen
- enthalten jeweils Dateiverwaltungssystem

Dateisystem
Aufbau eines einfachen Dateisystems
Variante 1
- aufeinanderfolgende Blöcke mit Inhalt der Dateien füllen
- Lesezugriff auf fortlaufende Datenblöcke = zeitoptimal
- Problem bei Löschen oder Verlängern der Dateien
- viele kleine, freie Blöcke entstehen -> Speichern großer Dateien irgendwann unmöglich
- Anwendung: Datenträger nur einmal/als Ganzes beschrieben (z.B. CD-ROM)
Dateisystem
Aufbau eines einfachen Dateisystems
Variante 2
- Dateien mit veränderlicher Lage - Linked List
- Dateikopf mit Verweis auf ersten Nutzdatenblock
- Dateiname
- Dateityp
- Erzeugungszeitpunkt
- Datum der letzten Änderung
- Datum des letzten Zugriffs
- Eigentümer
- Gruppenzugehörigkeit
- Dateirechte
- Länge der Datei
- Verweise auf Datenblöcke
- solange Verweis auf nächsten Block, bis letzter zur Datei gehöriger Block erreicht ist
- Nachteil: bei Positionierungsbefehlen äußerst langsam, da sämtliche Blöcke eingelesen werden müssen, um z.B. letzten Block zu identifizieren

Dateisystem
FAT - Aufbau von FAT32-Partitionen
-
1. Sektor = Bootsektor: Bootcode d. Stufe 2 + Informationen über Dateisystem der Partition
- Anzahl Sektoren + Sektorgröße + Clustergröße + Typ, Beginn u. + Länge der FAT
-
FAT: File Allocation Table
- so viele Einträge, wie Partition Cluster hat
- statt Verkettung durch Zeiger in Datenblöcken -> Verkettung innerhalb der FAT
- in RAM geladen -> schnelle Positionierungen innerhalb der Datei
- Eintrag 0: freier Cluster
- Eintrag -1 (0xffff): letzter Cluster einer Datei
- Wurzelverzeichnis: Dateiköpfe aller Dateien und Verzeichnisse mit Verweis auf 1. Datenblock in FAT

Dateisystem
Indexbasiert: Ext2
Aufbau der Partition
- Partition nach Boot-Sektor in Block-Groups mit gleicher Größe aufgeteilt
- Vorteil: Verwaltungsinformationen nahe den Nutzdaten = Performanceverbesserung
- einige Block-Groups enthalten Kopie des Superblocks -> Reparatur des Dateisystems nach Systemabsturz
-
Superblock:
- Name + Typ + Gesamtanzahl der Blöcke und Inodes + Anzahl freier Blöcke und Inodes + Mount-Informationen + Blocknummer des ersten Inodes (verweist auf Dateiblöcke des Root-Verzeichnisses)
- Group-Deskriptor: Adressen der Verwaltungs-Bitmaps + Clusternummer der Inodes-Tabellen + Anzahl der Verzeichnisse, der freien Blöcke u. Inodes
-
Bitmap-Blöcke: je 1 Cluster groß (1kB o. 4 kB)
- Verwaltung von freien und belegten Dateiblöcken und Inodes

Dateisystem
Indexbasiert: Ext2
Inodes
- Elemente fester Länge
- verwalten alle Dateien inkl. Verzeichnisse
- enthalten u.a. Länge der Datei + Eigentümer + Informationen zu Erzeugungszeitpunkt + Typ (Datei, Verzeichnis, Pseudodatei, …)
- gestuftes Verfahren -> geringerer Verwaltungsaufwand
- 12 direkte Verweise in Inode eingetragen (Blockgröße von 4 kB -> 48kB Dateigröße abgedeckt = meiste Dateien)
- 1. Indirektionsstufe: Eintrag indirect_bl1 verweist auf Block, der Verweis auf Datenblöcke enthält
- 2. Indirektionsstufe: im Dateikopf Verweis auf Block, der wieder auf 256 Blöcke verweist, die Blocknummern der Nutzdatenblöcke enthalten
- 3. Indirektionsstufe: dreifache Indizierung

Dateisystem
Indexbasiert: Ext2
Verzeichnisse
Verzeichnis = Datei vom Typ „Directory“ -> enthält alle Einträge in dem Verzeichnis (Dateien und Verzeichnisse)
Inode-Nr. verweist auf Inode, die Datei verwaltet

Dateisystem
Indexbasiert: Ext4
- kompatibel zu Ext2, zusätzliche Erweiterungen
- schneller, da hintereinanderliegende Datenblöcke
- Blocknummern von 48 Bit auf der Festplatte und 32 Bit als logische Blocknummern in der Datei -> Datei kann 232 Blöcke groß werden -> bei 4kB Blockgröße: 232*216 = 248 = 16TB
- Einführung von Extents: Gruppe von Datenblöcken variabler Größe, hintereinander auf der Festplatte
- Zuordnung Extent–Datei: Blocknr. in der Datei + Anzahl Blöcke+ Adresse d. 1. Blocks auf der Festplatte
- Baumstruktur variabler Tiefe für Adressierung der Extents statt bis zu 3-stufige Indizierung der Nutzdatenblöcke
Dateisystem
Indexbasiert: Ext4
Inode
- 15 Felder für Adressierung der Blöcke und Indexblöcke -> jetzt Extent-Header und 4 Extent-Verweise
- > 4 Extents benötigt (große Dateien/stark fragmentierte Festplatte): Baum aus Extents angelegt

Dateisystem
Indexbasiert: Ext4
Beispiel mit 10 Datenblöcken

Dateisysteme
Mount
- bei Unix nur 1 Filesystem im Gegensatz zu Windows (dort Lauwerkbuchstaben C, D, E, …)
- jedes Dateisystem in jeder Partition muss bei Linux in ein bestehendes Dateisystem eingebunden werden, um erreicht zu werden -> auf beliebiges Verzeichnis im Baum abbilden
- Ausnahme: Root-Filesystem, das sofort nach dem Start eingebunden wird -> Vorgang = mount

Dateisystem
Konsistenzprüfung
- Systemabsturz oder Stromausfall gefährden die Konsistenz
- Datenblöcke und Metainformationen (Inodes, Indexblöcke) werden zu unterschiedlichen Zeitpunkten auf die Platte geschrieben -> Inkonsistenz bei Unterbrechung
- Mögliche Fehler:
- Verzeichniseintrag zu einer Datei fehlt
- Block ist als belegt gekennzeichnet, gehört aber zu keiner Datei
- Längeneintrag im Inode passt nicht zu den belegten Blöcken
- Prüfprogramm (fsck, CHKDSK) prüft Zuordnungen + stellt Konsistenz wieder her
- Inkonsistenz oft bei Wiederanlauf des Systems entdeckt -> Vermerkt im Superblock: „unmounted“
- Konsistenz der Metadaten vor Datenkonsistenz -> oft Datenverlust bei Reparaturen
Dateisystem
Konsistenzprüfung
Fehlertolerante Dateisysteme
- Ziel: Vermeidung von Inkonsistenzen
- fsck kann beim Booten lange dauern -> auch kaputte Dateisysteme sollten schnell wieder funktionieren -> fehlertolerante Systeme gebraucht
- Dateioperationen werden als Transaktionen verstanden
- für jede Transaktion Protokoll erstellt = Journal
- bei jeder Änderung erst Eintrag dann Ausführung
- bei Inkonsistenz mit Journal: Änderung gelöscht o. wiederholt
- Metadaten-Journaling: nur Metadaten (Inodes, Verweise) -> möglicher Datenverlust
- Vollständiges Journaling: Metadaten und Nutzdaten im Journal -> hoher Speicherbedarf , langsam
- Checkpointing: alte, abgeschlossene Transaktionen aus dem Journal entfernen
Dateisystem
Konsistenzprüfung
Copy on Write
- Konsistenz bleibt immer erhalten
- Blöcke nicht verändert, sondern neu geschrieben
- Nachteil: mehr Speicherbedarf bei Änderungen
-
Änderung eines Datenblocks in einer Datei-> Modifikation nur im Buffer Cache -> auf Festplatte an anderer Stelle neu geschrieben
- bei Absturz: Änderung verloren, Konsistenz erhalten
-
Änderung im Index-Block und in Inode eintragen-> neue geschrieben
- bei Absturz: Änderungen verloren, Konsistenz erhalten
-
Änderung im Superblock eintragen -> Überschreiben des Superblocks + überflüssige alte Blöcke freigegeben
- bei Absturz: neue Daten + Konsistenz erhalten
