diff --git a/patches/grub-mkconfig-zfs-support.diff b/patches/grub-mkconfig-zfs-support.diff new file mode 100644 index 000000000..ab5362c8f --- /dev/null +++ b/patches/grub-mkconfig-zfs-support.diff @@ -0,0 +1,31 @@ +diff -up ./util/grub-mkconfig.in.original ./util/grub-mkconfig.in +--- ./util/grub-mkconfig.in.original 2012-03-27 13:03:49.475388000 -0700 ++++ ./util/grub-mkconfig.in 2012-03-27 13:06:38.948080000 -0700 +@@ -140,9 +140,24 @@ if test -e ${GRUB_PREFIX}/device.map ; t + ${grub_mkdevicemap} + fi + +-# Device containing our userland. Typically used for root= parameter. +-GRUB_DEVICE="`${grub_probe} --target=device /`" +-GRUB_DEVICE_UUID="`${grub_probe} --device ${GRUB_DEVICE} --target=fs_uuid 2> /dev/null`" || true ++# Attempt to detect if the root file system is in ZFS first ++unset GRUB_DEVICE ++unset GRUB_DEVICE_BOOT ++getzfsgrubdevice() { ++ mount | while read dev dummy mntpnt dummy2 fstype rest ; do ++ if [ -n "$GRUB_DEVICE" ] ; then break ; fi ++ if [ "$fstype" != "zfs" ] ; then continue ; fi ++ if [ "$mntpnt" != "/" ] ; then continue ; fi ++ GRUB_DEVICE=`fstab-decode echo "$dev"` ++ GRUB_DEVICE="ZFS=$GRUB_DEVICE" ; echo "$GRUB_DEVICE" ; break ++ done ++} ++GRUB_DEVICE=`getzfsgrubdevice` ++if [ -z "$GRUB_DEVICE" ] ; then ++ # Device containing our userland. Typically used for root= parameter. ++ GRUB_DEVICE="`${grub_probe} --target=device /`" ++ GRUB_DEVICE_UUID="`${grub_probe} --device ${GRUB_DEVICE} --target=fs_uuid 2> /dev/null`" || true ++fi + + # Device containing our /boot partition. Usually the same as GRUB_DEVICE. + GRUB_DEVICE_BOOT="`${grub_probe} --target=device /boot`"