grub-devel.gnu.org archive mirror
 help / color / mirror / Atom feed
From: Andrei Borzenkov <arvidjaar@gmail.com>
To: The development of GNU GRUB <grub-devel@gnu.org>
Cc: buffer.g.overflow@gmail.com
Subject: Re: does grub understand LVM raid1 layouts?
Date: Sat, 27 Sep 2014 13:00:17 +0400	[thread overview]
Message-ID: <20140927130017.0d63a534@opensuse.site> (raw)
In-Reply-To: <CAB=GcTL+=4NWTxBw1Tq_tLVmFA-zf0O20tPdwkeS4PY_S-=e4Q@mail.gmail.com>

В Thu, 28 Aug 2014 14:31:30 +0100
Bayard Bell <buffer.g.overflow@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 <arvidjaar@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)


      parent reply	other threads:[~2014-09-27  9:00 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-28 13:31 does grub understand LVM raid1 layouts? Bayard Bell
2014-08-28 15:49 ` Andrei Borzenkov
2014-09-27  9:00 ` Andrei Borzenkov [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140927130017.0d63a534@opensuse.site \
    --to=arvidjaar@gmail.com \
    --cc=buffer.g.overflow@gmail.com \
    --cc=grub-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).