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, à moins que vous ne possédiez un BIOS et un chargeur de d'amorce moderne : un BIOS qui supporte les fonctions INT13 Étendues et un chargeur de d'amorce qui sache les utiliser.
Ce problème (s'il existe) 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.
La plupart des systèmes depuis 1998 utilisent un BIOS moderne.
Le principal : si vous utilisez LILO comme chargeur d'amorce, assurez-vous d'avoir un LILO avec une numéro de version d'au moins 21.4 (LILO peut être trouvé à l'adresse suivante : ftp://metalab.unc.edu/pub/Linux/system/boot/lilo/).
Un appel à /sbin/lilo
(le programme qui installe la carte d'amorçage)
permet de stocker une liste d'adresses dans cette carte, pour que LILO (le
chargeur d'amorce) sache à partir d'où lire l'image du noyau. Par défaut ces
adresses sont stockée au format (c,h,s) et un appel INT13 ordinaire est utilisé
au moment du démarrage.
Quand le fichier de configuration précise lba32
ou linear
, des
adresses linéaires sont stockées. Avec l'option lba32
les adresses
linéaires sont également utilisées au moment du démarrage si le BIOS supporte
les extensions INT13 étendues. Avec l'option linear
, ou avec un vieux
BIOS, ces adresses linéaires sont reconverties sous une forme (c,h,s) et au
moment du démarrage des appels INT13 ordinaires sont utilisés.
De ce fait, avec l'option lba32
il n'y a pas de problème de géométrie
et il n'y a pas de limite à 1024 cylindres. Sans elle, il y a une limite à
1024 cylindres. Qu'en est-il de la géométrie ?
Le programme d'amorçage et le BIOS doivent être d'accord sur la géométrie du
disque dur. /sbin/lilo
demande la géométrie au noyau, mais il n'y a
aucune garantie que la géométrie du noyau Linux coïncide avec celle qu'utilise
le BIOS. Donc, la géométrie fourni par le noyau est souvent inutile. Dans de
tels cas on peut faciliter la tâche à LILO en lui passant l'option
linear
. L'avantage alors est que, l'idée qu'à le noyau Linux de la
géométrie, n'est plus utilisée. Le revers de la médaille est que lilo
ne peut plus vous prévenir si une partie du noyau est stockée au-delà de la
limite des 1024 cylindres et vous pouvez vous retrouver avec un système qui
ne démarre plus.
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).
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.
Le chargeur d'amorce nuni
ne fait pas appel aux services du BIOS mais
accède directement aux unités IDE. Donc il est possible de le mettre sur une
disquette ou sur le MBR et de démarrer de d'importe où de n'importe quel disque
IDE (pas seulement les deux premiers). Vous pouvez trouver ce chargeur à
ftp://metalab.unc.edu/pub/Linux/system/boot/loaders/