PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zum FAT Dateisystem


AtTheDriveIn
2008-01-30, 17:24:09
Hiho

Ich sitz hier gerade und versuche zu kapieren wie das FAT Dateisystem funktioniert.

In der File Allocation Table stehen für jeden Cluster ein Eintrag. Der Inhalt sagt einem ob der repräsentiert Cluster: frei, defekt ist. Oder veweist auf den nächsten Eintrag in der Tabelle, der wieder einen Cluster der Datei repräsentiert, bis die Datei irgendwann zu Ende ist.

Soweit ist alles klar. Meine Frage betrifft nun aber die Verzeichnisseinträge. Wo stehen die? Im Stammverzeichnis der Partition? Wie findet das System Dateien? Beispielsweise C:\DOS\NEU\eins.exe, wie wird das aufgelöst?

Danke! :)

Wuzel
2008-01-31, 07:05:56
Hiho

Ich sitz hier gerade und versuche zu kapieren wie das FAT Dateisystem funktioniert.

In der File Allocation Table stehen für jeden Cluster ein Eintrag. Der Inhalt sagt einem ob der repräsentiert Cluster: frei, defekt ist. Oder veweist auf den nächsten Eintrag in der Tabelle, der wieder einen Cluster der Datei repräsentiert, bis die Datei irgendwann zu Ende ist.

Soweit ist alles klar. Meine Frage betrifft nun aber die Verzeichnisseinträge. Wo stehen die? Im Stammverzeichnis der Partition? Wie findet das System Dateien? Beispielsweise C:\DOS\NEU\eins.exe, wie wird das aufgelöst?

Danke! :)

Zuerst: Das 'C:' kannste dir wegdenken, ist bloss der 'Gerätename' und Betriebssystem abhängig - hat 0 mit FAT zu tun.

Zweitens:
Im Stammverzeichniss sind alle Verzeichniss/Datei einträge.
Ein Dateneintrag sieht z.B. so aus:
00 Dateiname, 08 erweiterung, 0B Attribut, 18 Datum, 1A Start Cluster, 1C Grösse (Bytes).

Das ist jetzt aus dem Kopf raus, müsste aber pi mal Daumen hinhauen.
Du hast halt deine Cluster die auf die Sektoren -> 'whatever' deines Mediums mappen (verkettete Liste) und dein Stammverzeichniss, das halt eben auf die Cluster verweist - wie ein Telefonbuch Namen zu Telefonummern zuordnet.

AtTheDriveIn
2008-01-31, 11:35:42
Zuerst: Das 'C:' kannste dir wegdenken, ist bloss der 'Gerätename' und Betriebssystem abhängig - hat 0 mit FAT zu tun.

Zweitens:
Im Stammverzeichniss sind alle Verzeichniss/Datei einträge.
Ein Dateneintrag sieht z.B. so aus:
00 Dateiname, 08 erweiterung, 0B Attribut, 18 Datum, 1A Start Cluster, 1C Grösse (Bytes).

Das ist jetzt aus dem Kopf raus, müsste aber pi mal Daumen hinhauen.
Du hast halt deine Cluster die auf die Sektoren -> 'whatever' deines Mediums mappen (verkettete Liste) und dein Stammverzeichniss, das halt eben auf die Cluster verweist - wie ein Telefonbuch Namen zu Telefonummern zuordnet.

Im Stammverzeichnis können aber doch nur begrenzt viele Dateien aufgenommen werden. Ist FAT dann also nicht nur in der größe des Datenträgers, sondern auch in der Anzahl der Dateien beschränkt?

Wuzel
2008-01-31, 12:55:28
Im Stammverzeichnis können aber doch nur begrenzt viele Dateien aufgenommen werden. Ist FAT dann also nicht nur in der größe des Datenträgers, sondern auch in der Anzahl der Dateien beschränkt?

Ab Fat32 gibt es da soweit ich weiss keine Begrenzungen mehr, bei Fat16 waren es glaube ich so 65k an max. Einträgen im Stammverzeichniss.

DerRob
2008-01-31, 14:58:06
Ab Fat32 gibt es da soweit ich weiss keine Begrenzungen mehr, bei Fat16 waren es glaube ich so 65k an max. Einträgen im Stammverzeichniss.
im gesamten inhaltsverzeichnis von fat16 sind zwar 65.536 einträge möglich, im stammverzeichnis selber sinds normalerweise jedoch nur 512 einträge (mit speziellen formatierungstools sollen jedoch auch größere stammverzeichnisse möglich sein).
nur das stammverzeichnis liegt an einer speziellen stelle am anfang der partition, die restlichen unterverzeichnisse sind wie die dateien über die gesamter partition verteilt, deren position steht halt auch im stammverzeichnis ;)

http://de.wikipedia.org/wiki/File_Allocation_Table

Soweit ist alles klar. Meine Frage betrifft nun aber die Verzeichnisseinträge. Wo stehen die? Im Stammverzeichnis der Partition? Wie findet das System Dateien? Beispielsweise C:\DOS\NEU\eins.exe, wie wird das aufgelöst?
im stammverzeichnis steht nur, wo sich das unterverzeichnis DOS befindet, in dem unterverzeichnis steht dann wiederum, wo das unterverzeichnis NEU ist, usw.

AtTheDriveIn
2008-01-31, 15:12:45
im stammverzeichnis steht nur, wo sich das unterverzeichnis DOS befindet, in dem unterverzeichnis steht dann wiederum, wo das unterverzeichnis NEU ist, usw.

hm...

was ist denn wenn mehrere Dateien in einem Verzeichnis sind? In einem Verzeichniseintrag kann doch nur die Start-Clusternummer einer Datei stehen

DerRob
2008-01-31, 15:33:28
was ist denn wenn mehrere Dateien in einem Verzeichnis sind? In einem Verzeichniseintrag kann doch nur die Start-Clusternummer einer Datei stehen

Beispiel für das Lesen einer Datei
Wenn das Dateisystem eine Datei lesen soll, folgt es einem bestimmten Algorithmus. Wir nehmen an, dass die Datei vier Cluster einnimmt, und zwar Cluster 442, Cluster 443, Cluster 444 und 448. Aber wie liest das Betriebssystem diese Adressen ?
Es findet den Dateianfang im Dateiverzeichnis (aus der Dateiadresse)
Es liest den ersten Cluster, Nummer 442
Es sieht in der FAT unter Nummer 442 nach, und findet den nächsten Cluster (443)
Es sieht in der FAT unter Nummer 443 nach, und findet den nächsten Cluster (444)
Es sieht in der FAT unter Nummer 444 nach, und findet den nächsten Cluster (448)
Es sieht in der FAT unter Nummer 448 nach. Hier findet es Nummer FFFF. Es war also der letzte Cluster.
Die FAT arbeitet immer nach diesem Prinzip. Wenn eine Datei gelesen werden soll, ist ihre Adresse in der Tabelle zu finden. Jedesmal wenn eine Datei auf die Festplatte geschrieben werden soll, müssen freie Cluster für sie gefunden werden. Die Information wird in die FAT geschrieben, um das Wiederauffinden zu ermöglichen.
das gleiche gilt natürlich genauso für die unterverzeichnisse, wo sich der nächste teil davon befindet.

quelle: http://www.ich-war.net/m6a.htm

Wuzel
2008-01-31, 15:42:30
im gesamten inhaltsverzeichnis von fat16 sind zwar 65.536 einträge möglich, im stammverzeichnis selber sinds normalerweise jedoch nur 512 einträge (mit speziellen formatierungstools sollen jedoch auch größere stammverzeichnisse möglich sein).
nur das stammverzeichnis liegt an einer speziellen stelle am anfang der partition, die restlichen unterverzeichnisse sind wie die dateien über die gesamter partition verteilt, deren position steht halt auch im stammverzeichnis ;)


Nur bei FAT32 ist die erweiterte Position sowie grösse variabel. Bei FAT16 ist das Stammverzeichnis fix.

Steht ja so auch in deinem Wiki-link, obwohl ich da ein paar Sachen unschön finde.

AtTheDriveIn
2008-01-31, 15:43:01
das gleiche gilt natürlich genauso für die unterverzeichnisse, wo sich der nächste teil davon befindet.

quelle: http://www.ich-war.net/m6a.htm
achso dann sind Verzeichnisseinträge nur spezielle Dateien?

Wuzel
2008-01-31, 15:48:43
hm...

was ist denn wenn mehrere Dateien in einem Verzeichnis sind? In einem Verzeichniseintrag kann doch nur die Start-Clusternummer einer Datei stehen

Naja, ein Verzeichnisseintrag != Dateneintrag.

Bildlich - sieht das in etwa so aus.

--Root(Wurzel)
--Meindir
-Dateneintrag: meinfile01
-Dateneintrag: meinfile02
--Meinunterdir
-Dateneintrag: meinfile03

AtTheDriveIn
2008-01-31, 16:20:38
Naja, ein Verzeichnisseintrag != Dateneintrag.

Bildlich - sieht das in etwa so aus.

--Root(Wurzel)
--Meindir
-Dateneintrag: meinfile01
-Dateneintrag: meinfile02
--Meinunterdir
-Dateneintrag: meinfile03

Aber Verzeichnisseintrag und Datei liegen im Datenbereich. Das System weiß, die Bytes die ich da gerade aus dem Datenbereich lese, gehören zu einem Verzeichnisseintrag und die werden so und so behandelt. Oder nicht?

Wuzel
2008-01-31, 16:39:03
Aber Verzeichnisseintrag und Datei liegen im Datenbereich. Das System weiß, die Bytes die ich da gerade aus dem Datenbereich lese, gehören zu einem Verzeichnisseintrag und die werden so und so behandelt. Oder nicht?

Ähmm, bei Fat32 - was du offensichtlich meinst, wird im bootsektor festgelegt wo die einträge stehen. Da diese im Datensektor stehen heisst es da halt sozusagen 'Einträge findest du im Cluster xy biss cx'.
Hast du die Einträge rausgezogen geht alles wie gehabt - nach alter vätterchen Sitte weiter (bezogen auf FAT12/16).

DerRob
2008-01-31, 16:43:01
Aber Verzeichnisseintrag und Datei liegen im Datenbereich. Das System weiß, die Bytes die ich da gerade aus dem Datenbereich lese, gehören zu einem Verzeichnisseintrag und die werden so und so behandelt. Oder nicht?
ja, jeder eintrag im stammverzeichnis besteht aus insgesamt 32 bytes, in denen unter anderem der datei-/unterverzeichnis-name, datum+uhrzeit, die größe, der erste cluster und eben auch die art (datei oder verzeichnis) drin steht. die unterverzeichnisse sind wiederum genauso aufgebaut, liegen aber halt "irgendwo" auf der partition (wo genau steht ja im vorherigen verzeichnis bzw. stammverzeichnis).

steht übrigens alles auch in dem wiki-link und dem anderen link drin ;)

Wuzel
2008-01-31, 18:20:41
ja, jeder eintrag im stammverzeichnis besteht aus insgesamt 32 bytes, in denen unter anderem der datei-/unterverzeichnis-name, datum+uhrzeit, die größe, der erste cluster und eben auch die art (datei oder verzeichnis) drin steht. die unterverzeichnisse sind wiederum genauso aufgebaut, liegen aber halt "irgendwo" auf der partition (wo genau steht ja im vorherigen verzeichnis bzw. stammverzeichnis).

steht übrigens alles auch in dem wiki-link und dem anderen link drin ;)

?
Jetzt wirds verwirrend, also mal ganz von vorne.

Es gibt a) den fat Table - da stehen die Cluster drin - diese Cluster verweisen auf die HW - z.B. Sektoren (da geh ich mal nicht näher drauf ein).
Und b) halt eben das 'Verzeichniss' - also quasi 'Telefonbuch', wo unteranderem eingetragen ist wie die Dateien heissen und unter welchem Cluster man diese finden kann.
Dort sind auch unterverzeichnisse und dergleichen eingetragen - diese zeigen allerdings nicht auf Cluster, sondern fassen quasi nur die Dateien/Einträge zusammen.
Das ist im groben so, wie ich es weiter oben aufgeschrieben habe.

Bei FAT16 und darunter ist dieses 'Telefonbuch' a) an einer fixen Stelle und hat b) eine fixe Grössse.
Wenn ich wissen will, was auf der Platte so ist, lese ich dieses 'Telefonbuch' ein und gebe es z.B. am Bildschirm aus.
Sagt der Benutzer 'ohh toll, das File möchte ich laden' - nehme ich den Eintrag und schau bei welchem Cluster ich das File finde - und lade es schliesslich. Das Ende ergibt sich über die Filegrösse.

Bei FAT32 läuft das im Prinzip genauso. Nur mit dem Unterschied, das mein Telefonbuch eben nicht an einer fixen Position und halt eben keine fixe Grösse hat.
Hier Schaue ich im Bootsektor unter welchem Cluster ich mein 'Telefonbuch' finde, lade es und gebe es z.B. wieder aus.
Die Einträge sind dort eigentlich ähnlich wie bei FAT16 und darunter.


So, ganz einfach, ganz primitiv versucht zu erklären ;)