GRUB 记录失败,与 LVM 有关

GRUB 记录失败,与 LVM 有关

在我的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

正如您所看到的,作者声明了两个模块diskfilterlvm破坏了 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、内核更新等之后都必须执行此操作。

相关内容