[pkg-cryptsetup-devel] Bug#511840: Bug#511840: Initrd fails to find root device after boot into system following install

Pyotr Berezhkov p.g.berezhkov at gmail.com
Sat Feb 21 12:44:16 UTC 2009


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





More information about the pkg-cryptsetup-devel mailing list