On 19 Feb 09, Jonas Meurer wrote:
> Hey,
> 
> Maks, I spent several hours now on debugging this issue, and all I found
> out is that the patch by Pyotr is correct if you don't want to change
> the way, how initramfs manages /dev/root.
> 
Thanks for taking the time to examine my patch.

Basically, the problem is this:  The major/minor of the root device can
change from one boot to another.  This happens in the following cases:

  1) when booting into the system after installing to or from removable
     devices, i.e. USB sticks;
  2) when adding/removing removable devices;
  3) when adding/removing/recabling hard drives; 
  3) when adding/removing LVM volumes.

Therefore, relying on hardcoded root device names/numbers (i.e. 'dev/sda1' or
'Oxfe4') in the initrd leads to failure to mount the root device in
these cases.

The solution is to use persistent device names.  If we're using LVM, we
use the names under '/dev/mapper' ('/dev/mapper/foo-bar' for unencrypted
LVM, or '/dev/mapper/foo-bar_crypt' for encrypted LVM).  In all other
cases we can use the names provided for us by udev under
'/dev/disk/by-id'.

These names are passed to the initrd on the kernel command line and work
for any bootloader, whether Lilo, GRUB, or whatever.

'/dev/root' should point to the real root device.

In the case of encrypted and LVM root devices, third-party scripts are
responsible for creating and setting up the root device.  Therefore, it
makes sense to have these scripts set up '/dev/root' also.

That's all there is to it.  My patch solves the problem for the case of
dm-crypt+LVM.  The case of unencrypted LVM will require another patch.
The remaining cases would require some patching of the top-level
initramfs code.  parse_numeric() would then be unnecessary and could be
safely removed.

  -PGB



-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to