Hallo,
fang gerade an mich mit FAT auseinander zusetzen. Eine Frage hab ich
diesbezüglich bereits; wird in der FAT selbst auch hinterlegt wie groß
z.B. der USB-Stick (Speicherkapazität) ist?
Gruß
Johannes
In der Partitionstabelle steht am Offset 0xC ein 4 Byte Eintrag, der die
Gesamtzahl der Sektoren der jeweiligen Partition angibt und dort, wo die
Partition anfängt gibt es bei Offset 0xB (bei FAT16/32) einen 2 Byte
Eintrag, wieviele Byte ein Sektor jeweils hat. Daraus kannst du dann die
Größe der Partition berechnen.
Was genau ist dir nicht klar?
Ein Cluster besteht aus mehreren Sektoren. Wieviele Sektoren das sind,
steht im Bootsektor.
Wenn du etwas genauer schreibst was dir an dem Begriff nicht klar ist,
dann kann man dir sicherlich helfen.
habs jetzt verstanden - es sind einfach ziemlich viele Begriffe zu
Beginn dieses Thema, Cluster, Spur, Sektor...
Hab mir jetzt ein Beispiel FAT12 angeschaut, welches leider die ganzen
Einträge nur per Hexwert dargestellt hat und keine weiteren
Informationen vorhanden sind:
Den Bootsektor hab ich verstanden (bzw. die Werte konnte ich alle
entschlüsseln) -> danach (nach dem ersten Cluster 512Bytes mit dem
abschließenden 0xaa55 kommt allerdings folgende Zeile
1
0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F
Und dann lauter 0x00 und das zwei ganze 512Byte Cluster lang. Für diese
Zeile find ich leider keine weiteren Informationen bei wikipedia und co.
Anschließend kommt wieder ein Cluster, in dem Sachen drinnen stehen
(vielleicht der second Bootloader) und im darauf folgenden fängt dann
der Inhalt einer Textdatei an.
Gruß
Johannes
Also bei FAT16 funktionierts so:
Im Root Directory gibts für jedes File und jedes Directory einen 32 Byte
langen Eintrag. In dem 32 Byte langen Eintrag steht unter anderem: Der
Filename, die Filegröße, die Uhrzeit wann das File erstellt wurde, der
Startcluster..etc
Um jetzt ein File zu öffnen, muss zuerst das Root Directory nach dem zu
öffnenden File durchsucht werden. Wenn das File gefunden wurde, dann
holt man sich aus dem 32 Byte langen Eintrag den Startcluster des Files.
Der Startcluster wird anschließend in einen (Start-)sektor umgewandelt
(wie das geht steht im Wikipedia Link). Das heißt, dein zu öffnendes
File beginnt bei eben diesem (Start-)sektor. Den ersten Cluster kannst
du also schon mal sektorweise lesen. Nun kann es aber sein, dass dein
File etwas größer ist und mehrere Cluster belegt. Du gehst also her,
nimmst den Startcluster von dem zu öffnenden File und schaust in der FAT
nach ob der Eintrag auf einen weiteren Cluster zeigt, oder ob das der
letzte Cluster ist (wenn 0xFFFF drinnen steht). Wenn du ein größeres
File hast, dann bildet sich da eine "Cluster-Chain", also ein Cluster
zeigt auf die Adresse des nächsten Cluster...usw.
Mir hats sehr geholfen, eine FAT16 formatierte SD-Karte herzunehmen und
diese mit einem Hex-Editor zu untersuchen. Also einfach mal ein paar
Werte überprüfen: Auf welchem Sektor befindet sich der Bootloader? Wo
beginnt die FAT? Wo beginnt das Root Directory?
Ein guter Link ist übrigens:
http://en.wikipedia.org/wiki/File_Allocation_Table
Ich habe vor Kurzem ein Programm geschrieben (in C) das
FAT12-Dateisystem lesen kann. Das F8 FF FF FF FF FF FF 0F ist die FAT.
Funktioniert so:
Er schreibt zu jedem Cluster (wo eine Datei drinnensteht), welcher der
nachfolgende Cluster ist, denn die meisten Dateien passen nicht in einen
Cluster.
Wenn ich mich recht erinnere macht er aus zwei 12-stelligen Nummern drei
Byte: abc def wird zu bc fa de, bin mir aber nicht mehr ganz sicher.
000 steht für frei, FF8 - FFF für Dateiende/belegt, FF7 steht für
defekt.
Also FF8 FFF FFF FFF FFF 000 000 000 000 000 ...
Cluster 1-5 sind belegt, der Rest frei.
Wenn eine Datei gespeichert wird müsste es dann so aussehen:
FF8 FFF FFF FFF FFF 007 008 009 00A 00B FFF 000 000 000 ...
Die Datei beginnt in Cluster 6 (steht im Root-Directory), in der Fat
steht bei Cluster 6 (sechste Zahl) 007 => nächster Cluster ist Cluster
7.
So geht es weiter bis Cluster B, da steht FFF drin für Dateiende.
Also die Datei besteht aus Cluster 6, 7, 8, 9, A und B in dieser
Reihenfolge. Wenn das Dateisystem recht voll wird, sind die Cluster
einer Datei oft nicht mehr direkt hintereiander, sondern quer verteilt
auf der Diskette (Fragmentierung), du musst immer die Kette verfolgen.
Nach der FAT beginnt das Root-Directory, da drin stehen Dateinamen,
Größe, Änderungsdatum, Erstellzeitpunkt, ..., und ganz wichtig
Anfangscluster.
Hoffe du kannst was anfangen damit.
vielen Dank für deine Erklärungen - haben mich um einiges weiter
gebracht:
Allerdings hab ich noch ein paar Fragen zum Stammverzeichnis - bzw.
dessen Inhalt bei einem Example:
Als erstes kommt das Volume-Label; insgesamt befindet sich auf dem
Massenspeicher eine Datei Readme.txt. Im Stammverzeichnis gibt es
allerdings dazu zwei Einträge????
Und es sind zwei 0xE5 (gelöschte) Einträge vorhanden - warum? Die könnte
man doch auch einfach komplett weglassen, oder ist das egal, weil sie
entsprechend neu belegt werden, wenn sie benötigt werden für neue
Dateien etc.?
Eine eigene Frage?
Dieser Thread ist über 16 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.