Update grub-mkconfig.in and 10_linux.in to support grub-probe's new partuuid target. Update grub.texi documenation. --- docs/grub.texi | 13 +++++++++++++ util/grub-mkconfig.in | 3 +++ util/grub.d/10_linux.in | 13 +++++++++++-- 3 files changed, 27 insertions(+), 2 deletions(-)
diff --git a/docs/grub.texi b/docs/grub.texi index e935af33e..289b202df 100644 --- a/docs/grub.texi +++ b/docs/grub.texi @@ -1405,6 +1405,19 @@ the Linux kernel, using a @samp{root=UUID=...} kernel parameter. This is usually more reliable, but in some cases it may not be appropriate. To disable the use of UUIDs, set this option to @samp{true}. +@item GRUB_ENABLE_LINUX_PARTUUID +Normally, when @command{grub-mkconfig} sets the @samp{root=UUID=...} kernel +parameter, it selects a filesystem UUID. This works well for Linux systems that +boot using an initramfs as most implementations support mounting the root +filesystem this way. However for Linux systems that do not boot using an +initramfs, @command{grub-mkconfig} defaults to setting the @samp{root=...} +kernel parameter to the device name containing the root filesystem. Setting +this option to @samp{true} changes the behavior of @command{grub-mkconfig} so +that it identifies the device containing the root filesystem by the partition +UUID. In order to use the @samp{root=PARTUUID=...} kernel parameter, the Linux +kernel version must be at least 2.6.37 (3.10 for systems using the MSDOS +partition scheme). + @item GRUB_DISABLE_RECOVERY If this option is set to @samp{true}, disable the generation of recovery mode menu entries. diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in index f8496d28b..30ead59e1 100644 --- a/util/grub-mkconfig.in +++ b/util/grub-mkconfig.in @@ -134,6 +134,7 @@ 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 +GRUB_DEVICE_PARTUUID="`${grub_probe} --device ${GRUB_DEVICE} --target=partuuid 2> /dev/null`" || true # Device containing our /boot partition. Usually the same as GRUB_DEVICE. GRUB_DEVICE_BOOT="`${grub_probe} --target=device /boot`" @@ -182,6 +183,7 @@ if [ "x${GRUB_ACTUAL_DEFAULT}" = "xsaved" ] ; then GRUB_ACTUAL_DEFAULT="`"${grub # override them. export GRUB_DEVICE \ GRUB_DEVICE_UUID \ + GRUB_DEVICE_PARTUUID \ GRUB_DEVICE_BOOT \ GRUB_DEVICE_BOOT_UUID \ GRUB_FS \ @@ -215,6 +217,7 @@ export GRUB_DEFAULT \ GRUB_TERMINAL_OUTPUT \ GRUB_SERIAL_COMMAND \ GRUB_DISABLE_LINUX_UUID \ + GRUB_ENABLE_LINUX_PARTUUID \ GRUB_DISABLE_RECOVERY \ GRUB_VIDEO_BACKEND \ GRUB_GFXMODE \ diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in index de9044c7f..71675fac6 100644 --- a/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in @@ -220,8 +220,17 @@ while [ "x$list" != "x" ] ; do gettext_printf "Found initrd image: %s\n" "${dirname}/${initrd}" >&2 elif test -z "${initramfs}" ; then # "UUID=" and "ZFS=" magic is parsed by initrd or initramfs. Since there's - # no initrd or builtin initramfs, it can't work here. - linux_root_device_thisversion=${GRUB_DEVICE} + # no initrd or builtin initramfs, it can't work here. However, if + # GRUB_DEVICE_PARTUUID is not empty we can use that here if + # GRUD_DISABLE_LINUX_UUID is not set to true and GRUB_ENABLE_LINUX_PARTUUID + # is set to true. + if [ "x${GRUB_DISABLE_LINUX_UUID}" != "xtrue" ] \ + && [ "x${GRUB_DEVICE_PARTUUID}" != "x" ] \ + && [ "x${GRUB_ENABLE_LINUX_PARTUUID}" = "xtrue" ] ; then + linux_root_device_thisversion="PARTUUID=${GRUB_DEVICE_PARTUUID}" + else + linux_root_device_thisversion=${GRUB_DEVICE} + fi fi if [ "x$is_top_level" = xtrue ] && [ "x${GRUB_DISABLE_SUBMENU}" != xy ]; then -- 2.12.0 _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel