Forum: PC-Programmierung FAT16 - Kleines Verständinisproblem


von Ich (Gast)


Lesenswert?

Hallo alle zusammen,

ich will von einer SD-Karte auslesen wieviel Speicher noch frei ist.
Das stelle ich mir so vor:

In die Fat-Tabelle springen alle Einträge durchgehne und dabei zählen
wie oft 0x0000 drin steht. Dann noch meinen gezählten Wert mit der Größe 
eines Clusters multiplizieren und fertig.

Jetzt mein Problem:
Wieviele FAT-Einträge gibt es den? Jeder Eintrag hat 2 Bytes -> Es gibt 
65535 Cluster.
Wenn es 65535 Cluster gibt dann muss es auch 65535 Einträge geben.

Und wenn man 65535 Einträge zu je 2 Bytes -> dann ist die SD-Karte voll 
????

Als voll nur mit der FAT. Irgendwas stimmt da nicht.


Würde mich freuen jemand ein wenig Licht ins Dunkel bringen Könnte.

von Peter (Gast)


Lesenswert?

Ich schrieb:
> Wenn es 65535 Cluster gibt dann muss es auch 65535 Einträge geben.
> Und wenn man 65535 Einträge zu je 2 Bytes -> dann ist die SD-Karte voll

wenn es 65535  Einträge zu je 2 Bytes dann sind das 131070byte, wenn 
jetzt des Cluster 512byte hat dann sind es nur 256 cluster.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Bei FAT16 können 2 Bytes die Clusternummer von maximal 65536 Cluster 
aufnehmen. 65536 * 2 Bytes sind 128 Kibibyte. Das ist noch weit von den 
max. 2 Gibibytes (65536 * 32 Kibibyte pro Cluster), die eine FAT16 
Partition inkl. FAT-Tabelle maximal haben kann.

von Ich (Gast)


Lesenswert?

Ah danke,
da wäre ich heute nicht mehr drauf gekommen.
Ich hab gerechnet 65535 Einträge*65535 Cluster.

Was hab ich mir da nur fuer einen SCH.. ausgedacht.

Aber jetzt hab ich-->Danke

von Ich (Gast)


Lesenswert?

@Sefan B.

Jetzt hab ichs es gibt müssen nicht immer 65536 Cluster sein.
Aber es sind trotzdem immer 65536 Einträge in der FAT.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Das sehe ich nicht so. Die Beschreibung von FAT16 z.B. bei Wikipedia 
(http://de.wikipedia.org/wiki/File_Allocation_Table) zeigt, dass es im 
Bootsektor einen Eintrag Anzahl Sektoren pro FAT gibt. Und die FAT kann 
durchaus auch für weniger als 65536 Einträge maßgeschneidert werden.

von Ich (Gast)


Lesenswert?

Achtung jetzt kommt die Musterlösung
Ich ernennt mich hiermit zum FATMaster.

Es ist so FAT16:

-In der Tabelle sind immer 65535 Einträge. Diese beziehen sich auf die
 Cluster
-Daraus folgt das es bei FAT16 immer 65535 Cluster gibt.

Folgende Daten hab ich vom 1GB Karte ausgelesen:

512 Bytes pro Sektor
32  Sektoren per Cluster

-> 16KB pro Cluster

16KB pro Cluster *65535 FAT Einträge ->Ergibt genau die Größe der Karte 
(1GB).

Bei Kleinen Karten z.B 512 MB ändert sich nur die Cluster Größe
auf 8KB

Weil 8KB pro Cluster*65535 Fat Einträge ist 512MB die Größe der Karte

So jetzt hab ichs verstanden und im Netz verewigt.

Schönen Feieraben

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ich schrieb:
> -Daraus folgt das es bei FAT16 immer 65535 Cluster gibt.

Nein. Das ist nicht korrekt.

von Ich (Gast)


Lesenswert?

@Rufus Τ. Firefly

Es gibt 100% immer 65535 Cluster genauso wie es immer 65535 Einträge 
gibt.

Ob in den CLustern und in den Einträgen was drinnen steht hängt von
den Daten ab die gespeichert sind.

Natürlich belegt eine 1kb datei keine 65535 Cluster und benötigt auch 
keine
65535 Einträge.

Bei einer 1GB Karte hat man eine Clustergröße von 16kb. Eine
Datei mit 1KB wird somit auf der Karte einen Eintrag erzeugen und 
letztendlich 16KB in anspruchnehmen. 15 KB im Cluster sind frei.

von Ich (Gast)


Lesenswert?

@Rufus Τ. Firefly
Hat doch recht.

> -Daraus folgt das es bei FAT16 immer 65535 Cluster gibt

Die Aussage stimmt doch nicht.

Die Anzahl der Cluster und somit der FAT-Einträge errechnet sich so

Gesamtsektoranzahl des Mediums/Anzahl Sektoren pro Cluster =
AnzahlderCluster

von DirkB (Gast)


Lesenswert?

Dann nimm doch mal ein Medium mit 700 MB. Da bleibt die Clustergröße bei 
16 kB, es sind aber weniger Cluster.

Man kann größere Cluster nehmen als vorgesehen. Bei deinem Beispiel 32 
kB oder 64 kB. dann brauchst du nur 32767 oder 16737 Cluster. Dann wird 
auch die FAT kleiner

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

DirkB schrieb:
> Man kann größere Cluster nehmen als vorgesehen. Bei deinem Beispiel 32
> kB oder 64 kB.

64 kiB-Cluster sind eine Ausnahme, die werden nicht mehr von allen 
Systemen mit FAT16-Unterstützung akzeptiert. Das offizielle Größenlimit 
liegt bei 32 kiB und damit 2 GiB Partitionsgröße.

Die "inoffiziellen" 64 kiB-Cluster hat Microsoft mit alten Versionen von 
Windows NT eingeführt. Bei der Installation wurde eine 4 GiB große 
FAT16-Partition angelegt, deren Dateisystem im Laufe der Installation zu 
NTFS konvertiert wurde. Die von CD gestarteten Installationsroutinen 
waren damals nicht in der Lage, selbst mit NTFS umzugehen, daher dieser 
etwas merkwürdige Zwischenschritt.


Für die Diskussion hier entscheidend: Die Größe eines Clusters ist immer 
eine Zweierpotenz von Sektoren, d.h. 1, 2, 4, 8, 16, 32 oder 64 Sektoren 
à 512 Byte, also 512, 1024, 2048, 4096, 8192, 16384 oder 32768 Bytes.

Die Anzahl der letzlich verwendeten Cluster wird üblicherweise so 
festgelegt, daß die jeweils kleinste Clustergröße verwendet wird, bei 
der die möglichen ca. 65000 Cluster für die Partitionsgröße ausreichen.

von Schwarzes Tigerle (Gast)


Lesenswert?

Ich schrieb:
> Jetzt mein Problem:
> Wieviele FAT-Einträge gibt es den? Jeder Eintrag hat 2 Bytes -> Es gibt
> 65535 Cluster.
> Wenn es 65535 Cluster gibt dann muss es auch 65535 Einträge geben.
Das ist die maximale Anzahl an Cluster die das FAT-Dateisystem verwalten 
kann...
>
> Und wenn man 65535 Einträge zu je 2 Bytes -> dann ist die SD-Karte voll
> ????
Wie groß die FAT-Tabelle tatsächlich ist steht im Bootsector (Bei einer 
1.44MB Fat12 Floppy sind es 9 Sectoren bzw ~4,5KB)
>
>
>
Einfach Fat einlesen, "0000" Einträge zählen, mit Sectoren/Cluster und 
Bytes/Sector multiplizieren -> freier Speicher

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.