OVH Cloud OVH Cloud

boot sur disque USB

8 réponses
Avatar
Alain JUPIN
Bonjour,

Je souhaite faire une distro qui boot sur un dique USB. En réalité, il
s'agit d'une carte CompactFlash 256 Mo via un lecteur de CF USB.

Donc j'ai mis grub sur sur mon disque USB puis j'ai executer les
commandes suivantes :

# grub
root (hd1,0)
setup (hd1)
quit

Mon disque USB contient 2 partitions comme montré ci-dessous

Disque /dev/sda: 256 Mo, 256901120 octets
8 têtes, 62 secteurs/piste, 1011 cylindres
Unités = cylindres de 496 * 512 = 253952 octets

Périphérique Amorce Début Fin Blocs Id Système
/dev/sda1 * 1 99 24521 83 Linux
/dev/sda2 100 1011 226176 83 Linux

/dev/sda2 correspond a /
/dev/sda1 correspond a /boot
qui contient le kernel, grub et son fichier de config suivant
timeout 0
default 0

title Gentoo Linux
root (hd0,1)
kernel /boot/kernel-2.6.13 root=/dev/sda2


Voici la configuration du kernel (un 2.6.13 issu de www.kernel.org bien
sur) en ce qui concerne l'USB storage et le SCSI

CONFIG_SCSI=y
CONFIG_SCSI_PROC_FS=y
CONFIG_BLK_DEV_SD=y
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
CONFIG_USB=y
CONFIG_USB_DEVICEFS=y
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_OHCI_HCD=y
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
CONFIG_USB_UHCI_HCD=y
CONFIG_USB_STORAGE=y
CONFIG_USB_HID=y
CONFIG_USB_HIDINPUT=y
CONFIG_USB_MON=y
Le support de l'ext2 est en dur dans le kernel

J'ai patché le kernel pour qu'il attende la détection du disque SCSI par
le patch suivant
--- /home/ajupin/linux-2.6.13/init/do_mounts.c 2005-08-29
01:41:01.000000000 +0200
+++ init/do_mounts.c 2006-05-21 17:45:24.000000000 +0200
@@ -287,6 +287,9 @@
char *p;
char b[BDEVNAME_SIZE];

+ printk("Waiting 20s for USB Hubs to becomes active ...\n");
+ set_current_state(TASK_INTERRUPTIBLE);
+ schedule_timeout(HZ*20);
get_fs_names(fs_names);
retry:
for (p = fs_names; *p; p += strlen(p)+1) {


Lorsque je boot, grub lance le kernel correctement, arrive au message
Waiting 10s for USB hobs to becomes active ... (suite au patch)
apres quelques secondes apparait :

Vendor: Model: USB Card Reader Rev: 1.01
Type: Direct-Access ANSI SCSI revision: 00
SCSI device sda: 501760 512-byte hdwr sectors (257 MB)
sda: Write Protect is off
sda: assuming drive cache: write through
SCSI device sda: 501760 512-byte hdwr sectors (257 MB)
sda: Write Protect is off
sda: assuming drive cache: write through
sda: sda1 sda2
Attached scsi removable disk date at scsi0, channel 0, id 0, lun 0
Attached scsi generic sg0 at scsi0, channel 0, id 0, lun 0, type 0

Et a la fin des 10s,
VFS: Cannot open root device "sda2" or unknown-block(0,0)
Plaese append a correct "root=" boot option
Kernel panic -not syncing: VFS: Unable to mount root fs on
unknown-block(0,0)

Avez vous une idée sur l'origine du problème ?

J'espère que vous aurez tous les éléments pour répondre a mon problème.

Cordialement

Alain

8 réponses

Avatar
Doug713705
Le Dimanche 21 Mai 2006 17:47, Alain JUPIN s'est exprimé de la sorte sur
fr.comp.os.linux.configuration :

Et a la fin des 10s,
VFS: Cannot open root device "sda2" or unknown-block(0,0)
Plaese append a correct "root=" boot option
Kernel panic -not syncing: VFS: Unable to mount root fs on
unknown-block(0,0)

Avez vous une idée sur l'origine du problème ?


Lorsqu'on boot sur USB, la plupart des BIOS voient le disque USB comme un
disque IDE alors que grub voit bien le disque comme un disque scsi d'où
conflit.

Remplacer sda* par hda* (ou hdb*) dans ton fstab devrait (?) résoudre le
problème.

Par contre il ne faut rien changer dans le fichier de conf de grub.

Merci de nous tenir au courant sur ce problème et son éventuelle solution.

--
@+
Doug [Linux user #307925] - Slackware RuleZ ;-)
[Pourquoi t'es qui, qu'est ce que tu fais par où ?]
-- Pour me contacter enlever no-spam (2X) --

Avatar
lhabert
Doug713705 :

Lorsqu'on boot sur USB, la plupart des BIOS voient le disque USB comme un
disque IDE alors que grub voit bien le disque comme un disque scsi d'où
conflit.


N'importe quoi (je vais finir par mettre un racourci clavier dans mon
éditeur pour sortir cette phrase). Le bios présente des disques à grub, qui
y accède via les fonctions du dos. Grub ne sait pas ce que c'est qu'un
disque IDE ou SCSI. Et je me demande bien ce que tu veux dire par le fait
qu'un bios voit un disque usb comme un disque ide (enfin non, je ne veux pas
savoir).

De toutes manières, le problème se produit après le lancement du noyau
linux, donc il est complètement HS de parler de grub.

Remplacer sda* par hda* (ou hdb*) dans ton fstab


Encore n'importe quoi. Le noyau n'arrive pas à accéder au fs, donc comment
veux-tu que le contenu d'un fichier situé sur ce fs puisse l'aider à y
accéder?

Avatar
Ronald
Le Sun, 21 May 2006 17:47:39 +0200, Alain JUPIN a écrit :

Bonjour,

Je souhaite faire une distro qui boot sur un dique USB. En réalité, il
s'agit d'une carte CompactFlash 256 Mo via un lecteur de CF USB.
[...]

sda: sda1 sda2
Attached scsi removable disk date at scsi0, channel 0, id 0, lun 0
Attached scsi generic sg0 at scsi0, channel 0, id 0, lun 0, type 0

Et a la fin des 10s,
VFS: Cannot open root device "sda2" or unknown-block(0,0)
Plaese append a correct "root=" boot option
Kernel panic -not syncing: VFS: Unable to mount root fs on
unknown-block(0,0)

Avez vous une idée sur l'origine du problème ?


je vais peut être écrire une connerie, mais on sait jamais, tu as bien
un /dev/sda2 (b 8 2 normalement)?

J'espère que vous aurez tous les éléments pour répondre a mon
problème.

Cordialement

Alain


Avatar
Doug713705
Le Dimanche 21 Mai 2006 21:13, Luc Habert s'est exprimé de la sorte sur
fr.comp.os.linux.configuration :

N'importe quoi (je vais finir par mettre un racourci clavier dans mon
éditeur pour sortir cette phrase). Le bios présente des disques à grub,
qui y accède via les fonctions du dos. Grub ne sait pas ce que c'est qu'un
disque IDE ou SCSI. Et je me demande bien ce que tu veux dire par le fait
qu'un bios voit un disque usb comme un disque ide (enfin non, je ne veux
pas savoir).



T'es de mauvais hummeur aujourd'hui ou quoi ?
Ce que je veux dire par là c'est qu'il y a quelquechose qui peut paraître
déroutante dans le paramétrage de grub/linux lors d'un boot sur clé USB.

Il faut indiquer à grub une partition racine avec un nommage type hd*
(hardware ide) alors qu'il faut indiquer dans le fstab des
partitions /dev/sd* (type hdd scsi).


Visiblement je ne suis pas le seul à penser ce que j'ai certainement mal
écrit.

Ayant moi même rencontré ce problème, "l'indien" m'avait répondu ceci:

<Extrait>

Je penche volontiers pour un problème avec le nommage des
périphériques. (Quand je boot sur une clé usb, elle est reconnue comme
un /dev/hda au départ puis peut-être comme /dev/sda par la suite mais
j'ai pas eu le temps de vérifier toutes mes hypothèses.)


C'est exactement celà. Ce n'est pas lié à Linux en fait, mais au fait
que le BIOS des PC est une sombre daube.
Le BIOS et certains OS ne sont capable de booter que sur disquette ou
disque dur. Pour booter sur un CDROM, en firewire ou sur un disque USB
(parfois même, dans les pire cas, en SCSI), des extensions du BIOS
émulent un disque "standard" (c'est à dire un des 4 disques
reconnaissables par le BIOS...) à partir du hardware réel.
Au moment du boot, le device de boot est donc vu comme s'il était en IDE.
Une fois que Linux est lancé, il gère les disques USB comme ce qu'ils
sont, c'est à dire des disques SCSI. Ils sont donc visibles en /dev/sd<xx>

</Extrait>


De toutes manières, le problème se produit après le lancement du noyau
linux, donc il est complètement HS de parler de grub.



Pas temps que ça.

Remplacer sda* par hda* (ou hdb*) dans ton fstab


Encore n'importe quoi. Le noyau n'arrive pas à accéder au fs, donc comment
veux-tu que le contenu d'un fichier situé sur ce fs puisse l'aider à y
accéder?


Ok, j'ai fait une erreur (mal au cheveux aujourd'hui). Le problème ne viens
en effet pas du fstab mais bien du fichier de conf de grub.

Le paramètre root=/dev/sda2 passé à Grub n'est pas le bon, il faut mettre
root=/dev/hda2 (ou hdb2 selon ce que voit le BIOS).

Bref, restons calme, l'erreur est humaine.
--
@+
Doug [Linux user #307925] - Slackware RuleZ ;-)
[Pourquoi t'es qui, qu'est ce que tu fais par où ?]
-- Pour me contacter enlever no-spam (2X) --


Avatar
Ronald
Le Sun, 21 May 2006 22:03:18 +0200, Doug713705 a écrit :

Ok, j'ai fait une erreur (mal au cheveux aujourd'hui). Le problème ne viens
en effet pas du fstab mais bien du fichier de conf de grub.

Le paramètre root=/dev/sda2 passé à Grub n'est pas le bon, il faut mettre
root=/dev/hda2 (ou hdb2 selon ce que voit le BIOS).


pas d'accord, (ci dessous un extrait de mon menu.lst, hd sata), le
paramètre root est passé au noyau, on pourrait d'ailleurs s'en passer
simplement en indiquant le root directement à l'aide de rdev (rdev
/vmlinuz /dev/sda7)

grep -e ^.root= /usr/src/linux-2.6.16/Documentation/kernel-parameters.txt
root= [KNL] Root filesystem

8<--
title linux (2.6.16)
kernel (hd0,6)/vmlinuz root=/dev/sda7 ro lba
8<--

Avatar
Doug713705
Le Dimanche 21 Mai 2006 22:26, Ronald s'est exprimé de la sorte sur
fr.comp.os.linux.configuration :

title linux (2.6.16)
kernel (hd0,6)/vmlinuz root=/dev/sda7 ro lba


Chez moi ça ne marche pas (c)

Probable que cela doit dépendre du bios.

Dans mon cas, je peux booter au choix sur USB *ou* sur hdd mais il est
impossible d'avoir les deux en même temps.

Explication :
Pour booter sur USB, je dois d'abord brancher le clé USB puis entrer dans le
bios et sélectionner l'interface USB comme lecteur de boot auquel cas, je
perds la possibilité de booter sur hdd.

J'aurais préféré simplement brancher la clé USB et booter dessus comme on le
ferait pour une disquette mais visiblement ce n'est pas possible sans cette
manip.

--
@+
Doug [Linux user #307925] - Slackware RuleZ ;-)
[Pourquoi t'es qui, qu'est ce que tu fais par où ?]
-- Pour me contacter enlever no-spam (2X) --

Avatar
Christophe PEREZ
Le Sun, 21 May 2006 22:36:42 +0200, Doug713705 a écrit:

Explication :
Pour booter sur USB, je dois d'abord brancher le clé USB puis entrer dans le
bios et sélectionner l'interface USB comme lecteur de boot auquel cas, je
perds la possibilité de booter sur hdd.


Je confirme, même genre sur mon Portable, dans le BIOS duquel il me faut
carrément désactiver le disque dur pour qu'il voit la clé USB au boot,
sinon, il passe allègrement et boote sur le disque.

--
Christophe PEREZ
Écrivez moi sans _faute !

Avatar
octane
Je souhaite faire une distro qui boot sur un dique USB. En réalité, il
s'agit d'une carte CompactFlash 256 Mo via un lecteur de CF USB.
[patch du noyau]


pourquoi ne pas utiliser un intrd?
tu charges le module, tu fais une boucle de 2 s. Tu regardes si
un disque apparait, et ou. S'il n'y en a pas, tu reboucles.
Puis tu continues le boot dessus.
Le plus simple au debut etant d'utiliser un busybox dans le initrd
qui te donne la main avec pleins d'outils pour cerner les problemes.
--