SFS

Aus Lowlevel
Version vom 29. September 2010, 15:09 Uhr von Erik.vikinger (Diskussion | Beiträge) (→‎Vergleich mit anderen Dateisystemen: noch ein paar "Probleme" aufgezählt)
Wechseln zu:Navigation,

Achtung!

Achtung, alles was hier steht ist von extrem eingeschränkter Nützlichkeit und man sollte sich gut überlegen ob man das wirklich implementieren will!
Selbst das simple FAT ist dem SFS um Längen überlegen, u.a. weil SFS keine fragmentierten Dateien unterstützt und sich daher echter Schreibzugriff nur äußerst schwer und langsam implementieren lässt!
Siehe dazu auf die Diskussionsseite und in den Abschnitt Vergleich mit anderen Dateisystemen


Einführung

SFS (simple file system) verfolgt das Ziel sehr einfach implementierbar zu sein. Es kann auf Floppys und Festplatten verwendet werden.

Vorteile des SFS:

  • Einfacher Aufbau

Nachteile des SFS:

  • Keine native Unterstützung unter Linux, Windows oder anderen relevanten Betriebssystemen
    • Unter Windows existiert ein unvollständiges Tool, um auf SFS-Images zuzugreifen
  • Dateien müssen zusammenhängend sein, d.h. Schreibzugriff erfordert aufwändige und langsame Online-Defragmentierung
  • Die Defragmentierung kann nicht sicher implementiert werden (d.h. ein Absturz/Stromausfall während der Defragmentierung zieht zwangsläufig Datenverlust oder -korruption nach sich)
  • Flash-basierte Datenträger (USB-Sticks oder SSDs) könnten aufgrund des häufigen Defragmentierens schneller altern.

Aufbau

Das SFS teilt das Medium in fünf Bereiche auf.

  1. Superblock
  2. Reserved Area
  3. Data Area
  4. Free Area
  5. Index Area

Superblock

Der Superblock enthält wichtige Daten für den SFS Treiber.

Reserved Area

Dieser Bereich enthält Daten, die der SFS Treiber laut Spezifikation ignorieren muss und die der Programmierer frei verwenden kann, zum Beispiel für die Bootloader Stage 2.

Data Area

Der Datenbereich enthält alle Dateien, die das Dateisystem enthält.

Free Area

Die Free Area trennt die Data Area und die Index Area, d.h. wenn Dateien erstellt werden vergrößert sich der Datenbereich und die Free Area wird kleiner.

Index Area

Die Index Area enthält die Informationen über die Dateien.

Vergleich mit anderen Dateisystemen

Das SFS ist extrem simpel aufgebaut und erlaubt daher einfache Datei-Operationen wie das Lesen von Dateien mit recht wenig Code zu realisieren. Das Fehlen von komplexen Block-Verkettungen ermöglicht zwar einen leichten Einsteig, stellt aber gleichzeitig auch die größte Schwäche von SFS dar. Als weiteren Vorteil kann man die durchgängige Unicode-Unterstützung für die recht langen Dateinamen ansehen.

Für die Implementierung einer Schreibunterstützung sind bereits einige grundlegende Operationen nötig, die mit SFS sehr mühsam und nur unsicher (Gefahr von Datenverlust und Korruption!) zu erreichen sind, z.B. das Erstellen, Vergrößern oder Verkleinern von Dateien.

Auch ansonsten bietet SFS gegenüber anderen ähnlich simplen Dateisystemen, wie z.B. FAT, keine Vorteile. FAT kann recht flexibel mit fragmentierten Dateien umgehen und erlaubt daher einigermaßen simple Schreiboperationen. Dafür hat FAT mit seiner namensgebenden File-Alocation-Table gegenüber SFS einen etwas komplexeren Mechanismus, mit dem die Positionen der Datenblöcke auf dem Datenträger verwaltet werden. Man ist bei FAT selbst schon für das lineare Einlesen von Dateien gezwungen, einer Cluster-Kette zu folgen (was aber auch nicht so schwierig ist, zumindest einfach genug damit man das in einem 512 Byte-FAT-Boot-Sektor realisieren kann).

Lange Dateinamen sind in SFS recht simpel implementiert obwohl man auch dort mehrere "Entrys" benötigt, der Name wird dann über (mehrere) "Continuation Entrys" fortgesetzt. In diesem Punkt ist FAT etwas komplexer weil es immer noch parallel den kurzen (8.3) Dateinamen gibt der nach bestimmten Regeln mit gepflegt werden muss. Dafür sind bei FAT die Fortsetzungs-Einträge als solche zu erkennen was bei SFS nicht gegeben ist so das SFS hier einer höheren Gefahr von Datenfehlern ausgesetzt ist.

In den Verzeichnis- und Datei-Namen von SFS ist auch immer der gesamte Pfad enthalten. SFS selber unterscheidet nicht zwischen verschiedenen Verzeichnissen, alle Entrys liegen (ohne besondere Ordnung) in der einen Index-Area. Das macht es sehr langwierig alle Dateien eines bestimmten Verzeichnisses aufzulisten. SFS ist eher auf kleine Datenträger mit wenigen Dateien/Verzeichnissen ausgelegt (so das der SFS-Treiber eine komplette Liste im RAM halten kann).

SFS ist sehr darauf angewiesen das der benutzte Datenträger keine defekten Sektoren bekommt, in der Index-Area gibt es absolut keine Fehlertoleranz, wenn ein Eintrag defekt ist kann es passieren das alle folgenden (noch intakten) Einträge ebenfalls unbrauchbar sind.

Weblinks