You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已设置grub2/update_nvram为false,但apt触发grub-install时仍未自动添加--no-nvram参数导致失败,该如何排查?

已设置grub2/update_nvram为false,但apt触发grub-install时仍未自动添加--no-nvram参数导致失败,该如何排查?

我之前在Ubuntu Focal上也遇到过类似的问题,给你分享几个排查和解决的方向:

1. 确认debconf配置是否精准生效

你用debconf-show查到的是全局的配置,但最好确认下grub-efi-amd64包本身的debconf值是否正确,避免全局和包级配置不一致的问题:

echo "get grub2/update_nvram" | debconf-communicate grub-efi-amd64

如果输出不是false,说明包级的配置没设置对,可以重新设置:

echo "set grub2/update_nvram false" | debconf-communicate grub-efi-amd64

2. 检查grub-efi-amd64的postinst脚本逻辑

apt更新时触发的grub-install是由grub-efi-amd64的postinst脚本调用的,我们可以直接查看这个脚本的逻辑是否正确读取了debconf配置:
打开脚本文件:

sudo nano /var/lib/dpkg/info/grub-efi-amd64.postinst

查找处理grub2/update_nvram的代码段,正常应该有类似这样的逻辑:

GRUB_UPDATE_NVRAM=$(debconf-get grub2/update_nvram)
if [ "$GRUB_UPDATE_NVRAM" = "false" ]; then
    GRUB_INSTALL_OPTS="$GRUB_INSTALL_OPTS --no-nvram"
fi

如果这段代码不存在,或者有语法错误(比如字符串比较没加引号、变量名写错),那就是脚本的问题。

3. 调试postinst脚本的变量传递

如果脚本逻辑看起来没问题,但还是没生效,可以临时在脚本里加调试信息,看看变量值是否正确传递:
在postinst脚本中调用grub-install的代码前,添加一行:

echo "[$(date)] GRUB_UPDATE_NVRAM: $GRUB_UPDATE_NVRAM | GRUB_INSTALL_OPTS: $GRUB_INSTALL_OPTS" >> /tmp/grub-debug.log

然后运行apt reinstall grub-efi-amd64-signed,之后查看日志:

cat /tmp/grub-debug.log

如果日志里GRUB_UPDATE_NVRAM不是false,说明debconf的值没有被正确读取到脚本里;如果是false但GRUB_INSTALL_OPTS里没有--no-nvram,那就是脚本的判断逻辑有问题。

4. 检查是否有其他配置覆盖debconf设置

系统里的/etc/default/grub或者/etc/default/grub.d/*.cfg文件可能会设置GRUB_UPDATE_NVRAM变量,覆盖debconf的配置。用下面的命令检查:

grep -r GRUB_UPDATE_NVRAM /etc/default/grub*

如果查到有设置,要么删除这个设置,要么把它改成false。

5. 临时 workaround(避免每次手动执行)

如果以上排查都没解决,或者你不想等bug修复,可以手动修改postinst脚本,强制添加--no-nvram参数:

  • 先备份原脚本:
sudo cp /var/lib/dpkg/info/grub-efi-amd64.postinst /var/lib/dpkg/info/grub-efi-amd64.postinst.bak
  • 编辑脚本,找到GRUB_INSTALL_OPTS的定义行,直接添加--no-nvram:
sudo nano /var/lib/dpkg/info/grub-efi-amd64.postinst

比如改成:

GRUB_INSTALL_OPTS="--target=x86_64-efi --efi-directory=$efi_dir --bootloader-id=ubuntu --recheck --no-nvram"
  • 为了避免包更新时脚本被覆盖,可以用dpkg-divert保护修改后的脚本:
sudo dpkg-divert --local --rename --add /var/lib/dpkg/info/grub-efi-amd64.postinst

这样以后包更新时,系统会使用你修改后的版本,而不是替换掉。

6. 确认是否是bug

如果以上步骤都确认没问题,那大概率是grub-efi-amd64包在Focal版本的一个bug,你可以去Ubuntu的官方bug跟踪平台提交报告,说明你的环境、操作步骤和问题现象,帮助开发者修复。

备注:内容来源于stack exchange,提问作者Marlies

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 10:59:49