首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使grub-efi-amd64 64在更新时不自动覆盖NVRAM

如何使grub-efi-amd64 64在更新时不自动覆盖NVRAM
EN

Ask Ubuntu用户
提问于 2020-07-04 22:00:14
回答 1查看 2.7K关注 0票数 3

我使用重寻作为我的主引导加载程序。因为它可以直接加载内核映像,所以我甚至不需要太多的GRUB,但是保持它在周围,以防万一感觉更安全。然而,让我烦恼的是,某些升级(还没有确定是grub、内核还是两者兼而有之)将触发对我的UEFI的更改,使GRUB成为默认的引导加载程序。

我在不同的帖子中看到,grub安装程序有一个选项--no-nvram,这可能就是我想要的。因此,我这里的主要问题是如何在升级时将该标志传递给grub安装程序?

一些现有的Stack应答(123.)都指向sudo dpkg-reconfigure grub-efi-amd64作为解决方案,因为它应该显示一个对话框,在其中我可以禁用该行为。不过,我在焦点上不管用:

代码语言:javascript
复制
$ sudo dpkg-reconfigure grub-efi-amd64
dpkg-query: package 'grub-efi-amd64' is not installed and no information is available
Use dpkg --info (= dpkg-deb --info) to examine archive files.
/usr/sbin/dpkg-reconfigure: grub-efi-amd64 is not installed

$ dpkg -l *grub*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                  Version                Architecture Description
+++-=====================-======================-============-===============================================================
un  grub                                          (no description available)
un  grub-cloud-amd64                              (no description available)
ii  grub-common           2.04-1ubuntu26         amd64        GRand Unified Bootloader (common files)
un  grub-coreboot                                 (no description available)
un  grub-doc                                      (no description available)
un  grub-efi                                      (no description available)
un  grub-efi-amd64                                (no description available)
ii  grub-efi-amd64-bin    2.04-1ubuntu26         amd64        GRand Unified Bootloader, version 2 (EFI-AMD64 modules)
ii  grub-efi-amd64-signed 1.142.1+2.04-1ubuntu26 amd64        GRand Unified Bootloader, version 2 (EFI-AMD64 version, signed)
un  grub-efi-arm                                  (no description available)
un  grub-efi-arm64                                (no description available)
un  grub-efi-arm64-signed                         (no description available)
un  grub-efi-ia32                                 (no description available)
un  grub-efi-ia64                                 (no description available)
un  grub-emu                                      (no description available)
ii  grub-gfxpayload-lists 0.7                    amd64        GRUB gfxpayload blacklist
un  grub-ieee1275                                 (no description available)
un  grub-legacy                                   (no description available)
un  grub-legacy-doc                               (no description available)
un  grub-linuxbios                                (no description available)
ii  grub-pc               2.04-1ubuntu26         amd64        GRand Unified Bootloader, version 2 (PC/BIOS version)
ii  grub-pc-bin           2.04-1ubuntu26         amd64        GRand Unified Bootloader, version 2 (PC/BIOS modules)
un  grub-uboot                                    (no description available)
un  grub-xen                                      (no description available)
un  grub-yeeloong                                 (no description available)
un  grub2                                         (no description available)
ii  grub2-common          2.04-1ubuntu26         amd64        GRand Unified Bootloader (common files for version 2)

$ sudo dpkg-reconfigure grub-efi-amd64-signed
Installing grub to /boot/efi.
Installing for x86_64-efi platform.
Installation finished. No error reported.

所以我的包裹的名称是不同的,最有可能的候选人只是做我不想做的事情,而不问任何问题。

查看/var/lib/dpkg/info/grub-efi-amd64-signed.postinst,我发现它调用了/usr/lib/grub/grub-multi-install --target=$target,而后者又包含一个调用_UBUNTU_ALTERNATIVE_ESPS="$RET" grub-install --efi-directory=$mntpoint "$@"。因此,后者可以处理额外的标志,但前者似乎没有一个钩子来提供任何。

是否有任何可靠的方法(也可能在接下来的几次升级中工作)通过--no-nvram,我是否可以通过其他方法实现这个目标,或者我是否必须删除GRUB,或者接受它会时不时地破坏我的启动菜单?

EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2020-08-07 22:44:34

我从来没有使用过重新发现,所以我不知道我的建议可能的副作用,请注意,不要怪我,如果这砖头你的系统,等等。

查看我的Ubuntu20.04服务器上的包,我相信您应该能够删除/boot/grub/x86_64-efi/core.efi。用于grub-efi-amd64grub-efi-amd64-signedshim-signedD2脚本都共享相同的逻辑。如果存在core.efi文件,则运行/usr/lib/grub/grub-multi-install。否则,跳过该步骤。

grub-efi-amd64.postinst脚本中的注释确实表明缺少的core.efi文件应该告诉脚本跳过安装步骤

https://git.launchpad.net/~ubuntu-core-dev/grub/+git/ubuntu/tree/debian/postinst.in?h=focal#n742

代码语言:javascript
复制
# Check /boot/grub to see if we previously installed to an ESP. We don't
# want to trigger the install code just by installing the package,

只有grub-efi-amd64包具有--no-nvram选项的配置。grub-efi-amd64-signedshim-signed没有。我不知道为什么,但他们有不同的源代码包,这可能解释不同的选择。grub-efi-amd64包将此选项存储在debconf中,并在调用grub-multi-install时使用它生成命令行。正如您注意到的,grub-multi-install脚本似乎直接将其参数传递给grub-install。您可能可以修补postinst脚本或grub-multi-install来添加--no-nvram参数,但这可能会导致将来更新期间出现问题。

这些是使用grub-multi-install的其他debconf设置。但是,我不能让他们跳过安装。如果在安装grub包之前设置了<#>,则它们可能会工作。

代码语言:javascript
复制
echo grub-efi-amd64  grub-efi/install_devices_empty  boolean true | debconf-set-selections
echo grub-efi-amd64  grub-efi/install_devices        multiselect | debconf-set-selections

参考资料

https://unix.stackexchange.com/questions/565615/efi-boot-bootx64-efi-vs-efi-ubuntu-grubx64-efi-vs-boot-grub-x86-64-efi-grub-efi

当使用grub.efi时,它将首先使用grub-mkimage实用程序创建GRUB核心映像:在UEFI系统上,该文件将保存在/ boot /grub/x86_64- EFI /grub.efi和/或./core.efi中,然后复制到EFI系统分区,并通过grub-install添加到UEFI NVRAM引导设置中。在引导过程中,/ boot /grub/x86_64-efi/*.efi中的副本将完全不使用。

现在情况可能不同了,就像命令/usr/lib/grub/grub-multi-install -vvv的输出对我说的那样,这些文件是生成的,但没有复制到ESP。用于引导的文件来自/usr/lib/shim/shimx64.efi.signed

从头开始安装grub2时的非交互式安装

我想在映像上安装grub2软件,但根本不配置它或在引导扇区上安装它。

现在情况可能也不同了,因为grub包已经被重新加工,逻辑也可能发生了变化。

票数 1
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1256398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档