Skip to content
MaximeCheramy edited this page Feb 9, 2012 · 1 revision

Généralités

FAT, acronyme anglais de File Allocation Table (table d'allocation de fichiers), est un système de fichiers conçu par Microsoft et très largement répandu.

L'espace mémoire couvert par la partition et divisé en clusters de taille fixe. La taille d'un cluster pour une partition est choisie au formatage en fonction de la taille de la partition et du type de FAT (FAT12, FAT16 ou FAT32) la taille minimum étant la taille d'un secteur soit généralement 512 octets.

L'intérêt de diviser la mémoire en clusters et de pouvoir fragmenter l'espace occupé par un fichier ou dossier. Ainsi un fichier de taille supérieure à un cluster (supérieure à 512o par ex) ne va pas être écrit sur une zone mémoire continue mais sur plusieurs clusters à différents endroits de la partition.

Cela permet d'optimiser l'utilisation de l'espace mémoire lors d'écritures et d'effacements de fichiers de tailles différentes. En effet il n'est pas nécessaire de chercher un espace mémoire continue suffisant pour écrire les données mais il suffit d'utiliser un ensemble de clusters libres, sans se soucier de leur emplacement sur la partition.

L'inconvénient d'un tel système de fichier, mis à part le fait qu'il ne soit pas optimisé pour les petits fichiers (inférieurs à 512 octets), est que les données peuvent devenir très fragmentées. L'inconvénient de la fragmentation est que cela entraîne des accès successifs à des clusters situés à des endroits éloignés les uns des autres sur le disque entraînant de nombreux déplacements de têtes qui ralentissent considérablement la lecture ou l'écriture.

Dans TacOS, l'accès aux disques formatés en FAT12, 16 et 32 est fonctionnel en lecture seule (+ création de dossier et suppression de fichiers). Le support des noms de fichier long est aussi fonctionnel.

Format

Une partition FAT est divisée en plusieurs zones. Après le Secteur de Boot se trouve la File Allocation Table (FAT) dont l'utilisation est décrite à la section suivante, ensuite une copie de cette même FAT pour une question de sécurité en cas d'altération de la première, puis une zone réservée au répertoire racine (de taille fixe en FAT12 et FAT16) et enfin une zone de données avec des fichiers et des sous-répertoires.

Secteur de Boot

Au montage de la partition il est nécessaire de récupérer toutes les informations permettant de déduire les adresses (LBA du premier secteur) de ces différentes zones.

File Allocation Table

Pour reconstituer un fichier il est nécessaire de lire dans le bon ordre l'ensemble des clusters sur lesquels il a été écrit. La technique utilisée est un "chaînage" des clusters qui est obtenu grâce à la File Allocation Table (FAT) située en début de partition après le secteur de Boot.

La FAT est un tableau de 1 colonne, N lignes où N est le nombre de clusters au total. Le numéro de la ligne où on lit le tableau correspond au numéro du cluster dont on cherche des informations :

Cluster_Suivant = File_Allocation_Table[Cluster_Courant];

Différences entre FAT12/16/32

Ce qui différencie les systèmes de fichiers FAT12, FAT16 et FAT32 est en fait le nombre de bits sur lesquels sont codées ces valeurs. Cela a un impact direct sur le nombre de clusters que l'on peut considérer.

  • FAT12 : $2^{12}-18=4078$ clusters possibles
  • FAT16 : $2^{16}-18=65,518$ clusters possibles
  • FAT16 : $2^{32}-18=268,435,438$ clusters possibles

Plus le support de stockage est grand, plus on a intérêt d'utiliser un nombre de clusters important pour réduire leur taille. Dans le cas de la disquette, le FAT12 permet un nombre suffisant de clusters pour que leur taille soit ramenée à celle d'un secteur.

Lecture de l'arborescence et des fichiers

En FAT, tout est considéré comme étant un fichier. Ainsi un répertoire n'est rien d'autre qu'un fichier, il peut être de taille variable et peut être contenu sur plusieurs clusters, mais va être interprété différemment. Un répertoire contient des blocs de 32 octets appelés entrées. Chacune de ces entrées décrit un fichier contenu dans ce répertoire, voir Figure \ref{dir_entry} pour un descriptif du codage de ces entrées.

Une entrée donne des informations sur le type de fichier (Attributs du fichiers), notamment pour savoir si c'est un fichier ou un sous-dossier, si c'est un fichier caché, s'il est en lecture seule etc.. Elle donne aussi des informations sur les dates et heures de création ainsi que du dernier accès. Et enfin, chaque entrée contient le numéro du premier cluster du fichier, ce qui va permettre d'y accéder, ainsi que sa taille en nombre de clusters.

Pour lire l'arborescence on doit d'abord accéder au répertoire racine. Un espace, de taille fixe pour FAT12 et FAT16, lui est réservé et son emplacement est connu par les informations récupérées sur le secteur de Boot, pour le FAT32, le dossier racine est un dossier comme un autre et son cluster est fourni dans le secteur de Boot. Une fois qu'on a parcouru tout le répertoire racine et qu'on a récupéré les informations concernant tous les fichiers et sous-dossiers qu'il contient, on peut accéder à l'ensemble des fichiers et dossiers de l'arborescence.