Pourquoi FAT16 ne peut-il pas stocker plus de 2 Go?

25

Tous les sites où je vais chercher des informations sur FAT16 déclarent simplement qu'il ne peut pas allouer plus de 2 Go. D'ACCORD. Génial. Je te crois. Mais comment en arrivez-vous à cette conclusion (à part le simple fait de la tester)?

Existe-t-il une sorte de formule que l'on peut utiliser pour déterminer combien un système FAT16 peut contenir?

SangoProductions
la source
21
Il y a une raison pour laquelle FAT16 a un "16" dans le nom. :-)
Eric Lippert
28
@EricLippert, pour être honnête, la connexion entre ce 16 et le 2 Gio n'est pas immédiatement évidente sans savoir comment fonctionne le FS.
Joey
18
Je ne suis pas convaincu à 100% que cette question est en fait sur le sujet de ce site. Peut-être devrait-il être déplacé vers retrocomputing.stackexchange.com?
Jules
3
Il convient de noter que la limite de 2 Go était une limitation pratique de la façon dont MS-DOS et les premières fenêtres traitaient FAT16. Il est conceptuellement possible de dépasser 2 Go, mais pas de manière compatible avec Microsoft.
phyrfox du
3
@ LưuVĩnhPhúc Le commentaire est correct. J'ai dit "MS-DOS et Windows au début". Les systèmes modernes peuvent utiliser plus de 2 Go en FAT16. Une partition FAT16 de 4 Go ne fonctionnera pas dans les anciens systèmes MS-DOS / Win3.1, par exemple. Et de nombreuses sources qui ont déclaré que la limite de 2 Go était soit parce qu'elles avaient été écrites lorsque cette limite était une réalité, soit peu de temps après, où il vous était conseillé de ne pas le faire car les systèmes légèrement plus anciens ne pouvaient pas le gérer. Les systèmes ultérieurs peuvent le gérer très bien, mais la limite de 2 Go était la règle de base avant environ 2000 ou plus, et quelques années après en citant les anciennes limites obsolètes.
phyrfox

Réponses:

66

FAT16 utilise 16 bits pour identifier les clusters. Ainsi, il y a un maximum de 65536 clusters avant de manquer d'identifiants, et certains identifiants sont réservés à des utilisations autres que des fichiers. Chaque fichier occupe au moins un cluster. Des clusters plus grands augmentent l'allocation minimale par fichier, augmentant la surcharge des petits fichiers.

La taille du cluster vous indique ensuite le volume identifiable maximum. Pour les clusters de 32 Ko, c'est 32 * 1024 * 65536 B = 2 Go.

Vous pouvez augmenter la taille du cluster indéfiniment, en augmentant la taille de vos secteurs sur disque, mais vous restez limité au nombre maximal de fichiers. Vous rencontreriez également des problèmes avec un logiciel qui supposait la taille de secteur par défaut (512B)

Au moment où il y avait des volumes physiques d'environ 2 Go disponibles, les processeurs et les systèmes d'exploitation étaient à 32 bits, donc le passage à FAT32 était un choix judicieux, permettant beaucoup plus de fichiers dans de petits clusters.

Caleth
la source
4
"mais augmentez la surcharge pour les petits fichiers" Je ne sais pas si cela sera clair pour tout le monde, car je ne suis pas sûr que tout le monde comprendra ce que l'on entend par "surcharge" dans ce contexte. Je pense qu'un exemple aiderait: "Par exemple, un fichier avec un caractère occupe 1 cluster sur le disque, dont la plupart est complètement gaspillé. Des tailles de cluster plus grandes signifient plus de gaspillage."
Reginald Blue
3
Quelques notes de clarification: 32 Ko était la taille de cluster maximale pour différentes versions de DOS et Windows, mais la famille Windows NT a pris en charge des tailles de cluster plus grandes depuis NT 4.0 (et donc les versions grand public de Windows depuis XP l'ont également pris en charge, car elles '' re basé sur le noyau NT). Cela permet des tailles allant jusqu'à 16 Go, bien qu'en raison de l'inefficacité comme indiqué dans la réponse, cela ne soit probablement pas utile. Vous pourriez vraisemblablement utiliser un tel système si vous vouliez stocker des fichiers majoritairement volumineux, surtout s'ils venaient en multiples de la taille de cluster de 256 Ko que vous auriez à utiliser ...
Jules
5
... mais alors vous atteindriez probablement la prochaine limite, ce qui est un problème pour FAT16 et FAT32: la taille maximale du fichier est limitée à 1 octet de moins que 4GiB par le fait qu'il n'y a que 4 octets alloués pour le stocker dans entrées de répertoire. OTOH, si vous aviez besoin de stocker un grand nombre de fichiers dans des tailles d'environ 256 Ko à 2 Go avec des tailles de puissance de deux et une taille totale <16 Go, FAT16 est potentiellement le format le plus efficace pour eux.
Jules
@Jules: Seulement potentiellement. N'oubliez pas qu'il existe une surcharge par cluster. Les systèmes de fichiers permettant de stocker des exécutions sont plus efficaces s'il y a peu de fragmentation.
Déduplicateur
12

Il y avait en fait plusieurs variantes de "FAT16" au fil des ans avec des limites différentes, mais considérons la version qui persistait de "compaq DOS 3.31" à Windows 95.

Les volumes FAT sont divisés en grappes. Chaque cluster est composé d'une puissance de deux nombres de secteurs. Le nombre de secteurs par cluster sur FAT16 est stocké sous la forme d'un numéro signé 8 bits. Le nombre maximum de secteurs possibles par cluster est donc de 64.

Les numéros de cluster ont été stockés sous la forme d'une valeur non signée 16 bits. Limiter le nombre total de clusters à 65536. Multipliez cela par le nombre maximum de secteurs par clusters et vous obtenez une limite de 4194304 secteurs.

La taille (logique) du secteur des disques durs est de 512 octets. Multipliez cela par la limite du nombre de secteurs mentionnés ci-dessus et vous obtenez votre limite de 2 Go. En principe, un support avec des secteurs plus grands peut supporter un plus grand volume FAT16 mais je ne pense pas que cela se soit produit dans la pratique.

Windows NT a modifié l'interprétation du champ «secteurs par cluster» pour être non signé 8 bits. Cela a permis une partition 4GiB FAT16 avec des secteurs de 512 octets (et théoriquement plus grande sur les disques avec des secteurs plus grands). AIUI windows 98 a ajouté la prise en charge de la lecture et de l'écriture de telles partitions, mais il n'a pas pu les créer et ses utilitaires de disque n'ont pas pu les réparer.


Il aurait certainement été possible d'apporter des modifications relativement mineures au format du système de fichiers pour prendre en charge des clusters plus importants et donc des volumes plus importants. Cependant, MS a décidé d'opter pour l'option la plus radicale de passer à un index de cluster 32 bits avec Windows 95 OSR2 produisant FAT32.

Je crois que la raison pour laquelle l'option la plus radicale a été choisie était l'efficacité de l'espace. Étant donné les tailles de fichiers typiques à l'époque, les grappes de 32 Ko étaient déjà assez inutiles et les plus grandes auraient même été déplacées.

Peter Green
la source
4
J'ai dû réfléchir sérieusement au "maximum de secteurs possibles par cluster est 64", jusqu'à ce que je l'aie: 64 est en effet la plus grande puissance de 2 que vous pouvez représenter dans un octet signé: 128 n'est pas possible car le maximum positif signé la valeur d'octet est 127.
Ralf Kleberhoff
3
@RalfKleberhoff Cela mène naturellement à une question de suivi, cependant: si vous stockez une puissance de deux, pourquoi stocker le nombre lui-même plutôt que l'exposant sur les deux?
Daniel Wagner
@DanielWagner Je suis absolument d'accord. D'autant plus qu'à l'époque où FAT16 a été créé, le déplacement était certainement une opération moins coûteuse que la multiplication. Mais probablement, ils étaient simplement heureux de le faire fonctionner, et non de le développer en logiciel pendant des décennies ...
Ralf Kleberhoff