![GRUB 记录失败,与 LVM 有关](https://linux22.com/image/1164273/GRUB%20%E8%AE%B0%E5%BD%95%E5%A4%B1%E8%B4%A5%EF%BC%8C%E4%B8%8E%20LVM%20%E6%9C%89%E5%85%B3.png)
在我的UEFI启动电脑时我使用以下方式安装了全新的 Ubuntu 18.04.1 LTS逻辑卷管理器几个月前的分区方案。
$ lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 vfat 79DE-0D6B /boot/efi
└─sda2 LVM2_member ZBlrfj-ZwAJ-2T3b-gUHr-eKVw-nhIi-9bQQTs
├─ubuntu--vg-root ext4 e85edc94-cc00-42c5-8994-cbb835e8e315 /
└─ubuntu--vg-swap_1 swap e699c892-4046-4d0b-957a-f936cc4c9973 [SWAP]
头几个月每次启动都如预期一样,这意味着只有在系统未正确关闭时才会显示 GRUB 启动菜单。因此众所周知的記錄失敗功能似乎运行良好。
但是,几周前,在系统升级到 Ubuntu 18.04.2 LTS 后,GRUB 启动菜单开始在每次启动时显示,超时时间为 30 秒。当然,从长远来看,这很烦人 :-(
检查完 grub 配置文件后/boot/grub/grub.cfg
我发现recordfail 功能被声明为破碎的关于 LVM 的使用?! Recordfail 功能已被禁用,因此 GRUB 每次启动时都会显示启动菜单。
set recordfail=1
# GRUB lacks write support for lvm, so recordfail support is disabled.
/etc/grub.d/00_header
然后,我在函数中进一步的 GRUB 配置生成脚本中找到了永久禁用的 recordfail 功能的来源check_writable()
。
abstractions="$(grub-probe --target=abstraction "${grubdir}")"
for abstraction in $abstractions; do
case "$abstraction" in
diskfilter | lvm)
cat <<EOF
# GRUB lacks write support for $abstraction, so recordfail support is disabled.
EOF
return 1
;;
esac
done
正如您所看到的,作者声明了两个模块diskfilter
并lvm
破坏了 recordfail 功能,从而导致每次启动时都会出现令人讨厌的 30 秒超时。
到目前为止,这就是现状,一切似乎都按预期进行……但是,为什么 recordfail 功能一开始就运行良好?是否存在未解决的错误,这是禁用它的原因吗?我是地球上唯一一个运行这个引导加载程序和分区方案的人吗?我期待有人能解开这个谜团。
提前致谢
/编辑我不想只是摆脱烦人的 GRUB 启动菜单超时问题。相反,我想了解导致此行为的底层问题在哪里。
答案1
我刚刚也注意到了这个问题。这似乎与 1 月 9 日的这一变化有关
https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1800722
似乎已提交错误来修复原始错误修复引起的问题
https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1815002
答案2
解决方法是手动修改 /boot/grub/grub.cfg 并将 timeout=30 替换为 timeout=2(此处 2 表示 2 秒)
sudo sed -i.bak -- 's/set timeout=30/set timeout=2/g' /boot/grub/grub.cfg && diff /boot/grub/grub.cfg.bak '/boot/grub/grub.cfg'
它会在 处创建备份文件/boot/grub/grub.cfg.bak
。每次update-grub
、内核更新等之后都必须执行此操作。