Dateisystem FAT16
( File Allocation Table Dateizuordnungstabelle)
Wenn ein Speichermedium formatiert wird, bekommt es ein Dateisystem. Formatieren kann man sich vorstellen wie Aufstellen von Regalen mit Fächern und Anlegen eines Ordners mit Informationen in welchem Fach welche Sachen sich befinden und welche Sachen zusammengehören. In diesem Ordner sind auch Kaputte und leere Fächer markiert
| < |
|
Beispielprogramm mit Erklärung, zum Finden und Auslesen einer Datei von mit FAT16 formatierter MMC - Karte |
FAT-Strukturen
Bestehen aus 5 Bereichen. Die sind in folgender Tabelle aufgelistet. In der
Tabelle sind auch Formeln zum berechnen des Anfangs jeweiligen Bereiches angegeben.
| Name | Anfang Sektor |
| Master Boot Record | =0 |
| Volume Boot Record | =1C8h(4Byte) in Master Boot Record |
| FAT-Einträge | = Volume Boot Record + 0Eh(2Byte) in Volume Boot Record |
| Verzeichniseinträge | = FAT-Einträge + (16h(2Byte) * 10h(1Byte)) in Volume Boot Record |
| Datenbereich (Cluster 0) | = Verzeichniseinträge + (11h(2Byte) * 32 / 512 )in Volume Boot Record |
Sektorgröße ist immer 512 Byte. Diese Zahl ist auch in Volume Boot Record Position 0Bh(2Byte) in Bytes angegeben.
Ein Cluster bildet mehrere zusammengefasste Sektore. Um rauszufinden, wie viel Sektoren in einem Cluster sind, schauen Sie in folgende Tabelle.
| Datenträger Größe | FAT16 Cluster Größe | FAT32 Cluster Größe | NTFS Cluster Größe |
| 7 MB–16 MB | 2 KB | nicht unterstützt | 512 Bytes |
| 17 MB–32 MB | 512 Bytes | nicht unterstützt | 512 Bytes |
| 33 MB–64 MB | 1 KB | 512 Bytes | 512 Bytes |
| 65 MB–128 MB | 2 KB | 1 KB | 512 Bytes |
| 129 MB–256 MB | 4 KB | 2 KB | 512 Bytes |
| 257 MB–512 MB | 8 KB | 4 KB | 512 Bytes |
| 513 MB–1 GB | 16 KB | 4 KB | 1 KB |
Anzahl der Sektoren in einem Cluster sind auch in Volume Boot Record Position
0Dh(1Byte) angegeben.
Er enthält Informationen über die Festplatte und ihre Partitionen.
| Adresse | Beschreibung | Größe |
| 000h | Hauptstartprogramm (Master Boot Code) | 446 Bytes |
| 1BEh | 1. Partitionseintrag | 16 Bytes |
| 1CEh | 2. Partitionseintrag | 16 Bytes |
| 1DEh | 3. Partitionseintrag | 16 Bytes |
| 1EEh | 4. Partitionseintrag | 16 Bytes |
| 1FEh | BIOS-Signatur (55h AAh) | 2 Bytes |
Erste Partitioneintrag enthält folgende Informationen
| Adresse | Beschreibung | Größe |
| 00h | Status der Partition: 0 wenn inaktiv, 80h wenn aktiv. | 1 Byte |
| 01h | Der Sektor, auf dem die Partition beginnt (Bits 0-5) und der Zylinder, auf dem die Partition beginnt (Bits 6-16). | 1 Byte |
| 02h | Zylinder, auf dem die Partition beginnt | 1 Word |
| 04h | Partitionstyp (1h-FAT12, 4h-FAT16<32Mb, 6h-FAT16>32Mb, Bh-FAT32) | 1 Byte |
| 05h | Der Kopf, auf dem die Partition endet. | 1 Byte |
| 06h | Der Sektor, auf dem die Partition endet (Bits 0- 5) und der Zylinder, auf dem die Partition endet (Bits 6-16). | 1 Word |
| 08h | Abstand zwischen MBR-Sektor und dem ersten Sektor der Partition in Sektoren | 1 Double Word |
| 0Ch | Gesamtzahl der Sektoren in der Partition | 1 Double Word |
Befindet sich in einer Partition und enthält Informationen über Formatierung dieser Partition.
| Adresse | Beschreibung | Größe |
| 00h | Sprunganweisung + NOP | 3 Bytes |
| 03h | OEM Name | 8 Bytes |
| 0Bh | Anzahl der Bytes pro Sektor auf der Festplatte | 1 Word |
| 0Dh | Die Anzahl der Sektoren pro Cluster | 1 Byte |
| 0Eh | Anzahl der reservierten Sektoren | 1 Word |
| 10h | Anzahl der Kopien der FAT, üblicherweise 2 | 1 Byte |
| 11h | Anzahl der möglichen Einträge im Hauptverzeichnis: 512 bei FAT16 | 1 Word |
| 13h | Anzahl der Sektoren in kleineren Partitionen | 1 Word |
| 15h | Hexadezimalwert F8 für Festplatten; F0 für Disketten | 1 Byte |
| 16h | Sectors Per FAT | 1 Word |
| 18h | Sectors Per Track | 1 Word |
| 1Ah | Number of Heads | 1 Word |
| 1Ch | Reservierte Sektoren am Beginn der Festplatte | 1 Double Word |
| 20h | Gesamtzahl der Sektoren in der Partition | 1 Double Word |
| 24h | Laufwerksnummer. Die erste Festplatte trägt 80h, die zweite 81h usw | 1 Word |
| 26h | Erweiterte Boot-Signatur (29h) | 1 Byte |
| 27h | Seriennummer des Datenträgers | 1 Double Word |
| 2Bh | Datenträgerbezeichnung | 11 Bytes |
| 36h | FAT Name (FAT16) | 8 Bytes |
| 3Eh | Executable Code | 448 Bytes |
| 1FEh | Signatur (55h AAh) | 2 Bytes |
Jeder Eintrag ist 2 Byte Groß und seine Position entspricht einem Cluster in
Datenbereich.
Eintraginhalt sagt über Zustand des Clusters aus oder hat Nummer nächstes Clusters
einer Datei.

| 0000 | Unbenutzter Cluster |
| 1 bis Cluster-Anzahl | Die Nummer des Clusters mit dem nächsten Abschnitt der Datei |
| FFFF0h -FFFF6 | Reservierter Cluster |
| FFF7 | Defekter Cluster |
| FFF8h - FFFFh | Ende der Datei (Diese Position entspricht dem letzten Cluster einer Datei ) |
In dem Beispiel fängt Datei "HaloWelt.txt" in Cluster 05h an. In
FAT - Tabelle auf Position 05h steht FFFFh ; das heißt, dass Datei "HaloWelt.txt"
kein weiterer Cluster benötigt. In Datenbereich in Cluster 5h ist Text der Datei
zu finden.
Datei "Format.exe" fängt mit Custer 6h an und belegt 3 Clustern hintereinander.
Datei "Zerstuke.exe" fängt mit Custer Ch an und belegt 3 Clustern
in verschiedenen Stellen des Datenträgers.
Cluster 9h ist als "defekt" markiert.
Erste 2 Stellen in FAT sind reserviert, aber in Datenbereich fangen Daten mit
Cluster 0 an.
Deswegen :
Cluster in Datenbereich = (Clusternummer in FAT) - 2
Das ist in oberer Abbildung nicht berücksichtigt um das Verstehen der Struktur
zu vereinfachen.
| Adresse | Größe | Value |
|---|---|---|
| 0h | 8 Bytes | Name |
| 8h | 3 Bytes | Erweiterung |
| 0Bh | Byte | Dateiattribute
(00ARSHDV)0: unused bitA: archive bit,R: read-only bitS: system bitD: directory bitV: volume bit |
| 16h | Word | Uhrzeit |
| 18h | Word | Datum |
| 1Ah | Word | Erster Cluster |
| 1Ch | Double Word | Größe |
In entsprechenden Cluster fangen die Dateidaten ohne Vorwarnung an. Wenn der letzte Cluster nicht voll ist haben restlichen Byts Wert 00h . Also wenn eine Datei enthält nur ein Byte, wird diese Datei 1Kb Speicherplatz belegen (bei Claster = 2 Sektore). Restliche 1023 Bytes haben Nullen drin. Um letzte Byte der Datei zu ermitteln, muss man Dateigröße in dem Verzeichniseintrag Position 1Ch(4Byte) auslesen und von diesem Wert (Clasteranzahl der Datei -1)*Clastergröße abziehen.
Bei einer Festplatte:
Master Boot Record wird mit fdisk.exe gemacht.
Volume Boot Record wird mit format.exe gemacht.
Mit Datendefragmentierung werden Claster einer Datei hintereinander zugeordnet
(wenn möglich).
Scandisk.exe vergleicht Kopien der FAT-Tabellen und überprüft, ob die Dateigröße
mit Clusteranzahl übereinstimmt. Ein Claster darf auch nicht zwei Dateien gehören
oder 2 mal in einer Datei auftauchen.
Beispielprogramm mit Erklärung, Beschreibung zentralen Funktionen.