DigitalSpirit / Wiki / Fat16

Présentation

Disposez d'un support de grosse capacité comme une Compact Flash est inutile si on n'a pas un système de fichiers capable de retrouver ces données facilement, la FAT16 est le bon compromis entre simplicité d'implémentation et performance. La FAT (File Allocation Table) existe depuis la fin des années 70, début des années 80, elle a été développé pour MSDOS et à évolué au fûr et à mesure de l'évolution du matériel, ainsi, à ces débuts, la FAT servait principalement pour les disquettes et les disques dûrs de très faible capactité (comparé à maintenant bien sûr) et chaque entrée (nous reviendront plus tard sur la défintions d'entrée) occupait 12 bits d'ou le nom FAT12, ensuite est arrivé la FAT16 qui comme son nom l'indique occupait pour chaque entrée 16 bits, l'évolution à continué jusqu'à la bien connu FAT32.

Tableau récapitulatif sur les différentes FAT :

Type FAT12 FAT16 FAT32
Taille de chaque entrée de la FAT 12 16 32
Nombre maxi de cluster 4,086 65,526 ~268,435,456
Maximum Volume Size 16Mo 2Go ~2exp41

Structure d'un support

Un support de stockage (Compact Flash, disque dûr...) est composé de plusieurs couches comme le montre le tableau suivant :

Elément Description
Master Boot Record Contient les différentes partitions
FAT16 Boot Record Donne des infos sur la FAT
FAT Tables Ici sont contenus tous les clusters
Directory Table Les entrées des répertoires
Données Les données des fichiers

Ces éléments revus en détails :

Offset Description Taille (octets)
0000h Executable Code 446
01BEh 1ere entrée de partition 16
01CEh 2eme entrée de partition 16
01DEh 3eme entrée de partition 16
01EEh 4eme entrée de partition 16
01FEh Executable Marker (55h AAh) 2
Offset Nom Octets Description
0 jmpBoot 3 On y trouve généralement 0xEB
3 OEMName 8 Le nom de l'OS qui à formaté le volume
11 BytsPerSec 2 Le nombre d'octets par secteur (valeurs autorisées : 512, 1024, 2048, 4096), pour une compatibilité maximale, il est recommandé de laissé 512.
13 SecPerClus 1 Le nombre de secteur par cluster, cette valeur doit être une puiissance de 2 (valeurs autorisées : 1, 2, 4, 8, 16, 32, 64, 128)
14 RsvdSecCnt 2 Nombre de secteurs réservés dans la région réservée au début du volume
16 ## NumFats 1 Le nombre de structure FAT sur le volume, toujours à 2
17 ## RootEntCnt 2 Le nombre d'entrée dans la racine (root directory)
19 ## !TotSec16 2 Pour la FAT16, ce champs est égal au nombre de secteurs (16bits)
21 Media 1 0xF8 est la valeur standard pour un média fixe (non amovible), pour ces dernier, on utilisera 0xF0 (valeurs autorisées : F0h, F8h, F9h, FAh, FBh, FCh, FDh, FEh, FFh)
22 FATSz16 2 Nombre de secteurs occupés pour une FAT pour les FAT12-FAT16, pour la FAT32, ce champs est mis à 0 et FATSz32 contient la valeur recherchée
24 SecPerTrk 2 Sector per Track
26 NumHeads 2 Nombre de têtes (spécifique à l'OS)
28 HiddSec 4 Nombre de secteurs cachés précédent la partition. Toujours 0 pour un support non partitionné
32 TotSec32 4 Nombre total de secteur sur le volume (32bits)

Spécifique pour les FAT12 et FAT16 :

Offset Nom Octets Description
36 DrvNum 1 Numéro du disque pour l'interruption 0x13 (spécifique à l'OS)
37 Reserved 1 Utilisé par WINNT
38 BootSig 1 Signature de boot étendue
39 !VolID 4 Numéro de série du volume (ce champs sert de numéro de suivi pour les support extractible, il est généralement généré en assemblant la date courante et l'heure sur 32bits)
43 VolLab 11 Le nom du volume
54 FilSysType 8 On y trouve généralement une de ces 3 valeurs : "FAT12", "FAT16", "FAT", chaque valeur étant complété par des espaces à droite. Attention, ce champs ne doit pas servir pour l'indentification du type de FAT

Documentations

Docs sur la FAT :

Lien :