[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#606806: initramfs-tools: Handling of numeric root= arguments is not udev-friendly



Hello!

On Dec 11, Evan Broder wrote:
> On Sat, Dec 11, 2010 at 1:34 PM, Ben Hutchings <ben@decadent.org.uk> wrote:
> > On Sat, 2010-12-11 at 13:14 -0800, Evan Broder wrote:
> >> Package: initramfs-tools
> >> Version: 0.98.1
> >> Severity: normal
> >> Tags: patch
> >> User: ubuntu-devel@lists.ubuntu.com
> >> Usertags: origin-ubuntu natty ubuntu-patch
> >>
> >> If you pass a root= argument with a numeric device number
> >> (i.e. root=0806), that's currently resolved by running mknod to create
> >> a /dev/root device with an appropriate major/minor number and setting
> >> ROOT=/dev/root (the parse_numeric function in scripts/functions).
> > [...]
> >
> > Maybe this feature should simply be deprecated.  What do you use it for?

I strongly object as long as GRUB and especially GRUB2 are such a mess that
they either forcefully invade the MBR and/or need additional undocumented
sector space in track 0 (which destroys e.g. recovery mechanisms on notebooks)
or refuse to go into (only) a partition boot sector at all (GRUB2)!

This is also the answer to you question what I use 'it' for, namely simply
LILO.

> I don't use the feature myself; I was fixing the bug on behalf of a
> user that reported it in Ubuntu, since it seemed simple to fix with a
> low chance of regressing other behavior. I've CC'd him to find out.
> 
> Ruediger, can you expand on why you're using root=0806 instead of
> root=/dev/sda6 or a UUID or some other means of specifying the root
> device?

Of course, and I'm glad to. Because I actually use 'root=/dev/sda6' in
LILO's /etc/lilo.conf - and have always done so. It is from there, that
the problems arise, 'root=0806' was just used to demonstrate how(!)
"wait-for-root" fails.

The following is how I 'believe', but have not tested(!), that the problem
arises: LILO transfers the 'root=/dev/sda6' into its 'map' or bootparameter
section for the next start by analyzing the 'root'-device and then stores
its minor and major number there. With the next start it just transfers
the 'root=0806' information to the kernel and no '/dev/sda6'; from there
"parse_numeric" picks up the information and (previously) mknod'ed a /dev/root
device. This is(/was) what "wait-for-root" isn't(/wasn't) able to handle.
In principle it is "wait-for-root" that is to blame for the problem, but
modifying "parse_numeric" seems ok for me, as it doesn't seem to break the
structure. You can still do both, mknod a /dev/root and set some variable to
a udev-friendly information.

Please keep in mind, that accuracy goes before(!) accelleration or cutting
features. I've seen so many "/dev"-mechanisms come and go, that I don't want
to sacrifice the - at least to my knowledge -   o n l y   non-intruding
boot-method (for an i386-system), LILO, to some pseudo accelleration mechanism
that might go away with the next distribution version.

Thanks and best regards,
 Ruediger Oberhage



Reply to: