В Thu, 28 Aug 2014 14:31:30 +0100 Bayard Bell <buffer.g.overf...@gmail.com> пишет:
> 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 <arvidj...@gmail.com> 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) _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel