[Bug 1800722] Re: EFI booting + /boot on LVM == inaccessible boot menu

Diftraku diftraku at gmail.com
Fri Mar 1 12:42:47 UTC 2019


@vorlon When grub-common, grub-efi-amd64, grub-efi-amd64-bin and grub2-common are installed with version 2.02-2ubuntu8.12 the following configuration options (in /etc/default/grub) are not honoured:
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0
GRUB_RECORDFAIL_TIME=0

The resulting "grub.cfg" has following lines at the end of 00_header-block:
if [ "${recordfail}" = 1 ] ; then
  set timeout=30
else
  if [ x$feature_timeout_style = xy ] ; then
    set timeout_style=hidden
    set timeout=0
  # Fallback hidden-timeout code in case the timeout_style feature is
  # unavailable.
  elif sleep --interruptible 0 ; then
    set timeout=0
  fi
fi
if [ $grub_platform = efi ]; then
  set timeout=30
  if [ x$feature_timeout_style = xy ] ; then
    set timeout_style=menu
  fi
fi

These lines override any timeouts or menu styles set in the
configuration (via /etc/default/grub). The result is a 30 second timeout
with a menu when booting grub. Having no recordfail support would
default to 30 second timeout but running on EFI forces the timeout style
to "menu" as well.


When downgrading to version 2.02-2ubuntu8.8 equivalents of the packages mentioned above, "grub.cfg" has the following output at the end of the 00_header block:
if [ "${recordfail}" = 1 ] ; then
  set timeout=30
else
  if [ x$feature_timeout_style = xy ] ; then
    set timeout_style=hidden
    set timeout=0
  # Fallback hidden-timeout code in case the timeout_style feature is
  # unavailable.
  elif sleep --interruptible 0 ; then
    set timeout=0
  fi
fi

Absent is the "platform == efi" block that forces timeout to 30 seconds
and timeout style to menu. This results in a quiet startup for grub
without any boot delay.


The main issue is 2.02-2ubuntu8.12 (I have not been able to install 2.02-2ubuntu8.10 from the repos directly) overrides GRUB_TIMEOUT_STYLE and GRUB_TIMEOUT without any warning. This means that  GRUB_HIDDEN_TIMEOUT and GRUB_HIDDEN_TIMEOUT_QUIET are also never used. The previous behaviour is as described above, where the quiet boot happens without boot delay.

I indeed have /boot on LVM on an EFI system but what I want from grub is
quiet boot with no timeout, which the 2.02-2ubuntu8.8 version provides.
I feel this is a regression due to how earlier behaviour is no longer
happening as expected nor are there any warnings about this when running
update-grub. Running on EFI and LVM is not an excuse to silently ignore
configured defaults. There should at least be a warning that the
configured defaults are going to be ignored.

I have not tried to see if you only need to downgrabe grub-common or
grub2-common for the old behaviour to return.

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, which is subscribed to grub2 in Ubuntu.
https://bugs.launchpad.net/bugs/1800722

Title:
  EFI booting + /boot on LVM == inaccessible boot menu

Status in grub2 package in Ubuntu:
  Fix Released
Status in grub2 source package in Bionic:
  Fix Released
Status in grub2 source package in Cosmic:
  Fix Released

Bug description:
  [Impact]
  This issue makes it impossible for UEFI users to access to boot menu and choose their kernel if /boot is installed on LVM.

  [Test case]
  1) Install Ubuntu on UEFI; put /boot on a LVM LV.
  2) Reboot after the install
  3) Verify that you will get a GRUB menu at boot.

  [Regression potential]
  Give particular attention to boot behavior on different disk setups: failure to show the menu on LVM or other disk setups when holding the SHIFT key, or showing the menu at every boot unnecessarily on other types of disk configurations: /boot on a physical partition, etc.

  ---

  Because EFI does not support instantaneous read of modifier keys (i.e.
  holding down shift at boot), the only way to reliably show a boot menu
  is by letting the system boot, interrupting the boot, and letting the
  menu be displayed because 'recordfail' has been set.

  If /boot/grub is on LVM, recordfail does not work, because grub
  doesn't have write support on LVM, so saveenv doesn't work.  Indeed,
  from the grub.cfg on such a system, the recordfail function is written
  as:

  function recordfail {
    set recordfail=1
    # GRUB lacks write support for lvm, so recordfail support is disabled.
  }

  The interaction of these two limitations means that systems with
  /boot/grub on LVM cannot reliably get a grub menu, ever.

  While I think that in the long term we should always put /boot/grub on
  the ESP (which means it will always be writable by grub), which is in
  fact what we did for Ubuntu Core, in the meantime I believe what we
  need to do here is always show the boot menu if we are booted under
  EFI and we have a non-writable grubenv.

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1800722/+subscriptions



More information about the foundations-bugs mailing list