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

Rob*_*t S 52 boot grub partitioning lvm2

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

当我尝试安装 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.
Run Code Online (Sandbox Code Playgroud)

这是 /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)
Run Code Online (Sandbox Code Playgroud)

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

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

想法?

Rod*_*ith 32

您应该首先确定是要使用 BIOS/CSM/legacy 模式引导还是 EFI/UEFI 模式引导。前者是个人电脑自 1980 年代以来一直采用的启动方式,但它是一个丑陋且骇人听闻的系统,不久就会走上渡渡鸟的路。Windows 将 BIOS 模式启动绑定到您没有使用的 MBR 分区表(但可以;您的磁盘远不足以需要 GPT)。Linux、FreeBSD 和大多数其他现代操作系统更加灵活,并支持从 GPT 启动 BIOS 模式;但有时会出现固件造成的复杂情况,当然,如果您以后决定在双启动设置中安装 Windows,您将需要进行更改或妥协。

EFI/UEFI 模式启动不那么简单;但是 EFI 实现的质量差异很大,并且 Web 上 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/legacy 模式和grub-efi-amd64EFI/UEFI 模式。EFI 模式安装还需要在 EFI 模式下启动用于安装 GRUB(大概是 live CD/USB)的任何东西。执行此操作可能需要使用计算机的内置启动管理器,该管理器通常通过功能键访问,但详细信息因计算机而异。

  • 正如 Flow 在他的回答中建议的那样,BIOS 引导分区的分区类型必须设置为 0x04,即“BIOS 引导”,否则 grub 将无法安装。例如可以使用 fdisk 的“t”命令进行设置。 (3认同)
  • 在 EFI 模式安装中,GRUB 2 不使用 BIOS 引导分区。如果 GRUB 需要一个,那么您很有可能是在 BIOS 模式下启动的,而不是在 EFI 模式下。检查您的启动选项以确保您的 CSM 被禁用,如我关于该主题的网页所述:http://www.rodsbooks.com/efi-bootloaders/csm-good-bad-ugly.html (2认同)

Flo*_*low 16

如果您想在旧式 BIOS 引导模式下使用 GPT 分区,那么您需要在要使用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
Run Code Online (Sandbox Code Playgroud)

  • 只是确认一下:您保存了我的设置...我在一对旧 Barracuda 上安装了 Ubuntu 20.04,配置为在镜像 LVM 逻辑卷上提供单个/文件系统,但没有意识到需要有一个单独的 BIOS 引导分区使用GPT分区。我刚刚从 LVM 逻辑卷和物理卷中删除了 4 MB,调整了其上的 ext4 文件系统的大小,在两个磁盘的末尾创建了 BIOS 引导分区,用“gdisk”和“grub-install /dev/”将它们标记为这样安全数据管理局;grub-install /dev/sdb` 现在可以工作了,允许我启动系统。 (3认同)

小智 6

你已经有了这个小分区,所以 kk 第一个分区不是以 1 开头而是以 2048 开头

/dev / sda1 2048 411647 409600 200M Linux file system (/boot)
Run Code Online (Sandbox Code Playgroud)

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

parted /dev/sda
set 1 boot off
set 1 bios_grub on
q
Run Code Online (Sandbox Code Playgroud)

然后再说一遍:

grub2-install /dev/sda
Run Code Online (Sandbox Code Playgroud)


小智 5

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

mkfs.vfat -F32 /dev/sdXY
Run Code Online (Sandbox Code Playgroud)

应该为你解决它

另外,启动标志必须在parted中打开:

set 1 boot on
Run Code Online (Sandbox Code Playgroud)