sommaireL'interruption 13h du BIOS (accès disque)

Cette interruption logicielle, offerte par le BIOS (donc indépendante du système d'exploitation) est l'une des plus importante de toutes, car elle régit tout accès physique aux disques. Elle est appelée par le système d'exploitation et le système de fichiers pour accéder (en lecture et écriture) aux informations contenues sur les disques. Elle est dotée d'un ensemble de fonctions servant d'API (Application Programming Interface) aux autres programmes.

Chaque fonction est spécifiée par le contenu du registre AH.
Le nombre de ces fonctions a évolué avec le temps et les versions des BIOS, certaines sont devenues obsolètes, et en particulier sont apparues récemment (2 ans environ) des extensions permettant la gestion de disques de taille supérieure à 8 Go. Ces fonctions ont les n° 41h à 49h et 4Eh (et sont appelées EBIOS)

Si le BIOS ne possède pas ces extensions, il est impossible de gérer des disques de plus de 8 Go
Il faut donc, au choix :

Abréviations utilisées :
ECC : Error Checking and Correction Code
EBIOS : Extended Basic Input Output System (les extensions de l'int13h)
DAP : Disk Address Packet

AH Fonction Plates-formes
00 Initialisation contrôleur toutes
01 Lecture état disque toutes
02 Lecture secteurs toutes
03 Écriture secteurs toutes
04 Vérification secteurs toutes
05 Formatage piste PC/XT/AT/EISA
06 Formatage piste avec secteurs défectueux PC/XT
07 Formatage cylindres multiples PC/XT
08 Lecture paramètres disque toutes
09 Initialisation paramètres disque toutes
0A Lecture secteurs avec ECC PC/XT/AT/EISA
0B Écriture secteurs avec ECC PC/XT/AT/EISA
0C Positionnement à une adresse toutes
0D Réinitialisation disque toutes
0E Lecture du tampon interne  PC/XT/PS1
0F Écriture du tampon interne PC/XT/PS1
10 Test si le disque est prêt toutes
11 Recalibration toutes
12 Diagnostic contrôleur PC/XT
13 Diagnostic disque PC/XT
14 Diagnostic contrôleur toutes
15 Lecture taille du disque AT+
19 Parking des têtes PS/2
1A Formatage disque ESDI PS/2
1B Récupération informations constructeur PS/2
1C Fonctions spéciales ESDI PS/2
21 Lecture secteurs avec blocs multiples PS/1
22 Écriture secteurs avec blocs multiples PS/1
23 Paramétrage contrôleur PS/1
24 Définition de blocs multiples PS/1
25 Récupération informations disque PS/1
41 Test si extensions présentes EBIOS
42 Lecture étendue secteurs EBIOS
43 Écriture étendue secteurs EBIOS
44 Vérification étendue secteurs EBIOS
45 Verrouillage/déverrouillage disque EBIOS
46 Éjection média (si prévu pour) EBIOS
47 Positionnement étendu EBIOS
48 Récupération informations étendues disque EBIOS
49 Récupération état étendu disque EBIOS
4A Initialisation émulation disque CDROM bootable
4B Fin  émulation disque CDROM bootable
4C Initialisation émulation disque et boot CDROM bootable
4D Récupération du catalogue de boot CDROM bootable
4E Configuration matérielle étendue EBIOS

Exemples d'utilisation :

Lecture "normale" d'un (ou plusieurs) secteur(s) :

  Registre Valeur
Appel AH 02h
AL nombre de secteurs à lire
CH bits 0 à 7 du  n° de cylindre
CL bits 6 et 7 :  bits 8 et 9 du n° de cylindre
bits 0 à 5 n° de secteur (1 à 63)
DH n° de tête
DL n° de disque 80h = 1er disque
81h= 2ème disque
...
ES:BX pointeur de réception des données
Retour AH code de retour (0 si succès)
AL complément du code de retour (si AH=11h)
retenue 0 succès
1 erreur

Soit le 2ème disque d'un PC ayant 800 cylindres 255 têtes 63 secteurs par pistes.
On veut atteindre, sur le cylindre 524, tête 163, le secteur 47  (valeurs décimales)
(soit, en hexadécimal :  20C -  A3 - 2F, ou en binaire 10 0000 1100 pour le n° de cylindre, 1010 0011 pour le n° de tête et  10 1111 pour le n° de secteur)
On aura donc (valeurs en hexadécimal) :
AH = 02
CH = 0C (partie basse du n° de cylindre)
CL =  AF ( (10) venant du n° de cylindre et (10 1111) venant du n° de secteur )
DH = A3 (n° de tête)
DL = 81 (2ème disque)
ES:BX = (adresse du buffer)

Lecture "étendue" d'un (ou plusieurs) secteur(s) :

  Registre Valeur
Appel AH 42h
DL n° de disque 80h = 1er disque
81h= 2ème disque
...
DS:SI pointeur du DAP
Retour
AH code de retour (0 si succès)
retenue 0 succès
1 erreur

Description du DAP :

offset taille
(octets)
rôle
00 1 taille de la structure en octets
(en principe doit être égale à 16, soit 10h)
01 1 inutilisé (0)
02 1 nombre de secteurs à traiter
entre 1 et 127
03 1 inutilisé (0)
04 2 offset du bloc mémoire pour le transfert
06 2 segment du bloc mémoire pour le transfert
08 8 n° logique absolu du 1er secteur à transférer, 
compté à partir du début du disque physique (0)

En reprenant le même exemple que précédemment (800 cylindres 255 têtes 63 secteurs par pistes).
Pour atteindre sur le cylindre 524, tête 163, le secteur 47 (valeurs décimales) :
En CTS, les cylindre et têtes sont numérotés à partir de 0, les secteurs à partir de 1.
En LBA, le 1er secteur a le n° logique 0 

Ce secteur a le n° absolu : ((523 x 255)+162)x 63+ 46 = 8412247 (805C57h)
On aura donc (valeurs en hexadécimal) :
AH = 42
DL = 81 (2ème disque)
DS:SI = (adresse du DAP)
Contenu du DAP :
00 : 10
01 : 00
02 : 01 (1 secteur)
03 : 00
04 : xxxx (offset du buffer)
06 : xxxx (segment du buffer)
08 : 0000000000805C57

Dans les 2 cas (lecture "normale" et lecture "étendue") on obtient le même résultat tant que le n° de cylindre ne dépasse pas 1023.Au delà de cette valeur, il faut obligatoirement utiliser la lecture étendue.
C'est pourquoi, dans le cas de disques ou partitions dépassant 8 Go (ce qui implique des n° de cylindre>1023), les données CHS de la table de partition du MBR (ou d'un EBR) sont fausses, et seules les informations de n° de secteur et taille de partition sont utilisables, et donc le recours aux extensions de l'interruption 13h est obligatoire.

sommaireOutils de test de présence des extensions de l'int13h (LBA)

On peut être amené à s'interroger sur la présence ou non des extensions de l'interruption 13h dans le BIOS d'un système, ces extensions conditionnant l'usage de disques de plus de 8Go.. 
Western Digital
a conçu un ensemble d'utilitaires gratuits, fonctionnant sous DOS, permettant de répondre à ce genre de question. L'ensemble s'appelle WD's 32-Bit Pack Il contient en particulier  l'outil WDTBLCHK.EXE, dont voici un exemple de résultats :

WDTBLCHK 2.30 - Show Drive And System Info
(C) Copyright 1994-98 Western Digital Corporation
Drives Physically Detected: 1
Drives Reported By INT 13 : 1
[...]
>>>>>>>>>>>>>>>>>>>> INT 13 INFO: <<<<<<<<<<<<<<<<<<<<
INT 13 FUNCTION 8:
  DRV ACTIVE   CYL  HDS  SPT  SZ(MB)
    1    YES  1023  255   63    8414
    2     NO     0    0    0       0
    3     NO     0    0    0       0
    4     NO     0    0    0       0

INT 13 FUNCTION 41/48 (EXTENSIONS):
  DRV ACTIVE   F41  F48        CYL   HDS   SPT    SECTORS   SZ(MB)
    1    YES   YES  YES      17475    15    63   19640880   10056
    2     NO    NO   NO        ** NOT VALID **    *******  ******
    3     NO    NO   NO        ** NOT VALID **    *******  ******
    4     NO    NO   NO        ** NOT VALID **    *******  ******
[...]
>>>>>>>>>>>>>>>>>>> TRANSLATE INFO: <<<<<<<<<<<<<<<<<<
TRANSLATE MODE

DRIVE 1: LBA
DRIVE 2: DRIVE NOT ACTIVE
DRIVE 3: DRIVE NOT ACTIVE
DRIVE 4: DRIVE NOT ACTIVE

Tailles limites de partitions dues aux interfaces et au BIOS

Sigles :

Interface IDE

On a vu plus haut que l'accès à un enregistrement d'un disque se fait à l’aide de l’interruption 13h, en lui passant comme paramètres les n° de cylindre, secteur et tête, les deux premiers (cylindre et secteur) étant codés dans les registres CH et CL.

On en déduit la taille maximale d’une partition IDE
= 1024 x 63 x 16 x 512 
= 528482304 octets
= 504 Moctets. 

Interface EIDE

La norme EIDE supporte par contre 255 têtes (au lieu de 16). Donc la capacité maximale devient :
= 1024 x 63 x 255 x 512 
= 8422686720 octets
= 7.9 Goctets, arrondis communément à 8 Go 

BIOS LBA

L'adressage d'un cylindre est toujours limité à 1024, en raison des 10 bits prévus pour cela. Les disques peuvent dépasser physiquement cette valeur. Pour contourner cette limitation, il y a essentiellement 2 méthodes :

Tailles limites dues aux types de partition (FAT et NTFS)

FAT16

Les partitions FAT16 codant les n° de clusters sur 16 bits, le nombre maximal de clusters est donc limité à 2^16 = 65 536
Comme un cluster ne peut dépasser (sous DOS, Windows 95 et Windows 98) 32 768 octets, la taille maximale d'une partition FAT16 est donc
= 65536x32768 
=  2147483648 octets
= 2 Go

Sous NT4/W2K/XP, en utilisant des clusters de 64 ko (au lieu de 32ko), la taille maximale d'une partition FAT16 (qui ne sera accessible que par ces systèmes) est :
= 4 Go

FAT32

Les partitions FAT32 (reconnues sous Windows 95 OSR2, Windows 98, Windows 2000, WIndows XP) codant les n° de clusters sur 32 bits, le nombre maximal de clusters est donc limité à 2^32 = 4 294 967 296
La taille maximale THÉORIQUE d'une partition FAT32 est donc 
= 2^32 x 32768 
= 4 294 967 296 x 32768
= 140 737 488 355 328 octets 
= 128 To
En réalité
, les n° de clusters sont codés seulement sur 28 bits, les 4 bits de poids forts étant réservés.
= 2^28 x 32768
= 268 435 456 x 32768
De plus, certains n° de clusters sont réservés (n° de clusters fictifs indiquant cluster invalide, vide, ...), ce nombre maximal tombe à 268 435 445.
Donc la taille maximale EFFECTIVE THÉORIQUE d'une partition FAT32 est donc :
= 268 435 445 x 32768
=    8 796 092 661 760 octets
= 8 To
mais compte tenu de la limitation EIDE citée plus haut, la taille maximale RÉELLE d'une partition FAT32 est en réalité
= 8 Go 

FAT32X

Pour dépasser cette limite, Microsoft a créé un nouveau type de partition, appelé FAT32X, supporté seulement par Windows 95 OSR2, Windows 98, Windows Me et par Windows 2000/XP, qui permet d'utiliser des partitions de taille supérieure à cette limite des 8 Goctets
Elle est subordonnée obligatoirement à l'utilisation des extensions de l'interruption 13h du BIOS (mode LBA).
La FAT se trouve en particulier déplacée à la fin de la partition (au lieu de suivre le secteur de boot).
La taille limite des partitions FAT32X est
= 128 Go (= la limite due au mode LBA). 

sous Windows 2000/XP, la taille maximale d'une FAT32X est
= 32 Go (restriction due à l'outil de formatage). 
Mais Windows 2000/XP peut néanmoins accéder à des partitions créées par Windows 95 OSR2/98/Me et de tailles supérieures à 32Go (jusqu'à 128 Go)

NTFS

En ce qui concerne les partitions NTFS, il n'y pas vraiment de limite, puisque leur taille maximale est en théorie 
= 2^64 octets
= 16 Eo (Exaoctets). 
Mais compte tenu des limitations BIOS dues au mode d'adressage des secteurs, la taille effective maximale d'une partition NTFS est
= 2 To (128 Go actuellement) 

Récapitulatif

A l'heure actuelle (BIOS, types de partitions et systèmes disponibles), les tailles maximales de partitions en fonction du système d'exploitation (OS) et du système de fichiers (FS) sont :
OS / FS FAT16 FAT32 NTFS
DOS 6.x 2 Go
Win9X/ME 2 Go 128 Go

NT4 4 Go

128 Go
W2000/XP 4 Go 32 Go
*128 Go
128 Go
  * : si créée sous Win9X/ME

En ce qui concerne les disques de taille > 128 Go,
se reporter au chapitre qui leur est consacré plus bas dans ce document.

Secteur de boot de partition FAT12 ou FAT16 (DOS, Windows 3.x, Windows 9x, Windows NT)

Adresse
(hexa)

Contenu

Taille
(octets)

000 Instruction de saut à la routine de boot 3
003 Nom du fabricant et n° version(p.ex.MSWIN4.0) 8
00B Octets par secteur (0x200 = 512) 2
00D Secteurs par cluster (variable) 1
00E Nbre secteurs réservés (1) 2
010 Nbre de FAT (2) 1
011 Nbre d'entrées répertoire racine (0x200 = 512) 2
013 Nbre de secteurs dans le volume (variable)
ou 0 si la partition est trop grande
2
015 Descripteur de support (0xF8 pour un disque dur) 1
016 Nbre de secteurs par FAT 2
018 Nbre de secteurs par piste (variable) 2
01A Nbre de têtes (variable) 2
01C Distance entre 1er secteur du volume et 1er secteur du support 4
020 Nbre de secteurs dans le volume (variable)
si la valeur contenue à l'offset 013 est nulle
4
024 N° BIOS du disque physique (commence à 0x00 pour les disquettes, et 0x80 pour les disques durs) 1
025 A l'origine, n° de tête du secteur de boot. Inutilisé sauf par Windows NT 1
026 Signature. Inutilisé sauf par Windows NT 1
027 N° de série du disque (créé au formatage à partir de la date) 4
02B Nom de volume (identique à celui figurant dans le répertoire racine) 11
036 Chaîne décrivant l e système de fichiers ("FAT12", "FAT16") 8
03E
à 1FD
Routine de boot 448
1FE AA55 (code d'identification, id.secteur de partition) 2

Remarques :

Structure d'un secteur de boot de partition FAT32 (Windows 9x, Windows 2000)

Adresse
(hexa)

Contenu

Taille
(octets)

000 Instruction de saut à la routine de boot 3
003 Nom du fabricant et n° version(p.ex.MSWIN4.0) 8
00B Octets par secteur (0x200 = 512) 2
00D Secteurs par cluster (variable) 1
00E Nbre secteurs réservés (1) 2
010 Nbre de FAT (2) 1
011 Nbre d'entrées répertoire racine : inutilisé 2
013 Nbre de secteurs dans le volume (variable)
ou 0 si la partition est trop grande
2
015 Descripteur de support (0xF8 pour un disque dur) 1
016 Nbre de secteurs par FAT. Toujours à 0x0000 en FAT32 (cf offset 024) 2
018 Nbre de secteurs par piste (variable) 2
01A Nbre de têtes (variable) 2
01C Distance entre 1er secteur du volume et 1er secteur du support 4
020 Nbre de secteurs dans le volume (variable)
si la valeur contenue à l'offset 013 est nulle
4
024 Nbre de secteurs par FAT32 (remplace l'information à l'offset 016)  4
028 Indicateurs servant au "mirroring" de la FAT.  2
02A N° de version du système de fichiers 2
02C N° du 1er cluster du répertoire racine 4
030 N° du secteur du fichier d'information système (0xFFFF s'il n'existe pas) 2
032 N° du secteur de sauvegarde de boot  (0xFFFF s'il n'existe pas) 2
034 réservés 12
040
à 1FD
Routine de boot 446
1FE AA55 (code d'identification, id.secteur de partition) 2

Remarques :

Les clusters d'une partition FAT

Un fichier n'occupe pas sur disque exactement sa taille utile, mais le multiple - immédiatement supérieur à cette taille - de la taille d'un cluster, un cluster étant égal à "N" secteurs , et "N" étant une puissance de 2.

Intérêt des clusters 

  1. Physiquement on ne peut lire/écrire des données sur un disque autrement que par secteurs, qui représentent une certaine quantité d'octets. La taille des secteurs a été fixée "universellement" à 512 octets (on pourrait théoriquement imaginer des secteurs de ce qu'on veut, de préférence des puissances de 2, par exemple 1 octet, mais les têtes des disques seraient tellement sollicitées dans tous les sens qu'elles tomberaient en panne au bout de peu de temps d'utilisation !)
  2. Il faut être capable d'adresser les dits secteurs. Cela va dépendre du système de fichiers utilisé. Dans le cas de FAT16, on a une table de taille FIXE (et donc limitée), composée de mot de 16 bits, qui permet de repérer un secteur ou paquet de secteurs : le cluster.
    En FAT16, on peut repérer au maximum 65536 "entités" (en réalité moins, car il y a des valeurs réservées, la valeur réelle étant de 65525 ) ou clusters
    Donc si on choisit des clusters de 1 secteur, ce qui est optimal pour perdre le moins possible d'octets, on ne pourra adresser pas plus de 65536 secteurs, de 512 octets, ce qui représente 33554432 octets, soit 32 Mo!  Avec des clusters de 16 secteurs (= 16 x 512 octets = 8192 octets, ou 8 ko ), on monte à 512 Mo, ce qui est déjà un peu mieux. 

    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

Cependant, il n'est pas forcément toujours judicieux de prendre des clusters très petits. En effet, plus la taille des clusters est petite, et plus le risque de fragmentation des fichiers augmente. Ce qu'on gagne en espace disque, on va le perdre en performance.

Méthode de calcul 

En définissant : 

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!)

Tableau récapitulatif

Taille partition

Taille des clusters suivant le 
type de  partition
minimale maximale FAT16 FAT32  NTFS 
7 Mo  16 Mo ***** ***** 512 o
17 Mo 32 Mo 512 o ***** 512 o
33 Mo 64 Mo  1 ko 512 o 512 o
 65 Mo 128 Mo 2 ko 1 ko 512 o
129 Mo 256 Mo 4 ko 2 ko 512 o
257 Mo 512 Mo 8 ko 4 ko 512 o
513 Mo 1 Go 16 ko 4 ko 1 ko
1 Go 2 Go 32 ko 4 ko 2 ko
2 Go 4 Go 64 ko 4 ko 4 ko
4 Go 8 Go *****  4 ko 4 ko
8 Go 16 Go ***** 8 ko 4 ko
16 Go 32 Go ***** 16 ko 4 ko
32 Go 2 To ***** 32 ko 4 ko

Remarques : 

Nombre maximum d'entrées à la racine d'une partition FAT

Le répertoire racine d'un disque formaté en FAT12 ou FAT16 est fixe, et dépend du type de support (disque dur ou disquette)
En conséquence, le nombre de fichiers ou de répertoires que peut contenir le répertoire racine de ce type de partitions est limité (ce qui n'est pas le cas avec la FAT32).

Support

Nombre maximum
d'entrées

Disquette 1.44 M
(FAT12)

224

Disque dur
(FAT16)

512

Disque dur
(FAT32)

illimité
(seulement par
la capacité du disque)

Il n'y a pas de limitation dans une partition NTFS

Nombre maximum de fichiers et dossiers dans une partition

Le nombre maximum de fichiers et dossiers dépend du type de partition.

FAT

Le nombre de fichiers ou dossiers dans un répertoire est limité par la taille maximale d'un répertoire, qui est égale à 2^32 octets (la taille d'un fichier est codée sur 32 bits, voir ci-dessous)

Étant donné qu'une entrée de répertoire utilise 32 octets, cela donne
2^32 /32 = 134 217 728 entrées

Mais cela ne signifie pas autant de fichiers, en raison des noms longs de fichiers.

En effet, si on prend le cas (extrême) d'un fichier ayant un nom de 254 caractères, il occupera dans le répertoire le contenant :
254 /13 (arrondi à la valeur supérieure) soit :

soit un total de 21 entrées.
Cela ramène donc le nombre de fichiers à 6 391 320
(c'est un minimum, car heureusement tous les fichiers ne font pas 254 caractères!)

Mais il y a une autre limitation, qui est celle du nombre de fichiers par partition, en raison du nombre maximum de clusters :

partition clusters fichiers
FAT16 2^16-1 65 535
FAT32 2^22-1 4 194 303

(NB: NT4 n'est pas concerné par FAT32)

NTFS


La seule limitation est celle due au nombre maximum de clusters :

partition clusters fichiers
NFTS 2^32-1 4 294 967 295

Taille maximale d'un fichier ou dossier

FAT

Un fichier ne peut pas dépasser 2^32 octets, soit 4 Go, car la taille d'un fichier est stockée sur 4 octets dans l'entrée correspondante du répertoire qui le contient.

NTFS

Un fichier ne peut pas dépasser 2^44 octets - 64 koctets, soit un peu moins de 16 To

On peut être surpris de voir la taille maximale de fichier (16 To) supérieure à la taille maximale de disque (2 To).
Cela est du aux limitations supplémentaires sur la taille d'un disque (bits réservés dans l'adressage d'un secteur,...).
La taille théorique maximale d'un disque NTFS est non pas de 2 To mais de 2^64 soit 16777216 To !
 

Structure d'une entrée de répertoire FAT et noms longs

La structure d'une entrée de répertoire (32 octets) est la suivante : 

Nom court Nom long   
Octets Champ Taille
00 Nom de fichier 8
01
02
03
04
05
06
07
08 Extension 3
09
0A
0B Attributs 1
0C Réservé 10
0D
0E
0F
10
11
12
13
14
15
16 Heure 2
17
18 Date 2
19
1A 1er cluster 2
1B
1C Taille fichier 4
1D
1E
1F
  total 32

 

Octets Champ Taille remarques
00 N° d'entrée 1  
01 Nom UNICODE 10 =5 caractères
02
03
04
05
06
07
08
09
0A
0B Attributs 1 toujours 0x0F
0C Checksum 2  
0D
0E Suite nom 12 =6 caractères
0F
10
11
12
13
14
15
16
17
18
19
1A Réservé 2  
1B
1C Suite nom 4 =2 caractères
1D
1E
1F
  total 32  

Une entrée de nom long peut donc
contenir au maximum :
5 + 6 + 2 =13
caractères













 
Bit Attribut
7 réservé 
6 réservé 
5 archive 
4 sous répertoire
3 nom de volume
2 fichier système
1 fichier caché
0 fichier lecture seule

Une entrée de nom long
est caractérisée par un
attribut dans lequel les
4
derniers bits sont
TOUS
à 1 :

  • volume
  • système
  • caché
  • lecture seule

soit 0x0F.

Un nom long sera défini sous la forme de PLUSIEURS entrées supplémentaires, qui vont PRÉCÉDER l'entrée PRINCIPALE (= celle qui contient le nom court). L'ordre a énormément d'importance
En particulier, il ne faut surtout pas utiliser un outil de TRI de nom de fichiers dans un répertoire (je pense à l'antique "DS" - Directory Sort - des Norton Utilities des années 1985). Si on exécute un tel outil, c'est le désordre assuré dans le répertoire!

Par ailleurs, le nom long est exclusivement représenté en UNICODE (2 octets par caractère). 
Le 1er octet de l'entrée indique le n° d'ordre de l'entrée (0x01, 0x02, ...), la dernière entrée se voyant le bit 6 mis à 1 (p.ex. 0x42 au lieu de 0x02)

Exemple : 

Soit le fichier de nom : "La connaissance s'accroit quand on la partage.txt
49 caractères au total => il faudra 4 entrées de nom de nom long, 52=4x13 étant l'entier multiple de 13 immédiatement supérieur à 49.

Windows a déterminé comme nom court : "LACONN~1.TXT
Pour cela, il prend les 6 premiers caractères du nom long en éliminant tout ce qui n'est pas lettre ou chiffre (espace p.ex.), convertit en majuscules, ajoute le caractère tilde "~" , puis un chiffre (en fonction de ce qui existe déjà comme noms de fichier), et enfin rajoute la dernière extension (si elle existe)

Dans le répertoire contenant ce fichier, on trouve ceci :

Entrées Offset Octets Transcription
nom
long (4)
00000100
00000110
44 61 00 72 00 74 00 61 00 67 00 0F 00 8C 65 00 
2E 00 74 00 78 00 74 00 00 00 00 00 FF FF FF FF
Da.r.t.a.g....e.
..t.x.t.........
nom
long (3)
00000120
00000130
03 71 00 75 00 61 00 6E 00 64 00 0F 00 8C 20 00
6F 00 6E 00 20 00 6C 00 61 00 00 00 20 00 70 00
.q.u.a.n.d.... .
o.n. .l.a... .p.
nom
long (2)
00000140
00000150
02 63 00 65 00 20 00 73 00 27 00 0F 00 8C 61 00
63 00 63 00 72 00 6F 00 69 00 00 00 74 00 20 00
.c.e. .s.'....a.
c.c.r.o.i...t. .
nom
long (1)
00000160
00000170
01 4C 00 61 00 20 00 63 00 6F 00 0F 00 8C 6E 00 
6E 00 61 00 69 00 73 00 73 00 00 00 61 00 6E 00
.L.a. .c.o....n.
n.a.i.s.s...a.n.
nom
court
00000180
00000190
4C 41 43 4F 4E 4E 7E 31 54 58 54 20 00 27 25 8C 
26 2A 26 2A 00 00 45 8C 26 2A FC 0A 33 00 00 00
LACONN~1TXT .'%.
&*&*..E.&*..3...

Il y a 5 entrées au total :

  1. En 0x0100, la 4ème et dernière entrée (nom long) : 
  2. En 0x0120, la 3ème entrée  (nom long) :
    • repérée par le 1er octet égal à 0x03
    • attribut (offset 0x12B) égal à 0x0F
    • texte (Unicode) "quand on la p"
  3. En 0x0140, la 2ème entrée (nom long) :
    • repérée par le 1er octet égal à 0x02
    • attribut (offset 0x14B) égal à 0x0F
    • texte (Unicode) "ce s'accroit"
  4. En 0x0160, la 1ère entrée  (nom long) :
    • repérée par le 1er octet égal à 0x01
    • attribut (offset 0x16B) égal à 0x0F
    • texte (Unicode) "La connaissan"
  5. En 0x0180, l'entrée principale (nom court) :
    • attribut (offset 0x18B) égal à 0x20 (fichier archive)
    • texte (ASCII) "LACONN~1.TXT"
      NB: le point séparateur n'est jamais indiqué explicitement dans les noms courts

Comparaison entre FAT(32) et NTFS

Comme son nom l'indique : NTFS = "New Technology File System"
Ce système de fichier est né avec Windows NT (1993) (mais il a évolué depuis 1993).
C'est le système de fichiers par excellence de Windows NT/2000/XP.

NTFS a été conçu pour combler les lacunes existant dans le système FAT ("File Allocation Table") utilisé par DOS et Windows 95/98/ME.
NTFS est incomparablement supérieur à FAT !

FAT

C'est un système très "basique", composé de 3 parties (je fais abstraction du secteur de boot qui est commun à tout système) :

Un répertoire est un ensemble d'entrées de 32 octets, dans lequel on trouve diverses informations dont le n° du 1er cluster.
A partir de ce n°, le système d'exploitation va lire la FAT, et à l'adresse correspondant à ce n° de cluster, il trouve un code qui lui indique soit que le fichier n'a pas d'autres clusters, soit le n° du n° de cluster suivant, et ainsi de suite.

cf. davantage d'informations sur FAT16 et FAT32

NTFS

C'est un système de fichier SÉCURISÉ et JOURNALISÉ, bien avant EXT3FS ou ReiserFS du monde Linux!
Cela veut dire qu'il possède une procédure de restauration du système de fichiers permettant de reconstruire rapidement les données du disque après "plantage" du système.

cf. davantage d'informations sur NTFS et sa MFT,
ainsi que sur le site Microsoft un très bon article à ce sujet (bien que datant de plus de 3 ans)
 

FAT (16 ou 32) n'est donc à conserver que :

Les différences de performances entre FAT et NTFS :

Le cas des disques durs de taille supérieure à 128 Go

Depuis début 2002 environ sont apparus dans le commerce (Maxtor, Seagate, ..) des disques de capacité dépassant 128 Go.
Or cela peut causer des problèmes avec les systèmes d'exploitation usuels.

En effet, pour gérer (physiquement) les disques, le mode LBA (Logical Block Adressing), contenu dans les extensions de l'int13h du BIOS, réalise l'adressage (physique) d'un secteur via un mot de 28 bits (théoriquement 32, mais les 4 bits de poids fort sont réservés), si bien que la taille maximale d'un disque est avec ce système égale à 2^28 x 512 octets, soit :

= 137 438 953 472 octets,
= 131 072 Mo
= 128 Go

Pour pouvoir dépasser cette limite, il faut changer le mode d'adressage (de la même façon que NT4 fonctionnant au départ en mode CHS, c'est à dire 1024 cylindres de 255 pistes de 63 octets, ne pouvait pas adresser plus de 7.8 Go tant qu'on n'avait pas remplacé le driver ATAPI.SYS, mis à jour dans le SP4).

Donc avec le système actuel, il est IMPOSSIBLE d'utiliser un disque de taille > 128 Go!

Et il est totalement vain d'envisager, par exemple, la création de plusieurs partitions de tailles inférieures à 128 Go, puisque TOUT ce qui dépasse 128 Go est IGNORÉ! (tout comme du temps "CHS" sous DOS ou NT4  tout ce qui dépassait 8 Go était là aussi ignoré)

Pour lever la limite des 128 Go, l'ANSI NCITS T13 Technical Committee a édité une nouvelle norme appelée :

ATA Attachment - 6 with Packet Interface revision 3b
(document PDF de 496 pages!)

Cette norme est également dénommée :

Dans cette norme l'adressage d'un secteur est fait sur 48 bits (au lieu de 28).
La taille maximale d'un disque devient donc égale à 2^48 x 512 octets, soit :

= 144 115 188 075 855 872 octets
= 137 438 953 472 Mo
= 134 217 728 Go
= 131 072 To (Téraoctets)
= 128 Po (Pétaoctets)

Voici ce que dit Maxtor (un des premiers fabricants de disques de capacité > 128 Go) à ce sujet :

En raison de limitations dans Windows et de nombreux types de BIOS système, partitionner et formater des disques durs plus grands que 137 Gigaoctets sans le support adéquat de pilotes ou d'un contrôleur CAUSERA DES PERTES DE DONNEES lorsque la capacité au delà de la barrière des 137 Go sera utilisée.

la version multi-langues de "Application Accelerator" est disponible à l'adresse suivante :
ftp://aiedownload.intel.com/df-support/4857/a08/iaa23_multi.exe&URL=/4857/a08/iaa23_multi.exe
 

Les versions de Windows supportant les disques de taille supérieure à 128 Go

D'après le MSDN,  les versions suivantes de Windows supportent le mode LBA 48 bits, sous réserve que le BIOS  supporte ce mode  :

  • Le SP3 (et au delà) pour Windows 2000

  • Le SP1 (et au-delà) pour Windows XP

activent automatiquement le mode LBA 48 bits.
 
  • Windows 2000 (jusqu'au SP2)
  • Windows XP (sans SP)
par défaut, cette fonctionnalité n'est pas activée.
Il faut le faire manuellement, par ajout d'une entrée dans la Base de Registres.
Clef : HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Atapi\Parameters\
Entrée : EnableBigLba
Type : REG_DWORD
Valeur : 0x00000001

Cette modification est disponible ici sous la forme d'un fichier 128Go.reg à fusionner dans la BDR depuis l'explorateur :
(fichier 128Go.reg 118 octets)

Maxtor fourni aussi un utilitaire qui effectue cette modification de la Base de Registres
A ce sujet, Maxtor a mal interprété l'article de Microsoft (comme je l'avais fait auparavant)
On lit sur http://www.maxtor.com/en/support/downloads/big_drive_enabler.htm :

Maxtor's Big Drive Enabler is a one step executable that enables support for drives larger than 137 Gigabytes in Windows 2000 Service Pack 3 and XP Service Pack 1.

Or l'article 303013 (en anglais) du MSDN dit ceci :

The preceding registry setting is ignored in Windows XP SP1 and later.
Si on a un disque > 128 Go et si on a activé ce mode via l'installation d'un service pack :
  • le SP3 (Windows 2000) 
  • le SP1 (Windows XP)

il ne faut  pas désinstaller le SP, sinon on s'expose à des pertes de données

 A propos des valeurs "128 Go" et "137 Go" 

On rencontre souvent les 2 valeurs "137 Go" et "128 Go"
Cela provient de l'éternelle confusion entre :

Comme on a pu le voir plus haut, La taille maximale en LBA standard est égale à 137 438 953 472 octets, ce qui peut se lire :

Evidemment, un commercial préférera la version "décimale", plus flatteuse ! ;+))
L'expression conforme est 128 Go.

Les normes ATA des disques durs

Il existe depuis plus de 20 ans des normes concernant les disques durs (capacités et modes de transfert).

Elles ont la dénomination ATA, suivies d'un numéro (1 à 7 actuellement).
Le nom de chaque norme possède très souvent de nombreux synonymes, sources de confusions fréquentes!

Glossaire :
Sigles Significations Remarques
AT Advanced Technology Appellation due à IBM pour désigner (en 1984) ses "nouveaux" PC à base de processeurs 80286.
ATA Advanced Technology Attachments Normes de stockage de l'information sur disques durs (et CDROM et bandes)
IDE Integrated Drive Electronics Norme initiale (apparue avant ATA, puis reprise dans ATA)
EIDE Enhanced Integrated Drive Electronics Norme intermédiaire (apparue avant ATA, puis reprise dans ATA)
ATAPI ATA Packet Interface Standard de configuration de lecteurs de CDROM et bandes magnétiques
PIO Programmed Input/Output Transferts de données réalisés par le processeur
DMA   Direct Memory Access Accès direct entre la mémoire et un périphérique,
           sans passer par le processeur
UDMA Ultra Direct Memory Access Analogue à DMA, mais plus rapide
LBA   Logical Block Addressing Norme d'adressage des secteurs d'un disque,
s'effectuant par un nombre unique ("à plat") codé :
  • au départ sur 28 bits, autorisant donc 2^28 secteurs, donc capacité maximale de 128 Go
  • à présent (ATA-6) sur 48 bits, autorisant donc 2^48 secteurs, donc capacité maximale de 128 Po (Pétaoctets)
SMART Self-Monitoring, Analysis, and Reporting Technology Technologie servant à éviter des pertes de données en détectant et signalant des dysfonctionnements d'un disque dur. Cela requiert généralement des logiciels de tierce partie pour être utilisable.
INCITS InterNational Committee for Information Technology Standard Organisme international de standardisation dans les domaines du stockage, traitement, transfert, affichage, gestion, organisation récupération de l'information. Il est accrédité par l'ANSI (American National Standards Institute)
T13   Nom du groupe de l'INCITS consacré à ATA (créé en décembre 1995)
Normes ATA :

La colonne Date indique l'année à laquelle la norme a commencé à être envisagée, et non pas la date officielle de publication.

Norme Nom officiel Synonymes Date Modes supportés Débits
maximums
(Mo/s)
Nombre de
conducteurs
du connecteur
Remarques
ATA-1 ANSI X3.221-1994 IDE 1981 PIO mode 0
PIO mode 1
PIO mode 2
DMA Mode 0
3.33
4.16
5.22
8.33
40  
ATA-2 ANSI X3.279-1996 EIDE
Fast ATA
1994 PIO mode 3
PIO mode 4
DMA mode 1
DMA mode 2
11.1
13.3
16.6
16.6
40 Introduit le mode LBA (28 bits)
ATA-3 ANSI X3.298-1997   1996 PIO mode 3
PIO mode 4
DMA mode 1
DMA mode 2
11.1
 13.3
          16.6
          16.6
40 Ajoute, par rapport à ATA-2, la technologie SMART
ATA/ATAPI-4 ANSI NCITS 317-1998 UDMA 33 ATA/33 1997 UDMA mode 0
UDMA mode 1
UDMA mode 2
16.6
25.0
33.3
40 Ajoute de nouvelles commandes ATAPI et un nouveau protocole de transfert Ultra DMA, avec contrôle d'intégrité des données (CRC)
ATA/ATAPI-5 ANSI NCITS 340-2000 UDMA 66 ATA/66 1999 UDMA mode 3 UDMA mode 4 44.4
66.6
80 Début du projet nommé T13
Le doublement des conducteurs sert à limiter  les "EMI" (electro-magnetic interference ) par insertion d'un conducteur de masse entre chaque conducteur, faisant ainsi office de blindage.
ATA/ATAPI-6 ANSI NCITS 361-2002 UDMA 100
ATA/100

 
2000 UDMA mode 5 100
 
80 Finalisation du projet T13
Passe le LBA de 28 à 48 bits (64 prévus), ce qui autorise des disques de capacité > 128 Go
l'utilisation de disques > 128 Go nécessite  certaines précautions au niveau du système d'exploitation pour que cette capacité soit reconnue!
ATA/ATAPI-7 ANSI NCITS nnn-200x
(en cours)
UDMA 133
ATA/133
2003
(?)
UDMA mode 6 133   Introduit la nouvelle interface série SATA (Serial ATA)  NB: ce n'est pas encore un standard!


la norme ATA/ATAPI-7 bien que non finalisée à la date de rédaction de ce document est déjà utilisée avec les disques ATA/133 spécification citée au préalable dans ATA/ATAPI-6.