grub2-install:“此 GPT 分区标签不包含 BIOS 启动分区”

grub2-install:“此 GPT 分区标签不包含 BIOS 启动分区”

关于这一点似乎有很多讨论,但我找不到一个简单的答案。

当我尝试安装 grub2 时出现此错误:

# grub2-install /dev/sda
Installing for i386-pc platform.
grub2-install: warning: this GPT partition label contains no BIOS Boot Partition; embedding won't be possible.
grub2-install: warning: Embedding is not possible.  GRUB can only be installed in this setup by using blocklists.  However, blocklists are UNRELIABLE and their use is discouraged..
grub2-install: error: will not proceed with blocklists.

/dev/sda 的布局如下:

Disk /dev/sda: 111.8 GiB, 120034123776 bytes, 234441648 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 7ECE06D0-9F0C-44FF-BCFB-142283172CCA

Device        Start       End   Sectors  Size Type
/dev/sda1      2048    411647    409600  200M Linux filesystem (/boot)
/dev/sda2    411648   4605951   4194304    2G Linux swap
/dev/sda3   4605952  46548991  41943040   20G Linux filesystem (/)
/dev/sda4  46548992 234441614 187892623 89.6G Linux LVM (/var)

有没有简单的方法可以解决这个问题?我知道我需要在磁盘开头创建一个小分区作为“BIOS 启动分区”。我想一个选项是将交换移动到 /dev/sda4 作为逻辑卷,并使用 /dev/sda2 作为 /boot。

或者我可以回到 grub-legacy 而不必担心这个(有吗?真的如果升级到 grub2 会带来这么多麻烦,那有什么好处吗?)。

有什么想法吗?

答案1

您首先应该确定是否要使用 BIOS/CSM/传统模式启动或 EFI/UEFI 模式启动。前者是自 20 世纪 80 年代以来 PC 的启动方式,但它是一种丑陋且粗制滥造的系统,很快就会走向灭亡。Windows 将 BIOS 模式启动与 MBR 分区表绑定在一起,而您目前并未使用 MBR 分区表(但可以使用;您的磁盘远没有大到需要 GPT)。Linux、FreeBSD 和大多数其他现代操作系统都更加灵活,并且支持从 GPT 进行 BIOS 模式启动;但有时会出现固件造成的复杂情况,当然,如果您以后决定在双启动设置中安装 Windows,则需要进行更改或妥协。

EFI/UEFI 模式启动不太复杂;但 EFI 实现的质量差异很大,而且网络上对 EFI 的总体专业知识和支持水平低于 BIOS。Windows 将 GPT 的使用与 EFI 模式启动联系起来,因此如果您希望在计算机上安装 Windows,EFI 绝对是您的不二之选。较旧的计算机仅支持 BIOS。EFI 于 2011 年中期开始在市场上流行,因此如果您的计算机比这更旧,您可能无法使用 EFI。

如果你使用 BIOS 模式启动,你应该创建一个BIOS 启动分区在磁盘上。磁盘的起始处有足够的空间用于此分区,但您需要将扇区对齐值设置为 1(通常为 2048)才能使其工作。我不知道是否可以用 来完成此操作parted,但您可以使用 来完成gdisk。(请注意,磁盘起始处的空间略小于 BIOS 启动分区建议的 1MiB 大小,但只差几个扇区。它可能工作正常,但将来可能会失败。)或者,您可以将任何分区缩小 1-2MiB 以腾出空间用于 BIOS 启动分区。此分区确实不是需要是磁盘上的第一个分区,尽管这是常规位置。

如果你使用 EFI/UEFI 模式启动,你必须创建一个EFI 系统分区 (ESP)。此分区必须是 FAT 格式,并且必须比 BIOS 启动分区大得多,因此您必须调整大小才能创建它。我建议大小为 550MiB,尽管在紧急情况下,这个大小的十分之一可能就够了。

要安装 GRUB,首先应确保已安装正确的 GRUB 包。我不确定所有发行版的命名,但在 Ubuntu 中,它将用于grub-pcBIOS/CSM/旧模式和grub-efi-amd64EFI/UEFI 模式。EFI 模式安装还需要在 EFI 模式下启动您用于安装 GRUB 的任何设备(可能是实时 CD/USB)。执行此操作可能需要使用计算机的内置启动管理器,通常通过功能键访问,但具体细节因计算机而异。

答案2

您已经有了这个小分区,因此第一个分区不是从 1 开始,而是从 2048 开始

/dev / sda1 2048 411647 409600 200M Linux file system (/boot)

您需要更改标签类型,从引导bios_grub例如通过 parted:

parted /dev/sda
set 1 boot off
set 1 bios_grub on
q

再说一遍:

grub2-install /dev/sda

答案3

如果您想使用带有旧式 BIOS 启动模式的 GPT 分区,那么您需要在想要安装 grub 的设备上创建一个几兆字节(16MiB 应该没问题并且适合未来)的 BIOS 分区grub-install

例如,使用fdisk在磁盘某处创建“BIOS 启动”类型的分区。示例输出:

# fdisk -l /dev/sda
Disk /dev/sda: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 57E16A16-36B4-4445-A216-031EF6501415

Device        Start        End    Sectors   Size Type
/dev/sda1      2048    4196351    4194304     2G Linux RAID
/dev/sda2   4196352   35653631   31457280    15G Linux RAID
/dev/sda3  35653632   37750783    2097152     1G Linux swap
/dev/sda4  37750784   37816319      65536    32M BIOS boot
/dev/sda5  37816320 1953525134 1915708815 913.5G Linux LVM

答案4

我刚刚在一台带有 GPT 磁盘(Ubuntu 18.04 Server)的 EFI 模式机器上遇到了这个问题,有一天它决定只自行启动到 GRUB shell。

不知何故,grub-pc(用于 BIOS 模式 / i386 机器)已安装,而 grub-efi 未安装。一旦确定问题,修复就很简单:

# apt install grub-efi
# update-grub
# grub-install

请注意,第一个命令卸载了 grub-pc。

相关内容