• [^] # J'infirme et je précise !

    Posté par . En réponse au journal Récupérer une partition en FAT32. Évalué à 2.

    L'organisation de la FAT12 est plus complexe que la FAT16 ou la FAT32 car l'indexation se fait via un nombre de 12 bits. En FAT12, il y a 512 octets par secteur et l'adressage se fait sur 12 bits. Ce qui donne donc 2^12*512 = 2097152 (taille d'une disquette 1"1/2 1,44 Mo non formatée), et donc 1,44 Mo après formatage :)

    Le maximum qu'on puisse obtenir en FAT16 est réalisé en utilisant des clusters de 64 secteurs (=32768 octets) d'où 2147483648 octets soit 2 Go, taille maximale possible en FAT16 (32768 est une limite car pour d'autres considérations, sous DOS et Win9x, la taille d'un cluster doit être strictement inférieure à 2^16 octets, soit 65536, donc la puissance de 2 immédiatement inférieure à 65536 est bien 32768). Sous NT4 et au delà, on peut - théoriquement - avoir des clusters de 262144 octets)

    En FAT32, le nombre de clusters est (théoriquement) égal à 2^32 (au lieu de 2^16), donc la taille maximale d'une partition est beaucoup plus grande, ou, à taille de partition égale, une FAT32 autorisera des clusters plus petits qu'en FAT16. Ainsi, une partition de 1.5 Go demandera des clusters de :
    - 32 ko en FAT16
    - 4 ko en FAT32


    En définissant :

    * tp : taille de la partition en octets
    * nmax : nombre maximal de clusters (65536 en FAT16)
    * ts : taille d'un secteur en octets (512)
    * tm : taille minimale d'un cluster en octets

    On a la relation suivante :

    tm = 2^(int(n)+k)*512 avec :
    n = max(log2(tp/ts/nmax),1)
    k = 0 si (n - int(n))=0
    k = 1 si (n - int(n))>0

    Exemple 1 :

    FAT16 (65536 clusters)
    tp = 1256 Mo => 1317011456 octets
    tp/ts/nmax = 39,25
    log2(tp/ts/nmax) = 5,295..
    int(log2(tp/ts/nmax))= 5
    k = 1
    tm = 2^6*512 = 32768

    Exemple 2 :

    FAT16 (65536 clusters)
    tp = 512 Mo => 536870912 octets
    tp/ts/nmax = 16
    log2(tp/ts/nmax) = 4
    int(log2(tp/ts/nmax)) = 4
    k = 0
    tm = 2^4*512 = 8192

    Ainsi, sur une partition FAT16 de 2Go, les clusters faisant 32 ko, un fichier de 1 octet (oui, je sais, c'est rare!) occupe malgré tout 32768 octets ! (32767 inutilisés). Un de 32800 occupera 65536 octets (perte=32736) ...

    Sur une FAT16 de 500 Mo, => clusters de 8192 octets, le même fichier de 32769 occupera 40960 octets (perte=8160)

    Plus les clusters sont gros, plus il y a de la perte d'espace (sauf si les tailles de TOUS les fichiers sont exactement des multiples entiers de la taille des clusters, ce qui est statistiquement assez rare!)

    (Sources partielles : l'excellentissime site de JC Bellamy http://www.bellamyjc.net/fr/theoriemultiboot2.html#clustersFAT(...) )