Skip to contentSkip to conversation

USB stick as root device does not work

DISCUSSION Micha Nelissen 3 participants 4 messages May 22, 2011 – May 23, 2011

lore
Share & tools
lore
#0 lore raw

Hi,

Using USB stick as root device does not work for me. I specify 'root=/dev/sdb1 rootwait' on the kernel commandline, but the kernel does not wait for the USB stick to be scanned and its partitions found. I have a harddisk which is /dev/sda, and this USB stick would be /dev/sdb.

I think blk_lookup_devt returns the block device number even if it does not exist yet, and init/do_mounts.c:473 therefore skips waiting:

        if ((ROOT_DEV == 0) && root_wait) {

due to ROOT_DEV having become non-zero already.

If I use the commandline: 'root=/dev/sdb1 rootdelay=5' then it does mount and boot properly. However, using rootwait seems safer and faster to me, that it's meant for this use case.

Thanks for any pointers,

Micha

#1 lore raw

[adding cc: of linux-usb mailing list]

Quoted 14 lines · On Sun, 22 May 2011 16:13:17 +0200 Micha Nelissen wrote:

Hi,

Using USB stick as root device does not work for me. I specify 'root=/dev/sdb1 rootwait' on the kernel commandline, but the kernel does not wait for the USB stick to be scanned and its partitions found. I have a harddisk which is /dev/sda, and this USB stick would be /dev/sdb.

I think blk_lookup_devt returns the block device number even if it does not exist yet, and init/do_mounts.c:473 therefore skips waiting:

        if ((ROOT_DEV == 0) && root_wait) {

due to ROOT_DEV having become non-zero already.

Quoted 8 lines

If I use the commandline: 'root=/dev/sdb1 rootdelay=5' then it does mount and boot properly. However, using rootwait seems safer and faster to me, that it's meant for this use case.

Thanks for any pointers,

Micha
--

---
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***

#2 lore raw
Quoted 1 line · Randy Dunlap

[adding cc: of linux-usb mailing list]

Better to ask people familiar with the block layer (CC'ed).

Alan Stern

Quoted 28 lines · On Sun, 22 May 2011 16:13:17 +0200 Micha Nelissen wrote:
Quoted 15 lines

Hi,

Using USB stick as root device does not work for me. I specify 'root=/dev/sdb1 rootwait' on the kernel commandline, but the kernel does not wait for the USB stick to be scanned and its partitions found. I have a harddisk which is /dev/sda, and this USB stick would be /dev/sdb.

I think blk_lookup_devt returns the block device number even if it does not exist yet, and init/do_mounts.c:473 therefore skips waiting:

        if ((ROOT_DEV == 0) && root_wait) {

due to ROOT_DEV having become non-zero already.

Quoted 8 lines

If I use the commandline: 'root=/dev/sdb1 rootdelay=5' then it does mount and boot properly. However, using rootwait seems safer and faster to me, that it's meant for this use case.

Thanks for any pointers,

Micha
--

---
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***

#3 lore raw

Hi all,

Quoted 2 lines · Alan Stern

On Mon, 23 May 2011, Randy Dunlap wrote:
Better to ask people familiar with the block layer (CC'ed).

I found out what happened: I use LILO, and lilo was not passing root=/dev/sdb1 on the commandline, but root=811. However, I didn't see that since on i386 that part had already scrolled off-screen. I found out by accident, due to a user space program trying to parse that, expecting a string, getting a number :-).

Using the following in my lilo.conf:

append="root=/dev/sdb1 rootwait"
instead of

	root=/dev/sdb1

works perfectly. Maybe this information is useful for somebody else; I did not find it using a quick google.

Thanks for your attention.

Micha

Quoted 29 lines
Quoted 27 lines · On Sun, 22 May 2011 16:13:17 +0200 Micha Nelissen wrote:
Quoted 15 lines

Hi,

Using USB stick as root device does not work for me. I specify 'root=/dev/sdb1 rootwait' on the kernel commandline, but the kernel does not wait for the USB stick to be scanned and its partitions found. I have a harddisk which is /dev/sda, and this USB stick would be /dev/sdb.

I think blk_lookup_devt returns the block device number even if it does not exist yet, and init/do_mounts.c:473 therefore skips waiting:

        if ((ROOT_DEV == 0) && root_wait) {

due to ROOT_DEV having become non-zero already.

Quoted 8 lines

If I use the commandline: 'root=/dev/sdb1 rootdelay=5' then it does mount and boot properly. However, using rootwait seems safer and faster to me, that it's meant for this use case.

Thanks for any pointers,

Micha
--

---
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***