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