Re: Differences between 2.2.x and 2.4.x initrd

Ben Collins
2001-11-14T01:27:55Z

On Tue, Nov 13, 2001 at 05:48:57PM -0500, Jeff Garzik wrote:
> Ben Collins wrote:
> >
> > On Wed, Nov 14, 2001 at 07:50:00AM +1100, Herbert Xu wrote:
> > > Ben Collins <bcollins@debian.org> wrote:
> > >
> > > > Well, the point being that 2.2.x worked implicitly, and 2.4.x doesn't. I
> > > > don't want to have to tell people who have been using tilo forever and a
> > > > day that they now have to add additional command line to get it to work
> > > > with 2.4.x.
> > >
> > > You don't have to. Just setup linuxrc to echo the right stuff into
> > > /proc/sys/kernel/real-root-dev
> >
> > Yeah, which is listed under the "Obsolete" section in
> > Documentation/initrd.txt. The assumption I'm making here is that if
> > /linuxrc fails to execute, it falls back to /sbin/init on the currently
> > mounted root filesystem. Assumptions are bad, but I don't see why it
> > can't work like this. If there is a filesystem already mounted, it
> > should be used.
>
> Really? I always thought the standard behavior of initrd was "umount
> ramdisk unless" not "umount ramdisk if", implying you need to do
> something special (like root=/dev/ram) to keep the initrd around.

That's if /linuxrc remains the initial process (which should in turn
exec /sbin/init, atleast according to my reading of the same document):

When finished with its duties, linuxrc typically changes the
root device and proceeds with starting the Linux system on the
"real" root device.

After it changes root (pivot_root):

Now, the initrd can be unmounted and the memory allocated by the
RAM disk can be freed:

# umount /initrd
# blockdev --flushbufs /dev/ram0 # /dev/rd/0 if using devfs

Then there's this note:

Note: if linuxrc or any program exec'ed from it terminates for
some reason, the old change_root mechanism is invoked (see
section "Obsolete root change mechanism").

The old mechanism is described as using /proc/sys/kernel/real-root-dev,
rdev or root= mechanisms.

Now, on 2.2, if any of those were empty (which is the case), it just
used the already mounted filesystem (the ramdisk). In 2.4 it assumes
that if initrd is enabled, and the root device string is empty, then
/dev/fd is the default device. Why this is done, I'm not sure.

Ben