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

Re: [ squeeze ] Grub2 RAID1 LVM2 boot failure



On Sat, May 29, 2010 at 05:44:22PM -0400, Tom H wrote:
> On Sat, May 29, 2010 at 7:06 AM, David Sastre Medina
> <d.sastre.medina@gmail.com> wrote:
> >
> > Grub2 is failing to boot a softRAID1 + LVM2 squeeze box.
> >
> > root@sysresccd /root % mdadm --detail /dev/md0
> > /dev/md0:
> > ...
> >           UUID : 8052f7d4:54a97fbb:731031f6:bc3d041c
> 
> I see two possible problems when looking at your grub.cfg.
> 
> 1. There isn't an "insmod lvm" within the menuentry stanza. ext2,
> raid, and mdraid are insmod'd twice in the header and once in the
> menuentry and lvm is inmod'd just once in the header. (This is one of
> the grub2 mysteries; why multiple insmods of the same modules?). I
> doubt that this is the source of the problem (the first insmod must be
> enough!) but you could add "insmod lvm" within the menuentry.

Already tried that. No success.
 
> 2. In the uuid of the search line, what is
> 785366b0-d597-4e9c-9284-b6b9161236ed? One of your /dev/sX1's uuid?
> Since raid and mdraid are loaded, can't you/shouldn't you use the md0
> uuid above?

I also tried that. It fails.
That UUID belongs to /root_vg-root_lv, where the root filesystem
resides.
The UUID can be confirmed at the grub propmt issuing
grub> ls (root_vg-root_ls)

Note that `boot' is a multidisk partition (sda1 and sdb1, which assemble
md0), thus root='(md0)' makes sense from a grub point of view. And md1
is the result of assembling sda2 and sdb2. This md device has only one VG 
on top of it, root_vg, with several LVs in it, one of these LVs being my 
root_lv.

This my default menuentry now:

menuentry "Debian GNU/Linux, with Linux 2.6.32-3-686-bigmem" --class
debian --class gnu-linux --class gnu --class os {
        insmod raid
        insmod mdraid
        insmod lvm
        insmod ext2
        set root='(md0)'
        search --no-floppy --fs-uuid --set 785366b0-d597-4e9c-9284-b6b9161236ed
        echo    Loading Linux 2.6.32-3-686-bigmem ...
        linux   /vmlinuz-2.6.32-3-686-bigmem root=/dev/mapper/root_vg-root_lv ro rootdelay=15 quiet
        echo    Loading initial ramdisk ...
        initrd  /initrd.img-2.6.32-3-686-bigmem
}

The `set root' entry says what is *root* for grub, I understand this as: 
where are /boot/grub/grub.cfg, /vmlinuz-`uname -r` and /initrd.img-`uname -r`
So IMHO it should be called boot='(md0)' for better undestanding and
disambiguation from the *other* root in the `linux' line.
The GRUB root device is not the same as the Linux kernel root= parameter.
BTW this command is undocummented in the wiki, still uses grub-legacy's
info, which doesn't apply anymore, given the `root' command has been
replaced.

The `search' line, as stated in the grub wiki:

Search devices by file, filesystem label or filesystem UUID. If --set
is specified, the first device found is set to a variable. If HD
variable name is specified, "root" is used.

I take this to mean that the first device found _which UUID is_ 785...
(the UUID of my root_gv-root_lv) will be the `root' filesystem.

And yet another definition of `root' after the `linux' call.
That one states that:

root=/dev/mapper/root_vg-root_lv  which could be written also as:
root=LABEL=root  or even
root=UUID=785366b0-d597-4e9c-9284-b6b9161236ed

The three of them should be right. None of them work.

If a suppress the `quiet' option from the `linux' line, what I can see
is LVM initializing *before* mdadm has get its job done:

"Volume group "root_vg-root_lv not found
 Skipping volume group root_vg
 Unable to find LVM volume root_vg-swap_lv
 mdadm:/dev/md0 has been started with two drives
 mdadm:/dev/md1 has been started with two drives
 Gave up waiting fot root device."

So it looks like a timming issue *but*, I have tried to issue manually
the commands in the right order at the grub prompt:
1) insmod-ing raid, mdraid, lvm and ext2; setting root to md0; 
2) searching for devices (also a variant without this step); 
3) calling linux with the right root device 
 (all three variants of this step: dev name, UUID and LABEL and with
 different rootdelay timmings, always without `quiet') and, finally;
4) calling initrd. 

Failure again. No way root_vg to be found.

One further question: after a reboot, while at the grub screen, before 
doing anything else, if a enter the command line and type `ls' at the 
prompt, I can see all of my LVs, and listing anyone of them returns: 
device name, filesystem type, label, last modification time and UUID. 
Where does this info come from? Supossedly, there aren't mods loaded to 
read that yet, until after `insmod' loads them, are there?


-- 
Huella de clave primaria: 0FDA C36F F110 54F4 D42B  D0EB 617D 396C 448B 31EB

Attachment: pgp190mWFw1GX.pgp
Description: PGP signature


Reply to: