如何在双启动机器上更新 grub?

如何在双启动机器上更新 grub?

我有一台机器,在一个分区上安装了 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 之类的操作吗?这种操作危险吗?

答案1

您可以直接启动分区,而不是特定内核。基于 Debian(不确定其他发行版)在 / 中添加指向最新内核和第二最新内核的链接。因此,您可以启动指向最新内核的链接。关闭 os-prober,将驱动器和分区的启动节复制到 40_custom 中。

备份当前 grub.cfg 然后编辑 40_custom

sudo cp -a /boot/grub/grub.cfg /boot/grub/grub.cfg.backup
sudo nano /etc/grub.d/40_custom

将如下条目添加到 40_custom,使用您的驱动器和分区代替 (hd1,1) 和 sdb1:

menuentry "Install on sdb1" {
    set root=(hd1,1)
    linux /vmlinuz root=/dev/sdb1 ro quiet splash
    initrd /initrd.img
}

编辑 grub 来关闭 os-prober:

sudo nano /etc/default/grub

将这一行添加到 grub 以使其不添加其条目并更新 grub:

GRUB_DISABLE_OS_PROBER=true

并使用全部更改来更新 grub:

sudo update-grub

较早的类似条目,也有 UUID 版本:

如何添加 GRUB2 菜单项以启动 USB 驱动器上安装的 Ubuntu?

详细信息:如何:创建免维护的自定义 GRUB2 屏幕。- Cavsfan

https://help.ubuntu.com/community/MaintenanceFreeCustomGrub2Screen

https://help.ubuntu.com/community/Grub2/CustomMenus

答案2

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

还有几种替代方法:

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

当然,我有偏见,但恕我直言,目前 rEFInd 是解决您遇到的问题的最佳方法。另一方面,rEFInd 还不是官方的 Ubuntu 软件包(尽管将来应该会成为官方软件包;它现在正在 Debian 测试中,因此最终应该会进入 Ubuntu)。如果您想使用安全启动,它还需要一些额外的步骤。

答案3

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

相关内容