I've rebased my patch sets against BZR revision 4144 and tested. Aside from the device scanning code (which you wanted me to implement differently) and the Ubuntu-specific recordfail patch, the following two changes are all that's left:
--------------------------------------------------------------------- IMHO, the following change should be committed before the next release. The code currently in BZR does not actually set the RPOOL variable. Also, I don't think we should be adding rpool= or bootfs= to the Linux command-line. I had those in my patch set for compatibility with the existing initramfs on my system. I wasn't intending to propose those for upstream inclusion. If GRUB 2.00 is released with them, then initrds might start using them, which would mean GRUB would have to support them for a long time. The same applies to boot=zfs. The initrd code should be updated to parse the root=ZFS=rpool/bootfs syntax. Or, if the distro wants/needs something else, they can patch GRUB and/or have the admin set the appropriate flags in GRUB_CMDLINE_LINUX in /etc/default/grub. Supporting just the root=ZFS=rpool/bootfs syntax in an initrd is not difficult. On Ubuntu, it's a two-line patch to initramfs-tools (to eliminate the need for boot=zfs) and a ~10 line patch to zfs-initramfs (to support root=ZFS=rpool/bootfs). (The patches are backwards-compatible.) Considering other implementations... The systemd ZFS code is already using the root=ZFS=rpool/bootfs syntax, so it shouldn't require any changes. Gentoo is using something very similar, I believe, so the changes there should be minimal. Index: grub/util/grub.d/10_linux.in =================================================================== --- grub.orig/util/grub.d/10_linux.in 2012-03-08 14:06:00.641410243 -0600 +++ grub/util/grub.d/10_linux.in 2012-03-08 15:30:53.557993000 -0600 @@ -61,9 +61,9 @@ case x"$GRUBFS" 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}" - GRUB_CMDLINE_LINUX="boot=zfs rpool=${RPOOL} bootfs=${RPOOL}${bootfs} ${cmdline} ${GRUB_CMDLINE_LINUX}";; + LINUX_ROOT_DEVICE="ZFS=${rpool}${bootfs}" esac title_correction_code= --------------------------------------------------------------------- I believe the following change is still needed to support pool names with spaces. That said, maybe we shouldn't care about pool names with spaces. If a pool name has spaces, then we need some way to escape it when building the linux_entry command line. Then the initrd needs to unescape it. That seems like a lot of hassle for a configuration that's likely to be extremely uncommon even if GRUB does support it. Index: grub/util/getroot.c =================================================================== --- grub.orig/util/getroot.c 2012-02-03 05:21:06.838056692 -0600 +++ grub/util/getroot.c 2012-02-03 05:22:36.227364000 -0600 @@ -285,8 +285,7 @@ st++; break; case 1: - if (!strcmp (name, poolname)) - st++; + st++; break; case 2: if (strcmp (name, "mirror") && !sscanf (name, "mirror-%u", &dummy) -- Richard
signature.asc
Description: This is a digitally signed message part
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel