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,
наб
signature.asc
Description: PGP signature

