grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Issue in grub-probe when boot device is located on device mapper partiti


From: Eldar Yusupov
Subject: Issue in grub-probe when boot device is located on device mapper partition.
Date: Tue, 16 Jul 2013 16:56:45 +0400

Hi,

I've hit an issue when trying to reinstall grub on my system.
My /boot partition is located on /dev/mapper/pdc_djabadcbjep1 device.
However, when grub-install executes grub-probe -t fs /boot, and the latter one starts probing the filesystem, it incorrectly tries to open hostdisk//dev/mapper/pdc_djabadcbje device instead of hostdisk//dev/mapper/pdc_djabadcbje,msdos1.

Here's verbose output of grub-probe:
# grub2-probe -v -t fs /boot/
grub2-probe: info: cannot open `/boot/grub2/device.map': No such file or directory.
grub2-probe: info: Looking for /dev/mapper/pdc_djabadcbjep1.
grub2-probe: info: /dev/mapper/pdc_djabadcbje is a parent of /dev/mapper/pdc_djabadcbjep1.
grub2-probe: info: Looking for /dev/mapper/pdc_djabadcbjep1.
grub2-probe: info: /dev/mapper/pdc_djabadcbje is a parent of /dev/mapper/pdc_djabadcbjep1.
grub2-probe: info: Looking for /dev/mapper/pdc_djabadcbjep1.
grub2-probe: info: /dev/mapper/pdc_djabadcbje is a parent of /dev/mapper/pdc_djabadcbjep1.
grub2-probe: info: opening hostdisk//dev/mapper/pdc_djabadcbje.
grub2-probe: info: the size of hostdisk//dev/mapper/pdc_djabadcbje is 1953124992.
grub2-probe: error: unknown filesystem.

I think that the issue is in util/get_root.c in convert_system_partition_to_system_disk() function - it does not seem to determine if the device is partition or not for device-mapper case.

The following change seems to fix the issue, however I'm not really familiar with device mapper and can't be sure if it's correct:

	  /* Counter-intuitively, device-mapper refers to the disk-like
	     device containing a DM-RAID partition device as a "child" of
	     the partition device.  */
	  child = dm_tree_next_child (&handle, node, 0);
	  if (! child)
	    {
	      grub_util_info ("%s has no DM children", path);
	      goto devmapper_out;
	    }
	  child_uuid = dm_tree_node_get_uuid (child);
	  if (! child_uuid)
	    {
	      grub_util_info ("%s child has no DM uuid", path);
	      goto devmapper_out;
	    }
	  else if (strncmp (child_uuid, "DMRAID-", 7) != 0)
	    {
	      grub_util_info ("%s child is not DM-RAID", path);
	      goto devmapper_out;
	    }
	  child_name = dm_tree_node_get_name (child);
	  if (! child_name)
	    {
	      grub_util_info ("%s child has no DM name", path);
	      goto devmapper_out;
	    } 
  mapper_name = child_name;
+   *is_part = 1;

--
--
Regards,
Eldar Yusupov.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]