Lilo mini-Howto

Cameron Spitzer (cls@truffula.sj.ca.us), Alessandro Rubini (rubini@linux.it).
Traduction française Mathieu Arnold arn@mygale.org

v2.02, 16 August 1998
LILO est le Linux Loader (chargeur de Linux) pour le version x86 de Linux. Je l'appellerai ici Lilo plutôt que LILO car je n'aime pas trop les majuscules. Ce fichier décrit quelques installations typiques de Lilo. Le but de ce document est d'être un supplément au guide de l'utilisateur de Lilo. Je pense que des exemples aident à comprendre, même si votre configuration n'est pas vraiment semblable à la mienne. J'espère que cela va vous éviter des tracas. Comme la documentation de Lilo est déjà très bonne, ceux qui sont intéressés par les détails iront faire un tour dans /usr/doc/lilo*

1. Introduction

Bien que la documentation fournie avec les sources de Lilo (celle installée dans /usr/doc/lilo-version) soit très facilement compréhensible, la majorité des utilisateurs de Linux rencontrent des problèmes en faisant leur propre /etc/lilo.conf. Ce document a pour but d'aider les utilisateurs en leur donnant un minimum d'informations, et en leur montrant cinq exemples d'utilisation :

Les trois derniers exemples sont de Cameron cls@truffula.sj.ca.us, qui est à l'origine de ce document. Alessandro rubini@linux.it, le mainteneur actuel n'a que Linux, et donc, ne peut pas vérifier ni non plus mettre à jour par lui même. Il n'est pas nécessaire de dire que toutes les remarques seront les bienvenues.

2. Informations générales et installation standard

Quand Lilo amorce le système, il utilise des appels du BIOS pour charger le noyau de Linux depuis le disque (disque IDE, disquette, ou autre). Par conséquent, le noyau doit résider à un endroit accessible par le BIOS.

Au boot, Lilo ne sais pas lire les données des systèmes de fichiers, et le path que vous avez mis dans /etc/lilo.conf est résolu à l'installation (quand vous avez lancé /sbin/lilo). L'installation est le moment où le programme construit les tables qui regroupent les secteurs qui sont utilisés pour charger le système d'exploitation. Par conséquent, tous les fichiers doivent être dans un endroit que le BIOS peut lire (les fichiers sont généralement placés dans le répertoire /boot, cela signifie que seule la partition root de votre système a besoin d'être accessible depuis le BIOS).

Une autre conséquence du fait de se baser sur le BIOS est que vous devez réinstaller le chargeur (en relançant /sbin/lilo) à chaque fois que vous modifiez la configuration de Lilo. Lorsque vous recompilez le noyau et que vous remplacez votre image, vous devez réinstaller Lilo.

2.1 Où dois-je installer Lilo ?

La directive boot= de /etc/lilo.conf dit à Lilo où il doit placer son amorceur primaire. En général, vous spécifirez soit le Master Boot Record (MBR) (/dev/hda) soit la partition de root de Linux (par exemple /dev/hda1 ou /dev/hda2).

Si vous avez un autre système d'exploitation installé sur votre disque, vous feriez mieux d'installer Lilo sur votre partition de boot plutôt que sur le MBR. Dans ce cas, vous devez rendre la partition "bootable" en utilisant la commande "a" de fdisk ou la commande "b" de cfdisk. Si vous n'écrivez pas sur le MBR, il sera plus simple de désinstaller Linux et Lilo si nécessaire.

2.2 Comment dois-je configurer mes disques IDE ?

Pour ma part je n'utilise pas les options LBA ou LARGE du BIOS (mais il faut dire que je n'utilise que Linux sur ma machine); ce sont des monstruosités qui nous sont imposées par les lacunes de l'architecture intel x86. Ceci implique que le noyau doit résider dans les 1024 premiers cylindres, mais cela n'est pas un problème vu que vous avez partitionné votre disque et que votre partition de root est sensée être petite (en tous cas, c'est comme ça que cela devrais être).

Si votre disque a un autre système d'exploitation, vous ne devez pas modifier les paramètres du BIOS, sinon, l'ancien système ne fonctionnera plus du tout. Toutes les distributions récentes de Lilo savent quoi faire des réglages LBA et LARGE.

Notez que le mot-clé "linear" dans le /etc/lilo.conf peut vous être utile si vous avez des problèmes de géométrie. Il indique à Lilo que l'adressage des secteurs doit se faire linéairement plutôt qu'avec le triplet secteurs/têtes/cylindres. La conversion des adresses 3D est reportée à l'exécution, par conséquent, rendant la configuration immunisée contre les problèmes de géométrie.

Si vous avez plusieurs disques et que certains qui ne sont utilisés que par Linux ne sont pas nécessaires durant le boot, vous pouvez les enlever de votre BIOS, votre système démarrera plus rapidement et Linux détectera tous les disques. Je change souvent les disques de mon ordinateur, mais je ne touche jamais au BIOS.

2.3 Comment puis-je interagir au boot ?

Quand vous voyez le prompt Lilo, vous pouvez taper sur la touche <Tab> pour voir les différents choix possible. Si Lilo n'est pas configuré pour être interactif, gardez la touche <Tab> ou <Shift> pressée avant que le message "LILO" n'apparaisse.

Si vous choisissez de booter sur un noyau Linux, vous pouvez ajouter des arguments après le nom du système que vous choisissez. Le noyau accepte de nombreux arguments. Tous les arguments sont listés dans le "BootPrompt-HOWTO" de Paul Gortmaker, et je ne vais pas le reproduire ici. Quelques arguments sont, par ailleurs, très importants et se doivent de figurer ici :

2.4 Comment désinstaller Lilo ?

Quand Lilo écrit sur un secteur de boot, il en sauve une copie dans /boot/boot.xxyy, ou xxyy sont les nombres majeurs et mineurs du périphérique. Vous pouvez voir les nombres majeurs et mineurs de votre disque ou partition en lançant "ls -l /dev/device". Par exemple le premier secteur de /dev/hda (majeur 3, mineur 0) sera sauvé dans /boot/boot.0300, en installant Lilo sur /dev/fd0 on aura un fichier /boot/boot.0200 et sur /dev/sdb3 créera /boot/boot.0813. Notez que Lilo ne créera pas le fichier s'il existe déjà, vous n'aurez donc pas à faire une sauvegarde quand vous réinstallerez Lilo (après avoir recompilé votre noyau par exemple). Les copies de /boot/ sont toujours les sauvegardes d'avant la première installation de Lilo.

Si jamais vous avez besoin de désinstaller Lilo (par exemple, dans le cas où vous auriez malheureusement à désinstaller Linux), vous aurez besoin de restaurer le secteur de boot original. Si Lilo est installé sur /dev/hda, faites "dd if=/boot/boot.0300 of=/dev/hda bs=446 count=1" (personnellement, je fais simplement "cat /boot/boot.0300 > /dev/hda", mais ce n'est pas toujours fiable, car cela restaurera la table des partitions, que vous avez peut être modifié depuis). Cette commande est bien plus simple que d'essayer de lancer "fdisk /mbr" depuis la ligne de commande DOS : elle vous permet de supprimer Linux d'un disque à partir de Linux. Après avoir supprimé Lilo, n'oubliez pas de supprimer la partition Linux avec fdisk (le fdisk du DOS est incapable de supprimer les partitions non-dos).

Si vous avez installé Lilo sur votre partition de root (par exemple /dev/hda2), vous n'avez rien de spécial à faire pour supprimer Lilo, lancez juste le fdisk de Linux pour supprimer la partition. Vous aurez aussi à marquer la partition DOS bootable.

3. La configuration simple

La majorité des installations Lilo utilisent un fichier de configuration tel celui ci :

boot = /dev/hda   # ou la partition root
delay = 10        # délai, en dixièmes de secondes
vga = 0           # optionnel, utilisez "vga=1" pour avoir du 80x50
#linear           # essayez ça si vous avez des problèmes de géométrie

image = /boot/vmlinux  # votre zImage
  root = /dev/hda1     # votre partition root
  label = Linux        # ou un nom rigolo
  read-only            # monter la root en lecture seule

other = /dev/hda4   # votre partition DOS, si y'en a une
  table = /dev/hda  # La table de partition courante
  label = dos       # ou un nom triste

Vous pouvez avoir plusieurs sections "images" et "other" si vous voulez. Il est très fréquent de rencontrer de multiples images de noyau dans votre lilo.conf, au moins si vous restez à jour dans le développement du noyau.

3.1 Comment s'en sortir avec les gros noyaux

Si vous compilez un noyau "zImage" et qu'il est trop gros pour rentrer dans un demi mégaoctet (ce qui est fréquent avec les noyaux 2.1), vous aurez à compiler un "big zImage" à la place : "make bzImage". Pour booter avec un gros noyau, vous n'aurez pas besoin de faire quoi que ce soit si votre version de Lilo est supérieure à 18. Si votre installation est plus ancienne, vous aurez à mettre à jour votre paquetage Lilo.

3.2 autres sources d'informations

En addition aux documentations de Lilo, il y a un très grand nombre de Mini-HowTo qui peuvent vous être utiles. Ils sont tous appelés "Linux+nulOS", pour quelques nulOS, ils parlent aussi de comment faire coexister Linux et des autres OS. De même, le "Multiboot-with-LILO" décrit comment les différentes versions de Windows coexistent avec Linux.

4. Configurons hdc pour booter en tant que hda en utilisant bios=

Lilo permet de mapper l'image du noyau sur un disque et de dire au BIOS d'aller la chercher sur un autre disque. Par exemple, j'ai l'habitude d'installer Linux sur un disque connecté sur hdc (disque maître du second contrôleur IDE) et d'y booter comme système unique sur le contrôleur primaire d'un autre ordinateur. J'ai copié la disquette d'installations sur une petite partition, je peut donc faire un chroot depuis une console virtuelle pour installer hdc quand j'utilise le système pour faire autre chose.

Voilà le lilo.conf que j'utilise pour installer Lilo :

# Ce fichier doit être utilisé sur un système fonctionnant à partir
# de /dev/hdc
boot = /dev/hdc   # on réécrit le MBR d'hdc
disk = /dev/hdc   # On lui dit qui sera hdc
   bios = 0x80    # Et le BIOS la verra en tant que premier disque
delay = 0
vga = 0

image = /boot/vmlinux  # c'est sur /dev/hdc1
  root = /dev/hda1     # Mais au boot, ça sera hda1
  label = Linux
  read-only

Ce fichier de configuration doit être lu par Lilo depuis /dev/hdc1. La table de Lilo qui est écrite sur le secteur de boot (/dev/hdc) doit se référer à un fichier dans /boot/ (en ce moment hdc). Ce fichier sera accédé en tant que hda quand il bootera comme seul système.

J'ai appelé ce fichier /mnt/etc/lilo.conf.hdc (/mnt est l'endroit où hdc est monté durant l'installation. J'installe Lilo en lançant "cd /mnt; chroot . sbin/lilo -C /etc/lilo.conf.hdc". Allez lire la page man de chroot si vous trouvez ça magique.

Le "bios=" du lilo.conf est utilisé pour dire à Lilo ce que le BIOS pense de vos périphériques. Le BIOS identifie les lecteurs de disquettes et les disques durs par des numéros : 0x00 et 0x01 sélectionnent les disquettes, 0x80 et suivants, les disques durs (Les vieux BIOS ne peuvent accéder qu'à deux disques). La signification du "bios = 0x80" dans l'exemple précédent est de dire à Lilo "utilise 0x80 dans tes appels BIOS pour /dev/hdc".

Cette directive Lilo peut être très pratique dans d'autres situations, par exemple, quand votre BIOS est capable de booter depuis un disque SCSI à la place d'un disque IDE. Quand des périphériques IDE et SCSI sont présents, LILO ne sait pas à qui appartient 0x80, car l'utilisateur est capable de le changer depuis les menus du BIOS, et le BIOS ne peut pas être accédé quand Linux est lancé.

Par défaut, Lilo suppose que les disques IDE sont mappés en premier par le BIOS, mais il est possible de lui spécifier le contraire en utilisant ces instructions dans /etc/lilo.conf :

disk = /dev/sda
  bios = 0x80

5. Utilisation de Lilo quand le BIOS ne voit pas la partition root

J'ai deux disques IDE, et un disque SCSI. Le disque SCSI ne peut pas être vu par le BIOS. Lilo utilise des appels BIOS, et peut uniquement voir ce que le BIOS voit. Mon stupide AMI BIOS ne peut booter que sur "A:" ou "C:", or ma partition de root se trouve sur le disque SCSI.

La solution consiste en fait à stocker le noyau, la carte, et la chaîne d'amorçage sur une partition Linux sur le premier disque IDE. Remarquez qu'il n'est pas nécessaire de garder le noyau sur la partition root.

La deuxième partition de mon premier disque IDE (/dev/hda2, la partition Linux utilisée pour booter sur le système) est montée sur /u2. Et voici le /etc/lilo.conf que j'utilise.

#  On installe Lilo sur le MBR du premier disque IDE
#
boot = /dev/hda
#  /sbin/lilo (l'installateur) copie le boot record de Lilo
#  depuis le fichier suivant vers le MBR
install = /u2/etc/lilo/boot.b
#
#  J'ai écrit un menu détaillé. Lilo le trouvera là
message = /u2/etc/lilo/message
#  L'installateur construira le fichier suivant. Il dit à
#  l'amorceur ou sont les blocs ou se trouvent les noyaux
map = /u2/etc/lilo/map
compact
prompt
#  on attende 10 seconds, puis on boot sur le noyau 1.2.1 par défaut.
timeout = 100
#  Le noyau est stocké ou le BIOS peut le trouver en faisant ça :
#      cp -p /usr/src/linux/arch/i386/boot/zImage /u2/z1.2.1
image = /u2/z1.2.1
        label = 1.2.1
#  Lilo dit au noyau de monter la première partition SCSI en tant que
#  root. Le BIOS n'a pas à savoir qu'elle existe.
        root = /dev/sda1
#  Cette partition sera vérifiée puis remontée par /etc/rc.d/rc.S
        read-only
#  J'ai un noyau d'une vielle Slackware qui traîne dans un coin au cas
#  ou j'ai un noyau qui ne marche pas. J'en ai déjà eu besoin une fois
image = /u2/z1.0.9
        label = 1.0.9
        root = /dev/sda1
        read-only
#  Ma partition DR-DOS 6
other = /dev/hda1
        loader=/u2/etc/lilo/chain.b
        label = dos
        alias = m

6. Accéder a de gros disques quand le BIOS n'en est pas capable

A mon travail, ma machine à un disque IDE de 1 Go. Le BIOS ne peut en voir que les premiers 504 Mo (où Mo signifie 2^10 octets, pas 10^6 octets). Donc, J'ai MS-DOS sur une partition de 350 Mo /dev/hda1 et ma partition root Linux sur une partition de 120 Mo /dev/hda2.

MS-DOS était incapable de s'installer correctement quand le disque était tout neuf. Novell DOS 7 pareil. Le disque était supposé arriver avec un disque appelé "OnTrack Disk Manager". Malheureusement pour moi, suite à un oubli de la part d'IBM je n'avais pas la disquette avec "OnTrack" avec le disque. Si vous n'avez que MS-DOS, je vous souhaite d'en disposer.

Donc, j'ai bâti une table de partition avec le fdisk de Linux. MS-DOS-6.2 a refusé de s'installer dans /dev/hda1, prétextant quelque chose du genre :

"Cette version de MS-DOS est dédiée aux nouvelles installations. MS-DOS est déjà installé sur votre ordinateur (ce qui était faux : disque neuf) donc, vous avez besoin d'obtenir une version de mise à jour chez votre vendeur."

Quel ignare ! Donc, je relance le fdisk Linux et détruis la première partition de la table. Cela convient à MS-DOS 6.2 qui peut alors créer la même partition que celle que je viens de détruire et s'installer. MS-DOS 6.2 écrit alors dans le secteur de lancement du disque, mais impossible de démarrer.

Par chance, j'avais un noyau de la Slackware sur disquette (réalisé par le programme setup d'installation), et j'ai donc lancé Linux puis écrasé le secteur de démarrage par celui de Lilo... et tout marche !

Voici le fichier /etc/lilo.conf utilisé :

boot = /dev/hda
map = /lilo-map
delay = 100
ramdisk = 0             # Ne crée pas le disque virtuel du noyau Slackware
timeout = 100
prompt

disk = /dev/hda         # le BIOS ne voit que les 500 premiers Mo.
   bios = 0x80          # indique le premier IDE.
   sectors = 63         # prendre ces chiffres dans la documentation du disque
   heads = 16
   cylinders = 2100

image = /vmlinuz
  append = "hd=2100,16,63"
  root = /dev/hda2
  label = linux
  read-only
  vga = extended

other = /dev/hda1
  label = msdos
  table = /dev/hda
  loader = /boot/chain.b

Après avoir installé ces systèmes, j'ai vérifié que les partitions contenant les fichiers zImage, boot.b, map, chain.b, et messages peuvent utiliser le système de fichiers MS-DOS, tant que ni Stacker, ni Doublespace ne sont installés. Donc, j'aurais pu faire une partition DOS sur /dev/hda1 de 500 Mo.

J'ai également appris que OnTrack aurait écrit une table de partitions commençant à quelques douzaines d'octets sur le disque au lieu de l'écrire au début. Il est possible de modifier le gestionnaire de périphérique IDE de Linux pour contourner ce problème. Mais l'installation aurait été impossible avec le noyau précompilé de la Slackware. En fin de compte, IBM m'a envoyé une disquette OnTrack. J'ai alors téléphoné au support technique de OnTrack. Ils m'ont dit que Linux était boggé car il n'utilisait pas le BIOS. J'ai renvoyé la disquette.

7. Démarrage depuis une disquette de secours

Ensuite, j'ai installé Windows-95 sur mon ordinateur au bureau. Il a détruit mon joli secteur de démarrage LILO, mais n'a pas touché à mes partitions Linux. Les noyaux sont très lents à charger à partir des lecteurs de disquettes. J'ai donc fait une disquette avec un fichier de configuration pour LILO qui me permet de lancer le noyau se trouvant sur le disque IDE. J'ai fait la disquette de cette manière :

   fdformat /dev/fd0H1440  : formatage de la disquette vierge
   mkfs /dev/fd0 1440      : disquette au format Minix
   mkdir /3                : montage
   mount /dev/fd0 /3    
   cp -p /boot/chain.b /3  : copie du chargeur
   lilo -C /etc/lilo.flop  : installation de LILO
   umount /3 

Notez que la disquette DOIT ÊTRE MONTÉE LORSQUE VOUS LANCEZ L'INSTALLATION pour que LILO puisse écrire proprement le fichier de configuration.

Ce fichier est /etc/lilo.flop, il ressemble à celui-ci :

#  Crée une disquette qui puisse lancer des noyaux sur disque dur
boot = /dev/fd0
map = /3/lilo-map
delay = 100
ramdisk = 0    
timeout = 100
prompt

disk = /dev/hda        # 1 Go IDE, BIOS ne voit que les premiers 500 Mo.
   bios=0x80
   sectors = 63
   heads = 16
   cylinders = 2100

image = /vmlinuz
  append = "hd=2100,16,63"
  root = /dev/hda2
  label = linux
  read-only
  vga = extended

other = /dev/hda1
  label = msdos
  table = /dev/hda
  loader = /3/chain.b

Enfin, j'avais besoin de MS-DOS 6.2 sur mon ordinateur du bureau, mais je ne voulais pas toucher au premier disque. J'ai donc ajouté un contrôleur SCSI et un disque, créé une partition au format MS-DOS avec le programme mkdosfs de Linux, et Windows-95 l'a reconnu comme disque "D:". Mais, bien sûr, MS-DOS ne démarrera pas sur "D:". Ce n'est pas un problème avec LILO. J'ai ajouté :

other = /dev/sda1
  label = d6.2
  table = /dev/sda
  loader = /boot/any_d.b

au fichier lilo.conf de tout à l'heure. MS-DOS-6.2 fonctionne en pensant être sur C:, et Windows 95 est sur D:.