HOWTO - Disques de grande capacit�
Andries Brouwer,
[email protected],
v2.2m, 15 f�vrier 2000
Tout sur la g�om�trie des disques durs et la limite des 1024 cylin�
dres.
11.. EEnnoonncc�� dduu pprroobbll��mmee
Supposons que vous ayez un disque dur de plus de 1024 cylindres.
Supposons �galement que vous ayez un syst�me d'exploitation qui
utilise l'ancienne interface INT13, d'Entr�e/Sortie sur disques. Dans
ce cas, vous avez un probl�me, parce que cette interface utilise un
champ de 10 bits pour coder les cylindres sur lesquels sont effectu�es
les Entr�es/Sorties, de telle mani�re que les cylindres 1024 et au-
del� sont inaccessibles.
Heureusement, Linux ne se sert pas du BIOS, donc il n'y a pas de
probl�me.
Sauf peut-�tre pour deux choses :
(1) Quand vous d�marrez votre syst�me, Linux ne fonctionne pas encore
et ne peut donc pas vous pr�server des probl�mes li�s au BIOS. Cela a
certaines cons�quences pour LILO et d'autres programmes d'amor�age du
m�me acabit.
(2) Il est n�cessaire que tous les syst�mes d'exploitation qui se
partagent un m�me disque dur se mettent d'accord sur la position
physique de chaque partition. En d'autres termes, si vous utilisez
Linux et disons, DOS sur un seul disque dur, alors les deux se doivent
d'interpr�ter la table des partitions de la m�me mani�re. Cela a
quelques cons�quences pour le noyau de Linux et pour fdisk.
Vous trouverez ci-dessous une description assez pouss�e de tous les
d�tails importants. Prenez en compte le fait que j'utilise comme
r�f�rence un noyau dans sa version 2.0.8. D'autres versions pourront
donc pr�senter quelques diff�rences.
22.. RR��ssuumm��
Vous avez un nouveau disque de grande capacit�. Que faire ? Bon, du
c�t� logiciel il faut utiliser fdisk (ou mieux, cfdisk), pour cr�er
les partitions, ensuite mke2fs pour cr�er un syst�me de fichiers, et
enfin mount pour faire le lien entre ce nouveau syst�me de fichiers et
l'arborescence d�j� existante.
_I_l _y _a _u_n _a_n _j_'_a_u_r_a_i_s _p_u _�_c_r_i_r_e _: Il n'est pas n�cessaire de lire ce
HOWTO � partir du moment o�, de nos jours, il n'y a _p_a_s de probl�me
avec les disques de grande capacit�. La grande majorit� des probl�mes
constat�s est due au fait que les gens pensent qu'il peut y avoir un
probl�me, et installent un gestionnaire de disques durs, ou passent en
mode expert dans fdisk, ou encore sp�cifient explicitement une
g�om�trie de disque � LILO ou sur la ligne de commande du noyau.
Cependant, les domaines dans lesquels interviennent typiquement les
probl�mes sont :
� un mat�riel ancestral ;
� plusieurs syst�mes d'exploitation sur le m�me disque dur ;
� le d�marrage.
_E_n _c_e _m_o_m_e_n_t _l_a _s_i_t_u_a_t_i_o_n _e_s_t _e_n_c_o_r_e _p_i_r_e_. Peut-�tre que les noyaux
2.3.21 et suivants seront bons, � nouveau, pour tous les disques durs.
Conseil :
Pour les disques durs SCSI de grande capacit� : Linux les a tr�s t�t
support�s. Il n'y a rien � faire.
Pour les disques durs IDE de grande capacit� (au-del� de 8,4 Go) :
procurez-vous un noyau stable r�cent (2.0.34 ou plus). Normalement,
tout doit se passer correctement, surtout si vous avez eu la sagesse
de ne pas dire au BIOS de faire des conversions du type LBA ou
assimil�.
Pour des disques durs IDE de capacit� vraiment importante (au-del� de
33,8 Go) : reportez-vous � la section ``Probl�mes de l'IDE avec des
disques durs de 34 Go et plus'' ci-dessous.
Si LILO reste suspendu au d�marrage, il faut essayer de sp�cifier
``linear'' dans le fichier de configuration /etc/lilo.conf. (Et si
vous aviez vraiment linear, essayez sans.)
Il y a des probl�mes de g�om�trie qui peuvent �tre r�solus en passant
explicitement une g�om�trie au noyau/LILO/fdisk.
Si vous avez un vieux fdisk et qu'il vous met des messages d'erreur du
type ```overlapping partitions''' : ignorez-les ou v�rifiez en
utilisant cfdisk qui est vraiment bien.
Si vous pensez que quelque chose cloche dans la taille de votre disque
dur, assurez-vous que vous n'�tes pas en train de confondre ``unit�s''
binaires et d�cimales, et sachez que l'espace libre rapport� par df
pour un disque vide est inf�rieur de quelques centi�mes � la taille de
la partition, ce � cause d'un en-t�te de gestion.
Maintenant, si vous pensez qu'il y a tout de m�me des probl�mes, ou
simplement si vous �tes curieux, lisez la suite.
33.. UUnniitt��ss eett ttaaiilllleess
Un kilo-octet (Ko) est �gal � 1000 octets (NdT : un octet se dit byte
en anglais, et est abr�g� avec un `B' en majuscule. A ne pas confondre
avec un bit, qui se dit bit et qui est abr�g� avec un `b' en
minuscule !). Un M�ga-octet (Mo) est �gal � 1000 Ko. Un Giga-octet
(Go) est �gal � 1000 Mo. Un T�ra-octet (To) est �gal � 1000 Go. Cela
est la norme dans le Syst�me International
<
http://physics.nist.gov/cuu/Units/prefixes.html> (SI).
Cependant, il y a des personnes qui utilisent la conversion
1Mo=1024000 octets et parlent de disquettes de 1,44Mo, et des
personnes qui pensent que 1Mo=1048576 octets. L�, je me reporte au
nouveau standard <
http://physics.nist.gov/cuu/Units/binary.html>, et
j'�cris Ki, Mi, Gi, Ti pour les unit�s binaires, de telle sorte que
les disquettes ont une taille de 1440 Kio (1,47 Mo, 1,41 Mio), 1 Mio
est �gal � 1048576 octets (1,05 Mo), 1 Gio repr�sente 1073741824
octets (1,07 Go) et 1 Tio vaut 1099511627776 octets (1,1 To).
D'une mani�re assez normale, les constructeurs de disques durs suivent
la norme SI et utilisent des unit�s d�cimales. Cependant, les messages
de d�marrage de Linux et quelques programmes de type fdisk utilisent
les symboles MB et GB (Mo et Go en fran�ais) pour les unit�s binaires,
ou binaires-d�cimales m�lang�es. Donc, avant que vous ne pensiez que
votre disque est plus petit que ce qu'on vous avait promis lors de son
achat, calculez sa vraie taille en unit�s d�cimales (ou simplement en
octets).
En ce qui concerne la terminologie et les abr�viations des unit�s
binaires, Knuth <
http://www-cs-staff.stanford.edu/~knuth/> propose une
alternative <
http://www-cs-staff.stanford.edu/~knuth/news.html> qui
est d'utiliser KKo, MMo, GGo, TTo, PPo, EEo, ZZo, YYo, et de les
d�nommer _g_r_a_n_d _k_i_l_o _o_c_t_e_t, _g_r_a_n_d _m_�_g_a _o_c_t_e_t, ... _g_r_a_n_d _y_o_t_a _o_c_t_e_t. Il
�crit : `Remarquez que le fait de doubler la lettre a une connotation
� la fois binaire et d'amplitude.' C'est une bonne proposition
-- `grand giga octet' sonne mieux que `gibi octet'. Cependant, pour
le sujet qui est le n�tre, la seule chose importante est de mettre
l'accent sur le fait qu'un m�ga octet contient pr�cis�ment 1000000
octets, et qu'il est n�cessaire d'employer d'autres termes ou d'autres
abr�vations si vous voulez d�signer autre chose.
33..11.. TTaaiillllee dd''uunn sseecctteeuurr
Dans le cadre de ce texte, un secteur a une taille de 512 octets.
Cela est pratiquement toujours vrai, mais certains disques Magn�to-
Optiques par exemple, utilisent une taille de secteur �gale � 2048
octets, et toutes les capacit�s donn�es ci-dessous doivent �tre
multipli�es par quatre. (Si vous utilisez fdisk sur de tels disques,
assurez-vous d'avoir une version 2.9i ou sup�rieure, et passez-lui
l'option `-b 2048'.)
33..22.. TTaaiillllee dd''uunn ddiissqquuee
Un disque avec C cylindres, H t�tes (NdT : t�te se dit head en
anglais, d'o� l'abr�viation ;-)) et S secteurs par piste poss�de en
tout C*H*S secteurs, et peut stocker C*H*S*512 octets. Par exemple,
si sur un disque dur il est �crit C/H/S=4092/16/63, alors celui-ci a
4092*16*63=4124736 secteurs, et peut contenir 4124736*512=2111864832
octets (2,11 Go). Il y a une convention dans l'industrie qui consiste
� donner C/H/S=16383/16/63 pour les disques durs de plus de 8,4 Go, et
donc la taille du disque ne peut plus �tre d�duite des valeurs C/H/S
rapport�es par ce dernier.
44.. AAcccc��ss �� uunn ddiissqquuee dduurr
Si on veut lire ou �crire quelque chose � partir de, ou sur un disque
dur, il faut sp�cifier une position sur ce disque, en donnant par
exemple un num�ro de secteur ou de bloc. Si le disque dur est de type
SCSI, alors ce num�ro de secteur va directement au moteur de commande
SCSI et est compris par le disque. Si le disque dur est de type IDE
et qu'il utilise le mode LBA, alors il se passe exactement la m�me
chose. Mais si le disque dur est vieux, RLL, MFM ou IDE avant
l'apparition du LBA, alors l'�lectronique qui lui est attach�e attend
un triplet (cylindre, t�te, secteur) pour d�signer l'endroit voulu.
La correspondance entre la num�rotation lin�aire et cette notation
tridimensionnelle est la suivante : pour un disque dur avec C
cylindres, H t�tes et S secteurs/pistes, la position (c,h,s) en 3D, ou
la notation CHS, est la m�me que la position c*H*S + h*S + (s-1) en
notation lin�aire ou bien LBA. (Le -1 est d� au fait que
traditionnellement les secteurs sont num�rot�s � partir de 1 et non 0,
dans cette notation 3D.)
En cons�quence, pour permettre des acc�s � un tr�s vieux disque non-
SCSI, nous devons conna�tre sa _g_�_o_m_�_t_r_i_e, c'est-�-dire les valeurs de
C, H et S.
44..11.. AAcccc��ss ddiissqquueess dduu BBIIOOSS eett llaa lliimmiittee ddeess 11002244 ccyylliinnddrreess
Linux ne se sert pas du BIOS, mais d'autres syst�mes d'exploitation le
font. Le BIOS, qui existait avant le temps du LBA, offre avec INT13
des routines d'Entr�e/Sortie disque qui prennent (c,h,s) comme
arguments. (Plus pr�cis�ment : AH s�lectionne la fonction � ex�cuter,
CH correspond aux 8 bits de poids faible du num�ro de cylindre, CL a
dans ses bits 7-6 les deux bits de poids fort de ce m�me num�ro et
dans ses bits 5-0 le num�ro du secteur, DH est le num�ro de la t�te,
et DL est le num�ro du lecteur (80h ou 81h). Cela explique en partie
l'agencement de la table des partitions.)
Donc, nous obtenons un CHS cod� sur trois octets, avec 10 bits pour le
num�ro du cylindre, 8 bits pour le num�ro de t�te, et 6 bits pour le
num�ro de secteur sur la piste (num�rot� de 1 � 63). Il s'ensuit que
le num�ro de cylindre peut prendre des valeurs allant de 0 � 1023 et
que le BIOS ne peut pas adresser plus de 1024 cylindres.
Les logiciels DOS et Windows n'ont pas �volu� quand furent introduits
les disques IDE avec le support LBA, et ont toujours eu besoin du
soutien d'une g�om�trie pour g�rer les disques durs, m�me quand cela
n'a plus �t� n�cessaire pour effectuer des Entr�es/Sorties, mais
uniquement pour converser avec le BIOS. Cela signifie bien s�r que
Linux a besoin du support de la g�om�trie du disque dur quand il est
n�cessaire de communiquer avec le BIOS ou avec d'autres syst�mes
d'exploitation, m�me sur des disques durs modernes.
Cet �tat de choses a dur� pendant � peu pr�s quatre ans. Ont alors
commenc� � appara�tre sur le march� des disques durs qui ne pouvaient
plus �tre adress�s avec les fonctions INT13 (� cause du fait que
10+8+6=24 bits pour (c,h,s) ne peuvent pas adresser plus de 8,5 Go),
et une nouvelle interface BIOS a �t� cr��e : les d�nomm�es Fonctions
INT13 Etendues, o� DS:SI pointe sur un paquet repr�sentant l'adressage
du disque sur 16 octets, qui contient un nombre absolu de blocs
commen�ant par 8 octets.
Tout doucement, le monde Microsoft semble aller vers une utilisation
de ces Fonctions INT13 Etendues. Probablement, dans quelques ann�es,
plus aucun syst�me moderne plac� dans un ordinateur moderne n'aura
besoin du concept de `g�om�trie de disque dur'.
44..22.. HHiissttooiirree dduu BBIIOOSS eett ddeess lliimmiitteess ddee ll''IIDDEE
SSpp��cciiffiiccaattiioonn AATTAA ((ppoouurr lleess ddiissqquueess dduurrss IIDDEE)) -- llaa lliimmiittee ddeess 113377
GGoo
Au plus 65536 cylindres (num�rot�s de 0 � 65535), 16 t�tes
(num�rot�es de 0 � 15), 255 secteurs par piste (num�rot�s de 1 �
255), pour une capacit� totale maximale de 267386880 secteurs
(de 512 octets chacun), ce qui fait 136902082560 octets
(137 Go). Ce n'est pas encore un probl�me (en 1999), mais �a le
deviendra dans quelques ann�es.
BBIIOOSS IInntt 1133 -- llaa lliimmiittee ddeess 88,,55 GGoo
Au plus 1024 cylindres (num�rot�s de 0 � 1023), 256 t�tes
(num�rot�es de 0 � 255), 63 secteurs par piste (num�rot�s de 1 �
63) pour une capacit� totale maximale de 8455716864 octets (8,5
Go). De nos jours, cela est une s�rieuse limitation. Cela
signifie que DOS ne peut utiliser les actuels disques de grande
capacit�.
LLaa lliimmiittee ddeess 552288 MMoo
Si les m�mes valeurs c,h,s sont utilis�es pour les appels aux
fonctions Int13 du BIOS et pour les op�rations d'Entr�es/Sorties
du disque dur, alors les deux limitations s'ajoutent, et l'on ne
peut utiliser au plus que 1024 cylindres, 16 t�tes, 63 secteurs
par piste, ce qui donne une capacit� totale maximale de
528482304 octets (528 Mo), l'abominable limite des 504 Mio pour
DOS avec un vieux BIOS. Cela a commenc� � poser des probl�mes
aux alentours de 1993, et les gens ont eu recours � toutes
sortes de bidouillages, aussi bien au niveau mat�riel (LBA),
qu'au niveau du microprogramme (NdT : le `firmware') (les
conversions du BIOS), ou qu'au niveau logiciel (les
gestionnaires de disques durs). Le concept de `conversion' a
�t� invent� (1994) : un BIOS pouvait utiliser une g�om�trie
quand il s'adressait au lecteur, et une autre g�om�trie, fausse
celle-l�, quand il parlait � DOS, et faire des conversions de
l'une � l'autre.
LLaa lliimmiittee ddeess 22,,11 GGoo ((aavvrriill 11999966))
Quelques vieux BIOS n'utilisent qu'un champ de 12 bits en RAM
CMOS pour donner le nombre de cylindres. De ce fait, ce nombre
peut �tre au plus �gal � 4095, et l'on ne peut acc�der qu'�
4095*16*63*512=2113413120 octets. Le fait d'avoir un disque dur
de plus grande capacit� se traduirait par un plantage au moment
du d�marrage. Cela a pour effet de rendre les disques avec une
g�om�trie de 4092/16/63 assez populaires. Et encore de nos
jours, beaucoup de gros disques durs ont un cavalier qui permet
de faire croire qu'ils ont une g�om�trie de 4092/16/63. Vous
pouvez �galement jeter un coup d'oeil � la page plus de 2 Go
<
http://www.firmware.com/support/bios/over2gb.htm>.
LLaa lliimmiittee ddeess 33,,22 GGoo
Il y avait un bug dans la gestion des BIOS Phoenix 4.03 et 4.04
qui bloquait le syst�me lors de la configuration du CMOS pour
des disques durs ayant une capacit� sup�rieure � 3277 Mo. Jetez
un oeil � la page plus de 3 Go
<
http://www.firmware.com/support/bios/over3gb.htm>.
LLaa lliimmiittee ddeess 44,,22 GGoo ((ff��vvrriieerr 11999977))
Une conversion simple du BIOS (ECHS = CHS Etendu, parfois appel�
`Large disk support' ou simplement `Large') fonctionne en
doublant le nombre de t�tes et en divisant par deux le nombre de
cylindres montr�s au DOS, de mani�re r�p�t�e, jusqu'� ce que le
nombre de cylindres soit au plus �gal � 1024. Maintenant, DOS
et Windows 95 ne peuvent pas supporter 256 t�tes de lecture, et
donc, dans le cas fr�quent o� le disque dit avoir 16 t�tes, cela
signifie que cette moulinette ne fonctionne que jusqu'� une
taille de 8192*16*63*512=4227858432 octets (avec une fausse
g�om�trie de 1024 cylindres, 128 t�tes et 63 secteurs par
piste). Remarquez que ECHS ne modifie pas le nombre de secteurs
par piste, donc si ce n'est pas 63, la limite sera encore plus
basse. Voyez la page plus de 4 Go
<
http://www.firmware.com/support/bios/over4gb.htm>.
LLaa lliimmiittee ddeess 77,,99 GGoo
Des BIOS un peu plus malins que les autres �vitent le probl�me
pr�c�dent en ajustant d'abord le nombre de t�tes � 15 (`revised
ECHS'), de fa�on qu'une fausse g�om�trie comportant 240 t�tes
soit obtenue, valable jusqu'� une taille de
1024*240*63*512=7927234560 octets.
LLaa lliimmiittee ddeess 88,,44 GGoo
En d�finitive, si le BIOS fait tout ce qu'il peut pour r�ussir
la conversion, et utilise 255 t�tes et 63 secteurs par piste
(`assisted LBA' ou simplement `LBA') il peut atteindre
1024*255*63*512=8422686720 octets, soit l�g�rement moins que la
pr�c�dente limite de 8,5 Go, cela parce que les g�om�tries avec
256 t�tes doivent �tre �vit�es. (Cette conversion utilisera pour
le nombre de t�tes la premi�re valeur H, prise dans la suite 16,
32, 64, 128, 255, pour laquelle la capacit� totale du disque dur
tient dans 1024*H*63*512, et calcule alors le nombre de
cylindres C comme �tant �gal � la capacit� totale divis�e par
(H*63*512).)
LLaa lliimmiittee ddeess 3333,,88 GGoo ((AAoo��tt 11999999))
Le prochain obstacle se pr�sente avec une taille de 33,8 Go. Le
probl�me est qu'avec les 16 t�tes et les 63 secteurs/piste par
d�faut, �a donne un nombre de cylindres sup�rieur � 65535, qui
ne rentre pas dans un short. La plupart des BIOS existants ne
peuvent pas g�rer de tels disques. (Jetez un oeil, par exemple �
Asus upgrades
<
http://www.asus.com/Products/Motherboard/bios_slot1.html> pour
une nouvelle image � flasher qui fonctionne.) Les noyaux Linux
plus anciens que le 2.2.14 / 2.3.21 ont besoin d'un patch.
Voyez ``les probl�mes pos�s par les disques durs IDE de 34 Go et
plus'' ci-dessous.
Pour une autre discussion sur ce sujet, vous pouvez consulter la page
Breaking the Barriers
<
http://www.maxtor.com/technology/q&a/30004.html>, et pour encore plus
de d�tails, IDE Hard Drive Capacity Barriers
<
http://www.maxtor.com/technology/whitepapers/63001.html>.
Les disques durs de plus de 8,4 Go sont suppos�s donner leur g�om�trie
comme �tant 16383/16/63. Cela signifie en fait que la `g�om�trie' est
obsol�te, et qu'elle ne peut plus servir � calculer la taille totale
d'un disque dur.
55.. DD��mmaarrrraaggee
Quand le syst�me est mis en route, le BIOS lit le secteur 0 (connu
sous le nom de MBR : le "Master Boot Record", la donn�e principale
d'amor�age) du premier disque dur (ou de la disquette, ou du cd-rom),
et saute au code trouv� � cet endroit -- en g�n�ral un chargeur
d'amorce. Les petits chargeurs trouv�s � cet endroit n'ont, par
principe, pas leur propre gestionnaire de disques durs, et utilisent
plut�t les services du BIOS. Cela signifie qu'un noyau Linux ne peut
�tre charg� que s'il est enti�rement situ� dans les 1024 premiers
cylindres du disque.
Ce probl�me est r�solu de mani�re tr�s simple : assurez-vous que le
noyau (et peut-�tre d'autres fichiers utilis�s pendant la phase de
d�marrage, comme les fichiers `map' de LILO) soit situ� sur une
partition qui est comprise toute enti�re dans les 1024 premiers
cylindres d'un disque dur auquel le BIOS peut acc�der -- il est
probable qu'il s'agisse du premier ou du second disque.
Ainsi, cr�ez une petite partition, disons d'une taille de 10 Mo, de
telle mani�re qu'il y ait de la place pour une poign�e de noyaux, en
vous assurant qu'elle soit contenue enti�rement dans les 1024 premiers
cylindres du premier ou du second disque dur. Montez-le en tant que
r�pertoire /boot ; ainsi, LILO pourra y mettre ses propres fichiers.
55..11.. LLIILLOO eett ll''ooppttiioonn ``lliinneeaarr''
Un autre point est que le programme d'amor�age et le BIOS doivent �tre
d'accord sur la g�om�trie du disque dur. LILO demande la g�om�trie au
noyau, mais de plus en plus d'auteurs de gestionnaires de disques durs
suivent la mauvaise habitude qui consiste � d�duire une g�om�trie �
partir de la table de partitions, plut�t que de dire � LILO ce que le
BIOS va utiliser. Donc, la g�om�trie fournie par le noyau est souvent
inutile. Dans de tels cas on peut faciliter la t�che � LILO en lui
passant l'option linear. Il en r�sulte que LILO n'a pas besoin
d'informations sur la g�om�trie au moment d'installer le programme
d'amor�age (il stocke des adresses lin�aires dans des cartes :
fichiers `map') mais fait la conversion des adresses lin�aires au
moment du d�marrage. Pourquoi cela n'est-il pas le comportement par
d�faut ? En fait, il y a un inconv�nient : avec l'option `linear',
LILO ne conna�t plus les num�ros de cylindres, et par cons�quent ne
peut plus vous avertir quand une partie du noyau a �t� enregistr�e au-
del� de la limite du cylindre 1024, et vous pouvez vous retrouver avec
un syst�me qui ne d�marre plus.
55..22.. UUnn bbuugg ddee LLIILLOO
Avec les versions de LILO ant�rieures � la 2.1 il y a un autre
d�savantage : la conversion des adresses effectu�e au d�marrage
comporte un bug. Quand c*H est sup�rieur ou �gal � 65536, le calcul
provoque un d�passement de capacit�. Pour H sup�rieur � 64 cela donne
� c une limite encore plus stricte que le bien connu c < 1024 ; par
exemple, avec H=255 et un vieux LILO, on doit avoir c < 258
(c=cylindre o� r�side l'image du noyau, H=nombre de t�tes du disque).
55..33.. 11002244 ccyylliinnddrreess ccee nn''eesstt ppaass 11002244 ccyylliinnddrreess
Tim Williams a �crit : "J'avais ma partition Linux en dessous des 1024
premiers cylindres, et �a ne d�marrait quand m�me pas. Au d�but quand
je l'ai d�plac�e en dessous de 1 Go, les choses fonctionnaient."
Comment cela est-il possible ? En fait, c'�tait un disque dur SCSI
avec un contr�leur AHA2940UW qui utilise soit H=64, S=32 (c'est � dire
des cylindres de 1 Mio = 1,05 Mo), soit H=255, S=63 (c'est � dire des
cylindres de 8,2 Mo), en fonction des options du micro-code du disque
dur, et du BIOS. Il ne fait aucun doute que le BIOS se basait sur le
premier groupe de valeurs, c'est pourquoi la limite des 1024 cylindres
�tait trouv�e � 1 Gio, alors que Linux utilisait la seconde m�thode et
LILO estimait que la limite �tait � 8,4 Go.
66.. GG��oomm��ttrriiee dduu ddiissqquuee dduurr,, ppaarrttiittiioonnss eett ``oovveerrllaapp''
Si vous avez plusieurs syst�mes d'exploitation sur vos disques durs,
alors chacun utilise une ou plusieurs partitions. Un d�saccord sur la
localisation de ces partitions peut avoir des cons�quences
catastrophiques.
Le MBR contient une _t_a_b_l_e _d_e_s _p_a_r_t_i_t_i_o_n_s qui d�crit o� se situent les
partitions (primaires). Il y a 4 entr�es � la table, pour 4 partitions
primaires, et chacune ressemble � :
struct partition {
char active; /* 0x80 : on peut d�marrer avec, 0 : on ne peut pas */
char begin[3]; /* CHS pour le premier secteur */
char type;
char end[3]; /* CHS pour le dernier secteur */
int start; /* num�ro de secteur sur 32 bits (en commen�ant � 0) */
int length; /* nombre de secteurs sur 32 bits */
};
(avec CHS qui signifie Cylinder/Head/Sector).
Cette information est redondante : la position de la partition est
donn�e � la fois par les champs begin et end cod�s sur 24 bits, et par
les champs start et length cod�s sur 32 bits.
Linux ne se sert que des champs start et length, et ne peut de ce fait
que prendre en compte des partitions qui ne comportent pas plus de
2^32 secteurs, c'est-�-dire, des partitions d'au plus 2 Tio. Cette
capacit� est soixante fois plus grande que celle des disques durs que
l'on peut trouver de nos jours, alors peut-�tre que cela sera
suffisant pour, environ, les sept prochaines ann�es. (Donc, les
partitions peuvent �tre tr�s grandes, mais il y a une s�rieuse
restriction avec le syst�me de fichiers ext2 quand il est utilis� sur
des machines avec des entiers cod�s sur 32 bits : la taille maximale
d'un fichier est limit�e � 2 Gio.)
DOS utilise les champs begin et end, et se sert des appels INT13 du
BIOS pour acc�der aux disques durs ; il ne peut g�rer de ce fait que
des disques dont la taille ne d�passe pas 8,4 Go, m�me avec un BIOS
qui fait des conversions. (La taille des partitions ne peut pas
exc�der 2,1 Go � cause des restrictions du syst�me de fichiers FAT16.)
La m�me chose est valable pour Windows 3.11, WfWG et Windows NT 3.*.
Windows 95 int�gre la gestion des interfaces INT13 Etendues, et
utilise des types de partition sp�ciaux (c, e, f � la place de b, 6,
5) pour indiquer que l'on doit acc�der � la partition de cette
mani�re. Quand ces types de partition sont utilis�s, les champs begin
et end contiennent des informations factices (1023/255/63). Windows
95 OSR2 introduit le syst�me de fichier FAT32 (types de partition b ou
c), qui permet d'avoir des partitions d'au plus 2 Tio.
Qu'est-ce que c'est que ce message insens� que vous rapporte fdisk au
sujet de partitions qui se chevauchent : `overlapping', quand pourtant
tout est en ordre ? En fait, il y a quelque chose de
`probl�matique' : si vous voyez les champs begin et end de telles
partitions, comme DOS le fait, il y a chevauchement. (Et cela ne peut
pas �tre corrig�, parce que ces champs ne peuvent pas stocker des
num�ros de cylindre plus grands que 1024 : il y aura toujours
`chevauchement' d�s que vous aurez plus de 1024 cylindres.)
Cependant, si vous voyez les champs start et length, comme les voit
Linux, et �galement Windows 95 dans le cas de partitions typ�es c, e
ou f, alors tout appara�t comme �tant en ordre. Donc, ne tenez pas
compte de ces avertissements quand cfdisk ne se plaint pas et que vous
avez un disque dur avec uniquement Linux dessus. Soyez prudents quand
le disque dur est partag� avec DOS. Servez-vous des commandes cfdisk
-Ps /dev/hdx et cfdisk -Pt /dev/hdx pour voir la table des partitions
du disque /dev/hdx.
77.. CCoonnvveerrssiioonn eett GGeessttiioonnnnaaiirreess ddee DDiissqquueess DDuurrss
La g�om�trie des disques durs (avec t�tes, cylindres et pistes) est
une notion qui date de l'�ge de MFM et RLL. En ces temps l� cela
correspondait � une r�alit� physique. Aujourd'hui, avec l'IDE ou le
SCSI, plus personne n'est int�ress� par les `v�ritables' valeurs de la
g�om�trie d'un disque dur. En effet, le nombre de secteurs par piste
est variable -- il y en a plus pour les pistes proches du bord
ext�rieur du disque -- donc il n'y a pas de `bon' nombre de secteurs
par piste. Pratiquement � l'oppos� : la commande IDE, INITIALIZE
DRIVE PARAMETERS (91h) est utilis�e pour renseigner le disque dur sur
le nombre de t�tes et de secteurs par piste qu'il est sens� avoir � ce
moment pr�cis. Il est assez normal de voir un gros disque dur r�cent
qui n'a que 2 t�tes, rapporter qu'il en a 15 ou 16 au BIOS, pendant
que le BIOS peut � son tour dire au logiciel qui va s'en servir qu'il
en a 255.
Pour l'utilisateur, le mieux est de voir le disque dur comme un
tableau lin�aire de secteurs num�rot�s 0, 1, ..., et de laisser le
micro-code trouver o�, sur le disque dur, est situ� tel ou tel
secteur. Cette num�rotation lin�aire est appel�e LBA.
Donc, � pr�sent, la vision conceptuelle est la suivante : DOS, ou quel
que soit le programme d'amor�age, converse avec le BIOS en se servant
de la notation (c,h,s). Le BIOS convertit (c,h,s) en notation LBA en
utilisant la g�om�trie factice dont l'utilisateur se sert. Si le
disque dur accepte le LBA, alors cette valeur est utilis�e pour les
Entr�es/Sorties sur le disque. Autrement, elle est � nouveau convertie
en (c',h',s') en utilisant la g�om�trie dont le disque se sert cette
fois-l�, et qui est utilis�e pour les Entr�es/Sorties.
Remarquez qu'il y a une l�g�re confusion dans l'utilisation de
l'expression `LBA' : en tant que terme d�crivant les possibilit�s d'un
disque dur, cela signifie `Linear Block Adressing' -- Adressage de
blocs de mani�re lin�aire -- (par opposition � un adressage CHS). En
tant que terme de configuration du BIOS, il d�crit la m�thode de
conversion parfois appel�e `Assisted LBA' -- voir plus haut : ```La
limite des 8,4 Go'''.
Un comportement � peu pr�s identique appara�t quand le micro-code ne
parle pas le LBA, mais que le BIOS conna�t la conversion. (Dans la
configuration il est souvent mentionn� `Large'.) Donc, le BIOS va
pr�senter une g�om�trie (C,H,S) au syst�me d'exploitation, et va
utiliser (C',H',S') quand il parlera au contr�leur du disque dur.
Habituellement, S = S', C = C'/N et H = H'*N, o� N est la plus petite
puissance de deux qui garantisse C' <= 1024 (ainsi un minimum d'espace
disque est perdu au moment de l'arrondi dans C' = C/N). Encore une
fois, cela permet un acc�s � 8,4 Go maximum (7,8 Gio).
(La troisi�me option de configuration est `Normal', pour laquelle
aucune conversion n'est effectu�e.)
Si un BIOS ne conna�t pas `Large' ou `LBA', alors il existe quelque
part une solution logicielle. Les gestionnaires de disques durs comme
OnTrack ou EZ-Drive remplacent les routines de gestion de disque du
BIOS par les leurs. Cela est souvent r�alis� en faisant r�sider le
code du gestionnaire de disque dans le MBR et les secteurs suivants
(OnTrack nomme ce code DDO : Dynamic Drive Overlay - recouvrement
dynamique de disque), comme �a, il est charg� avant n'importe quel
autre syst�me d'exploitation. C'est pourquoi on peut avoir des
probl�mes en d�marrant depuis une disquette quand un gestionnaire de
disque dur a �t� install�.
Le r�sultat est plus ou moins le m�me avec un BIOS qui fait des
conversions - mais particuli�rement, c'est quand on utilise plusieurs
syst�mes d'exploitation sur le m�me disque dur que ces gestionnaires
peuvent poser beaucoup de probl�mes.
Depuis sa version 1.3.14, Linux supporte le gestionnaire de disque dur
OnTrack. EZ-Drive quant � lui est support� depuis la version 1.3.29.
Quelques d�tails suppl�mentaires sont donn�s dans ce qui suit.
88.. CCoonnvveerrssiioonnss dduu nnooyyaauu ppoouurr lleess ddiissqquueess dduurrss IIDDEE
Si le noyau de Linux d�tecte la pr�sence d'un gestionnaire de disque
sur un disque dur IDE, il va essayer de recartographier le disque de
la m�me mani�re que l'aurait fait le gestionnaire de disque, comme �a
Linux voit le m�me partitionnement pour, par exemple, DOS avec OnTrack
ou EZ-Drive. Cependant, AUCUNE recartographie n'est effectu�e quand
une g�om�trie a �t� pass�e en ligne de commande -- donc une option de
la ligne de commande comme `hd=_c_y_l_s,_t_�_t_e_s,_s_e_c_s' peut tr�s bien briser
la compatibilit� avec un gestionnaire de disque.
Si vous �tes touch� par ce probl�me et que vous conna�ssez quelqu'un
qui peut compiler pour vous un nouveau noyau, trouvez le fichier
linux/drivers/block/ide.c et supprimez, dans la routine
ide_xlate_1024(), le test if (drive->forced_geom) { ...; return 0; }.
La nouvelle cartographie est obtenue en essayant les valeurs 4, 8, 16,
32, 64, 128, 255 pour le nombre de t�tes (H*C reste constant) jusqu'�
ce que C <= 1024 ou que H = 255.
Ci-dessous les d�tails -- les titres des sous-sections sont les
messages qui apparaissent dans les diff�rents messages de d�marrage.
Ici et partout ailleurs dans ce texte, les types des partitions sont
donn�s en hexad�cimal.
88..11.. EEZZDD
EZ-Drive est d�tect� par le fait que le type de la premi�re partition
primaire est 55. La g�om�trie est recartographi�e comme d�crit ci-
dessus, et la table des partitions du secteur 0 est supprim�e -- � la
place, la table des partitions est celle lue sur le secteur 1. Le
nombre de blocs du disque n'est pas chang�, mais les �critures sur le
secteur 0 sont redirig�es vers le secteur 1. Ce comportement peut �tre
modifi� en recompilant le noyau avec #define FAKE_FDISK_FOR_EZDRIVE
0 dans ide.c.
88..22.. DDMM66 :: DDDDOO
OnTrack DiskManager (sur le premier disque dur) est d�tect� gr�ce au
type 54 de la premi�re partition primaire. La g�om�trie est
recartographi�e comme d�crit ci-dessus et la totalit� du disque est
d�cal�e de 63 secteurs (comme �a, l'ancien secteur 63 devient le
num�ro 0). Ensuite un nouveau MBR (avec une table des partitions) est
lu depuis le nouveau secteur 0. Bien s�r ce d�calage a pour but de
lib�rer de la place pour le DD0 -- c'est pourquoi il n'y a pas de
d�calage sur les autres disques durs.
88..33.. DDMM66 :: AAUUXX
OnTrack DiskManager (sur les autres disques durs) est d�tect� gr�ce au
type 51 ou 53 de la premi�re partition primaire. La g�om�trie est
recartographi�e comme d�crit ci-dessus.
88..44.. DDMM66 :: MMBBRR
Une version plus ancienne de OnTrack DiskManager n'est pas d�tect�e
gr�ce au type de partition, mais par signature. (Un test est effectu�
pour savoir si la valeur de d�calage trouv�e dans les octets 2 et 3 du
MBR n'est pas sup�rieure � 430, et si le short trouv� � cette valeur
de d�calage est �gal � 0x55AA et qu'il est suivi par un octet impair.)
Une fois encore, la g�om�trie est recartographi�e comme d�crit ci-
dessus.
88..55.. PPTTBBLL
Finalement, il y a un test qui tente de d�duire une conversion �
partir des valeurs start et end de la partition primaire : si
n'importe quelle partition a comme secteurs de d�but et de fin
respectivement 1 et 63, et comme dernier num�ro de t�te 31, 63, 127 ou
254, alors, � partir du moment o� il est habituel de terminer des
partitions sur une limite de secteur, et qui plus est depuis que
l'interface IDE utilise au plus 16 t�tes, il est suppos� qu'une
conversion du BIOS est active, et la geom�trie est recartographi�e
pour utiliser respectivement 32, 64, 128 ou 255 t�tes. Cependant, le
disque n'est pas recartographi� quand la vision actuelle de la
g�om�trie a d�j� 63 secteurs par piste et au moins autant de t�tes
(cela signifie sans doute qu'il a d�j� �t� recartographi�).
99.. CCoonnss��qquueenncceess
Qu'est-ce que tout cela signifie ? Pour les utilisateurs de Linux
seulement une chose : qu'ils doivent s'assurer que LILO et fdisk
utilisent la bonne g�om�trie, o� `bonne' pour fdisk est d�finie comme
la g�om�trie utilis�e par les autres syst�mes d'exploitation sur le
m�me disque dur, et pour LILO comme la g�om�trie qui va permettre des
�changes valides avec le BIOS au moment du d�marrage. (En g�n�ral les
deux vont de pair.)
Comment fdisk conna�t-il la g�om�trie ? Il demande au noyau en
utilisant l'ioctl HDIO_GETGEO. Mais l'utilisateur peut passer outre
cela en pr�cisant la g�om�trie de mani�re interactive, ou sur la ligne
de commande.
Comment LILO conna�t-il la g�om�trie ? Il demande au noyau en
utilisant l'ioctl HDIO_GETGEO. Mais l'utilisateur peut passer outre
cela en utilisant l'option `disk=' dans le fichier /etc/lilo.conf
(voyez la page de manuel lilo.conf(5)). On peut �galement passer
l'option linear � LILO, il va alors stocker des adresses LBA � la
place des CHS dans son fichier `map', et retrouvera la g�om�trie �
utiliser au moment du d�marrage (en utilisant la fonction 8 de INT13
pour conna�tre la g�om�trie du disque dur).
Comment le noyau sait-il r�pondre ? Eh bien, en tout premier lieu,
l'utilisateur doit avoir sp�cifi� de mani�re explicite, soit � la main
soit par l'interm�diaire du chargeur d'amorce, la g�om�trie avec la
commande en ligne du noyau `hda=_c_y_l_s,_t_�_t_e_s,_s_e_c_s' (voyez la page de
manuel bootparam(7)). Par exemple, vous pouvez demander � LILO de
fournir une telle option en ajoutant une ligne `append =
"hda=_c_y_l_s,_t_�_t_e_s,_s_e_c_s"' dans le fichier /etc/lilo.conf (voyez la page
de manuel de lilo.conf(5)). Sinon, le noyau devra deviner,
probablement en se servant des valeurs obtenues � partir du BIOS ou du
mat�riel lui-m�me.
Il est possible (depuis Linux 2.1.79) de changer l'id�e qu'a le noyau
de la g�om�trie en utilisant le syst�me de fichiers /proc. Par
exemple :
# sfdisk -g /dev/hdc
/dev/hdc: 4441 cylinders, 255 heads, 63 sectors/track
# cd /proc/ide/ide1/hdc
# echo bios_cyl:17418 bios_head:128 bios_sect:32 > settings
# sfdisk -g /dev/hdc
/dev/hdc: 17418 cylinders, 128 heads, 32 sectors/track
#
99..11.. CCaallccuull ddeess ppaarraamm��ttrreess ddee LLIILLOO
Parfois il est utile de forcer une certaine g�om�trie en ajoutant
`hda=_c_y_l_s,_t_�_t_e_s,_s_e_c_s' � la ligne de commande du noyau. On voudra
pratiquement toujours _s_e_c_s=63, et le but recherch� en ajoutant cela
est de sp�cifier _t_�_t_e_s. (Des valeurs raisonnables de nos jours sont
_t_�_t_e_s=16 et _t_�_t_e_s=255.) Que devra-t-on mettre pour _c_y_l_s ? Pr�cis�ment
le nombre qui donnera la bonne capacit� totale de C*H*S secteurs. Par
exemple, pour un disque dur avec 71346240 secteurs (36529274880
octets) on calculera C comme �tant 71346240/(255*63)=4441 (par exemple
en utilisant le programme bc), et on donnera le param�tre de d�marrage
hdc=4441,255,63. Comment conna�t-on la capacit� totale exacte ? Par
exemple,
# hdparm -g /dev/hdc | grep sectors
geometry = 4441/255/63, sectors = 71346240, start = 0
# hdparm -i /dev/hdc | grep LBAsects
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=71346240
donne deux mani�res de trouver le nombre total de secteurs 71346240.
Le message du noyau
# dmesg | grep hdc
...
hdc: Maxtor 93652U8, 34837MB w/2048kB Cache, CHS=70780/16/63
hdc: [PTBL] [4441/255/63] hdc1 hdc2 hdc3! hdc4 < hdc5 > ...
nous donne (au moins) 34837*2048=71346176 et (au moins)
70780*16*63=71346240 secteurs. Dans ce cas c'est la seconde valeur
qui appara�t comme correcte, mais en g�n�ral les deux peuvent �tre
arrondies � des valeurs inf�rieures. C'est une bonne fa�on d'approx�
imer la taille du disque dur quand hdparm n'est pas disponible. Ne
donnez jamais une valeur trop grande � cyls ! Dans le cas de disques
durs SCSI, le nombre pr�cis de secteurs est donn� dans les messages de
d�marrage du noyau :
SCSI device sda: hdwr sector= 512 bytes. Sectors= 17755792 [8669 MB] [8.7 GB]
(et Mo, Go sont arrondis, pas arrondis � la valeur inf�rieure, et
`binaires').
1100.. DD��ttaaiillss
1100..11.. DD��ttaaiillss ddee ll''IIDDEE -- lleess sseepptt gg��oomm��ttrriieess
Le gestionnaire IDE a cinq sources d'information concernant la
g�om�trie. La premi�re (G_user) est celle donn�e par l'utilisateur sur
la ligne de commande. La deuxi�me (G_bios) est la `BIOS Fixed Disk
Parameter Table' -- table des param�tres de disque fixe du BIOS --
(pour le premier et second disque dur seulement) qui est lue au
d�marrage du syst�me, avant le passage au mode 32 bits. Les troisi�me
(G_phys) et quatri�me (G_log) sont donn�es par le contr�leur IDE en
r�ponse � la commande IDENTIFY -- ce sont les g�om�tries `physique' et
`logique du moment'.
D'un autre c�t�, le gestionnaire a besoin de deux valeurs pour la
g�om�trie : d'abord G_fdisk, donn�e par un ioctl HDIO_GETGEO, et
ensuite G_used, qui est effectivement utilis�e pour les
Entr�es/Sorties. G_fdisk et G_used sont toutes deux initialis�es avec
la valeur de G_user si elle est fournie, avec G_bios quand le CMOS dit
que cette valeur est pr�sente, et avec G_phys autrement. Si G_log
semble vraisemblable, alors G_used est positionn�e � cette valeur.
Sinon, si G_used n'est pas vraisemblable et que G_phys semble l'�tre,
alors G_used prend la valeur de G_phys. Ici, `vraisemblable' signifie
que le nombre de t�tes est compris dans l'intervalle 1-16.
En d'autres termes : la ligne de commande prend le pas sur le BIOS et
va d�terminer ce que va voir fdisk, mais si elle donne une g�om�trie
convertie (avec plus de 16 t�tes), alors pour les Entr�es/Sorties
qu'effectuera le noyau elle sera elle-m�me remplac�e par les valeurs
que fournira la commande IDENTIFY.
Remarquez que G_bios est assez peu fiable : pour des syst�mes qui
d�marrent depuis un p�riph�rique SCSI, les premier et second disques
durs peuvent tr�s bien �tre SCSI ; et la g�om�trie que le BIOS aura
donn� pour sda sera utilis�e par le noyau pour hda. Du reste, les
disques durs qui ne sont pas d�clar�s dans la configuration du BIOS ne
sont pas vus par ce dernier. Cela signifie que, par exemple, dans un
syst�me uniquement IDE o� hdb n'est pas d�clar� dans la configuration,
les g�om�tries rapport�es par le BIOS pour les premier et second
disques vont �tre appliqu�es � hda et hdc.
1100..22.. DD��ttaaiillss ppoouurr llee SSCCSSII
La situation pour le SCSI est l�g�rement diff�rente, puisque les
commandes SCSI utilisent d�j� les num�ros de blocks logiques, donc une
`g�om�trie' est compl�tement hors de propos pour les v�ritables
Entr�es/Sorties. Cependant, le format de la table des partitions est
toujours le m�me, donc fdisk ne fait pas la diff�rence entre des
disques IDE et SCSI. Comme on peut le voir � partir de la description
d�taill�e ci-dessus, chaque gestionnaire de disques s'invente une
g�om�trie diff�rente. Un gros foutoir en fait.
Si vous n'utilisez pas DOS ou un �quivalent, alors �vitez toute
configuration qui met en jeu des conversions �tendues, et utilisez
simplement 64 t�tes, 32 secteurs par piste (cela a pour effet de
donner une valeur tout � fait sympathique et commode de 1 Mio par
cylindre), si possible, comme �a il n'y aura pas de probl�me quand
vous d�placerez le disque dur d'un contr�leur � un autre. Certains
gestionnaires de disque SCSI (aha152x, pas16, ppa, qlogicfas,
qlogicisp) sont si sensibles au sujet de la compatibilit� avec le DOS
qu'ils ne permettront pas � un syst�me uniquement Linux d'utiliser
plus de 8 Gio. C'est un bug.
Quelle est la vraie g�om�trie ? La r�ponse la plus facile est qu'elle
n'existe pas. Et si elle existait, vous ne voudriez pas la conna�tre,
et � coup s�r JAMAIS, AU GRAND JAMAIS ne devrez en dire quoi que ce
soit � fdisk ou � LILO ou au noyau. C'est uniquement une histoire
entre le contr�leur SCSI et le disque dur. Laissez-moi le redire :
seules les personnes stupides donnent � fdisk, � LILO ou au noyau la
v�ritable g�om�trie d'un disque SCSI.
Mais si vous �tes curieux et que vous insistez, vous devez demander au
disque dur lui-m�me. Il y a l'importante commande READ CAPACITY qui
donnera la capacit� compl�te du disque dur, et il y a la commande MODE
SENSE, qui, dans la Rigid Disk Drive Geometry Page (page 04) donne le
nombre de cylindres et de t�tes (c'est une donn�e qui ne peut pas �tre
chang�e), et dans la Format Page (page 03) donne le nombre d'octets
par secteur, et de secteurs par piste. Ce dernier nombre est
typiquement d�pendant du rang, et le nombre de secteurs par piste
varie -- les pistes ext�rieures ont plus de secteurs que les pistes
int�rieures. Le programme Linux scsiinfo donnera cette information. Il
y a de nombreux d�tails et complications, et il est clair que personne
(probablement m�me pas le syst�me d'exploitation) ne d�sire utiliser
cette information. Du reste, tant que nous ne nous int�ressons qu'�
fdisk et � LILO, on a typiquement des r�ponses du style
C/H/S=4476/27/171 -- valeurs qui ne peuvent pas �tre utilis�es par
fdisk parce que la table des partitions ne r�serve que 10,8 et 6 bits
pour respectivement C/H/S.
Mais alors, d'o� le HDIO_GETGEO du noyau tire-t-il ses informations ?
Eh bien, soit du contr�leur SCSI, soit en faisant une supposition
�clair�e. Certains gestionnaires de disque semblent croire que nous
voulons conna�tre la `r�alit�', mais bien s�r nous ne voulons savoir
que ce que FDISK de DOS ou de OS/2 (ou AFDISK de Adaptec, etc.)
utiliseront.
Remarquez que le fdisk de linux a besoin des nombres H et S de t�tes
et de secteurs par piste pour convertir les nombres de secteurs LBA en
adresses c/h/s, mais le nombre de cylindres C ne joue aucun r�le.
Quelques gestionnaires de disque utilisent (C,H,S) = (1023,255,63)
pour signaler que la capacit� du disque dur est d'au moins 1023*255*63
secteurs. Ce n'est pas de chance, puisqu'ils ne r�v�lent pas la vraie
taille, et limiteront les utilisateurs de la plupart des versions de
fdisk � n'avoir acc�s qu'� environ 8 Gio de leur disque - une s�rieuse
limitation de nos jours.
Dans le texte ci-dessous, M repr�sente la capacit� totale du disque
dur, et C, H, S, le nombres de cylindres, de t�tes et de secteurs par
piste. Il suffit de donner H, S si l'on voit C comme �tant d�fini par
M / (H*S).
Par d�faut, H=64 et S=32.
aahhaa11774400,, ddttcc,, gg__NNCCRR55338800,, tt112288,, wwdd77000000 ::
H=64, S=32.
aahhaa115522xx,, ppaass1166,, ppppaa,, qqllooggiiccffaass,, qqllooggiicciisspp ::
H=64, S=32 � moins que C ne soit sup�rieur � 1024, auquel cas
H=255, S=63, C = min(1023, M/(H*S)). (Ainsi C est tronqu�, et
H*S*C n'est pas une approximation de la capacit� M du disque
dur. Cela va d�router la plupart des versions de fdisk.) Le code
de ppa.c utilise M+1 � la place de M et dit qu'� cause d'un bug
dans sd.c, M est plus petit de 1.
aaddvvaannssyyss ::
H=64 et S=32 � moins que C ne soit sup�rieur � 1024 ou que,
encore mieux, l'option du BIOS `> 1 GB' ait �t� activ�e, auquel
cas H=255 et S=63.
aahhaa11554422 ::
Demande au contr�leur lequel des deux sch�mas de conversion est
utilis�, et se sert soit de H=255, S=63, soit de H=64, S=32.
Dans le dernier cas, il y a un message au d�marrage qui dit
"aha1542.c: Using extended bios translation" ("aha1542.c:
Utilisation du mode de conversion �tendu du bios")
aaiicc77xxxxxx ::
H=64 et S=32 � moins que C ne soit sup�rieur � 1024 ou que,
mieux encore, le param�tre de d�marrage "extended" ait �t�
pass�, ou que le bit `extended' ait �t� positionn� dans la
SEEPROM ou dans le BIOS, auquel cas H=255, S=63. Dans Linux
2.0.36 ce mode de conversion �tendu devrait toujours �tre
automatiquement utilis� si il n'y a pas de SEEPROM, mais dans
Linux 2.2.6, si le m�me cas se pr�sente, le mode de conversion
�tendu est utilis� seulement si l'utilisateur le demande au
travers du param�tre de d�marrage (de ce fait, quand une SEEPROM
est trouv�e, le param�tre de d�marrage est ignor�). Cela
signifie qu'une configuration qui fonctionne en 2.0.36 peut ne
pas d�marrer avec un noyau 2.2.6 (LILO n�cessite alors le mot-
cl� `linear', ou le noyau a besoin du param�tre
`aic7xxx=extended' au d�marrage).
bbuussllooggiicc ::
H=64 et S=32 � moins que C ne soit sup�rieur � 1024, ou que,
encore mieux, le mode de conversion �tendu ait �t� autoris� au
niveau du contr�leur, auquel cas si M < 2^22 alors H=128, S=32 ;
sinon H=255, S=63. Cependant, apr�s avoir fait ce choix pour
(C,H,S), la table des partitions est lue, et si pour l'une des
trois possibilit�s (H,S) = (64,32), (128,32), (255,63) la valeur
endH=H-1 est vue quelque part, alors cette paire est utilis�e,
et le message "Adopting Geometry from Partition Table"
("Adoption de la g�om�trie lue dans la table des partitions")
est affich� au d�marrage.
ffddoommaaiinn ::
Il trouve l'information sur la g�om�trie dans la Table des
Param�tres des Disques du BIOS (BIOS Drive Parameter Table), ou
lit la table des partitions et utilise H=endH+1, S=endS pour la
premi�re partition, � condition qu'elle ne soit pas vide, ou
utilise H=64, S=32 pour M < 2^21 (1 Gio), H=128, S=63 pout M <
63*2^17 (3.9 Gio) et H=255, S=63 dans les autres cas.
iinn22000000 ::
Il utilise le premier couple (H,S) = (64,32), (64,63), (128,63),
(255,63) qui rendra C < 1024. Dans le dernier cas, C est ramen�
� la valeur 1023.
sseeaaggaattee ::
Il lit C,H,S depuis le disque dur. (Horreur !) Si C ou S sont
trop grands, alors il fixe S=17, H=2 et double la valeur de H
tant que C <= 1024. Cela signifie que H sera mis � 0 si M >
128*1024*17 (1.1 Gio). C'est un bug.
uullttrraassttoorr eett uu1144__3344ff ::
Un de ces trois couples de r�f�rence est utilis� ((H,S) =
(16,63), (64,32), (64,63)) en fonction du mode de cartographie
du contr�leur.
Si le gestionnaire ne pr�cise pas la g�om�trie, nous retombons dans un
mode de supposition guid� par la table des partitions, ou par la
capacit� totale du disque dur.
Regardez la table des partitions. Puisque par convention les
partitions se terminent � la limite d'un cylindre, nous pouvons, �tant
donn� que end = (endC,endH,endS) pour n'importe quelle partition,
simplement fixer H = endH+1 et S = endS. (Il est rappel� que le
d�compte des secteurs commence � 1.) Plus pr�cis�ment, voil� ce qui
est fait : s'il existe une partition non vide, prendre la partition
avec le plus grand begin. Pour cette partition, regarder endH+1,
calcul� � la fois en additionnant start et length, et en supposant le
fait que cette partition se termine � la limite d'un cylindre. Si les
deux valeurs concordent, ou si endC = 1023 et start+length est un
multiple entier de (endH+1)*endS, alors accepter le fait que cette
partition se termine effectivement sur la fronti�re d'un cylindre, et
fixer H = endH+1 et S = endS. Si cela �choue, soit parce qu'il n'y a
pas de partition, soit parce qu'elles ont des tailles bizarres, il
faut uniquement se fier � la capacit� totale M du disque dur.
Algorithme : fixer H = M/(62*1024) (arrondi au chiffre sup�rieur), S =
M/(1024*H) (arrondi au chiffre sup�rieur), C = M/(H*S) (arrondi au
chiffre inf�rieur). Cela a pour effet de g�n�rer un triplet (C,H,S)
avec C �gal � 1024 au plus, et S �gal � 62 au plus.
1111.. LLiimmiittee ddee LLiinnuuxx ppoouurr ll''IIDDEE �� 88 GGiioo
Le gestionnaire IDE de Linux obtient la g�om�trie et la capacit� d'un
disque (et beaucoup d'autres choses) en utilisant une requette ATA
IDENTIFY. R�cemment encore le gestionnaire ne croyait pas en la valeur
retourn�e pour lba_capacity si elle �tait plus de 10% sup�rieure � la
capacit� calcul�e par C*H*S. Cependant, par suite d'un accord entre
les industriels, les disques IDE de grande capacit� donnent les
valeurs C=16383, H=16 et S=63, pour un total de 16514064 secteurs
(7.8 Go) ind�pendamment de leur taille r�elle, mais donnent cette
taille r�elle dans lba_capacity.
Les noyaux r�cents de Linux (2.0.34, 2.1.90) savent cela et agissent
en cons�quence. Si vous avez un noyau Linux plus ancien et que vous ne
voulez pas passer � une version plus r�cente, et que cedit noyau ne
voit que 8 Gio d'un bien plus gros disque dur, alors essayez de
remplacer la routine lba_capacity_is_ok dans
/usr/src/linux/drivers/block/ide.c par quelque chose du genre
static int lba_capacity_is_ok (struct hd_driveid *id) {
id->cyls = id->lba_capacity / (id->heads * id->sectors);
return 1;
}
Pour une modification plus s�re, voyez le noyau 2.1.90.
1111..11.. CCoommpplliiccaattiioonnss dduu BBIIOOSS
Comme nous venons de le dire, les gros disques durs donnent la
g�om�trie C=16383, H=16, S=63 ind�pendamment de leur vraie taille,
alors que cette derni�re est visible par la valeur de LBAcapacity.
Certains BIOS ne savent pas cela, et convertissent ce 16383/16/63 en
quelque chose qui a moins de cylindres et plus de t�tes, par exemple
1024/255/63 ou 1027/255/63. Donc, le noyau ne doit pas seulement
reconna�tre la g�om�trie particuli�re 16383/16/63, mais �galement
toutes ses versions mutil�es par le BIOS. Depuis le noyau 2.2.2 cela
est fait correctement (en prenant la vision du BIOS de H et S, et en
calculant C = capacit�/(H*S)). En g�n�ral, ce probl�me est r�solu en
mettant le disque en mode Normal dans la configuration du BIOS (ou,
encore mieux, � None, ne le d�clarant pas du tout au BIOS). Si cela
est impossible parce que vous devez d�marrer � partir de ce disque
dur, ou l'utiliser avec DOS/Windows, et que vous n'envisagez pas un
passage au noyau 2.2.2 ou mieux, utilisez les param�tres de d�marrage
du noyau.
Si un BIOS rapporte 16320/16/63, c'est en g�n�ral pour pouvoir aboutir
� 1024/255/63 apr�s conversion.
Il y a ici, un autre probl�me. Si le disque dur a �t� partitionn� en
utilisant une conversion de g�om�trie, alors le noyau peut, au moment
du d�marrage, voir cette g�om�trie qui est utilis�e dans la table des
partitions, et rapporter hda: [PTBL] [1027/255/63]. Ce n'est pas bon
parce que maintenant le disque dur n'est que de 8,4 Go. Cela a �t�
corrig� dans le noyau 2.3.21. Encore un fois, les param�tres de
d�marrage du noyau seront utiles.
1111..22.. DDeess ccaavvaalliieerrss ppoouurr ss��lleeccttiioonnnneerr llee nnoommbbrree ddee tt��tteess
Beaucoup de disques durs ont des cavaliers qui vous permettent de
choisir entre des g�om�tries � 15 ou � 16 t�tes. Le r�glage par d�faut
vous donnera une g�om�trie � 16 t�tes. Parfois, les deux g�om�tries
adressent le m�me nombre de secteurs, parfois la version � 15 t�tes
est plus petite. Vous devez avoir une bonne raison pour changer cette
valeur : Petri Kaukasoina a �crit : `Un disque dur IBM Deskstar 16 GP
de 10.1 Go (mod�le IBM-DTTA-351010) avait ses cavaliers positionn�s
pour pr�senter 16 t�tes par d�faut mais ce vieux PC (avec un AMI BIOS)
ne d�marrait pas et j'ai eu � modifier les cavaliers pour le faire
passer en 15 t�tes. hdparm -i donne RawCHS=16383/15/63 et
LBAsects=19807200. J'utilise 20960/15/63 pour avoir la capacit�
totale.' La g�om�trie 16383/15/63 n'est pas encore reconnue par le
noyau, donc il est n�cessaire de donner explicitement ces param�tres
au d�marrage. La g�om�trie 16383/15/63 n'est pas encore reconnue par
le noyau, donc des param�tres de d�marrage explicites sont ici
n�cessaires. Pour le positionnement des cavaliers voyez
http://www.storage.ibm.com/techsup/hddtech/hddtech.htm
<
http://www.storage.ibm.com/techsup/hddtech/hddtech.htm>.
1111..33.. DDeess ccaavvaalliieerrss ppoouurr lliimmiitteerr llaa ccaappaacciitt�� ttoottaallee
De nombreux disques durs ont des cavaliers qui vous permettent de
faire appara�tre leur taille inf�rieure � leur valeur r�elle. C'est
une b�tise que de le faire, et probablement aucun utilisateur de Linux
ne voudra utiliser cette fonctionnalit�, mais certains BIOS plantent
avec de gros disques. En g�n�ral la solution consiste � conserver le
disque enti�rement en dehors du contr�le du BIOS. Cela n'est faisable
que si ce disque dur n'est pas votre disque de d�marrage.
La premiere limite s�rieuse fut celle des 4096 cylindres (soit, avec
16 t�tes et 63 secteurs par piste, 2,11 Go). Par exemple un disque
dur Fujitsu MPB3032ATU de 3,24 Go a une g�om�trie par d�faut de
6704/15/63, mais ses cavaliers peuvent �tre positionn�s pour qu'elle
apparaisse comme �tant 4092/16/63. Le disque rapportera une capacit�
LBA de 4124736 secteurs, et de ce fait le syst�me d'exploitation ne
pourra pas deviner qu'il est en r�alit� plus grand. Dans un tel cas
(avec un BIOS qui plante s'il sait que le disque dur est en r�alit� si
grand, et donc avec lequel les cavaliers sont n�cessaires) on aura
besoin de param�tres de d�marrage pour donner � Linux la taille du
disque.
C'est pas de chance. La plupart des disques durs ont des cavaliers qui
peuvent �tre positionn�s pour qu'ils apparaissent comme �tant des 2 Go
et pour qu'ils rapportent une g�om�trie tronqu�e comme 4092/16/63 ou
4096/16/63, mais qui leur permettent toujours de rapporter une
capacit� LBA compl�te. De tels disques durs fonctionneront bien, et
utiliseront l'int�gralit� de leur capacit� sous Linux, que les
cavaliers aient �t� positionn�s ou pas.
Une limite plus r�cente est celle des ``33,8 Go''. Les noyaux Linux
plus anciens que le 2.3.21 n�cessitent l'application d'un patch pour
�tre capable de s'en sortir avec des disques durs IDE d'une taille
plus importante que celle-l�. Certains disques durs plus gros que �a
ont des cavaliers qui peuvent les faire appara�tre comme ayant une
capacit� de 33,8 Go. Par exemple, l'IBM Deskstar 37,5 Go
(DPTA-353750) avec 73261440 secteurs (ce qui correspond � 72680/16/63,
ou � 4560/255/63) a un cavalier qui peut �tre positionn� de telle
mani�re que le disque dur appara�t avec une taille de 33,8 Go, et donc
rapporte une g�om�trie de 16383/16/63 comme n'importe quel gros disque
dur, mais avec une capacit� LBA de 66055248 (correspondant �
65531/16/63, ou � 4111/255/63). Malheureusement le cavalier semble
�tre trop efficace -- il ne se contente pas d'influencer ce que le
disque rapporte au syst�me, mais il modifie �galement les
entr�es/sorties : Pert Soucek explique que pour ce disque en
particulier, les param�tres de d�marrage ne sont pas utiles -- avec le
cavalier positionn�, tout acc�s aux secteurs 66055248 et sup�rieurs se
solde par une erreur d'entr�e/sortie. Donc, sur une carte-m�re avec
un BIOS Award 4.51PG on ne peut pas � la fois utiliser ce disque comme
disque de d�marrage et � pleine capacit�.
Vous pouvez �galement regarder la page sur la limite de 33,8 Go du
BIOS <
http://www.storage.ibm.com/techsup/hddtech/bios338gb.htm>.
1122.. LLiimmiittee ddee LLiinnuuxx �� 6655553355 ccyylliinnddrreess
L'ioctl HDIO_GETGEO retourne le nombre de cylindres dans un short.
Cela signifie que si vous avez plus de 65535 cylindres, le nombre est
tronqu�, et (pour une configuration SCSI typique avec 1 Mio de
cylindres) un disque de 80 Gio peut appara�tre comme ne faisant que
16 Gio. Une fois que le probl�me a �t� d�tect�, il est facile de
l'�viter.
1122..11.. PPrroobbll��mmeess ddee ll''IIDDEE aavveecc ddeess ddiissqquueess dduurrss ddee 3344 GGoo eett pplluuss
Des unit�s d'une taille sup�rieure � 33,8 Go ne fonctionneront pas
avec les noyaux ant�rieurs au 2.3.21. Les d�tails sont les suivants.
Supposez que vous ayez achet� un tout nouveau disque dur IBM-
DPTA-373420 qui offre une capacit� de 66835440 secteurs (34,2 Go). Les
noyaux plus anciens que le 2.3.21 vous diront que la taille est de
769*16*63 = 775152 secteurs (0,4 Go), ce qui est quelque peu �tonnant.
Et le fait de donner les param�tres hdc=4160,255,63 au d�marrage
n'aide en rien -- ils sont tout simplement ignor�s. Que se
passe-t-il ? La routine idedisk_setup() retrouve la g�om�trie
rapport�e par le disque dur (qui est 16383/16/63) et �crase ce que
l'utilisateur avait demand� sur la ligne de commande, de telle mani�re
que les donn�es de l'utilisateur ne sont utilis�es que pour la
g�om�trie du BIOS. La routine current_capacity() ou idedisk_capacity()
recalcule le nombre de cylindres comme �tant 66835440/(16*63)=66305
mais comme il est stock� dans un short, il devient 769. Comme
lba_capacity_is_ok() a d�truit id->cyls, tous les appels se solderont
par un �chec, et la capacit� du disque deviendra 769*16*63. Un patch
est disponible pour de nombreux noyaux. Un patch pour le 2.0.38 peut
�tre trouv� � ftp.kernel.org
<
ftp://ftp.us.kernel.org/pub/linux/kernel/people/aeb/>. Un patch pour
le 2.2.12 peut �tre trouv� � www.uwsg.indiana.edu
<
http://www.uwsg.indiana.edu/hypermail/linux/kernel/9910.2/0636.html>
(il se peut qu'il faille le modifier un peu pour se d�barasser des
tags html). Les noyaux 2.2.14 supportent ces disques durs. Dans la
s�rie 2.3.* des noyaux, le support pour ces disques existe depuis le
2.3.21. Il est �galement possible de r�soudre ce probl�me avec une
m�thode mat�rielle en ``positionnant des cavaliers'' pour limiter la
taille � 33,8 Go. Dans la plupart des cas, une ``mise � jour du
BIOS'' sera n�cessaire pour pouvoir d�marrer depuis ce disque dur.
1133.. PPaarrttiittiioonnss ��tteenndduueess eett ppaarrttiittiioonnss llooggiiqquueess
``Ci-dessus'', nous avons vu la structure du MBR (secteur 0) : code du
programme d'amor�age suivi par 4 entr�es de la table des partitions de
16 octets chacune, suivies par une signature AA55. Les entr�es de la
table des partitions de type 5 ou F ou 85 (en hexad�cimal) ont une
signification particuli�re : elles d�crivent les partitions _�_t_e_n_d_u_e_s :
espaces qui seront ult�rieurement fractionn�s en partitions _l_o_g_i_q_u_e_s.
(Donc, une partition �tendue n'est qu'une bo�te, et ne peut pas �tre
utilis�e par elle-m�me ; on utilise alors les partitions logiques
qu'elle contient.) Ce n'est que la position du premier secteur de la
partition �tendue qui est important. Ce premier secteur contient une
table des partitions avec quatre entr�es : une est une partition
logique, une est une partition �tendue et deux sont inutilis�es. De
cette mani�re, on obtient une cha�ne de secteurs de table des
partitions, dispers�s sur le disque dur, o� le premier d�crit trois
partitions primaires et la partition �tendue, et chaque secteur de
table des partitions qui suit d�crit une partition logique et la
position du prochain secteur de table des partitions.
Il est important de comprendre cela : quand les gens font des b�tises
en partitionnant leur disque, ils veulent savoir : `est-ce que mes
donn�es sont toujours l� ?' Et la r�ponse est g�n�ralement : `oui'.
Mais si des partitions logiques ont �t� cr��es, alors les secteurs de
table des partitions les d�crivant sont �crits au d�but des ces
partitions logiques, et les donn�es qui �taient initialement � ces
emplacements sont perdues.
Le programme sfdisk montre la cha�ne compl�te. Par exemple,
# sfdisk -l -x /dev/hda
Disk /dev/hda: 16 heads, 63 sectors, 33483 cylinders
Units = cylinders of 516096 bytes, blocks of 1024 bytes, counting from 0
Device Boot Start End #cyls #blocks Id System
/dev/hda1 0+ 101 102- 51376+ 83 Linux
/dev/hda2 102 2133 2032 1024128 83 Linux
/dev/hda3 2134 33482 31349 15799896 5 Extended
/dev/hda4 0 - 0 0 0 Empty
/dev/hda5 2134+ 6197 4064- 2048224+ 83 Linux
- 6198 10261 4064 2048256 5 Extended
- 2134 2133 0 0 0 Empty
- 2134 2133 0 0 0 Empty
/dev/hda6 6198+ 10261 4064- 2048224+ 83 Linux
- 10262 16357 6096 3072384 5 Extended
- 6198 6197 0 0 0 Empty
- 6198 6197 0 0 0 Empty
...
/dev/hda10 30581+ 33482 2902- 1462576+ 83 Linux
- 30581 30580 0 0 0 Empty
- 30581 30580 0 0 0 Empty
- 30581 30580 0 0 0 Empty
#
Il est possible de construire une mauvaise table des partitions.
Beaucoup de noyaux entrent dans une boucle s'il y a des partitions
�tendues qui pointent sur elles-m�mes ou sur une partition plac�e
avant dans la cha�ne. Il est possible d'avoir deux partitions �tendues
dans un de ces secteurs de table des partitions, de sorte que la
cha�ne de la table de partitions se divise. (Cela peut arriver par
exemple avec un fdisk qui ne reconna�t pas les partitions typ�es 5, F
ou 85 comme �tendues, et qui cr�e une 5 � la suite d'une F.) Des
programmes de type fdisk non standards peuvent provoquer de telles
situations, et quelques manipulations sont n�cessaires pour les
r�parer. Le noyau de Linux acceptera une division au niveau le plus
ext�rieur. Ainsi, vous pouvez avoir deux cha�nes de partitions
logiques. C'est parfois utile -- par exemple, on peut utiliser pour
l'une le type 5 afin qu'elle soit vue par DOS, et pour l'autre le type
85, invisible pour DOS, ainsi DOS FDISK ne plantera pas � cause d'une
partition logique au-del� du cylindre 1024. En g�n�ral il faut sfdisk
pour cr�er une telle configuration.
1144.. RR��ssoolluuttiioonn ddeess pprroobbll��mmeess
Beaucoup de personnes pensent qu'elles ont des probl�mes, alors qu'en
r�alit� rien ne cloche. Elles peuvent �galement penser que leurs
probl�mes sont dus � la g�om�trie du disque, alors que cela n'a rien �
voir. Tout ce que nous avons vu ci-dessus peut vous avoir paru
compliqu�, mais ma�triser le domaine de la g�om�trie des disques durs
est tr�s facile : ne faites rien du tout, et tout ira bien ; ou
peut-�tre faudra-t-il donner � LILO le mot-cl� `linear' s'il ne
d�passe pas le stade LI au d�marrage. Regardez bien les messages de
d�marrage du noyau, et souvenez-vous que plus vous tripoterez les
g�om�tries (en sp�cifiant le nombre de t�tes et de cylindres � LILO et
� fdisk, et en les passant comme argument au noyau), moins cela aura
de chances de fonctionner. En gros, les valeurs par d�faut sont les
bonnes.
Et souvenez-vous : la g�om�trie des disques durs n'est utilis�e nulle
part dans Linux, donc les probl�mes que vous pouvez avoir en vous
servant de Linux ne sont pas dus � �a. En fait, la g�om�trie des
disques durs n'est utilis�e que par LILO et par fdisk. Donc, si LILO
ne parvient pas � charger le noyau, ce peut �tre un probl�me de
g�om�trie. Si d'autres syst�mes d'exploitation ne comprennent pas la
table des partitions, ce peut �tre un probl�me de g�om�trie. Rien
d'autre. En particulier, si mount ne semble pas vouloir fonctionner,
ne vous posez jamais de question sur la g�om�trie -- le probl�me est
ailleurs.
1144..11.. PPrroobbll��mmee :: LLaa gg��oomm��ttrriiee ddee mmoonn ddiissqquuee dduurr IIDDEE eesstt ffaauussssee qquuaanndd
jjee dd��mmaarrrree ddeeppuuiiss dduu SSCCSSII..
Il est assez possible qu'un disque dur obtienne une mauvaise
g�om�trie. Le noyau de Linux questionne le BIOS au sujet de hd0 et hd1
(les disques du BIOS num�rot�s 80H et 81H) et suppose que ces donn�es
sont pour hda et hdb. Mais, sur un syst�me qui d�marre depuis du
SCSI, les deux premiers disques peuvent tr�s bien �tre des disques
durs SCSI, et de ce fait il peut arriver que le cinqui�me disque, qui
est hda, c'est-�-dire le premier disque IDE, se voie assigner une
g�om�trie appartenant � sda. Cela est facilement r�solu en donnant, au
d�marrage ou dans le fichier /etc/lilo.conf, les param�tres pour hda
`hda=C,H,S' avec les valeurs appropri�es pour C, H et S.
1144..22.. FFaauuxx pprroobbll��mmee :: ddeess ddiissqquueess iiddeennttiiqquueess oonntt ddeess gg��oomm��ttrriieess
ddiiffff��rreenntteess ??
`Je poss�de deux disques durs IBM identiques de 10 Go. Cependant,
fdisk donne des tailles diff�rentes pour les deux. Voyez :
# fdisk -l /dev/hdb
Disk /dev/hdb: 255 heads, 63 sectors, 1232 cylinders
Units = cylinders of 16065 * 512 bytes
Device Boot Start End Blocks Id System
/dev/hdb1 1 1232 9896008+ 83 Linux native
# fdisk -l /dev/hdd
Disk /dev/hdd: 16 heads, 63 sectors, 19650 cylinders
Units = cylinders of 1008 * 512 bytes
Device Boot Start End Blocks Id System
/dev/hdd1 1 19650 9903568+ 83 Linux native
Comment cela est-il possible ?
Que se passe-t-il ici ? Eh bien, avant tout ces disques sont
r�ellement de 10 Giga : hdb a comme taille 255*63*1232*512 =
10133544960, et hdd a pour taille 16*63*19650*512 = 10141286400, donc
tout va bien, et le noyau voit les deux comme des 10 Go. Pourquoi y
a-t-il cette diff�rence de taille ? C'est parce que le noyau obtient
ses donn�es du BIOS pour les deux premiers disques IDE, et le BIOS a
recartographi� hdb pour qu'il ait 255 t�tes (et 16*19650/255=1232
cylindres). L'arondi inf�rieur co�te ici au moins 8 Mo.
Si vous voulez recartographier hdd de la m�me mani�re, donnez au noyau
l'option de d�marrage `hdd=1232,255,63'.
1144..33.. FFaauuxx pprroobbll��mmee :: ffddiisskk vvooiitt bbeeaauuccoouupp pplluuss dd''eessppaaccee qquuee ddff ??
fdisk vous donnera le nombre de blocs qu'il y a sur le disque dur. Si
vous avez cr�� un syst�me de fichiers sur le disque, disons avec
mke2fs, alors ce syst�me de fichiers a besoin d'un peu de place pour
sa comptabilit� -- typiquement quelque chose comme 4% de la taille du
syst�me de fichier, un peu plus si vous demandez beaucoup d'inodes �
mke2fs. Par exemple :
# sfdisk -s /dev/hda9
4095976
# mke2fs -i 1024 /dev/hda9
mke2fs 1.12, 9-Jul-98 for EXT2 FS 0.5b, 95/08/09
...
204798 blocks (5.00%) reserved for the super user
...
# mount /dev/hda9 /quelque/part
# df /quelque/part
Filesystem 1024-blocks Used Available Capacity Mounted on
/dev/hda9 3574475 13 3369664 0% /mnt
# df -i /quelque/part
Filesystem Inodes IUsed IFree %IUsed Mounted on
/dev/hda9 4096000 11 4095989 0% /mnt
#
Nous avons une partition de 4095976 blocs, cr�ez sur cette derni�re un
syst�me de fichiers ext2, montez-la quelque part, et remarquez qu'elle
n'a que 3574475 blocs -- 521501 blocs (12%) ont �t� perdus en inodes
et autres pour de la comptabilit�. Remarquez que la diff�rence entre
le total de 3574475 blocs et les 3369664 disponibles pour l'utilisa�
teur est �gale aux 13 blocs utilis�s plus les 204798 blocs r�serv�s �
root. Cette derni�re valeur peut �tre chang�e � l'aide de tune2fs. Ce
`-i 1024' n'est raisonnable que dans le cadre d'un spoule de forums
d'utilisateurs ou quelque chose du m�me style, avec �norm�ment de
petits fichiers. Par d�faut on mettrait :
# mke2fs /dev/hda9
# mount /dev/hda9 /quelque/part
# df /quelque/part
Filesystem 1024-blocks Used Available Capacity Mounted on
/dev/hda9 3958475 13 3753664 0% /mnt
# df -i /quelque/part
Filesystem Inodes IUsed IFree %IUsed Mounted on
/dev/hda9 1024000 11 1023989 0% /mnt
#
A pr�sent, seulement 137501 blocs (3,3%) sont utilis�s pour les
inodes, comme cela, nous disposons de 384 Mo de plus qu'avant.
(Apparemment, chaque inode occupe 128 octets.) D'un autre c�t�, ce
syst�me de fichiers peut avoir au plus 1024000 fichiers (plus
qu'assez), contre 4096000 (trop) auparavant.