3. Le problème
Contenu de cette section
Quand le noyau Linux demande au BIOS la géométrie du
disque (il se contente en fait de lire les paramètres CMOS), il
obtiendra une réponse erronée indiquant qu'il y a plus
de seize têtes. Mais Linux sait que cela n'est pas possible, et
le noyau (source dans hd.c) abandonne et ignore le
disque. (Notons que même si le BIOS retourne une
géométrie trafiquée, les requêtes faites au
contrôleur de disque doivent se faire conformément
à la géométrie réelle du
disque. Éliminer le test effectué dans hd.c ne
suffit donc pas.)
3.1 La mauvaise solution
Une solution est d'utiliser le programme de paramétrage
(setup) du BIOS pour supprimer complètement la
conversion d'adresse. On peut soit fixer soi-même le nombre de
cylindres/têtes/secteurs conformément à la
géométrie du disque, soit simplement inhiber la
conversion d'adresse selon ce que permet son programme de
paramétrage du BIOS.
Vous pouvez alors repartitionner votre disque dur avec fdisk
sous DOS et/ou sous Linux, puis installer les deux systèmes
d'exploitation. Cela fonctionnera sous réserve d'observer les
restrictions suivantes.
Le problème reste que le BIOS ne peut être
utilisé pour accéder aux cylindres au-delà du
1024-ième. Toutes vos partitions DOS devront donc se situer
avant cette limite, ainsi que toutes informations auxquelles le BIOS
aura besoin d'accéder. Ainsi, LILO utilise le BIOS pour faire
le sale boulot et donc, si vous voulez utiliser LILO pour
lancer Linux, vous devez vous assurer que le noyau (plus
précisément toute la partition racine) se situe avant
cette limite du 1024-ième secteur. Linux, lui, accèdera
sans problème à l'intégralité du disque.
3.2 La bonne solution
Les limitations sont toujours gênantes, et nous allons donc nous
débrouiller pour les éviter. Nous devons donc continuer
à utiliser le mécanisme de conversion d'adresses et
résoudre chacun des problèmes que cela engendre.
Pour résoudre le problème au niveau du noyau, nous
allons passer en paramètre la véritable
géométrie au noyau grâce à une ligne
d'option au démarrage. Ceci peut se faire à partir de
l'invite d'initialisation de LILO, en tapant
<image name>
hd=<nb.~cylindres>,<nb.~tête>,<nb.~secteurs>.
On peut aussi utiliser un ordre append= dans le fichier de
configuration de LILO (lilo.conf) pour que cela se fasse
automatiquement.
Le noyau peut maintenant reconnaître et utiliser le disque, mais
lorsqu'un programme utilisateur (comme fdisk ou le programme
d'installation de LILO) demande au noyau la géométrie du
disque, le noyau lui renvoie la vraie géométrie et non
celle obtenue après conversion. Et donc fdisk sous
Linux (qui interroge le noyau) et fdisk sous DOS (qui
interroge le BIOS) n'utilisent pas la même
géométrie, ce qui est très gênant au niveau
des informations à placer dans la table des partitions du
disque dur. De même, le programme d'installation de LILO
calculera des adresses physiques incompatibles avec ce dont le BIOS
(donc LILO lors du démarrage) a besoin.
Le problème avec fdisk est simple à
résoudre~: lorsque vous lancez fdisk sous Linux,
passez en mode expert, et fixez le nombre de
cylindres/têtes/secteurs aux valeurs utilisables par le
BIOS. Puis éditez votre table des partitions et
écrivez-la, fdisk sous Linux et sous DOS seront
ainsi d'accord.
Le problème de LILO est aussi simple à résoudre~:
ajouter l'ordre linear à votre fichier
lilo.conf. LILO utilisera alors des adresses logiques et non
des adresses physiques, l'obligeant ainsi à calculer les
adresses physiques au démarrage et non lors de son
installation. C'est donc la géométrie fournie par le
BIOS qui sera utilisée, plutôt que celle fournie par le
noyau, et ainsi tout fonctionnera.
3.3 Exemple résumé
Nous disposons d'un disque EIDE d'un giga-octet sur lequel nous allons
installer Linux. Voici comment procéder.
- Noter au niveau du programme de paramétrage
(setup) du BIOS la géométrie trafiquée
du disque. Par exemple, il est indiqué que le disque comporte
525 cylindres, 64 têtes, et 63 secteurs. Comme il n'est pas
possible qu'il y ait plus de seize têtes sur ce disque, on en
déduit qu'il comporte en fait 2100 cylindres, 16 têtes
et 63 secteurs.
- Démarrer sous DOS, lancer
fdisk pour
créer une partition DOS.
- À partir d'une disquette de démarrage de la
Slackware, taper
ramdisk hd=2100,16,63 avant le lancement du
chargement du noyau. Puis lancer fdisk (sous Linux). Si on
tape p, un tas de messages d'erreur apparaît. Passer
en mode expert x, fixer le nombre de cylindres à 525,
le nombre de têtes à 64. Une fois revenu en mode normal,
si on tape p pour voir la liste des partitions, il n'y a plus
d'erreur. Il est alors possible créer ses partitions.
Écrire la table, puis redémarrer avec la disquette de la
Slackware (il est conseillé de redémarrer la machine
après avoir modifié la table des partitions).
- Procéder ensuite à l'installation de la
Slackware, normalement, en créant (entre autres) un fichier
lilo.conf classique.
- Éditer le fichier
lilo.conf (dans ce cas
/mnt/etc/lilo.conf) pour y ajouter les lignes suivantes au
début~:
append="hd=2100,16,63"
linear
- Lancer la commande
lilo -r /mnt.
- Installer, éventuellement, si c'est absolument
nécessaire, DOS et/ou Windows.
Bonne chance à tous~!
Patrick LoPresti
patl@lcs.mit.edu
Chapitre Précédent
Table des matières de ce chapitre,
Table des matières générale
Début du document,
Début de ce chapitre
|