Control: found -1 2.04-16

GRUB still runs
  /usr/sbin/grub-probe --device /dev/vdb1 /dev/vda3 /dev/vdd1 /dev/vde1 
--target=fs_label
for me which writes
(started writing recently? possibly something to do with pool upgrade)
  /usr/sbin/grub-probe: error: unknown filesystem.
to the stderr and leaves me with
  LINUX_ROOT_DEVICE=ZFS=/root
which means I need to mount /sysroot manually from the dracut shell.
Suboptimal.

Here's a simple way to work around this:
-- >8 --
diff --git a/10_linux.orig b/10_linux
index b018819..086401c 100755
--- a/10_linux.orig
+++ b/10_linux
@@ -89,9 +89,8 @@ case x"$GRUB_FS" in
            GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} 
${GRUB_CMDLINE_LINUX}"
        fi;;
     xzfs)
-       rpool=`${grub_probe} --device ${GRUB_DEVICE} --target=fs_label 
2>/dev/null || true`
-       bootfs="`make_system_path_relative_to_its_root / | sed -e "s,@$,,"`"
-       LINUX_ROOT_DEVICE="ZFS=${rpool}${bootfs%/}"
+       bootfs=`awk '$2 == "/" {print $1; exit}' /proc/mounts`
+       LINUX_ROOT_DEVICE="ZFS=${bootfs}"
        ;;
 esac
-- >8 --

And a properer way:
-- >8 --
diff --git a/10_linux.orig b/10_linux
index b018819..e8cfd71 100755
--- a/10_linux.orig
+++ b/10_linux
@@ -89,9 +89,9 @@ case x"$GRUB_FS" in
            GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} 
${GRUB_CMDLINE_LINUX}"
        fi;;
     xzfs)
-       rpool=`${grub_probe} --device ${GRUB_DEVICE} --target=fs_label 
2>/dev/null || true`
-       bootfs="`make_system_path_relative_to_its_root / | sed -e "s,@$,,"`"
-       LINUX_ROOT_DEVICE="ZFS=${rpool}${bootfs%/}"
+       bpool=`awk '$2 == "/" {FS="/"; $0 = $1; print $1; exit}' /proc/mounts`
+       bootfs=`zpool get -Ho value bootfs ${bpool}`
+       LINUX_ROOT_DEVICE="ZFS=${bootfs}"
        ;;
 esac
-- >8 --

Or one that should work best for all cases:
-- >8 --
diff --git a/10_linux.orig b/10_linux
index b018819..600c1db 100755
--- a/10_linux.orig
+++ b/10_linux
@@ -89,9 +89,13 @@ case x"$GRUB_FS" in
            GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} 
${GRUB_CMDLINE_LINUX}"
        fi;;
     xzfs)
-       rpool=`${grub_probe} --device ${GRUB_DEVICE} --target=fs_label 
2>/dev/null || true`
-       bootfs="`make_system_path_relative_to_its_root / | sed -e "s,@$,,"`"
-       LINUX_ROOT_DEVICE="ZFS=${rpool}${bootfs%/}"
+       mounted=`awk '$2 == "/" {print $1; exit}' /proc/mounts`
+       bpool=`echo ${mounted} | cut -d/ -f1`
+       bootfs=`zpool get -Ho value bootfs ${bpool}`
+       if [ "$bootfs" = "-" ]; then
+               bootfs="${mounted}"
+       fi
+       LINUX_ROOT_DEVICE="ZFS=${bootfs}"
        ;;
 esac
-- >8 --

Same applies to 20_linux_xen.

Please consider this vague inspiration and a thread bump.

Best,
наб

Attachment: signature.asc
Description: PGP signature

Reply via email to