Pb LILO : boot sur image de disquette ou noyau local

Bonjour,

Je tente de convertir un vieux portable en client léger. La machine n’a plus de lecteur de disquette, ni de CD. Le bios ne permet pas de booter en PXE ni en USB.

Je suis parvenu à installer squeeze dans un chroot en montant le disque via un adaptateur USB sur mon PC fixe (gentoo).
Impossible de faire booter le système avec Grub (je n’ai même pas d’invite de commande). J’ai installé LILO.
Je parviens à faire fonctionner une image de gPXE, mais pas le noyau local (le boot démarre mais il ne trouve pas la partition racine (root).

Je pense que le problème vient de l’ordre des disques. Sur mon fixe, j’ai sda et sdb. le disque du portable se monte en sdd.
Mais une fois dans le portable, celui-ci etant seul, il devrait s’apeller sda.

Voici mon lilo.conf (j’ai enlevé les parties inutiles)

[code]# Generated by liloconfig
lba32
boot=/dev/sdd
bitmap=/boot/debian.bmp
bmp-colors=10,0,7,0,
bmp-table=16,12,1,12,16
bmp-timer=34,28,13,0,
install=bmp
delay=100
map=/boot/map
vga=normal

image=/boot/vmlinuz-2.6.32-5-486
label="sda2"
root=/dev/sda2
initrd=/boot/initrd.img-2.6.32-5-486
read-only

image=/boot/vmlinuz-2.6.32-5-486
label="hda2"
root=/dev/hda2
initrd=/boot/initrd.img-2.6.32-5-486
read-only

image=/boot/vmlinuz-2.6.32-5-486
label="CURRENT"
root=CURRENT
initrd=/boot/initrd.img-2.6.32-5-486
read-only

image=/boot/gpxe-1.0.1-gpxe.lkrn
label=“gpxe-1.0.1”

image=/boot/3c574.flo
label=“3com 574”

image=/boot/dfe-670txd.flo
label=“Dlink 670”[/code]

Le seul que je parviens à booter c’est gpxe.

Le mieux serait de réussir à booter mon noyau. Mais je prends aussi une aide pour booter sur une image de disquette (elles sont générées par netboot).

Si le disque est vieux /dev/hda2 devrait fonctionner. Tu as essayé avec une ligne append envoyant à l’initrd la racine?? Il me semble qu’il y a deux façons de le faire, soit en le précisant dans la config lilo ou grub, soit, si on regarde les sources de initrd, en rajoutant sur la ligne
boot=local root=/dev/hda2
rajoute donc
append="boot=local root=/dev/hda2"
ça devrait mieux marcher. Tu peux rajouter évebtuellement
append="boot=local root=/dev/hda2 debug=yes"
et voir ce que ça donne.

Où s’arrête le boute?

Merci de ta réponse.

Je viens de modifier lilo.conf

image=/boot/vmlinuz-2.6.32-5-486 label="hda2" append="boot=local root=/dev/hda2 debug=yes" initrd=/boot/initrd.img-2.6.32-5-486 read-only

mis à part les informations supplémentaires dues au debug=yes, le boot s’arrête au même endroit je pense.
Il ne trouve pas /dev/hda2 (pas plus que /dev/sda2 d’ailleurs)

Et je me retrouve sous busybox.

Raisons possibles, à investiguer dans le shell de secours :

  • Le disque a un autre nom, à rechercher dans /dev et/ou dans les logs du noyau (dmesg)
  • Un module pilote nécessaire pour gérer le disque est manquant dans l’initramfs, à vérifier dans /lib/modules si tu sais quel module est censé gérer le contrôleur hôte sur lequel le disque est connecté.

[quote]
Il ne trouve pas /dev/hda2 (pas plus que /dev/sda2 d’ailleurs)

Et je me retrouve sous busybox.[/quote]
Impeccable, ça veut dire qu’ on va réussirà démarrer ton truc. Quand tu as ton shell, tapes
ls -l /dev/hd* /dev/sd*

puis cat /proc/modules

Je pense à un souci de module manquant ou le disque qui s’appelle sdb au lieu de hdb

Bon, pas de hd* ni de sd* … certainement un module à charger, mais lequel ?

/dev/ contient des noeuds (c’est comme ça que ça s’appelle ?) mais rien qui ressemble à des disques…
liste : char console core cpu_dma fd full input kmsg mem network_latency network_throughput null port psaux ptmx pts random rtc rtc0 snapshot stderr stdin stdout,les tty de 0 à 63, urandom vcs vcs1 vcsa vcsa1 vga_arbiter zero

Les modules chargés sont : ahci libata et scsi_mod

Si ça peut aider, le noyau utilisé est le 2.6.32-5-486 du depot debian et le portable un DELL inspiron 3000 ( support.dell.com/support/edocs/S … /specs.htm ) à base de P166 MMx. Il me semble qu’il ne comporte pas de hardware exotique. En tout cas je l’ai toujours utilisé sous Linux depuis 1999 et je ne me souviens pas avoir du faire de manip spéciale (à l’époque les lecteurs de CD et de disquette fonctionnaient)

Un peu surprenant que le module ahci soit chargé pour un PC aussi ancien. Essaie plutôt de charger le module ata_piix (-> sdX) ou piix (-> hdX) s’ils sont présents, avec modprobe.

modprobe ata_piix ou modprobe piix ne donne rien (même pas de message d’erreur).

Les seuls modules dans /lib/modules/2.6.32-5-486/kernel/drivers/ata sont libata et ahci

Pour mémoire, j’ai du réduire la taille de l’initrd pour tenir la taille du noyau+initrd sous les 15 Mo à cause du vieux bios de la machine.

Extrait du document qui m’a aidé (en anglais, désolé)

[quote]WARNING: Do NOT reboot or LILO may fail to boot if your kernel+initrd is large.
WARNING: Please read /usr/share/doc/lilo/README.Debian

This is what /usr/share/doc/lilo/README.Debian has to say:
–[ Distribution upgrade

If you are upgrading or dist-upgrading, it is recommended to run
/sbin/lilo after that.

–[ Large initrd files and lilo

By default, LILO loads the initrd file into the first 15MB of memory
to avoid a BIOS limitation with older systems (earlier than 2001).

However, with newer kernels the combination of kernel and initrd
may not fit into the first 15MB of memory and so the system will not
boot properly. It seems that the boot issues appear when the
kernel+initrd combination is larger than 8MB.

If this machine has a recent BIOS without the 15MB limitation, you can
add the ‘large-memory’ option to /etc/lilo.conf to instruct LILO to use
more memory for passing the initrd to the kernel. You will need to
re-run the ‘lilo’ command to make this option take effect.

If this machine has an older BIOS, you may need to reduce the size of
the initrd before rebooting.

If you are using initramfs-tools, you should replace MODULES=most with
MODULES=dep in your configuration and regenerate your initrd file:

sed -i -e s/MODULES=most/MODULES=dep/ /etc/initramfs-tools/initramfs.conf
update-initramfs -u[/quote]

Il faudrait peut-être reconstruire l’initrd avec les modules nécessaires (je pensais qu’il y avait ce qu’il fallait pour les disques, mais peut-être que non !)

Oui, la commande modprobe de l’initramfs n’affiche pas d’erreur si on essaie de charger un module inexistant…

Si l’initramfs a été construit sur une autre machine avec modules=dep, alors seuls les modules nécessaires pour gérer les disques sur cette autre machine (visiblement ahci et ses dépendances) ont été inclus. Il faut forcer l’addition du module ata_piix ou piix en l’ajoutant dans le fichier /etc/initramfs-tools/modules.

Autre possibilité, si la taille de l’initramfs est un problème : recompiler le noyau en désactivant tous les pilotes ATA/IDE/SCSI/USB… et les systèmes de fichiers non nécessaires.

A titre d’exemple, le noyau 2.6.27 épuré que j’utilise sur mon routeur/serveur a une taille d’image vmlinuz de 1,4 Mo contre 2,3 Mo pour le noyau 2.6.32-686 de Debian, et une taille totale avec les modules de 9 Mo contre 78 Mo pour le noyau Debian “complet”. Et il n’a pas besoin d’initramfs car les pilotes nécessaires pour monter la racine sont en dur.

Bon, j’ai ajouté ata_piix dans /etc/initramfs-tools/modules

Au reboot, toujours pas de /dev/sd* mais par contre j’ai /dev/disk/by-uuid/196800c0-c35a-4ef9-a091-d725c8fa1e2e

Malheureusement, LILO n’accepte pas

image=/boot/vmlinuz-2.6.32-5-486 label="sda2" root=/dev/disk/by-uuid/196800c0-c35a-4ef9-a091-d725c8fa1e2e initrd=/boot/initrd.img-2.6.32-5-486 read-only

Fatal: Illegal 'root=' specification: /dev/disk/by-uuid/196800c0-c35a-4ef9-a091-d725c8fa1e2e

  1. S’il y a un lien symbolique dans /dev/disk/by-uuid/, il y a forcément un périphérique vers lequel il pointe. A voir lequel avec
  1. Spécifier la racine par UUID dans /etc/lilo.conf s’écrit sous la forme

Cf. man lilo.conf.

Merci, en fait j’étais en train de chercher sur le net pour configurer LILO.

Donc, j’ai ajouté root=“UUID=196800c0-c35a-4ef9-a091-d725c8fa1e2e” et rebooté.

Il y a du mieux, maintenant, j’ai /dev/sda2 vers lequel pointe /dev/disk/by-uuid/196800c0-c35a-4ef9-a091-d725c8fa1e2e
mais je tombe toujours sur le shell…

J’ai également essayé de rajouter append=“boot=local root=/dev/sda2” mais ça ne fonctione pas…

le premier message d’erreur est :

mount: mounting /dev/sda2 on /root failed: no such device

Ensuite, il essaye de monter /dev /sys et /proc mais ça ne marche pas plus.

Quel est le type de système de fichiers de la racine ? Le module correspondant est-il présent dans l’initramfs dans /lib/modules/2.6.32-5-486/kernel/fs/ ? Sinon, l’ajouter comme pour ata_piix.

Oui, c’est bien ça, il manquait ext2, le système de fichier utilisé !

Le portable boote enfin.

Il me reste maintenant à faire fonctionner ma carte PCMCIA et parvenir à booter en PXE avec, mais ce sera l’objet d’un autre sujet si je n’y parviens pas.

Merci de votre aide en tout cas !