2011-05-22 14:13:31

by Micha Nelissen

[permalink] [raw]
Subject: USB stick as root device does not work

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


2011-05-23 17:14:09

by Randy Dunlap

[permalink] [raw]
Subject: Re: USB stick as root device does not work

[adding cc: of linux-usb mailing list]

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.
>
> 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 ***

2011-05-23 17:36:53

by Alan Stern

[permalink] [raw]
Subject: Re: USB stick as root device does not work

On Mon, 23 May 2011, Randy Dunlap wrote:

> [adding cc: of linux-usb mailing list]

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

Alan Stern

> 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.
> >
> > 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 ***

2011-05-23 18:06:32

by Micha Nelissen

[permalink] [raw]
Subject: Re: USB stick as root device does not work

Hi all,

Alan Stern wrote:
> 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


>> 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.
>>>
>>> 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 ***
>
>