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

Re: [ squeeze ] Grub2 RAID1 LVM2 boot failure



On Sun, May 30, 2010 at 7:13 AM,  <d.sastre.medina@gmail.com> wrote:
> 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?

1. The "set root=" and "search .." lines are setting the root for grub
as you said, which is the partition where grub.cfg is (I wish that the
grub developers had called it groot or grubroot). Since you have a
separate /boot partition, using your root-lv's uuid doesn't make
sense.

2. If you are going to the grub prompt from the grub menu by pressing
"c" then the various modules have been loaded.

At the grub prompt, if "ls" shows you (md0), can you see your kernel
and initrd with "ls (md0)? If you can, you should be able to boot with
linux (md0)/vmlinuz... root=/dev/path/to/root-lv ro
initrd (md0)/initrd...
boot


Reply to: