如何在双引导机器上更新 grub?

dsp*_*pjm 5 boot grub2 dual-boot uefi

我有一台机器,在一个分区上安装了 ubuntu 16.04,在另一个分区上安装了 ubuntu 16.10。我有一个200m的分区,挂载/boot/efi。

基本上我用的是16.04,使用的是16.04安装的grub。

有时我会升级到 16.10 并更新内核。但是,我无法在不输入的情况下更新 16.04 的 grub。所以我必须在 16.10 上执行 grub-install 才能启动新内核。然后当我回到 16.04 时,我更新了 grub 和 grub-install,我认为这是愚蠢的。

如何在不进入的情况下更新16.04的grub,有好的解决办法吗?

我可以做一些事情,比如更新 grub 配置文件或使用另一个分区作为 /boot 吗?这种操作有危险吗?

Rod*_*ith 2

您已经描述了 GRUB 的一个基本限制:它依赖于只能在 Ubuntu(或支持 GRUB 的其他操作系统)内生成的配置文件。通常,sudo update-grub在控制 GRUB 的操作系统/发行版中运行应该可以解决问题。在某些情况下(但可能不是您的情况),可能存在一些问题会导致失败,在这种情况下,将需要更尴尬的跳圈。

有几种替代方法:

  • 我自己的rEFInd 启动管理器不依赖于预配置的内核列表;相反,它会在启动时扫描启动加载程序和 Linux 内核,并动态创建新的启动列表。(有一些与文件系统驱动程序、配置选项和内核名称相关的注意事项;但这对于典型的 Ubuntu 安装来说效果很好。)对于具有多个 Linux 发行版的计算机,这种方法使得 rEFInd 比 GRUB 更容易处理,因为 rEFInd 会选择每当您重新启动时,无论您使用哪个发行版安装 rEFInd 以及哪个发行版具有新内核,都会使用新内核。
  • 如果您使用引导加载程序(例如 GRUB Legacy 或 ELILO),它使用存储在EFI 系统分区 (ESP)上的更简单的配置文件格式,您可以手动维护它。这会增加内核升级的工作量,但如果您有多个发行版,那么当您更新发行版 A 的内核时,这可能比重新启动到发行版 B 更好。有关 Linux 的替代 EFI 引导加载程序的信息,请参阅我的此页面。
  • 引导加载程序规范是关于在引导加载程序配置中实施一些标准化的方法的提案。如果采用,则发行版 A 可以以发行版 B 的引导加载程序立即识别和遵守的方式更新其内核配置。就我个人而言,我认为这个提案有一些严重的缺陷,但它也解决了一个重要的问题。我几乎没有看到任何大公司(Canonical、Red Hat、Novell 等)支持它的证据,所以这在今天并不太可能成为现实,而且在不久的将来也不太可能成为现实。 。我想我应该提到它,这样您就可以考虑自己编写工具来使 Ubuntu 与其兼容,和/或游说 Canonical 采用这种方法。

当然,我有偏见,但恕我直言,rEFInd 是解决您遇到的问题的最佳方法。OTOH,rEFInd 还不是一个官方的 Ubuntu 软件包(尽管它应该在未来;它现在正在 Debian 测试中,所以最终应该会进入 Ubuntu)。如果您想使用安全启动,还需要一些额外的跳跃。


cl-*_*box 1

好吧...当您不执行该sudo update-grub命令时,GRUB 如何知道安装了新内核?所以这是不可避免的,但另一方面,重新安装 GRUB 并不明确必须完成 - 您可以选择从 GRUB 菜单中的高级引导选项引导新内核。不过,在您正在使用的主操作系统上重新安装 GRUB 会带来更多便利,因为您可以直接从第一级启动菜单启动另一个系统。不幸的是没有其他选项来处理这个双启动设置......