[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: does grub understand LVM raid1 layouts?
From: |
Andrei Borzenkov |
Subject: |
Re: does grub understand LVM raid1 layouts? |
Date: |
Sat, 27 Sep 2014 13:00:17 +0400 |
В Thu, 28 Aug 2014 14:31:30 +0100
Bayard Bell <address@hidden> пишет:
> In moving my boot device to mirrored LVM under Debian jessie, I ended up
> unable to boot. I thought my problem was that I failed to run install-grub
> after adding GRUB_PRELOAD_MODULES=lvm to /etc/default/grub, but when I
> finally sorted out a working PXE image for rescue, I found that I was
> unable to install while mirrored. That appears to be in part because Debian
> has taken upgrades to LVM2 that change the default mirroring layout from
> "mirror" to "raid1" (mirror_segtype_default = "raid1" in /etc/lvm/lvm.conf;
> the lvm pages are also clear on this distinction and the defaults), which
> results in an inability to successfully probe /boot/grub, which breaks
> grub-install. The clearest indication I could find of this as likely root
> cause was a debug message from grub-probe "Unknown LVM format raid1".
> Looking at the source head, it appears that there's first a check for raidX
> in lines 580-583 of grub-core/disk/lvm.c but that the subsequent switch at
> lines 587-600 provides for raid[456] but not raid1, which isn't defined in
> include/grub/diskfilter.h.
>
> I'm looking at doing a bit more debug to confirm this before assessing fix
> options, but am I on the right track thus far?
>
It turned out more straightforward than expected. Could you test patch
below? Lightly tested in user space using grub-probe and grub-fstest
(also in degraded mode).
From: Andrei Borzenkov <address@hidden>
Subject: [PATCH] add LVM RAID1 support
---
grub-core/disk/lvm.c | 24 +++++++++++++++---------
1 file changed, 15 insertions(+), 9 deletions(-)
diff --git a/grub-core/disk/lvm.c b/grub-core/disk/lvm.c
index 862a966..18aca81 100644
--- a/grub-core/disk/lvm.c
+++ b/grub-core/disk/lvm.c
@@ -577,13 +577,17 @@ grub_lvm_detect (grub_disk_t disk,
if (is_pvmove)
seg->node_count = 1;
}
- else if (grub_memcmp (p, "raid", sizeof ("raid") - 1)
- == 0 && (p[sizeof ("raid") - 1] >= '4'
- && p[sizeof ("raid") - 1] <= '6')
+ else if (grub_memcmp (p, "raid", sizeof ("raid") - 1) == 0
+ && ((p[sizeof ("raid") - 1] >= '4'
+ && p[sizeof ("raid") - 1] <= '6')
+ || p[sizeof ("raid") - 1] == '1')
&& p[sizeof ("raidX") - 1] == '"')
{
switch (p[sizeof ("raid") - 1])
{
+ case '1':
+ seg->type = GRUB_DISKFILTER_MIRROR;
+ break;
case '4':
seg->type = GRUB_DISKFILTER_RAID4;
seg->layout = GRUB_RAID_LAYOUT_LEFT_ASYMMETRIC;
@@ -608,16 +612,18 @@ grub_lvm_detect (grub_disk_t disk,
goto lvs_segment_fail;
}
- seg->stripe_size = grub_lvm_getvalue (&p, "stripe_size =
");
- if (p == NULL)
+ if (seg->type != GRUB_DISKFILTER_MIRROR)
{
+ seg->stripe_size = grub_lvm_getvalue (&p,
"stripe_size = ");
+ if (p == NULL)
+ {
#ifdef GRUB_UTIL
- grub_util_info ("unknown stripe_size\n");
+ grub_util_info ("unknown stripe_size\n");
#endif
- goto lvs_segment_fail;
+ goto lvs_segment_fail;
+ }
}
-
seg->nodes = grub_zalloc (sizeof (seg->nodes[0])
* seg->node_count);
@@ -625,7 +631,7 @@ grub_lvm_detect (grub_disk_t disk,
if (p == NULL)
{
#ifdef GRUB_UTIL
- grub_util_info ("unknown mirrors\n");
+ grub_util_info ("unknown raids\n");
#endif
goto lvs_segment_fail2;
}
--
tg: (77063f4..) u/lvm-raid1 (depends on: master)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: does grub understand LVM raid1 layouts?,
Andrei Borzenkov <=