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

Reply via email to