[Bug 1527727] Re: grub-probe for zfs assumes all devices prefix with /dev, ignoring /dev/disk/...

Chad Miller chad.miller at canonical.com
Thu Jan 14 16:25:58 UTC 2016


Here's the short summary:

libzfs has a license that (most people agree) does not let grub link
against it.

Linking against it is assumed by grub upstream to be the right way. But
they have a fallback way that involves running a zfs utils command to
list its devices.

The devices the zfs utils program prints are not full device names but
things like "hda1" or "ata-ST12346124623-ajqwers". Those are names that
were scanned when you fabricated and imported the zfs device pool.
There's no way to get exact paths.

Grub assumes they're all device names that are directly within /dev/
directory, and that's often wrong if the user used /dev/by-id/ paths to
set up zfs pools. ZFS-knowledgeable people are *really* likely to have
used unambiguous device names.

So, this patch in #4 takes the professed device file name and tests
whether a name exists before printing it. It goes from most unique names
to least unique names. It's incredibly unlikely to collide. bus-model-
serial names are unlike uuid names, and unlike sdx names. It should be
safe in all cases.

-- 
You received this bug notification because you are a member of Ubuntu
Sponsors Team, which is subscribed to the bug report.
https://bugs.launchpad.net/bugs/1527727

Title:
  grub-probe for zfs assumes all devices prefix with /dev, ignoring
  /dev/disk/...

Status in grub:
  Unknown
Status in grub2 package in Ubuntu:
  Confirmed

Bug description:
  update-grub runs /usr/sbin/grub-probe

  Without libzfslinux support compiled in, /usr/sbin/grub-probe runs
  ["zpool", "status", poolname] to find out ZFS info.

  zpool responds with device names as used at (I think!) pool creation
  time. Often, this is /dev/disk/by-id/... names, without the path.

  grub-probe then parses the output, and takes the names of devices, and
  if they do not start with a "/", it prepends "/dev/".

  It then tests the existence of the path name of the device. it fails.

  grub-probe then returns  something like

  /usr/sbin/grub-probe: error: failed to get canonical path of `/dev
  /ata-ST31000333AS_99999999-part1'.

  The actual path is of course /dev/disk/by-
  id/ST31000333AS_99999999-part1

  It can prepend smarter than "/dev" or it can understand ZFS natively,
  to fix the problem.

To manage notifications about this bug go to:
https://bugs.launchpad.net/grub/+bug/1527727/+subscriptions



More information about the Ubuntu-sponsors mailing list