为什么我不能(以及如何)同时安装 grub-pc 和 grub-efi 包?

为什么我不能(以及如何)同时安装 grub-pc 和 grub-efi 包?

我想安装grub-pcgrub-efi包,以便我的服务器可以使用任一方法启动;但是,当我尝试安装其中一个时,仅当我删除另一个时,apt 才会继续。

根据apt info grub-pc

替换:grub、grub-common(<= 1.97~beta2-1)、grub-coreboot、grub-efi-amd64、grub-efi-ia32、grub-ieee1275、grub-legacy、grub2(<< 2.04-1ubuntu12.2)

apt info grub-efi-amd64

替换:grub、grub-common(<= 1.97~beta2-1)、grub-coreboot、grub-efi-ia32、grub-ieee1275、grub-legacy、grub-pc,grub2(<< 2.04-1ubuntu12.2)

为什么要施加此限制?否则两个包不能共存吗?我该怎么做呢?

答案1

在软件包中下拉一层,安装 grub-pc-bin 和 grub-efi-amd-bin。这些软件包不会发生冲突,但它们不会将 grub 安装为活动引导加载程序,也不会在升级时更新 grub.cfg。安装您选择的顶层软件包以实现更新功能:grub-pc 或 grub-efi-amd。


只有一个 /boot/grub/grub.cfg 文件,因此您必须选择使用哪种格式(传统格式或 UEFI)(它们没有太大区别,但有些东西(如 chainloader 命令)有很大不同)。

答案2

2020 年 9 月 27 日更新答案:

根据更多的经验,我现在可以更新我的答案。

大概您的目标(不仅仅是安装软件包)是实际制作一个可以在 BIOS 和 EFI 系统上启动的磁盘。

如果您的磁盘已经可以在 BIOS 系统上启动,则可以通过运行以下命令来添加 EFI 启动功能。请注意:(1) 磁盘需要具有有效且格式正确的 ESP(EFI 系统分区);(2) ESP 需要安装在/boot/efi;(3) 磁盘可能需要具有 GPT(GUID 分区表)而不是 MBR(主引导记录)。假设所有这些,以下命令对我有用:

$  sudo  apt-get  install  grub-efi-amd64-bin
$  sudo  grub-install  --force  --removable  --target=x86_64-efi  \
     --efi-directory=/boot/efi  --bootloader-id=Ubuntu

如果您的磁盘已经可以在 EFI 系统上启动,则可以通过运行以下命令来添加 BIOS 启动功能。请注意:(1) 您的磁盘可能需要有 GPT(很可能有)和 (2) 如果您的磁盘有 GPT,则 GPT 将需要指定“旧版 BIOS 启动”分区。假设您满足这些先决条件,以下命令可能适合您。(我没有测试过这些命令,但我怀疑它们可能有效。)/dev/sdX用适当的设备替换(通常/dev/sda)。

$  sudo  apt-get  install  grub-pc-bin
$  sudo  grub-install /dev/sdX

update-grub无论哪种情况,进行上述更改后重新运行可能都不会有什么坏处。

$  sudo  update-grub

供您参考,以下是Grub 文档

另外:我可以通过运行来查看我的 GPT 分区表sudo gdisk -l /dev/sdX。例如,我的 Legacy BIOS 启动分区如下所示:

Number  Start (sector)    End (sector)  Size       Code  Name
   1              34            2047   1007.0 KiB  EF02  2004_bios_boot

请注意,ubfan1 的回答说 Grub 的“旧版”和“UEFI”版本配置文件之间的差异可能会导致问题。虽然存在这样的差异,但我认为它们可能与这种情况无关(或可能仅最低限度相关)。“旧版 Grub”是 Grub 的第 1 版。而“旧版启动”是通过 BIOS 启动。Grub 版本 2(通常称为“Grub”)确实支持 BIOS 和 EFI 启动。所以不要将“旧版 Grub”与“旧版启动”混淆。

2020 年 9 月 18 日的原始答案:

正如 ubfan1 的回答中所述,您可以同时安装grub-pc-bingrub-efi-amd64-bin

grub-pc但请注意,和包本身也有一些文件grub-efi。看起来文件本身都有不同的路径。因此文件本身并不冲突。

https://packages.ubuntu.com/focal/amd64/grub-pc/filelist
https://packages.ubuntu.com/focal/amd64/grub-efi/filelist
https://packages.ubuntu.com/focal/amd64/grub-efi-amd64/filelist

至于为什么实施限制,我只能推测。一些可能的原因:

  1. 如果你看看这个答案,似乎建议从以 EFI 模式启动的系统内部安装 EFI 版本的 Grub。因此,EFI Grub 有可能以系统特定的方式安装。

  2. Ubuntu 开发人员可能不想在同一系统上支持多个引导加载程序。此类设置可能难以测试和提供 QA。

  3. EFI 和 BIOS Grub 都可能配置为使用相同的配置文件(可能/boot/grub/grub.conf)。(并且,正如 ubfan1 提到的,EFI 和 BIOS 版本的 Grub 可能具有不同的功能。)我相信这是一个任意限制,也就是说,不同的 Grub 安装可以配置为使用不同的配置文件。

顺便说一句:我最近将 BIOS 系统转换为 EFI。看来磁盘(至少目前)可以在任一模式下成功启动。

如果您想创建一个可以在两种模式下启动的磁盘,我建议在 EFI 模式下安装整个操作系统,然后手动尝试添加 BIOS 版本的 GRUB(或使用 Syslinux)。我之所以这么说,是因为我在安装和排除 BIOS 引导加载程序故障方面经验丰富。EFI 专家可能会建议相反的做法。

答案3

为什么我不能(以及如何)同时安装 grub-pc 和 grub-efi 包?

实时 Ubuntu 系统

这两个软件包都可以在实时 Ubuntu 系统中安装(并且已经安装)。您的 USB 驱动器中有一个实时系统,它是从 Ubuntu iso 文件克隆而来的。

已安装 Ubuntu 系统

在当前已安装的系统版本中,您必须删除已安装的程序包才能使用另一个程序包。

我们只能猜测为什么会这样。


在两个 grub 包之间切换可以创建既可以在 UEFI 模式启动,又可以在 BIOS 模式启动的安装系统(别名 CSM 别名传统模式)。请参阅此链接

相关内容