Section courante

A propos

Section administrative du site

Introduction

La FAT, tirant son nom de l'abréviation de l'anglicisme «File Allocation Table», soit table d'allocation de fichiers, est un format de partition permettant d'entreposer des fichiers autant sur une disquette qu'un disque dur. Il a été conçu à l'origine par Bill Gates et Marc McDonald pour le Microsoft Disk BASIC puis fusionner avec le QDOS (allant devenir le MS-DOS).

Format

A l'origine il existait seulement la FAT12 et la FAT16, mais il existe maintenant 5 formats différents :

Nom Description
FAT12 Ce type de FAT permet un maximum de 212, soit 4 096 unité d'allocation de taille fixe (entre 512 octets et 4 Kilooctets). Étant donné la petite taille qu'il supporte, il principalement utilisé pour le support des disquettes.
FAT16 Ce type de FAT permet un maximum de 216, soit 65 536 unité d'allocation de taille fixe (entre 2 Kilooctets et 64 Kilooctets). Ce format est utilisé pour la gestion des disques dur de tous les MS-DOS vendu, soit de la version 1 à la version 6.
FAT32 Ce type de FAT est apparut en même temps que Windows 95 et permet un support de 228 unité d'allocation de taille variable (entre 4 Kilooctets et 32 Kilooctets). La taille des fichiers ne peut toutefois dépasser la limite de 4 Gigaoctets.
VFAT Ce type de FAT est une évolution de la FAT (FAT12, FAT16 et FAT32), elle permet la gestion des noms long afin de ne plus être limité à 8 caractères de noms et 3 d'extensions, mais d'aller jusqu'à 255 caractères.
exFAT Ce type de FAT est destiné au système d'exploitation Windows CE version 6 ou supérieur.

Depuis que le DOS fut remplacé par le système d'exploitation Windows, on utilise maintenant la FAT (FAT16 ou FAT32) essentiellement pour des clefs USB.

Structure de la partition

Le premier secteur, appeler «BPB», pour l'abréviation de l'anglicisme «Bios Parameter Block», contient les informations sur la structure de la partition. Voici la structure du BPB :

Déplacement Taille Description
00h 0 3 octets Ce champ contient les instructions assembleur 80x86 (JMP) vers un programme allant charger le système d'exploitation.
03h 3 8 octets Ce champ contient le nom du programme ayant formaté le disque. Exemple «IBM  7.0», «MSWIN4.1»,...
0Bh 11 2 octets Ce champ permet d'indiquer le nombre d'octets par secteur, soit 512, 1 024, 2 048 ou 4 096.
0Dh 13 1 octet Ce champ permet d'indiquer le nombre de secteurs par unité d'allocation, soit 1, 2, 4, 8, 16, 32, 64 ou 128.
0Eh 14 2 octets Ce champ permet d'indiquer le nombre de secteurs réservés en incluant le secteur de démarrage. La valeur par défaut est 32 pour la FAT32 et 1 pour les FAT12 et FAT16.
10h 16 1 octets Ce champ permet d'indiquer le nombre de FATs sur le disque. La valeur par défaut est 2 si elle contient 0.
11h 17 2 octets Ce champ permet d'indiquer la taille du répertoire principale (racine). Le calcul se fait en nombre d'entrées. La valeur par défaut de la FAT32 est 0.
13h 19 2 octets Ce champ permet d'indiquer le nombre total de secteurs si la taille de champ est en 16 bits. La valeur par défaut est 0 pour la FAT32.
15h 21 1 octet Ce champ permet d'indiquer le type de disque :
Valeur Description
E5h Cette valeur permet d'indiquer une disquette 8 pouces (200 mm) simple face, 77 pistes par côté, 26 secteurs par piste, 128 octets par secteur (250,25 Ko). Cette valeur est réservé pour le DR-DOS.
EDh Cette valeur permet d'indiquer une disquette de 5,25 pouces (130 mm) double face, 80 pistes par côté, 9 secteurs, 720 Ko. Cette valeur est uniquement utilisé sous le Tandy 2000.
EEh Cette valeur permet d'indiquer une partition personnalisées non standard (utilisant des formats BPB non standard ou nécessitant un accès multimédia spécial tel que l'adressage 48 bits ou 64 bits) ; correspond à 0xF8, mais non reconnu par les systèmes inconscients par conception ; la valeur ne doit pas nécessairement être identique à l'ID de la FAT, jamais utilisée comme marqueur de fin de chaîne d'unité d'allocation. Cette valeur est réservé pour le DR-DOS.
EFh Cette valeur permet d'indiquer le format superfloppy personnalisés non standard ; correspond à F0h, mais non reconnu par les systèmes inconscients par conception ; la valeur ne doit pas nécessairement être identique à l'ID de la FAT, jamais utilisée comme marqueur de fin de chaîne d'unité d'allocation. Cette valeur est réservé pour le DR-DOS.
F0h Cette valeur permet d'indiquer une unité de disquette.
F4h Cette valeur permet d'indiquer un disque de double densité dans l'édition Altos MS-DOS 2.11 seulement.
F5h Cette valeur permet d'indiquer un disque dur de 4 côtés, 12 secteurs par piste dans l'édition Altos MS-DOS 2.11 seulement.
F8h Cette valeur permet d'indiquer un disques dur
F9h Cette valeur permet d'indiquer une disquette double face, 15 secteurs/piste
FAh Signification variable selon le système : disque dur pour Tandy 1000 MS-DOS 2.11 ou Tandy 1000 MS-DOS 3.2, disque en RAM, 8 secteurs /piste de 320 Ko,...
FBh Cette valeur permet d'indiquer une disquette double face, 80 pistes par côté (640 Ko)
FCh Cette valeur permet d'indiquer une disquette simple face, 9 secteurs/piste
FDh Cette valeur permet d'indiquer une disquette double face, 9 secteurs/piste
FEh Cette valeur permet d'indiquer une disquette simple face, 8 secteurs/piste
FFh Cette valeur permet d'indiquer une disquette double face, 8 secteurs/piste
16h 22 2 octets Ce champ permet d'indiquer la taille d'une FAT en secteurs. La valeur par défaut de la FAT32 est 0.
18h 24 2 octets Ce champ permet d'indiquer le nombre de secteurs par piste.
1Ah 26 2 octets Ce champ permet d'indiquer le nombre de têtes.
1Ch 28 4 octets Ce champ permet d'indiquer le nombre de secteurs cachés. La valeur par défaut 0 si le disque n'est pas partitionné.
20h 32 4 octets Ce champ permet d'indiquer le nombre total de secteurs si la taille du champ est en 32 bits. Ce champ est remplis si celui en 16 bits contient 0.
Si FAT12/FAT16 :
24h 36 1 octet Ce champ permet d'indiquer l'identificateur du disque :
Valeur Description
00h Cette valeur permet d'indiquer un disque amovible.
80h Cette valeur permet d'indiquer un disque fixes.
25h 37 1 octet Ce champ est réservé.
26h 38 1 octet Ce champ contient la signature. La valeur par défaut est 29h.
27h 39 4 octets Ce champ contient le numéro de série du disque.
2Bh 43 11 octets Ce champ contient le nom du volume sur 11 caractères. S'il n'a pas de nom, il contiendra «NO NAME».
36h 54 8 octets Ce champ permet d'indiquer le type de système de fichiers : FAT, FAT12, FAT16.
Si FAT32 :
24h 36 4 octets Ce champ permet d'indiquer la taille d'une FAT en secteurs.
28h 40 2 octets Ce champ permet d'indiquer les attributs du disque.
2Ah 42 1 octet Ce champ permet d'indiquer la version majeure du système de fichiers. La valeur par défaut est 0.
2Bh 43 1 octet Ce champ permet d'indiquer la version mineure du système de fichiers. La valeur par défaut est 0.
2Ch 44 4 octets Ce champ permet d'indiquer le numéro de la première unité d'allocation du répertoire principale (racine).
30h 48 2 octets Ce champ permet d'indiquer les informations complémentaires sur le système de fichiers. La valeur par défaut est 1.
32h 50 2 octets Ce champ permet d'indiquer le numéro de secteur de la copie du secteur de démarrage.
34h 52 12 octets Ce champ est réservé. La valeur par défaut est 0.
40h 64 1 octet Ce champ permet d'indiquer l'identificateur du disque :
Valeur Description
00h Cette valeur permet d'indiquer un disque amovible.
80h Cette valeur permet d'indiquer un disque fixes.
41h 65 1 octet Ce champ est réservé.
42h 66 1 octet Ce champ contient la signature. La valeur par défaut est 29h.
43h 67 4 octets Ce champ contient le numéro de série du disque.
47h 71 11 octets Ce champ contient le nom du volume sur 11 caractères. S'il n'a pas de nom, il contiendra «NO NAME».
52h 82 8 octets Ce champ permet d'indiquer le type de système de fichiers. La valeur est «FAT32».

Structure d'une entrée

Afin de répertorié chacun des fichiers contenu dans une partition FAT, des entrées sont contenus dans des secteurs (en raison de 16 entrées (de taille de 32 octets) par secteurs). Le répertoire principale (racine) contient donc un facteur de 16 entrées répertoriant des fichiers et des répertoires enfants. Voici la structure d'une de ses entrées :

Déplacement Taille Description
00h 8 octets Ce champ contient le nom du fichier. Si le nom ne contient pas 8 caractères, il faut le complété avec des espaces. Le premier caractère de ce champ peut avoir une signification spéciale. Voici la liste des valeurs spéciales :
Valeur Description
00h Cette valeur permet d'indiquer une entrée qu'il s'agit de la dernière entrée du groupe.
05h Cette valeur permet d'indiquer que le nom du fichier commence par la caractère ASCII E5h.
2Eh Cette valeur permet d'indiquer une entrée parent ou enfant de répertoire. Le nom peut être «.» ou «..».
E5h Cette valeur permet d'indiquer que le fichier a été supprimé. A ce stade, le fichier peut être restauré par un utilitaire (UNDELETE par exemple)
08h 3 octets Ce champ contient l'extension du fichier. L'extension peut être de 1 à 3 caractères et s'il est incomplet, il faut le complété avec des espaces.
0Bh 1 octet Ce champ contient l'attribut du fichier. Les attributs sont des bits pouvant être combiné avec les significations suivantes :
Bits Masque Description
0 01h Ce bit permet d'indiquer un attribut en lecture seulement.
1 02h Ce bit permet d'indiquer un attribut en fichier caché.
2 04h Ce bit permet d'indiquer un attribut en fichier système.
3 08h Ce bit permet d'indiquer un attribut en nom de volume.
4 10h Ce bit permet d'indiquer un attribut en sous-répertoire.
5 20h Ce bit permet d'indiquer un attribut d'archive.
6 40h Ce bit permet d'indiquer un attribut de périphérique. Utilisé uniquement pour des usages internes du système d'exploitation.
7 80h Ce bit n'est pas utilisé.
0Ch 1 octet Ce champ n'est pas utilisé.
0Dh 1 octet Ce champ permet d'indiquer l'heure de création en unité de 10 millisecondes (0 à 199)
0Eh 2 octets Ce champ permet d'indiquer l'heure de création entreposé sous forme de bits :
Bits Description
0 à 4 Ces bits permettent d'indiquer les secondes divisés par 2. Les valeurs sont entre 0 et 29
5 à 10 Ces bits permettent d'indiquer les minutes. Les valeurs sont entre 0 et 59
11 à 15 Ces bits permettent d'indiquer les heures. Les valeurs sont entre 0 et 23
10h 2 octets Ce champ permet d'indiquer la date de création entreposé sous forme de bits :
Bits Description
0 à 4 Ces bits permettent d'indiquer le jour du mois, soit des valeurs entre 1 et 31.
5 à 8 Ces bits permettent d'indiquer le mois. Ainsi, 1 = janvier, 2 = février, ..., 12 = décembre.
9 à 15 Ces bits permettent d'indiquer l'année à partir de 1980. Ainsi, 0 = 1980, 1 = 1981, 2 = 1982,..., 127 = 2107
12h 2 octets Ce champ permet d'indiquer la date de dernier accès entreposé sous forme de bits :
Bits Description
0 à 4 Ces bits permettent d'indiquer le jour du mois, soit des valeurs entre 1 et 31.
5 à 8 Ces bits permettent d'indiquer le mois. Ainsi, 1 = janvier, 2 = février, ..., 12 = décembre.
9 à 15 Ces bits permettent d'indiquer l'année à partir de 1980. Ainsi, 0 = 1980, 1 = 1981, 2 = 1982,..., 127 = 2107
14h 2 octets Ce champ permet d'indiquer l'index EA sous OS/2 et Windows NT et indique les 2 octets de poids fort de la première unité d'allocation sous la FAT32.
16h 2 octets Ce champ permet d'indiquer l'heure de la dernière modification entreposé sous forme de bits :
Bits Description
0 à 4 Ces bits permettent d'indiquer les secondes divisés par 2. Les valeurs sont entre 0 et 29
5 à 10 Ces bits permettent d'indiquer les minutes. Les valeurs sont entre 0 et 59
11 à 15 Ces bits permettent d'indiquer les heures. Les valeurs sont entre 0 et 23
18h 2 octets Ce champ permet d'indiquer la date de la dernière modification entreposé sous forme de bits :
Bits Description
0 à 4 Ces bits permettent d'indiquer le jour du mois, soit des valeurs entre 1 et 31.
5 à 8 Ces bits permettent d'indiquer le mois. Ainsi, 1 = janvier, 2 = février, ..., 12 = décembre.
9 à 15 Ces bits permettent d'indiquer l'année à partir de 1980. Ainsi, 0 = 1980, 1 = 1981, 2 = 1982,..., 127 = 2107
1Ah 2 octets Ce champ permet d'indiquer le numéro de la première unité d'allocation (FAT12 et FAT16); 2 octets de poids faible de ce numéro avec le FAT32.
1Ch 4 octets Ce champ permet d'indiquer la taille du fichier.

Résolutions de problèmes

Si vous avez des problèmes avec une partition FAT, normalement, la commande CHKDSK devrait être en mesure de résoudre le problème. Toutefois, il est souvent préférable d'utiliser des utilitaires comme le Norton Disk Doctor pour résoudre correctement le problème.

Code source

Voici des exemples de code source de pour examiner l'entête de la FAT :

Lien Langage de programmation Projet
https://github.com/gladir/corail/blob/master/DISKINFO.PAS Free Pascal Corail
https://github.com/gladir/corail/blob/master/DOSDIR.PAS Free Pascal Corail


Dernière mise à jour : Mercredi, le 3 juin 2015