我想安装grub-pc
和grub-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-bin
和grub-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
至于为什么实施限制,我只能推测。一些可能的原因:
如果你看看这个答案,似乎建议从以 EFI 模式启动的系统内部安装 EFI 版本的 Grub。因此,EFI Grub 有可能以系统特定的方式安装。
Ubuntu 开发人员可能不想在同一系统上支持多个引导加载程序。此类设置可能难以测试和提供 QA。
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 别名传统模式)。请参阅此链接。