File Allocation Table

Aus Lowlevel

Wechseln zu: Navigation, Suche
Diese Seite ist ein Artikel, welcher mehr haben könnte..

Wenn du mehr darüber weißt oder recherchieren willst, bist du aufgerufen, dies zu tun. Wenn du dir in einer Sache nicht sicher bist, dann stell es auf die Diskussionsseite.

FAT ist ein Dateisystem, das mit MS-DOS eingeführt wurde. Da PCs Ende der 70er Jahre meist noch keine Festplatten sondern nur Diskettenlaufwerke hatten, war dieses Dateisystem zunächst nur für die Kapazitäten von Disketten ausgelegt.

Es gibt drei Varianten, die sich vor allem hinsichtlich der unterstützten Datenträgergröße unterscheiden:

  • FAT12
  • FAT16
  • FAT32

FAT steht dabei für File Allocation Table und die Zahl gibt an wie groß die Einträge in dieser Tabelle sind. Mit FAT12 sind somit nur 212 Cluster adressierbar, mit FAT16 216 und mit FAT32 228.

Inhaltsverzeichnis

Aufbau von FAT

FAT wird in 5 Bereiche unterteilt:

Bootsektor

Der Bootsektor enthält den BIOS Parameter Block, den Bootloader und die Bootsignatur. Damit der BIOS Parameter Block nicht ausgeführt wird, sind seine ersten 2 Bytes eine JMP-Anweisung. Hinter dem BIOS Parameter Block folgt der Bootloader. Dieser ist unter FAT zwingend notwendig. Der Bootloader der von Windows für FAT benutzt wird, zeigt meistens nur eine Nachricht an, dass man die Diskette entfernen und den Computer neustarten solle.

In MS-DOS 1.0 war kein BPB vorhanden. Stattdessen gab es zwei Typen von FAT:

  • Single-Sided: Dieser Typ war für einseitige Disketten da
  • Double-Sided: Dieser Typ war dagegen für doppelseitige Disketten da.

Ab MS-DOS gab es den BPB, womit jetzt jedes FAT-System diesen braucht. (Die Verbreitung von MS-DOS 1.0 ist sehr gering. Deswegen wird nicht empfohlen, auf diese MS-DOS Version acht zu nehmen)

Offset Größe Beschreibung
0x00 3 Instruktion die den BIOS Parameter Block überspringt
0x03 8 OEM-Name. Der Name, der Software, die das FAT erstellt hat. Dieses Feld hat keinen Einfluss auf eigentliche Dateisystem.
0x0B 2 Sektor-Größe in Bytes. Gültig: 512, 1024, 2048 und 4096. Normal wird 512 verwendet.
0x0D 1 Cluster-Größe in Sektoren. Gültig: Zweierpotenz zwischen 1 und 64.
0x0E 2 Anzahl reservierter Sektoren inkl. Bootsektor.
0x10 1 Anzahl an File Allocation Tables. Normal gibt es immer 2 FATs
0x11 2 Maximale Anzahl an Einträgen im Wurzelverzeichnis (nur gültig für FAT16 und FAT32)
0x13 2 Anzahl an Sektoren. Wenn hier 0 steht, wird das Feld am Offset 0x20 benutzt.
0x15 1 Media-Descriptor:
  • 0xF0: Double sided, 80 Spuren, 18/36 Sektoren pro Spur
  • 0xF8: Festplatte
  • 0xF9: Double sided, 80 Spuren, 9/15 Sektoren pro Spur
  • 0xFA: Single sided, 80 Spuren, 8 Sektoren pro Spur (eventuell auch Ramdisk)
  • 0xFB: Double sided, 80 Spuren, 8 Sektoren pro Spur
  • 0xFC: Single sided, 40 Spuren, 9 Sektoren pro Spur
  • 0xFD: Double sided, 40 Spuren, 9 Sektoren pro Spur oder Double Sided, 77 Spuren, 26 Sektoren pro Spur
  • 0xFE: Single sided, 40 Spuren, 8 Sektoren pro Spur, Single Sided, 77 Spuren, 26 Sektoren pro Spur oder Double Sided, 77 Spuren, 8 Sektoren pro Spur
  • 0xFF: Double sided, 40 Spuren, 8 Sektoren pro Spur

Dieses Byte gilt als veraltet.

0x16 2 FAT-Größe in Sektoren. Bei FAT32 steht hier 0 und es wird das Feld bei Offset 0x24 benutzt.
0x18 2 Spur-Größe in Sektoren.
0x1A 2 Anzahl der Schreib-Lese-Köpfe.
0x1C 4 Anzahl an Sektoren vor dem Bootsektor (z. B. wenn das FAT auf einer Partition liegt)
0x20 4 Anzahl an Sektoren.

Die folgenden Daten unterscheiden sich wischen FAT12/FAT16 und FAT32.

FAT12 und FAT16

Offset Größe Beschreibung
0x24 1 Nummer des BIOS-Laufwerks
0x25 1 Reserviert
0x26 1 Erweiterte Bootsignatur
0x27 4 Dateisystem-ID
0x2B 11 Dateisystem-Name (mit Leerzeichen auf 11 Zeichen gefüllt). Wird nicht mehr verwendet.
0x36 8 FAT-Variante (mit Leerzeichen gefüllt). z. B.: "FAT12 " oder "FAT16 ".
0x3E 448 Bootloader
0x1FE 2 Bootsignatur: 0xAA55

FAT32

Offset Größe Beschreibung
0x24 4 FAT-Größe in Sektoren
0x28 2 FAT-Flags
0x2A 2 FAT32-Version
0x2C 4 Erstes Cluster des Wurzelverzeichnis
0x30 2 Info-Sektor. Sektor der Informationen über das Dateisystem enthält.
0x32 2 Sektor der Bootsektorkopie. (Microsoft empfiehlt nur 6 zu verwenden)
0x34 12 Reserviert
0x40 1 Nummer des BIOS-Laufwerks
0x41 1 Reserviert
0x42 1 Erweiterte Bootsignatur
0x43 4 Dateisystem-ID
0x47 11 Dateisystem-Name (mit Leerzeichen auf 11 Zeichen gefüllt). Wird nicht mehr verwendet.
0x52 8 FAT-Variante (mit Leerzeichen gefüllt). Immer "FAT32 ".
0x5A 420 Bootloader
0x1FE 2 Bootsignatur: 0xAA55

Reservierte Sektoren

Nach dem Bootsektor folgen optionale reservierte Sektoren. In diesen Sektoren kann z. B. ein Bootloader untergebracht werden, wenn der Platz im Bootsektor nicht reicht. Der Bootsektor wird von FAT zu den reservierten Sektoren dazugezählt.

File Allocation Table

In der File Allocation Table (kurz FAT) wird festgehalten, welche Cluster zu welcher Datei gehören. Wenn man das erste Cluster einer Datei hat, kann man es in der FAT nachschlagen und somit das nächste Cluster herausfinden. Außerdem kann man in der FAT leere Cluster finden, wenn man z. B. eine neue Datei anlegen will. Bei einer Beschädigung eines Clusters, kann dieses in der FAT auch als defekt markiert werden. Es wird dann nicht mehr zum Speichern von Daten verwendet.

Bedeutung FAT12 FAT16 FAT32
Freies Cluster 0x000 0x0000 0x00000000
Defektes Cluster 0xFF7 0xFFF7 0x0FFFFFF7
letztes Cluster einer Clusterkette 0xFF8-0xFFF 0xFFF8-0xFFFF 0x0FFFFFF8-0x0FFFFFFF
normales Cluster einer Clusterkette - - -

Bei einem normalen Cluster in einer Clusterkette gibt der Wert in der FAT das nächste Cluster +2 an. Man muss also den Wert aus der FAT nehmen, 2 subtrahieren und kann das nächste Cluster nachschlagen.

Wurzelverzeichnis

Bei FAT12 und FAT16 ist das Wurzelverzeichnis ein festgelegter Bereich auf dem Volume. Es bildet eine Tabelle aus Verzeichnis-Einträgen. Bei FAT32 wird das Wurzelverzeichnis wie jedes andere Verzeichnis auch behandelt und hat deshalb keinen festen Platz auf dem Volume.

Datei- und Verzeichnis-Datenregion

In der Datei- und Verzeichnis-Datenregion liegen die Datei- und Verzeichnis-Daten. Diese sind in Cluster verteilt. Um eine Datei Clustern zuzuordnen benutzt man die FAT.

Verzeichnis-Eintrag

Ein Verzeichnis-Eintrag enthält Meta-Daten zu einer Datei (bzw. einem Unterverzeichnis). Ein Verzeichnis-Eintrag enthält außerdem die Nummer des ersten Sektors.

Offset Größe Beschreibung
0x00 8 Dateiname ohne Erweiterung (mit Leerzeichen aufgefüllt). Der Dateiname darf nur aus Großbuchstaben bestehen und darf folgende Zeichen nicht enthalten: 0x22, 0x2A, 0x2B, 0x2C, 0x2E, 0x2F, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x5B, 0x5C, 0x5D, 0x7C.
0x08 3 Dateierweiterung (mit Leerzeichen aufgefüllt). Erlaubte Zeichen siehe Dateiname.
0x0B 1 Dateiattribute
Bedeutung
Schreibschutz
Versteckt
Systemdatei
Volume-Label
Verzeichnis
Archiv
Ungenutzt

Wenn die ersten 4 Bits (Bitmaske: 0x0F) gesetzt sind, handelt es sich um einen VFAT-Eintrag

0x0C 1 Reserviert
0x0D 5 Erstellungsdatum
Bedeutung
Dekasekunde (1 Dekasekunde entspricht 10 Sekunden)
Stunde
Minute
2 Sekunden
Jahr seit 1980
Monat
Tag des Monats
0x12 2 Datum des letzten Zugriffs
Bedeutung
Jahr seit 1980
Monat
Tag des Monats
0x14 2 Obere 16 bit des ersten Clusters (für FAT32)
0x16 4 Datum des letzten Schreibzugriffs
Bedeutung
Stunde
Minute
2 Sekunden
Jahr seit 1980
Monat
Tag des Monats
0x1A 2 Erstes Cluster +2 (man muss 2 subtrahieren um die eigentliche Clusternummer zu erhalten)
0x1C 4 Dateigröße in Bytes

Cluster

Ein Cluster ist auf jedem Datenträger die kleinste von FAT verwaltete Einheit und besteht aus einem oder mehreren (für gewöhnlich eine Zweierpotenz) Sektoren. Bei Disketten, die mit FAT12 formatiert sind, ist ein Cluster immer ein Sektor (also für gewöhnlich 512 Byte) groß. Somit nimmt auf der Diskette jede Datei mindestens 512 Byte in Anspruch, auch wenn sie tatsächlich nur ein Byte groß ist. Eine 2312 Byte große Datei würde dort fünf Cluster belegen und fast einen halben Cluster ungenutzt lassen. Größere Massenspeicher wie heutige Festplatten sind natürlich nicht mit FAT12 formatiert, sondern meistens mit FAT32 oder NTFS. Um NTFS kümmern wir uns in diesem Artikel aber nicht. Bei FAT32 kann man 2^28 Cluster adressieren. Meistens sind bei FAT32 acht Sektoren (also für gewöhnlich 4096 Bytes) zu einem Cluster zusammengefasst, somit nimmt dort jede noch so kleine Datei mindestens 4096 Byte in Anspruch.

VFAT

VFAT (Virtual File Allocation Table) ist eine Erweiterung für FAT. Sie kommt seit Windows 95 zum Einsatz und wurde entwickelt, um lange Dateinamen nutzen zu können. Beim normalen FAT wird der Dateiname und die Erweiterung in der 8.3-Form angegeben. Bei längeren Namen benutzt VFAT einen Aliasnamen (z. B.: xxxxxx~1.xxx), dessen Nummer hochgezählt wird. Der eigentliche Name wird über mehrere Verzeichniseinträge verteilt. Ältere Systeme sehen diese als ungültig an und ignorieren sie. Der Dateiname kann so bis zu 255 Zeichen enthalten. Außerdem werden auch das Erstelldatum und das Datum des letzten Zugriffs durch VFAT gespeichert.

Siehe auch

Weblinks

Persönliche Werkzeuge