Lilo mini-Howto <author>Cameron Spitzer <htmlurl url="mailto:cls@truffula.sj.ca.us" name="cls@truffula.sj.ca.us">, Alessandro Rubini <htmlurl url="mailto:rubini@linux.it" name="rubini@linux.it">.&nl; Traduction française Mathieu Arnold <htmlurl url="mailto:arn_mat@club-internet.fr" name="arn_mat@club-internet.fr"> <date>v2.02, 16 August 1998 <abstract> LILO est le <bf>Li</>nux <bf>Lo</>ader (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* </abstract> <!-- Table of contents --> <toc> <!-- Begin the document --> <sect>Introduction <p>Bien que la documentation fournie avec les sources de Lilo (celle installée dans <tt>/usr/doc/lilo</>-version) soit très facilement compréhensible, la majorité des utilisateurs de Linux rencontrent des problèmes en faisant leur propre <tt>/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 : <itemize> <item>Le premier exemple montre une installation de base : "Linux et les autres". <item>La suivante explique comment installer Lilo sur un disque dur connecté sur <tt>/dev/hdc</> et qui bootera en tant que <tt>/dev/hda</>. C'est ce dont on a besoin quand on veux installer un nouveau disque Linux sur un système qui marche déjà. Il explique aussi comment booter sur un disque SCSI quand votre BIOS est suffisamment récent. <item>Le troisième exemple montre comment booter un système Linux dont la partition root ne peut être accédée par le BIOS. <item>L'exemple suivant est utilisé pour accéder à de très gros disques auxquels ni le BIOS, ni le DOS ne peuvent accéder facilement (cet exemple ci est un peu vieux) <item>Le dernier exemple montre comment restaurer un disque endommagé, si les dommages proviennent de l'installation d'un autre système d'exploitation. </itemize> <p>Les trois derniers exemples sont de Cameron <htmlurl url="mailto:cls@truffula.sj.ca.us" name="cls@truffula.sj.ca.us">, qui est à l'origine de ce document. Alessandro <htmlurl url="mailto:rubini@linux.it" name="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. <sect>Informations générales et installation standard <p>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. <p>Au boot, Lilo ne sais pas lire les données des systèmes de fichiers, et le path que vous avez mis dans <tt>/etc/lilo.conf</> est résolu à l'installation (quand vous avez lancé <tt>/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 <tt>/boot</>, cela signifie que seule la partition root de votre système a besoin d'être accessible depuis le BIOS). <p>Une autre conséquence du fait de se baser sur le BIOS est que vous devez réinstaller le chargeur (en relançant <em>/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. <sect1>Où dois-je installer Lilo ? <p>La directive <tt>boot=</> de <tt>/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) (<tt>/dev/hda</>) soit la partition de root de Linux (par exemple <tt>/dev/hda1</> ou <tt>/dev/hda2</>). <p>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 <em>fdisk</em> ou la commande "b" de <em>cfdisk</em>. Si vous n'écrivez pas sur le MBR, il sera plus simple de désinstaller Linux et Lilo si nécessaire. <sect1>Comment dois-je configurer mes disques IDE ? <p>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). <p>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. <p>Notez que le mot-clé "<tt>linear</>" dans le <tt>/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. <p>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. <sect1>Comment puis-je interagir au boot ? <p>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. <p>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 : <itemize> <item><tt>root=</> : vous pouvez dire au noyau de monter une partition root différente de celle qui se trouve dans le <tt>lilo.conf</>. Par exemple, mon système a une toute petite partition qui a un système Linux minimal, et j'ai réussi à booter après avoir détruit ma partition root par erreur. <item><tt>init=</> : depuis la version 1.3.43 du noyau, vous pouvez utiliser une commande autre que <tt>/sbin/init</>. si vous avez de graves problèmes durant le démarrage, vous pouvez accéder à un système minimal en spécifiant <tt>init=/bin/sh</> (quand vous arriverez au prompt du shell, vous aurez certainement besoin de vos partitions, essayez "<tt>mount -w -n -o remount /; mount -a</tt>", et n'oubliez pas de faire un "<tt>umount -a</tt>" avant d'éteindre). <item>Un nombre : en spécifiant un nombre sur la ligne de commande, vous demandez a <em>init</> de démarrer dans un run-level spécifique (le run-level par défaut est généralement 3 ou 2 suivant la distribution que vous avez). Réferez-vous à la documentation d'<em>init</>, à votre <tt>/etc/inittab</> et à vos <tt>/etc/rc*.d</> si vous voulez creuser plus loin. </itemize> <sect1>Comment désinstaller Lilo ? <p>Quand Lilo écrit sur un secteur de boot, il en sauve une copie dans <tt>/boot/boot.</><em>xxyy</>, ou <em>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 "<tt>ls -l /dev/<em>device</></tt>". Par exemple le premier secteur de <tt>/dev/hda</> (majeur 3, mineur 0) sera sauvé dans <tt>/boot/boot.0300</>, en installant Lilo sur <tt>/dev/fd0</> on aura un fichier <tt>/boot/boot.0200</> et sur <tt>/dev/sdb3</> créera <tt>/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 <tt>/boot/</> sont toujours les sauvegardes d'avant la première installation de Lilo. <p>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 <tt>/dev/hda</>, faites "<tt>dd if=/boot/boot.0300 of=/dev/hda bs=446 count=1</>" (personnellement, je fais simplement "<tt>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 "<tt>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 <em>fdisk</em> (le <em>fdisk</em> du DOS est incapable de supprimer les partitions non-dos). <p>Si vous avez installé Lilo sur votre partition de root (par exemple <tt>/dev/hda2</>), vous n'avez rien de spécial à faire pour supprimer Lilo, lancez juste le <em>fdisk</em> de Linux pour supprimer la partition. Vous aurez aussi à marquer la partition DOS bootable. <sect>La configuration simple <p>La majorité des installations Lilo utilisent un fichier de configuration tel celui ci : <tscreen><verb> 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 </verb></tscreen> <p>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 <em>lilo.conf</>, au moins si vous restez à jour dans le développement du noyau. <sect1>Comment s'en sortir avec les gros noyaux <p>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 : "<tt>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. <sect1>autres sources d'informations <p>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+<em>nulOS</>", pour quelques <em>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. <sect>Configurons <tt>hdc</> pour booter en tant que <tt>hda</> en utilisant <tt>bios=</> <p>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 <tt>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 <em>chroot</> depuis une console virtuelle pour installer <tt>hdc</> quand j'utilise le système pour faire autre chose. <p>Voilà le <tt>lilo.conf</> que j'utilise pour installer Lilo : <tscreen><verb> # 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 </verb></tscreen> <p>Ce fichier de configuration doit être lu par Lilo <bf>depuis <tt>/dev/hdc1</></>. La table de Lilo qui est écrite sur le secteur de boot (<tt>/dev/hdc</>) doit se référer à un fichier dans <tt>/boot/</> (en ce moment <tt>hdc</>). Ce fichier sera accédé en tant que <tt>hda</> quand il bootera comme seul système. <p>J'ai appelé ce fichier <tt>/mnt/etc/lilo.conf.hdc</> (<tt>/mnt</> est l'endroit où hdc est monté durant l'installation. J'installe Lilo en lançant "<tt>cd /mnt; chroot . sbin/lilo -C /etc/lilo.conf.hdc</>". Allez lire la page man de <em>chroot</> si vous trouvez ça magique. <p>Le "<tt>bios=</>" du <tt>lilo.conf</tt> 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 "<tt>bios = 0x80</>" dans l'exemple précédent est de dire à Lilo "utilise 0x80 dans tes appels BIOS pour <tt>/dev/hdc</>". <p>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é. <p>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 <tt>/etc/lilo.conf</> : <tscreen><verb> disk = /dev/sda bios = 0x80 </verb></tscreen> <sect>Utilisation de Lilo quand le BIOS ne voit pas la partition root <p>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. <p>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. <p>La deuxième partition de mon premier disque IDE (<tt>/dev/hda2</>, la partition Linux utilisée pour booter sur le système) est montée sur <tt>/u2</>. Et voici le <tt>/etc/lilo.conf</> que j'utilise. <tscreen><verb> # 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 </verb></tscreen> <sect>Accéder a de gros disques quand le BIOS n'en est pas capable <p>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 <tt>/dev/hda1</> et ma partition root Linux sur une partition de 120 Mo <tt>/dev/hda2</>. <p>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. <p>Donc, j'ai bâti une table de partition avec le <em>fdisk</> de Linux. MS-DOS-6.2 a refusé de s'installer dans /dev/hda1, prétextant quelque chose du genre : <tscreen> "Cette version de MS-DOS est dédiée aux nouvelles installations. MS-DOS est déjà installé sur votre ordinateur (<bf>ce qui était faux : disque neuf</bf>) donc, vous avez besoin d'obtenir une version de mise à jour chez votre vendeur." </tscreen> <p>Quel ignare ! Donc, je relance le <em>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. <p>Par chance, j'avais un noyau de la Slackware sur disquette (réalisé par le programme <tt>setup</tt> d'installation), et j'ai donc lancé Linux puis écrasé le secteur de démarrage par celui de Lilo... et tout marche ! <p>Voici le fichier <tt>/etc/lilo.conf</tt> utilisé : <tscreen><verb> 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 </verb></tscreen> <p> <p>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. <p>J'ai également appris que <em>OnTrack</em> 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 <em>OnTrack</em>. J'ai alors téléphoné au support technique de <em>OnTrack</em>. Ils m'ont dit que Linux était boggé car il n'utilisait pas le BIOS. J'ai renvoyé la disquette. <sect>Démarrage depuis une disquette de secours <p>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 : <tscreen><verb> 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 </verb></tscreen> <p>Notez que la disquette DOIT ÊTRE MONTÉE LORSQUE VOUS LANCEZ L'INSTALLATION pour que LILO puisse écrire proprement le fichier de configuration. <p>Ce fichier est <tt>/etc/lilo.flop</tt>, il ressemble à celui-ci : <tscreen><verb> # 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 </verb></tscreen> <p>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 <tt>mkdosfs</tt> 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é : <tscreen><verb> other = /dev/sda1 label = d6.2 table = /dev/sda loader = /boot/any_d.b </verb></tscreen> <p>au fichier <tt>lilo.conf</tt> de tout à l'heure. MS-DOS-6.2 fonctionne en pensant être sur C:, et Windows 95 est sur D:. </article>