On Sat, Feb 09, 2008 at 08:09:19PM +0100, Mathias Behrle wrote:
> ]0;[EMAIL PROTECTED]: ~(x86_64)[EMAIL PROTECTED]:~# grub-probe -t device
> /boot
> /dev/evms/sda1
> ]0;[EMAIL PROTECTED]: ~(x86_64)[EMAIL PROTECTED]:~# grub-probe -t drive
> /boot
> grub-probe: error: cannot find a GRUB drive for /dev/evms/sda1.
Okay. We really need someone to step in and write disk/evms.c if access to
EVMS partitions is to be supported. Anyway, I added the logic to detect them,
please see attached patch.
Does this make `grub-probe -t drive /boot' work? I assume
`grub-probe -t fs /boot' will still fail; but which error does it give?
(please use -vv).
Thanks
--
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 /.)
diff -x configure -x config.h.in -x CVS -x '*~' -x '*.mk' -urp ../grub2/include/grub/util/getroot.h ./include/grub/util/getroot.h
--- ../grub2/include/grub/util/getroot.h 2008-01-12 16:11:56.000000000 +0100
+++ ./include/grub/util/getroot.h 2008-02-10 23:16:43.000000000 +0100
@@ -23,6 +23,7 @@ enum grub_dev_abstraction_types {
GRUB_DEV_ABSTRACTION_NONE,
GRUB_DEV_ABSTRACTION_LVM,
GRUB_DEV_ABSTRACTION_RAID,
+ GRUB_DEV_ABSTRACTION_EVMS,
};
char *grub_guess_root_device (const char *dir);
diff -x configure -x config.h.in -x CVS -x '*~' -x '*.mk' -urp ../grub2/util/getroot.c ./util/getroot.c
--- ../grub2/util/getroot.c 2008-01-12 16:11:56.000000000 +0100
+++ ./util/getroot.c 2008-02-10 23:17:17.000000000 +0100
@@ -228,9 +228,14 @@ grub_guess_root_device (const char *dir)
#ifdef __linux__
/* We first try to find the device in the /dev/mapper directory. If
we don't do this, we get useless device names like /dev/dm-0 for
- LVM. */
+ LVM. */
os_dev = find_root_device ("/dev/mapper", st.st_dev);
- if (!os_dev)
+
+ /* The same applies to /dev/evms directory (for EVMS volumes). */
+ if (! os_dev)
+ os_dev = find_root_device ("/dev/evms", st.st_dev);
+
+ if (! os_dev)
#endif
{
/* This might be truly slow, but is there any better way? */
@@ -244,13 +249,17 @@ int
grub_util_get_dev_abstraction (const char *os_dev)
{
/* Check for LVM. */
- if (!strncmp (os_dev, "/dev/mapper/", 12))
+ if (!strncmp (os_dev, "/dev/mapper/", sizeof ("/dev/mapper/") - 1))
return GRUB_DEV_ABSTRACTION_LVM;
/* Check for RAID. */
- if (!strncmp (os_dev, "/dev/md", 7))
+ if (!strncmp (os_dev, "/dev/md", sizeof ("/dev/md") - 1))
return GRUB_DEV_ABSTRACTION_RAID;
+ /* Check for EVMS. */
+ if (!strncmp (os_dev, "/dev/evms/", sizeof ("/dev/evms/") - 1))
+ return GRUB_DEV_ABSTRACTION_EVMS;
+
/* No abstraction found. */
return GRUB_DEV_ABSTRACTION_NONE;
}
@@ -263,9 +272,9 @@ grub_util_get_grub_dev (const char *os_d
switch (grub_util_get_dev_abstraction (os_dev))
{
case GRUB_DEV_ABSTRACTION_LVM:
- grub_dev = xmalloc (strlen (os_dev) - 12 + 1);
+ grub_dev = xmalloc (strlen (os_dev) - sizeof ("/dev/mapper/"));
- strcpy (grub_dev, os_dev + 12);
+ strcpy (grub_dev, os_dev + sizeof ("/dev/mapper/") - 1);
break;
@@ -321,6 +330,13 @@ grub_util_get_grub_dev (const char *os_d
break;
+ case GRUB_DEV_ABSTRACTION_EVMS:
+ grub_dev = xmalloc (strlen (os_dev) - sizeof ("/dev/evms/"));
+
+ strcpy (grub_dev, os_dev + sizeof ("/dev/evms/") - 1);
+
+ break;
+
default: /* GRUB_DEV_ABSTRACTION_NONE */
grub_dev = grub_util_biosdisk_get_grub_dev (os_dev);
}