[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