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 Grub-devel@gnu.org http://lists.gnu.org/mailman/listinfo/grub-devel