Thiemo Mättig

FAT32-Dateisystem

Vortrag von Thiemo Mättig, II99, vorgetragen in Görlitz im Januar 2001.

Hardware

  • Mehrere rotierende, magnetische Scheiben.
  • Einteilung in Köpfe (englisch Heads), Zylinder, Sektoren und Spuren (Tracks).

Physikalische Aufteilung einer Festplatte in Köpfe, Zylinder, Sektoren und Spuren

  • Ein Sektor beinhaltet immer 512 Byte Daten (und ein paar Steuerdaten).
  • Gesamtzahl der Sektoren = Köpfe × Zylinder × Sektoren (bei Festplatten im „Normal“-Modus identisch mit den physikalischen Werten, im LBA-Modus wird bereits intern umgerechnet).
  • Eventuelle Partitionierung eines physikalischen in mehrere logische Laufwerke.
  • MBR (Master Boot Record) regelt unter anderem diese Partitionierung.
  • FAT32 ist durch den Partitionstyp 0Bhex (oder 0Chex) erkennbar.

Geschichte

  • FAT12 wurde 1977 für Microsofts „Disk Basic“-Interpreter entwickelt, danach Einsatz in DOS 1.
  • FAT16 entwickelt für DOS 2, keine Cluster und somit max. 32 MB.
  • Mit MS-DOS 4.0 erweitert, max. 128 MB.
  • Später um die Cluster-Abstraktion erweitert, somit max. 2 GB.

Cluster

  • Zusammenfassen von 4 bis 64 Sektoren zu Clustern.
  • Weniger ist ungünstig, weil die FAT dann zu groß wird (schlechter cachebar).
  • Mehr ist nicht möglich, weil ein Cluster dann 10000hex groß wäre (Konflikt mit 16-Bit-Registern).
Clustergröße Partitionsgröße bei FAT16 Partitionsgröße bei FAT32
2 KB weniger als 128 MB
4 KB weniger als 256 MB weniger als 8 GB
8 KB weniger als 512 MB weniger als 16 GB
16 KB weniger als 1 GB weniger als 32 GB
32 KB weniger als 2 GB 32 GB bis 2 Terabyte

Grundlagen

  • FAT = File Allocation Table (Dateizuordnungstabelle).
  • Nach dem Bootsektor folgen zwei FAT-Kopien sowie das Hauptverzeichnis.
  • Regelt Dateiname, Eigenschaften der Datei, Position auf der Festplatte.
  • Grundidee: Auffinden des ersten Clusters einer Datei über die Nummer im Verzeichniseintrag, dann als Verkettung über die Folgeclusternummern in der FAT.

Physikalische Aufteilung einer Datei auf Start- und Folgecluster

  • Auf Disketten heute noch FAT12, max. 212 = 4096 Cluster (eine 1,4-MB-Diskette hat 2880 Cluster).
  • Der Standard für Festplatten war jahrelang FAT16, max. 2 GB.
  • Seit „Windows 95 OEM Service Release 2“ (Windows 95b) FAT32, erweitert durch VFAT zur Unterstützung langer Dateinamen (LFN).
  • Eigentlich sind es nur 28 Bit, weil vier noch reserviert sind (ansonsten wären 128 TB möglich).

Die File Allocation Table

  • Ist im Grunde nichts weiter als eine Liste mit genausovielen Werten, wie es Cluster gibt.
  • Die „32“ bedeutet nichts anderes, als dass die Werte in der FAT je 32 Bit breit sind. Damit sind 232 = 4.294.967.295 Cluster addressierbar.
Bedeutung der FAT-Werte Wert bei FAT12 Wert bei FAT16 Wert bei FAT32
Unbenutzter Cluster 0
Folgeclusternummer 1 bis Clusteranzahl
Reservierter Cluster FF0hex bis FF6hex FFF0hex bis FFF6hex FFFFFFF0hex bis FFFFFFF6hex
Defekter Cluster FF7hex FFF7hex FFFFFFF7hex
EOF (End of File) FF8hex bis FFFhex FFF8hex bis FFFFhex FFFFFFF8hex bis FFFFFFFFhex

Die Verzeichniseinträge

  • Fast identisch zu FAT12/16.
  • Hinzugekommen sind zwei weitere Zeitangaben.
  • Erweiterung der Startclusternummer von 16 auf 32 Bit.
Offset Verzeichniseintrag bei FAT12/16 Verzeichniseintrag bei FAT32 mit VFAT
0 Dateiname (1–8 Zeichen, aufgefüllt mit Leerzeichen)
8 Erweiterung (0–3 Zeichen)
11 Attribute (Read-only, Hidden, System, Volume Label, Directory, Archive)
12 Reserviert Reserviert
14 Erzeugungsdatum (gerundet auf 2 s)
18 Datum des letzten Zugriffs (ohne Uhrzeit)
20 Höherwertiger Teil der ersten Clusternummer
22 Speicherdatum (gerundet auf 2 s)
26 Erste Clusternummer Niederwertiger Teil der ersten Clusternummer
28 Dateigröße (max. 2 GB)
  • Besonderheit: Cluster-Verschnitt ist der Grund, warum die Dateigröße gesondert abgelegt werden muss.
  • Besonderheit: Ungültige Datums- und Zeitwerte wurden manchmal von Viren genutzt.

Long File Name Support (LFN)

  • Auch FAT32 bietet keinen Raum für lange Dateinamen!
  • Kodierung der Verzeichniseinträge völlig identisch zu FAT12/16.
  • Kurzer Dateiname (SFN, 8.3 Zeichen) wird normal eingetragen.
  • Langer Dateiname (max. 255 Zeichen) wird auf maximal 20 Pseudo-Verzeichniseinträge verteilt (Maskierung mittels Attributen R, S, H und V).
  • Diese auf alle FAT-Versionen anwendbare Kodierung langer Dateinamen wird VFAT (Virtual File Allocation Table) genannt.
  • Besonderheit: Groß/Kleinschreibung wird angezeigt, bei der Arbeit mit Dateien jedoch generell ignoriert.

Löschen von Dateien

  • Verschieben in den Papierkorb ist nicht gleich Löschen.
  • Beim Löschen wird lediglich das erste Zeichen des kurzen Dateinamens mit dem Zeichen „σ“ (E5hex) überschrieben und alle zur Datei gehörenden FAT-Einträge auf 0 zurückgesetzt.
  • Wiederherstellung ist möglich (Undel/Undelete, Unerase), bei fragmentierten Dateien unter Umständen nur manuell.

Weitere Unterschiede

  • Das Stammverzeichnis kann im Gegensatz zu FAT16 verschoben werden und beliebig groß sein.
  • Die FAT-Kopie wird tatsächlich zur Fehlerkorrektur genutzt.
  • Bootsektor auf 2 Sektoren erweitert, enthält kritische Daten doppelt.

Kompatibilität

  • Bisher nutzbar von Windows 95b, 98, ME, 2000 und allen nachfolgenden Versionen.
  • Unterstüzt von Linux und BeOS.
  • Volle Integration in Windows (z. B. Format, FDisk, …).
  • Systemnahe Werkzeuge wie z. B. die Norton Utilities funktionieren nicht mehr.
  • Konverter FAT16 to FAT32, FAT32 to FAT16, FAT32 to NTFS, …

Quellen