Version 0.4, 4 septembre 2004
1. Introduction
2. Quelques notions préliminaires
2.1 Le MBR
2.2 Les partitions
2.3 La dénomination des partitions
3. Installation, suppression, restauration de LILO
3.1 Précautions à prendre: fabriquer une disquette de boot
3.2 Installer LILO
3.3 Suppression de LILO
3.4 Restauration de LILO
3.5 Options de commmandes de LILO
4. Configuration de LILO: le fichier lilo.conf
4.1 Vous n'avez que Linux sur le PC
4.2 Vous avez un autre OS que Linux
4.3 LILO sur deux disques d'un même ordinateur
4.4 lilo: à consommer sans modération
5. Options de configuration avancées
5.1 Passer des options aux noyaux
5.2 Le 1024ième cylindre
5.3 Chargement d'un ramdisk
5.4 LILO graphique
5.5 Francisation du clavier
5.6 Cohabitation avec OS/2
5.7 Cohabitation avec d'autres gestionnaires de boot
5.8 Fabriquer une disquette contenant LILO
5.9 Autres options tordues
6. Résolution de problèmes
7. Documentation
La plupart du temps, LILO est installé et configuré correctement lors de l'installation de votre distribution, et vous n'avez pas à vous en préoccuper. Mais parfois un changement volontaire ou involontaire dans le système peut nécessiter votre intervention, il est alors indispensable de s'intéresser un minimum au fonctionnement de LILO. Sur l'internet la litérature concernant LILO ne manque pas (voir la section Documentation), j'espère que le présent document apporte quelques compléments utiles.
La version la plus récente de ce document se trouve sur http://qliu.free.fr/Linux/. Merci de m'envoyer vos remarques et critiques. Et merci à ceux qui l'ont déjà fait :)
Convention. Quand j'écris LILO, cela signifie l'ensemble du programme, tandis que lilo réfère plus spécifiquement à la commande /sbin/lilo.
Chaque partition contient aussi un MBR qu'on appelle plutôt secteur de boot. C'est le premier secteur de la partition.
Sur un disque dur (PC), on peut créer au maximum quatre partitions primaires (ou dites principales) ou trois partitions primaires et une partition étendue. Dans une partition étendue on peut créer une partition logique plus une partition étendue secondaire. Celle-ci peut contenir à son tour une autre partition logique+partition étendue secondaire. Il n'y a pas de différence importante entre partition primaire et partition logique. LILO peut s'installer aussi bien dans le MBR du disque dur que dans (le secteur de boot de) n'importe quelle partition primaire ou logique (à condition que ce soit un disque maître s'il s'agit d'un disque IDE).
On peut créer beaucoup de partitions logiques avec ce jeu. Linux peut gérer jusqu'à 63 partitions par disque IDE et 15 partitions par disque SCSI.
Le lecteur de disquette est /dev/fd0. Si vous avez l'idée saugrenue :) de posséder un deuxième lecteur de disquette, il s'appellera /dev/fd1.Le périphérique IDE maître sur le premier port est /dev/hda Le périphérique IDE esclave sur le premier port est /dev/hdb Le périphérique IDE maître sur le deuxième port est /dev/hdc Le périphérique IDE esclave sur le deuxième port est /dev/hdd ... Le premier disque dur SCSI détecté est /dev/sda Le deuxième disque dur SCSI détecté est /dev/sdb ...
La régle de numérotation des partitions d'un disque dur est la suivante:
Par exemple,Les partitions primaires et la partition étendue sont numérotées de 1 à 4. Dans l'exemple ci-dessous, /dev/hda1, /dev/hda3, /dev/hda4 sont des partitions primaires et /dev/hda2 la partition étendue. Les partitions logiques sont numérotées obligatoirement à partir de 5. Par exemple /dev/sda5, /dev/sda6...
La partition /dev/hda3 est "active" comme signalé par le signe *.# fdisk -l /dev/hda Disk /dev/hda: 255 heads, 63 sectors, 2495 cylinders Units = cylinders of 16065 * 512 bytes Device Boot Start End Blocks Id System /dev/hda1 1 97 779121 83 Linux /dev/hda2 132 1747 12980520 f Win95 Ext'd (LBA) /dev/hda3 * 1748 2495 6008310 c Win95 FAT32 (LBA) /dev/hda4 98 131 273105 83 Linux /dev/hda5 132 380 2000061 83 Linux /dev/hda6 381 617 1903671 83 Linux /dev/hda7 618 634 136521 82 Linux swap ...
ATTENTION. Si vous utilisez devfs, la dénomination est complètement différente.
(si /boot/vmlinuz est le noyau que vous utilisez), et puis rdev /dev/fd0 /dev/hda5, si votre partition racine est /dev/hda5, pour être sûr que le noyau va monter la bonne partition pour /. Si vous ne savez pas quelle est la partition / chez vous, vérifiez avec mount | grep '/ '.# dd if=/boot/vmlinuz of=/dev/fd0
Dans tous les cas, vérifiez que votre disquette de boot marche effectivement, ou que vous avez un CDRom en état de booter le système voulu. Nous verrons plus loin comment fabriquer une disquette de boot avec lilo dessus.
# dd if=/dev/hda of=MBR-hda bs=512 count=1Remplacer /dev/hda par /dev/sda5 si vous voulez sauvegarder le secteur de boot de la partition /dev/sda5. La restauration se fait par
# dd if=MBR-hda of=/dev/hda bs=512 count=1Attention à ne pas commettre de faute de frappe ! Explication rapide des options: if = Input File, of = Output File, bs = Block Size (en octets), et count est le multiplicateur. La taille totale est égale à bs x count.
C'est tout (si c'est une mise à jour de lilo, ne pas oublier de relancer /sbin/lilo). Vous trouverez aussi sans peine des .rpm ou des .deb chers à votre distribution. Si vous n'aviez pas de lilo auparavent, il faut créer un fichier de configuration /etc/lilo.conf et exécuter /sbin/lilo. Nous verrons le contenu de lilo.conf plus loin.$ cd /var/tmp $ tar xvfz lilo-x.y.tar.gz $ cd lilo-x.y/ $ make $ su # make install # mkdir -p /usr/doc/lilo-x.y # cp -r --parent [C-I]* R* doc/* sample/* /usr/doc/lilo-x.y/
ou# mount /dev/hda5 /mnt # lilo -r /mnt
# chroot /mnt; /sbin/lilo
/sbin/lilo -v : verbeux. On peut augmenter la verbosité en répétant le nombre de -v . /sbin/lilo -t : mode de test. Juste pour savoir ce que ferait lilo. /sbin/lilo -C fichier.conf : utiliser fichier.conf comme fichier de configuration au lieu de /etc/lilo.conf. /sbin/lilo -r /MNT: effectuer un chroot sur la partition /MNT avant d'exécuter réellement lilo. Il utilisera alors les fichiers de la partition /MNT (les /MNT/etc/lilo.conf et /MNT/boot). C'est utile pour réparer LILO sur un disque dur, ou pour fabriquer une disquette de secours.
Explications: LILO permet de choisir parmi plusieurs configurations à booter : Linux avec des noyaux différents, ou plusieurs OS (systèmes d'exploitation). Chaque configuration possède ses propros options individuelles (aussi dites locales), les options globales s'appliquent à toutes les configurations, annulées par des options individuelles le cas échéant.# Section des options globales boot = /dev/hda prompt default = linux timeout = 120 compact read-only # Fin de la section des options globales # Sections des options individuelles image = /boot/vmlinz label = linux root = /dev/hda5 image = /boot/vmlinz-bis label = linux-2 append = "mem=128M reboot=warm" root = /dev/hda5
boot = /dev/hda # le chargeur de lilo sera dans le MBR de /dev/hda
prompt # LILO affiche un prompt et vous laisse choisir la configuration à lancer.
default = LABEL # La configuration LABEL à lancer par défaut, si aucun choix n'est fait au prompt.
timeout = N # au bout de N dixièmes de secondes, LILO lance la configuration par défaut
compact # Le boot est plus rapide
read-only # La partition / sera montée en écriture seule. Cela ne concerne pas windows.
ATTENTION: Ne pas installer LILO dans le secteur de boot d'une partition Xfs (système de fichiers). En effet, Xfs écrit ses superblocs dans le secteur de boot (pour garder sa compatibilité avec son origine Irix). Mais l'installation de LILO dans le MBR du disque est tout à fait compatible avec Xfs.
image = /boot/vmlinuz # spécifie le noyau Linux qui sera utiliséVoir kernel-parameters.txt dans /usr/src/linux/Documentation/ pour une liste des options disponibles pour le noyau. Attention, l'ensemble des options pour le noyau ne doit pas dépasser les 220 (environ) caractères. Le surplus est purement et simplement ignoré. On peut vérifier les options passées au noyau avec la commande dmesg | grep Kernel.
label = linux # On met un nom pour la configuration. C'est une chaîne, sans espace, d'au plus 15 caractères.
append ="mem=128M reboot=warm" # Ici on mets des options pour le noyau.
other = /dev/hda1 # partition de boot WindowsCela est tout aussi valable si vous avez un *BSD à la place de Windows. Pour résumer cette situation, le fichier /etc/lilo.conf ressemble à :
label = windows
table = /dev/hda # le disque contenant la table des partitions. Non nécessaire.
boot = /dev/hda prompt default = linux timeout = 120 compact read-only image = /boot/vmlinz label = linux root = /dev/hda5 image = /boot/vmlinz-bis label = linux-2 append = "mem=128M reboot=warm" root = /dev/hda5 other = /dev/hda1 label = windows table = /dev/hda other = /dev/hdc2 label = FreeBsd
Il faut qu'il existe un système Linux sur /dev/hdc dont la partition root est, mettons, /dev/hdc2. Ensuite,boot = /dev/hdc # on install LILO sur le MBR de /dev/hdc disk = /dev/hdc # on dit au BIOS que /dev/hdc bios = 0x80 # est le premier disque dur prompt default = linux timeout = 120 compact read-only image = /boot/vmlinz label = linux root = /dev/hda5 # ou n'importe quelle partition root read-only other = /dev/hdc1 label = win98 ...
# mount /dev/hdc2 /mnt # mv /tmp/lilo-hdc.conf /mnt/etc/ # lilo -r /mnt -C etc/lilo-hdc.conf
Dans la distribution sur /dev/hdb, on configure lilo pour qu'il s'installe dans /dev/hdb:other = /dev/hdb label = distro-test
Lorsque le PC boot, on tombe sur le premier lilo. Le choix du label distro-test permet alors de lancer le lilo de /dev/hdb. Ainsi, vous pouvez jouer avec la distribution de /dev/hdb et son lilo sans toucher à /dev/hda. Pour ceux qui ont deux distributions sur un même disque, il suffit de remplacer /dev/hdb par la une partition racine de la deuxième distribution.boot = /dev/hdb prompt default = linux timeout = 120 compact read-only image = /boot/vmlinz label = linux root = /dev/hdb5 ...
(le symbole * marque la configuration qui sera bootée par défaut). Beaucoup d'erreurs du boot avec LILO sont causées par l'oubli de cette étape. On peut considérer cela comme un défaut de LILO, mais il faut faire avec pour l'instant. Grub est plus intelligent sur ce point. [Sommaire]# /sbin/lilo Added linux * Added linux-2 Added windows Added FreeBsd
LILO: linux 3 root=/dev/hda5 mem=128M video=matrox:vesa:259,fv:80Ici on indique au noyau le "runlevel" (qui devra être 3), la partition /, la quantité de mémoire vive et des paramètres du mode d'affichage en frambuffer. En cas de problème, les options souvent utilisées sont le runlevel, init=/bin/sh, root=/dev/hda5...
lba32dans /etc/lilo.conf. Voir aussi ma petite note pour plus de détail.
image=/boot/vmlinuz-2.4.18 label=linux root=/dev/hda5 initrd=/boot/initrd-2.4.18.img
install=/boot/boot-text.bÀ partir de la version 22, on peut même lancer LILO sur un fond d'écran composé d'une image bmp de résolution 640x480 en 16 couleur. Pour activer ce mode, il faut l'indiquer explicitement dans les options globales:
bitmap = /boot/ins64a.bmp bmp-colors = 6,9,0,15,9,0 bmp-table = 21,287p,2,4,175p bmp-timer = 73,29,12,8,0 install=/boot/boot-bmp.bLa première ligne indique l'emplacement du fichier bmp (celui de l'exemple est contenu dans le package lilo-22.x.y/sample), les autres options bmp-* concernent l'affichage de l'image. J'avoue que la syntaxe est assez hermétique pour moi...
keytab-lilo.pl fr-latin1 > /boot/fr.ktlSi la carte n'est pas trouvée, il faut la localiser, locate fr-latin1.map (ou locate fr-latin1.kmap), ensuite
keytab-lilo.pl /chemin/de/us.map /chemin/de/fr-latin1.map > /boot/fr.ktl(remplacer *.map par *.map.gz ou *.kmap le cas échéant). Enfin, ajouter
keytable = /boot/fr.ktldans les options globales de /etc/lilo.conf et relancer /sbin/lilo.
other = /dev/hdb5 label = OS2 loader = /boot/os2_d.b table = E:Ici la lettre E: est à remplacer par celle qui désigne la partition /dev/hdb5 dans la convention Dos.
boot=/dev/hda5(par exemple) au lieu de boot=/dev/hda dans lilo.conf. Attention cependant que tous les gestionnaiers de MBR en sont pas capables de booter sur une partition logique !
Le package lilo-22.x vient avec un script mkrescue qui est installé dans /sbin. Il est très simple à utiliser. Placer une disquette dans le lecteur, et taper
# mkrescue --kernel /boot/vmlinuz-x.y --initrd /boot/initrd-x.y.imgC'est tout. L'option --initrd n'est utile que si vous utilisez un ramdisk. Si l'option --kernel est absente, le noyau courant sous lequel le système est en train de tourner sera utilisé. mkrescue --help liste toutes les options possibles. À partir de la version 22.3.1, mkrescue utilise la même carte de clavier que celle configurée dans lilo.conf. Les distributions ont en général leurs propres scripts de fabrication de disquette de boot: mkbootdisk pour les RedHat-like (y compris Mandrake) et liloconfig pour Slackware.
Si on veut s'amuser un peu ou introduire des variantes, on peut aussi fabriquer la disquette à la main. Pour cela, éditer un fichier /root/fd-lilo.conf dont le contenu est le suivant:
boot=/dev/fd0 map=/mnt/floppy/map install=/mnt/floppy/boot-menu.b keytable=/mnt/floppy/fr.ktl geometric compact ## peut ne pas marcher sur certains systèmes delay=50 prompt image = /mnt/floppy/vmlinuz label = linux root = /dev/hda5 read-only(ne pas oublier de passer le paramètre root=/dev/... au noyau si on est amené à booter sur une partition racine différente de celle indiquée). Inserrer une disquette dans le lecteur et passer sous root.
# mke2fs /dev/fd0 # mount /dev/fd0 /mnt/floppy # cd /boot # cp vmlinuz boot-menu.b map fr.ktl /mnt/floppy # lilo -C ~/fd-lilo.confEt voilà. C'est essentiellement ce que fait mkrescue, mais de façon bien plus rudimentaire. Chez moi, l'option install=/mnt/floppy/boot-menu.b provoque le message d'erreur "Map segment is too big" sous LILO 21.5. Ce problème est résolu soit en passant à la version 22, soit en utilisant boot-text.b à la place de boot-menu.b.
Loading linux...(linux représente le label, ça peut être linux-2, windows etc). On n'a pas trop le temps de la voir si on boot sur un disque dur :). À partir de ce moment là, le noyau est le seul maître à bord. Les problèmes qui surviennent après n'ont rien à voir avec LILO, sauf peut-être les paramètres que vous passez au noyau par son intermédiaire.
Si vous n'arrivez pas à ce stade, c'est que LILO a échoué. Dans ce cas, il y a toujours un code d'erreurs sous la forme d'une partie des lettres LILO et des chiffres. La plupart du temps cela est dû à un problème de reconnaissance de la géométrie du disque, ou un oubli de ré-exécution de /sbin/lilo après des modifications de fichiers.
Suite de la section quand j'aurai plus temps...
[Sommaire]