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


41

对此似乎有很多讨论,但我找不到简单的答案。

当我尝试安装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会带来很多麻烦,这真的有好处吗?)。

有什么想法吗?

Answers:


23

您首先应该确定是要使用BIOS / CSM /旧模式启动还是EFI / UEFI模式启动。前者是自1980年代以来PC一直在启动的方式,但它是一个丑陋而骇人听闻的系统,不久以后就会像渡渡鸟一样流行。Windows将BIOS模式的启动与您未使用的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-pc用于BIOS / CSM /传统模式以及grub-efi-amd64EFI / UEFI模式。EFI模式安装还需要引导您以EFI模式安装GRUB(可能是实时CD / USB)所使用的任何内容。为此,可能需要使用计算机的内置启动管理器,通常可以通过功能键访问该启动管理器,但是具体情况因一台计算机而异。


感谢您的帮助。我在虚拟机上工作时有些混乱。当我尝试在“生产”计算机(具有两个硬盘驱动器)上执行此操作时,遇到了许多问题:grub2-install grub-setup=/bin/true /dev/sdagrub2-install: error: More than one install device?.。在我正在运行的VM上,起始扇区标记为32,但在生产计算机上,起始扇区标记为2048。不知道这是否相关。
罗伯特S

正如Flow在他的回答中所建议的那样,BIOS引导分区的分区类型必须设置为0x04,即“ BIOS引导”,否则grub无法安装。例如,可以使用fdisk的“ t”命令进行设置。
user1225999

有没有办法在没有 BIOS引导分区的情况下安装grub 2 ?我只想使用UEFI。
CMCDragonkai

1
在EFI模式下,GRUB 2不使用BIOS引导分区。如果GRUB要求提供一个,则可能是您以BIOS模式而不是EFI模式启动的。按照我的主题网页上的描述,检查启动选项以确保禁用了CSM:rodsbooks.com/efi-bootloaders/csm-good-bad-ugly.html
Rod Smith,

6

如果要在旧式BIOS引导模式下使用GPT分区,则需要在要安装grub的设备上创建一个数MB的BIOS分区(16MiB应该很好,并且可以将来使用)grub-install

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

# 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

3

启动分区必须格式化为fat32,它才能正常工作

mkfs.vfat -F32 /dev/sdXY

应该为您修复

引导标志也必须分开:

set 1 boot on
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.