Inhaltsverzeichnis

Die Dateisystem-Sammlung

Sechs Units, die fremde Dateisysteme lesen — jedes in einer eigenen Unit, weil sie sich im Aufbau grundlegend unterscheiden. Dazu eine siebte, die die Frage davor beantwortet: wo auf dem Datenträger fängt das Dateisystem überhaupt an?

std.fs (Datei-I/O) · Units-Übersicht · Guide: Fremde Dateisysteme lesen · Lyx OS: IOFS


Die Units

Unit Liest Aufbauprinzip Umfang
std.fs.part MBR und GPT Partitionstabelle — kein Dateisystem 12 Funktionen
std.fs.fat FAT12/16/32 Clusterkette in einer Zuordnungstabelle 21 Funktionen
std.fs.exfat exFAT Clusterkette, aber ganz andere Strukturen als FAT32 15 Funktionen
std.fs.ext4 ext2, ext3, ext4 Inode-Tabelle plus Extent-Bäume 13 Funktionen
std.fs.ntfs NTFS Master File Table, Attribute, Datenläufe 14 Funktionen
std.fs.squashfs SquashFS 4.0 komprimierte Metadatenblöcke, Inode-Referenzen 20 Funktionen

<WRAP center round important 90%> Alle sechs lesen nur. Schreiben verlangt bei jedem Format mehr als das Spiegelbild des Lesens: bei FAT die Pflege beider FAT-Kopien, bei exFAT zusätzlich Belegungsbitmap und Prüfsummen, bei ext3/ext4 und NTFS die Journalführung — und ein Schreiber, der das Journal nicht führt, macht aus einem Absturz einen Datenverlust. SquashFS ist von Haus aus nur lesbar; ein Abbild zu ändern hieße, es neu zu bauen (mksquashfs). </WRAP>


Das gemeinsame Muster

Alle Units arbeiten gleich: offener Deskriptor plus Byte-Versatz. Ob dahinter eine Abbilddatei, eine Partition oder ein ganzes Gerät liegt, ist ihnen gleich.

var fd:  int64 := open("/dev/sda"c, 0, 0);
var t:   PartTable := PartScan(fd, 512);          // wo faengt was an?
var off: int64 := PartByteOffset(t, 0);           // Byte-Versatz der 1. Partition

var vol: Ext4Volume := Ext4Mount(fd, off);        // dort einhaengen

Damit ist PartByteOffset das Bindeglied: sein Rückgabewert ist genau das, was FatMount, ExfatMount, Ext4Mount, NtfsMount und SquashMount als zweites Argument erwarten.

Schritt FAT exFAT ext4 NTFS SquashFS
Einhängen FatMount ExfatMount Ext4Mount NtfsMount SquashMount
Verzeichnis öffnen FatDirOpen ExfatDirOpen Ext4DirOpen (über NtfsFindInDir) SquashDirOpen
Eintrag holen FatDirNext ExfatDirNext Ext4DirNext NtfsDirCount SquashDirNext
Pfad auflösen FatFindPath ExfatFindPath Ext4FindPath NtfsFindPath SquashFindPath
Datei lesen FatReadFile ExfatReadFile Ext4ReadFile NtfsReadFile SquashReadFile

Die Namen folgen demselben Schnitt — der Aufbau dahinter ist jedes Mal ein anderer, und genau deshalb gibt es keine gemeinsame Oberschicht: eine Schnittstelle, die FAT-Clusterketten und NTFS-Datenläufe unter einen Hut zwängt, verliert bei beiden die Eigenheiten, auf die es beim Lesen ankommt.


Warum je eine eigene Unit


Grenzen im Überblick

Unit Nicht enthalten — und im Zweifel gemeldet, nicht geraten
std.fs.part Nur MBR und GPT; kein APM, keine BSD-Disklabels. Höchstens PART_MAX = 128 Einträge, damit ein beschädigtes Eintragsfeld nicht in eine unbegrenzte Belegung läuft
std.fs.ext4 Die doppelt indirekte Blockzuordnung (jenseits von 12 + n + n² Blöcken, bei 4-KiB-Blöcken erst über 4 GiB); still das Falsche zu liefern wäre schlimmer als die Meldung
std.fs.ntfs Komprimierte und verschlüsselte Dateien
std.fs.squashfs Erweiterte Attribute, Gerätedateien, Sockets. Welche Kompressionsverfahren wirklich gehen, sagt SquashCompressionUnterstuetzt

Prüfstand

Jede Unit hat einen eigenen Testlauf gegen echte Abbilder, die im Test erzeugt werden:

Unit Test Prüfungen
std.fs.fat tests/fat_test.sh 94
std.fs.exfat tests/exfat_test.sh 42
std.fs.ext4 tests/ext4_test.sh 53
std.fs.ntfs tests/ntfs_test.sh 33
std.fs.part tests/part_test.sh 47
std.fs.squashfs tests/squashfs_test.sh 37

Letzte Aktualisierung: 2026-09-05 — Seite neu angelegt; erhoben aus std/fs/*.lyx im Compiler-Repo.