Page suivantePage précédenteTable des matières

5. Démarrage

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.

5.1 LILO et les options 'lba32' et 'linear'

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.

5.2 Un bug de LILO

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

5.3 1024 cylindres ce n'est pas 1024 cylindres

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.

5.4 Plus de limite à 1024 cylindre sur une vieille machine IDE

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/


Page suivantePage précédenteTable des matières