![如何彻底删除 Ubuntu 22.04 上的 Grub](https://linux22.com/image/951821/%E5%A6%82%E4%BD%95%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4%20Ubuntu%2022.04%20%E4%B8%8A%E7%9A%84%20Grub.png)
我已经在系统上替换了Grub
,rEFInd
对此我非常满意。我现在希望完全卸载Grub
并确保 Ubuntu 下次安装更新时不会将其重新带回。
我尝试过sudo apt-get purge grub-pc
但失败了:
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
shim-signed : Depends: grub-efi-amd64-signed (>= 1.187.2~) but it is not going to be installed or
grub-efi-arm64-signed (>= 1.187.2~) but it is not installable
E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.
我知道我可以尝试找到所有Grub
相关的软件包并将它们一个接一个地删除,但一定有比这更好的方法吗?另外,/boot/efi/
据我所知,这不会删除 Grub 的文件,也不会在 EFI 启动管理器中留下 Grub 的条目。
我是否需要采取更多措施来阻止 UbuntuGrub
在下次安装任何更新时再次自动强制我执行此操作?
答案1
rEFInd 文档中介绍了如何删除 GRUB 2:
https://www.rodsbooks.com/refind/bootcoup.html#disabling_grub
简而言之,您可以apt
尝试删除各种 GRUB 包;但是,依赖关系会随着时间的推移而不断变化,因此您可能需要跟踪它们并单独删除它们(或在一个命令行中全部删除)。不幸的是,越来越多的依赖关系使这变得更加困难,因为您可能想要或需要的各种包现在都依赖于 GRUB,即使它们实际上并不需要 GRUB——只是任何启动程序。因此,正如@user10489 所建议的那样,保留 GRUB 但确保 rEFInd 是默认启动程序可能更容易、更安全。
另一方面,如果 GRUB 一直安装着,Ubuntu 的软件包管理可能迟早会尝试更新它,这可能会导致启动政变,其中 GRUB 接管为默认启动程序。您可以手动或以半自动化方式处理此问题(通过使用当它refind-mkdefault
发生时,或将其放入关机脚本中);或者您可以尝试使用 来阻止 GRUB 更新apt-mark hold
,如下所示:
sudo apt-mark hold grub-efi-amd64 grub-efi-amd64-signed grub-common grub-efi-amd64-bin grub-common grub2-common
(该示例来自前面的文档页面。我今天还没有检查它,所以可能需要更改包列表。)
我能明确地说,可以完全删除 GRUB 软件包及其所有依赖项,并且只要通过 rEFInd 启动,计算机将继续启动。我以这种方式运行多个系统。(我是 rEFInd 的维护者。)但这可能会很麻烦,这意味着您可能无法获得某些重要软件包的更新,例如shim
,因为它们(不必要地)依赖于 GRUB。(当安全启动处于活动状态时,rEFInd 会将其认为最新的 Shim 二进制文件复制到 rEFInd 的目录中,因此即使在shim
。如果安全启动处于非活动状态,或者您将其设置为启动启用安全启动且不使用 Shim,那么这无关紧要。)
至于 ESP 上的 GRUB 文件和 NVRAM 中的 GRUB 条目,一旦您设置了仅 rEFInd 安装,它们基本上只是无害的杂物。如果您想删除这些文件和 NVRAM 条目,您可以这样做,但您必须手动执行。据我所知,没有脚本可以执行此操作 - 当然不是 rEFInd 附带的脚本,据我所知 GRUB 也没有。这并不难 - 只需一个rm
命令即可删除文件和两个efibootmgr
命令(一个用于查找相关条目,另一个用于删除它),但您需要知道自己在做什么。最好不要管它。
答案2
Refind 不是 Ubuntu 公认的标准启动方法。这并不意味着它不起作用,只是意味着 Ubuntu 不接受它来满足启动依赖性,因此您无法在不破坏 Ubuntu 部分功能的情况下真正删除 grub。
此外,虽然 refind 可以在没有帮助的情况下启动 Ubuntu,但您实际上有可能通过 refind 启动 grub,因此如果您完全删除 grub,则不清楚您的系统是否仍能启动。
即使您没有通过 refind 启动 grub,grub 也可能会引入 refind 正在使用的依赖项,如果您成功完全删除 grub,那些依赖项也可能会被删除,最终可能导致系统无法启动。
最好的办法可能是确保 refind 是您的默认引导程序并忽略 grub。通常,拥有多个引导程序没有坏处,有时最好有冗余引导程序以防出现问题。如果 grub 获得更新(无论如何更新并不频繁),它可能会重置引导顺序,但将其改回来应该不太难。可能有一个 grub 选项告诉它不要在更新时更改引导顺序。
要恢复 refind 作为默认启动管理器:sudo refind-mkdefault
。