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 :
- Master Boot Record : C'est lui que l'on touve dans le tout premier secteur du support (cylindre 0, tête 0 et secteur 1), il occupe 512 octets, soulignons d'ailleurs qu'il n'est pas obligatoire et que lorsque l'on formate un disque non amorçable, aucun MBR n'est écrit. Il contient du code exécutable destiné à chargé le système d'exploitation (typiquement, c'est ici que LILO intervient). Le "Executable Marker" (Magic Number) est là pour sépcifier au BIOS qu'il doit exécuter la routine de démarrage du MBR.
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 |
- FAT16 Boot Record : Celui ci est toujours présent au début d'une partition (formaté en FATR bien sûr)
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 :
- Hardware White Paper : FAT La FAT expliquée par Microsoft
- Hardware White Paper : Long Filename La gestion des noms de fichiers longs
- Application Notes : Fat16 Interface for MSP430
Lien :
- FAT on a Compact Flash card or a Memory Stick Mise en oeuvre d'une FAT sur une Compact Flash