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); }