On Sun, Apr 13, 2008 at 06:07:22PM +0200, Guntsche Michael wrote:
>
> On Apr 13, 2008, at 17:04, Robert Millan wrote:
> >On Sat, Feb 23, 2008 at 09:54:35PM +0100, Michael Guntsche wrote:
> >>Hello,
> >>
> >>While testing a soon to be deployed setup here I noticed that grub-
> >>setup is setting the prefix wrong if you run
> >>LVM on Software RAID
> >>
> >>grub-setup -v /dev/md0
> >>...
> >>grub-setup: info: dos partition is -2, bsd partition is -2, prefix is
> >>(md0)(fatoftheland-main)/boot/grub
> >>...
> >>
> >>As you can see the there is also (md0) in the prefix which does not
> >>work.
> >>Attached a small patch that fixes this problem for me. I am not sure
> >>if it is the best way to fix it so please take a look.
> >>If the root device is on LVM only add the LVM part if it is on RAID
> >>only add the RAID part.
> >
> >Sorry for the delay in repliing. I think it's more correct this
> >way. Does
> >it work for you?
>
> Hello Robert,
>
> Take a look at the for loop later on in the MD case, that is not being
> called with your patch.
> The code gets all RAID disks and calls setup on each of them. I do not
> think the setup call further down is doing the same thing, haven't
> checked it though. With my patch "setup" is still called for each RAID
> member with the correct prefix. In the case of a faulty disk you can
> still boot from the degraded array, by choosing a different disk.
Ok, second try.
--
Robert Millan
<GPLv2> I know my rights; I want my phone call!
<DRM> What use is a phone call… if you are unable to speak?
(as seen on /.)
* util/i386/pc/grub-setup.c (main): When LVM is used on top of RAID,
don't prepend the RAID device in setup()'s `prefix'.
diff -x configure -x config.h.in -x CVS -x '*~' -x '*.mk' -urp ../grub2/util/i386/pc/grub-setup.c ./util/i386/pc/grub-setup.c
--- ../grub2/util/i386/pc/grub-setup.c 2008-02-19 15:00:11.000000000 +0100
+++ ./util/i386/pc/grub-setup.c 2008-04-13 18:36:42.000000000 +0200
@@ -609,7 +609,7 @@ main (int argc, char *argv[])
char *root_dev = 0;
char *prefix;
char *dest_dev;
- int must_embed = 0;
+ int root_in_lvm = 0;
progname = "grub-setup";
@@ -741,7 +741,7 @@ main (int argc, char *argv[])
if (grub_util_lvm_isvolume (root_dev))
{
char *newprefix;
- must_embed = 1;
+ root_in_lvm = 1;
newprefix = xmalloc (1 + strlen (root_dev) + 1 + strlen (prefix) + 1);
sprintf (newprefix, "(%s)%s", root_dev, prefix);
@@ -753,25 +753,26 @@ main (int argc, char *argv[])
&& dest_dev[2] >= '0' && dest_dev[2] <= '9')
{
char **devicelist;
- char *raid_prefix;
int i;
- raid_prefix = xmalloc (1 + strlen (dest_dev) + 1 + strlen (prefix) + 1);
+ if (! root_in_lvm)
+ {
+ char *newprefix = xmalloc (1 + strlen (dest_dev) + 1 + strlen (prefix) + 1);
+ sprintf (newprefix, "(%s)%s", dest_dev, prefix);
+ free (prefix);
+ prefix = newprefix;
+ }
- sprintf (raid_prefix, "(%s)%s", dest_dev, prefix);
-
devicelist = grub_util_raid_getmembers (dest_dev);
for (i = 0; devicelist[i]; i++)
{
- setup (raid_prefix,
+ setup (prefix,
dir ? : DEFAULT_DIRECTORY,
boot_file ? : DEFAULT_BOOT_FILE,
core_file ? : DEFAULT_CORE_FILE,
root_dev, grub_util_get_grub_dev (devicelist[i]), 1);
}
-
- free (raid_prefix);
}
else
#endif
@@ -780,7 +781,7 @@ main (int argc, char *argv[])
dir ? : DEFAULT_DIRECTORY,
boot_file ? : DEFAULT_BOOT_FILE,
core_file ? : DEFAULT_CORE_FILE,
- root_dev, dest_dev, must_embed);
+ root_dev, dest_dev, root_in_lvm);
/* Free resources. */
grub_fini_all ();
_______________________________________________
Grub-devel mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/grub-devel