Edit v5.001 from 2009-05-07 to 2023-06-02 by HSc+TSc+FSc
FAT12 - File Allocation Table 12Bit Adressierung
Wir Untersuchen einen Datenträger und zeigen ihnen was dabei herausgekommen ist. Dieses Ablagesystem wurde bis Heute hauptsächlich auf 3,5/5,25 Zoll Disketten gebraucht. Aufgrund abweichender logischer Geometrien und der Tatsache, dass der BIOS Parameter Block (BPB) erst mit DOS 2 eingeführt wurde, können jedoch (mit Ausnahme von SCP MS-DOS 1.25) weder MS-DOS noch PC DOS auf unter 8086er-DOS formatierte Medien zugreifen.
Und falls es mal defekt ist, sollte der welcher es repariert, genau wissen wie es funktioniert, um die Daten restaurieren zu können. Und genau um diesen physischen Aufbau geht es hier, Anhand unseres Kundenwunschs, können sie Nachvollziehen wie das Genau funktioniert.
PS: Die Originaldaten werden so dargestellt wie auf den Datenträger gespeichert. Wird der Inhalt analysiert, wird an die Zahl das Zahlenformat:
- B=Binär in Byte,
- D=Dezimal oder
- H=Hexadezimal angefügt.
Übersichtstabellen
Eine 12 Bit-Adressierung, damit kommt man auf 4096 Cluster = 212. Da bei FAT12 ein Cluster 512 Byte groß ist, könnte man 4096 Cluster = 2 MByte nummerieren und aussprechen.
Der Bootsektor
Eintrag | Cluster | |
---|---|---|
Position | Anzahl | |
Bootsektor | 0 | 1 |
FAT 1 | 1 - 9 | 9 |
FAT 2 | 10 - 18 | 9 |
Stammverzeichnis | 19 - 32 | 14 |
1. Cluster für Dateien und Verzeichnisse | 33 |
Der erste Sektor mit dem Ladeprogramm wird Bootsektor genannt und ist für das Laden des Betriebssystems zuständig. Er selbst enthält Informationen über die nachfolgenden Sektoren und deren Nutzung, und damit weiß das Ladeprogramm, wo was steht.
Der Bootsektor geht nun noch bis zum Offset 01FEH, jedoch unterscheidet sich der Bootsektor ab Offset 024H bei den verschiedenen FAT-Versionen. Die Beschreibung ab Offset 024H (Siehe Tabelle 1)
Offset | Länge in Byte | Inhalt |
---|---|---|
00H | 3 | Sprunganweisung als x86-Maschinencode zum Boot-Programm. Damit werden die Datenbytes des Bootsektors übersprungen. Beispiel: EB 3C 90 gibt dem Prozessor die Anweisung JMP SHORT 03EH; NOP, welche den Zeiger zu Offset 03EH springen lässt. |
03H | 8 |
Speichert einen OEM-Namen,
welcher solange mit Leerzeichen gefüllt wird,
bis er 8 Byte lang ist.
Laut Definition kann der Name frei gewählt werden,
wobei jedoch MSDOS den Begriff
|
0BH | 2 | Gibt an, wie viel Bytes ein Sektor hat. Der Standardwert bei FAT12 ist 512 Byte bis 4096 Byte. |
0DH | 1 | Gibt an, wie viel Sektoren ein Cluster hat. (Zweierpotenz zwischen 1 und 64, ggf. auch 128) |
0EH | 2 | Anzahl reservierter Sektoren ab dem Bootsektor. Dieser muss mind. 1 sein, weil der Bootsektor selbst mitgezählt wird. |
10H | 1 | Anzahl der Sicherheitskopien der Dateizuordnungstabelle. Es muss mindestens 1 Sicherheitskopie vorhanden sein. FAT32 erlaubt sogar 2 Sicherheitskopien. |
11H | 2 | Maximale Anzahl an Verzeichniseinträgen im Stammverzeichnis. Bei FAT32 wird diese Angabe nicht benutzt, also 00 00. |
13H | 2 | Gesamtsektoranzahl des Mediums. Maximal 65.535, bei größeren Medien ist dieser Wert 0 und der eigentliche Wert steht als 4-Byte-Wert an Offset 20. Bei FAT32 wird somit diese Angabe nie benutzt. |
15H | 1 |
Das sog. Media Descriptor Byte. Dieser beschreibt im Wesentlichen den Datenträgertyp. Folgende Typen gibt es:
|
16H | 2 | Anzahl der Sektoren pro FAT. (Bei FAT32 ungenutzt und stets 00 00, siehe Offset 24.) |
18H | 2 | Sektoren pro Spur. |
1AH | 2 | Anzahl der Seiten bzw. Schreib-Lese-Köpfe. |
1CH | 4 |
Anzahl der verstecktenSektoren vor dem Bootsektor. Bei Festplatten ist dies die Anzahl der Sektoren zwischen MBR (= Master Boot Record) und dem Bootsektor der Partition. Bei nicht partitionierten Medien (ohne MBR) stets 0. |
20H | 4 | Gesamtsektoranzahl, falls größer als 65.535. |
24H | 1 | Physische BIOS-Laufwerksnummer (00H bei Disketten, 80H, 81H, bei Festplatten). Ist nur für Bootlaufwerke relevant, da diese Nummer beim Booten für BIOS-Aufrufe zum Zugriff auf das Medium benutzt wird. |
25H | 1 | Reserviert. |
26H | 1 | Erweiterte Bootsignatur. |
27H | 4 | Dateisystem-ID (Seriennummer). Wird beim Anlegen des Dateisystems erzeugt und dient der Unterscheidung verschiedener Medien (z.B. bei Wechselmedien). |
2BH | 11 | Name des Dateisystems (durch Leerzeichen aufgefüllt). Veraltet. Wurde durch einen speziellen Verzeichniseintrag im Stammverzeichnis abgelöst. |
36H | 8 | FAT-Variante, mit Leerzeichen aufgefüllt, z.B. FAT12 . |
3EH | 448 | x86-Maschinencode des Bootloaders. |
1FEH | 2 | BIOS-Bootsektorsignatur. Enthält die beiden Werte 55 AA, anhand derer das BIOS beim Booten einen gültigen Bootsektor erkennt. |
FAT Funktion
Bedeutung | Wert |
---|---|
Freie Cluster | 000H |
Folgeclusternummer | 002H bis FF6H |
Defekter Cluster | FF7H |
letzter Cluster einer Clusterkette | FF8H - FFFH |
Um die FAT auslesen zu können muss man sie Nachvollziehen und
verstehen können.
Anhand der Abb. fat12e versuche ich ihnen zu verdeutlichen,
wie und wo der Bytestrom
der FAT entlang fließt.
Die FAT-12-Bit Adresse besteht jeweils aus
1,5 Nibbles
(z.B FF0
),
das heißt:
-
Ein ganzes Byte (z.B
F0
) und -
Ein halbes Byte (z.B
F
).
Aufgabe der FAT ist es die Teile der Daten zu
nummerieren und zu
zuordnen, es entsteht ein
Bytestrom
,
(siehe Bsp. Analyse FAT)
der erst wieder aufhört bis das Ende erreicht wurde (FFF
).
Also anders gesagt, in der FAT ist
gespeichert wo sich die Position von Teilen der
Daten befinden, sodass sie nach einander zusammen
geführt werden.
Es entsteht eine Reihenfolge,
die in der Regel nicht hintereinander sein muss.
Es kann weit entfernte Positionen zum Vorgänger-Teil der Datei
bestehen.
Dies kann in der FAT ausgelesen werden.
Es beginnt entweder mit 2x Lows und
1x High (LHL
),
oder 2x High und
1x Low (HLH
).
Dies wiederholt sich immer wieder,
bis das Ende der Datei erreicht wurde.
Die Gesamtanzahl der Cluster kann entnommen werden,
indem man die Nibble
(=1 Byte) zählt,
bis das Ende FFF
erreicht wird.
Verzeichniseintrag im Stammverzeichnis
Bit Nr. | Beschreibung |
---|---|
0 | Read-Only: Die Datei kann mit DOS-Operationen nur gelesen, aber weder beschrieben noch gelöscht werden. |
1 | Hidden: Die Datei ist versteckt, d.h erscheint bei einem DIR-Befehl nicht. |
2 | System: Die Datei ist Bestandteil der Betriebssystemdateien (erscheint nach DIR auch nicht) |
3 | Volume Label: Der Eintrag ist keine Datei, sondern der der Diskette/Festplatte (einen solchen Eintrag sollte es nur im Hauptverzeichnis geben). |
4 | Subdirectory: Der Eintrag ist keine Datei, sondern ein Unterverzeichnis. |
5 | Archiv: Dieses Bit wird gesetzt, wann immer eine Datei geändert wird. Backupprogramme wie BACKUP oder XCOPY löschen das Bit nach der Sicherung. Damit ist es möglich, nur Dateien zu sichern, die seit der letzten Sicherung auch wirklich verändert wurden |
6 | unbenutzt |
7 | unbenutzt |
Start | Länge | Inhalt |
---|---|---|
0 | 8 | Dateiname, linksbündig. (ggf. mit Leerzeichen aufgefüllt. |
8 | 3 | Dateinamenserweiterung, linksbündig. (ggf. mit Leerzeichen aufgefüllt) |
11 | 1 | Attribute der Datei, siehe Tabelle 3. |
12 | 10 | reserviert. |
22 | 2 | Uhrzeit der letzten Dateiänderung, siehe Tabelle 5. |
24 | 2 | Datum der letzten Dateiänderung, siehe Tabelle 6. |
26 | 2 | Nummer des Clusters, mit dem die Datei beginnt. |
28 | 4 | Größe der Datei in Bytes |
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Jahr 0 bis 119 | Monate von 1 bis 12 | Tag von 0 bis 31 |
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Stunden von 0 bis 23 | Minuten von 0 bis 59 | Sekunden von 0 bis 30 |
Formeln
Aus dem Stammverzeichnis wird von der Datei oder des Unterverzeichnis,
die
Nummer
des
Eintrages
in
der
FAT
(=NdEidF)ausgelesen und die 2 bereits belegten Einträge abgezogen. |
Zu dem Ergebnis muss noch
33D = 21H
für die Verwaltung des Datenträgers hinzugerechnet werden,
um die
Position
des
ersten
Clusters
des
Elementes
(=PdECdE)zu ermitteln. |
PdECdE = (NdEidF-2) + 33 |
Um die Adresse des Cluster im Verzeichnis herauszubekommen, müssen wir nachdem wir alles errechnet haben, das Ergebnis mit der Zahl 512 (1 Cluster) Multiplizieren. |
AdC = PdECdE * 512 |
Der
Anfang
in
der
FAT
kann berechnet werden,
indem sie NdEidF mit
der 12Bit-Eintragsstruktur (1,5) multiplizieren,
zu diesem Ergebnis wird 1 Cluster (512) summiert.
|
AidF = (NdEidF * 12Bit-Eintrag) + 512 |
Mit diesem Ergebnis haben sie den Anfang in der FAT gefunden und können den Byte Strom verfolgen. |
Gelieferte 3,5" HD Diskette
Der Kunde hat uns die Diskette geliefert mit dem Ergebnis der Formatierung und der aufgelisteten Disketten Inhalte. Es soll explizit die Dateien:
-
FAT12.LOG
im TMP-Ordner
undT1024.txt
imDisketten-Ordner
untersucht und ausgelesen werden. (FSc: Plus die Defekten Sektoren und deren Größe)
Inhalt
Der Aufbau einer Diskette mit FAT12 ist anders als der einer Festplatte. Die Adressierung mit 12 Bit ist gleich. Hier muss vor der ersten Verwendung keine Partition angelegt werden, damit gibt es keine Partition Tabelle. Sondern es braucht nur Formatiert zu werden. Das haben wir mit folgenden Ergebnissen getan.
Verzeichnisstruktur laut DOS-Befehl
Danach haben wir die Verzeichnisse analysiert und Dateien gefunden in folgender Struktur:
Analyse
Hier steht das was wir herausgefunden haben.
Gegenüber den Standard der Übersichtstabellen wurden folgende Einträge gefunden, die auf unsere Diskette zutreffen:
Analyse der Bytes ab Adresse:
-
00 00 00 15H: F0H
- Double sided
- 80 Spuren
- 18/36 Sektoren pro Spur
- Kapazität = 2 Seiten * 80 Spuren * 18 Sektoren/Spur * 512 Bytes/Sektor = 1.474.560 Bytes
- Einsatz: 3,5" High Density Diskette mit 1,44/2,88 MByte.
-
00 00 00 24H: 00H
Physische BIOS-Laufwerksnummer ist 00H weil dies eine Diskette ist.
Das Stammverzeichnis
Hier haben wir bei der FAT12-Diskette die Verzeichnisstruktur schematisch
ausgelesen und detailliert dargestellt.
Hier kommt noch der fehlende Teil des Bootsektors ab Offset
24H
für FAT12.
Danach haben wir Verzeichnisse analysiert und folgende Dateien gefunden:
Bei FAT12 folgt das Stammverzeichnis direkt nach der FAT und
hat eine festgelegte Größe
und somit eine Maximalanzahl an Verzeichniseinträgen.
Bei der Formatierung wird das Dateisystem festgelegt und
kann ohne Spezialprogramme nicht mehr geändert werden.
Zur Verdeutlichung haben wir den Auftrag mit der
3,5" HD Diskette genommen.
Sie hat den Namen HD002HUS
bekommen.
Dort befinden sich ein Verzeichnis TMP
und
3 unterschiedlich Große Dateien im Unterverzeichnis
Diskette
T512.txt
, T1024.txt
und T2048.txt
.
Im Unterverzeichnis TMP
befindet sich 1 Datei
mit Namen FAT12.LOG
.
Zu jedem FAT-Eintrag gehören 3 Nibbles
.
Wir fassen sie zusammen und
erhalten die FAT-Einträge von 0 bis 9.
Danach muss umgestellt werden,
weil der höchste Wert die höchste Adresse hat.
Damit können sie die FAT auslesen.
FAT-Eintrag Nummer 2 bedeutet, dass die Datei im Sektor 33 beginnt.
Verkettung von Daten und Verzeichnissen
Name |
Eintrag Nr. in der FAT ⇒ Nr. des Clusters auf dem Datenträger |
Größe in Bytes | Anzahl der Cluster Insgesamt |
---|---|---|---|
IO.SYS | =00 02H ⇒ 00 21H = 0033D |
=00 00 A0 5FH = 41055D | 80 |
MSDOS.SYS | =00 53H ⇒ E4 00H = 58368D |
=00 00 95 2AH = 38186D | 74 |
COMMAND.COM | =00 9EH ⇒ 17 A0 0H = 96768D |
=00 00 E0 21H = 57377D | 112 |
DRVSPACEBIN | =01 0FH ⇒ 25 C0 0H = 154624D |
=00 01 02 F6H = 66294D | 129 |
FAT12V1 | 0 | 0 | 0 |
TMP | =01 91H ⇒ 36 00 0H = 221184D |
0 | 0 |
DISKETTE | 01 9CH ⇒ 37 60 0H = 226.816D |
0 | 0 |
Die FAT
FAT Ansicht
Hier haben wir die FAT, es wird festgelegt, in welcher Reihenfolge die Bytes fließen. Verkettung von Daten und Verzeichnissen in der FAT
Vorgehensweise:
Hier werde ich anhand der Datei
T1024.txt
die Vorgehensweise der FAT erklären.
Wie sie in der Theorie funktioniert,
wurde oben beschrieben.
Hier geht es um ein Praktisches Beispiel.
Wenn die Null am Anfang steht kann sie weg gelassen werden.
Gesucht:
Anfang
in
der
FAT
Berechnung:
-
Auslesen
des Start Cluster der
T1024.txt
, kann aus dem HEX-Editor entnommen werden.
= 9D 01H (umdrehen) = 01 9DH = 413 D. -
Nun muss dieser Wert mit dem
12-Bit/Eintrag (1,5) multipliziert werden.
= 619,5 D. -
Zu diesem Ergebnis wird die Zahl 512 D (1 Cluster)
summiert.
= 1.131,5 D.
Im Hexadezimal sowie im Dezimalsystem gibt es
keine Nachkommastellen.
Leider gibt es keine andere Möglichkeit,
da FAT12 immer 1,5 Bytes (Nibble
) braucht.
Ziehen sie die 0,5 ab,
um auf ein Gerades Ergebnis zu kommen,
im Diesen Fall:
1.131 D = 46BH
FAT-Eintrag:
HEX: EF 19 FF 0F
FAT12: 19E FFF
Aus der FAT kann entnommen werden das es 2 Cluster sind:
19D und
19E.
Wieder herstellbare Daten
TMP
Ordner in Root
TMPOrdner von HEX in Binär umgerechnet.
Bedeutung der HEX Zeichen anhand eines Beispiels unserer Diskette
mit den Ordner TMP
, der sich im Root
befindet.
Wir untersuchen einen Diskette und zeigen ihnen was dabei rausgekommen ist
mit folgenden Ergebnis:
Inhalt | HEX | Klartext |
---|---|---|
1. Dateiname | 54 4D 50 20 20 20 20 20 | T M P _ _ _ _ _ |
2. Dateinamenserweiterung | 20 20 20 | _ _ _ |
3. Attribute | 10 | Bit Nr.: 4 |
4. reserviert | 00 00 00 00 00 00 D5 4E 00 00 | |
5. Uhrzeit | CB 45 | =0100 0101 1100 1011 = 08:46:11 |
6. Datum | D5 4E | =1101 0101 0100 1110 = 21.06.2019 |
7. Anfangs Cluster (siehe Formel 1) |
91 01 | 3 60 00H |
8. Größe in Bytes | 00 00 00 00 | Keine Angabe |
FAT12.log
im TMP
Ordner
Bedeutung der HEX Zeichen anhand eines Beispiels unseres Auftrages mit der
Datei FAT12.log
im Ordner TMP
,
der sich im ROOT befindet.
Wir untersuchen unsere Diskette mit einem HEX-Editor.
Inhalt | HEX | Klartext |
---|---|---|
Dateiname | E5 41 54 31 32 20 20 20 | F A T 1 2 _ _ _ |
Dateinamenserweiterung | 4C 4F 47 | L O G |
Attribute | 20 | Bit Nr.: 5 |
reserviert | 00 00 00 00 00 00 D5 4E 00 00 | |
Uhrzeit | B7 45 |
= 0100 0101 1011 0111
= 12:45:23 |
Datum | D5 4E |
= 1101 0101 0100 1110
= 21.06.2019 |
Anfangs Cluster
(siehe Formel 1) |
92 01 | 3 62 00H |
Größe in Bytes | 4E 13 00 00 | 4.942 Bytes |
Diskette
Ordner im Root
Bedeutung der HEX Zeichen mit dem Ordner Diskette
,
der sich im ROOT befindet.
Wir untersuchen unsere Diskette mit einem HEX-Editor.
Inhalt | HEX | Klartext |
---|---|---|
Dateiname | 44 49 53 4B 45 54 54 45 | D I S K E T T E |
Dateinamenserweiterung | 20 20 20 | _ _ _ |
Attribute | 10 | Bit Nr.: 4 |
Reserviert | 00 9D 2A 4C D5 4E D5 4E 00 00 | |
Uhrzeit | 2B 4C |
= 0100 1100 0010 1011
= 09:33:11 Uhr |
Datum | D5 4E |
= 1101 0101 0100 1110
= 21.06.2019 |
Anfangs Cluster
(siehe Formel 1) |
9C 01 | 3 76 00H |
Größe in Bytes | 00 00 00 00 | Keine Angabe |
T1024.txt
im Diskette
Ordner
Bedeutung der HEX Zeichen mit dem Ordner Diskette
,
der sich im ROOT befindet.
Wir untersuchen unsere Diskette mit einem HEX-Editor.
Inhalt | HEX | Klartext |
---|---|---|
Dateiname | 54 31 30 32 34 20 20 20 | T 1 0 2 4 _ _ _ |
Dateinamenserweiterung | 54 58 54 | T X T |
Attribute | 20 | Bit Nr.: 5 |
Reserviert | 10 30 2B 4C D5 4E D5 4E 00 00 | |
Uhrzeit | 84 6C |
= 0110 1100 0100 0100
= 13:34:04 Uhr |
Datum | D4 4E |
= 0100 1110 1101 0100
= 20.06.2019 |
Anfangs Cluster
(siehe Formel 1) |
9D 01 | 3 78 00H |
Größe in Bytes | 00 04 00 00 | 262.144 Bytes |