我需要一台 Gentoo 13 机器来测试平台上的一些软件。我不是 Gentoo 的常客,所以我很讨厌他们的安装程序。我现在 配置引导加载程序 | 安装 GRUB2,但失败了:
# grub2-install --target=x86_64-efi --efi-directory=/boot
Installing for x86_64-efi platform.
grub2-install: error: /boot doesn't look like an EFI partition.
我回溯到准备磁盘 | 默认:使用 parted 对磁盘进行分区,看来我已经按照指示设置好了一切:
(chroot) Gentoo-2012 / # parted
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit mb
(parted) print
Model: ATA VMware Virtual I (scsi)
Disk /dev/sda: 21475MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1.05MB 3.15MB 2.10MB grub bios_grub
2 3.15MB 131MB 128MB ext2 boot boot, esp
3 131MB 2572MB 2441MB linux-swap(v1) swap msftdata
4 2572MB 21474MB 18902MB ext4 rootfs msftdata
以上结果来自手册的同一章,章节将文件系统应用于分区和激活交换分区。
我也关注了评论EFI 目录不应该是 /boot 而是 /boot/efi从引导加载程序问题和疑问在 Gentoo 论坛上,但导致了同样的错误:
(chroot) Gentoo-2012 / # mkdir /boot/efi
(chroot) Gentoo-2012 / # grub2-install --target=x86_64-efi --boot-directory=/boot --efi-directory=/boot/efi
Installing for x86_64-efi platform.
grub2-install: error: /boot/efi doesn't look like an EFI partition.
这是什么问题?如何解决?
fdisk
以下是上述信息的对应视图gparted
。
(chroot) Gentoo-2012 / # fdisk -l
Disk /dev/loop0: 3.3 GiB, 3567640576 bytes, 6968048 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
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 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: 52F5571A-808B-XXXX-XXXX-XXXXXXXX
Device Start End Sectors Size Type
/dev/sda1 2048 6143 4096 2M BIOS boot
/dev/sda2 6144 255999 249856 122M EFI System
/dev/sda3 256000 5023743 4767744 2.3G Microsoft basic data
/dev/sda4 5023744 41940991 36917248 17.6G Microsoft basic data
我还验证了该软件包sys-boot/grub
支持 EFI:
(chroot) Gentoo-2012 / # cat /etc/portage/make.conf | grep GRUB
GRUB_PLATFORMS="emu efi-32 efi-64 pc"
然后我执行了emerge --ask --newuse sys-boot/grub
,,emerge -pv sys-boot/grub
然后重建了grub
。
答案1
答案很简单。EFI 系统分区 (ESP) 应该是 FAT32(对于大多数合适的 UEFI,FAT16 甚至 FAT12 也适用;它们大多显示vfat
在 Linux 中)而不是 ext2:
mkfs.fat -F32 /dev/sda2
值得一提的是,如果您不打算安装 grub i386-pc(用于 BIOS/CSM 启动),则不需要“BIOS 启动”分区。只有GPT 上的grub i386-pc
(而不是 grubx86_64-efi
或)才需要它。i386-efi
是否使用 ESP 并不重要/boot
。如果使用,则应运行:
grub2-install --efi-directory /boot
如果你将它安装上去/boot/efi
,那么你应该运行:
grub2-install --efi-directory /boot/efi
--boot-directory /boot
/boot
是隐含的(即默认);无论是 ESP,另一个单独的分区,还是文件系统上的目录都没有关系/
。
您甚至不需要再次 chroot 来执行grub2-install
;例如,您在 上sda4
为 安装了 分区;然后在 上安装了 ESP,那么您可以简单地运行:/
/mnt
sda2
/mnt/boot/efi
grub2-install --boot-directory /mnt/boot --efi-directory /mnt/boot/efi
虽然grub2-mkconfig
据我所知需要在 chroot 中运行。但如果您打算grub.cfg
自己编写一个简单干净的程序(这是使用 grub2 的唯一优雅方式),那么这与您无关。
答案2
问题似乎在于混合和匹配 BIOS、EFI、MBR 和 GPT。我尝试按照指南使用 GPT,但由于我经验不足,我无法解决一些依赖关系。我甚至不清楚内核是否支持 GPT(通过配置选项CONFIG_EFI_PARTITION
)。
当我放弃 GPT 和 EFI 并切换到纯 BIOS 和 MBR 时,我能够启动生成的机器。BIOS 和 GPT 应该是一个有效的组合,但我想知道它在实践中是否有效(例如,参见引导加载程序选项)。
以下是我可以运行该机器的配置:
$ parted
GNU Parted 3.2
Using /dev/sda
(parted) print
Model: ATA VMware Virtual I (scsi)
Disk /dev/sda: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 135MB 134MB primary ext2 boot
2 135MB 19.5GB 19.3GB primary ext4
3 19.5GB 21.5GB 2012MB primary linux-swap(v1)
分区 1 是/boot
,分区 2 是/
,分区 3 是swap
。
答案3
我刚刚遇到这个问题,发现 /boot 存在,但我的启动分区没有挂载到它。只需挂载启动分区即可解决这个问题
mnt /dev/sda1 /boot
答案4
错误:
$> grub2-install --target=x86_64-efi --efi-directory=/boot
Installing for x86_64-efi platform.
grub2-install: error: /boot doesn't look like an EFI partition.
检查 grub2 的源代码,它似乎要求有/boot
自己的文件分配表 (FAT) 兼容的单独分区,可能出于安全原因,以前不是这样的。grub2 屈服于主板造成的安全条件。
我在 2020 x86_64 PC 桌面上执行此操作,并且我选择不创建单独的/dev/sda1
启动分区/dev/sda
(在此fdisk /dev/sda
步骤中标记为可启动)。
解决方案1:
在主板的启动 BIOS/EFI/UEFI 实用程序中禁用任何 Bios 安全启动设置,并查找要禁用的任何启动级别安全设置。假设您不喜欢安全性。它可能是F7
-> boot
->下的设置secure boot
。
解决方案2:
接受 grub 的新安全要求,并按照手册创建您自己的单独分区/boot
和 grub 配置步骤。
EFI 系统分区 (ESP) 必须是FAT
文件系统变体(有时显示为vfat
在 Linux 系统上)。官方 UEFI 规范表示FAT12
、16
或32
文件系统将被 UEFI 固件识别,尽管建议 ESP 使用 FAT32。愤怒的声音说,许多月前的可选步骤现在成了必需步骤。
解决方案 3:
该fdisk
工具似乎已被弃用并被标记为删除。手册上说:“如果你使用,你将遇到问题fdisk
,你只能靠自己了。”他们的解决方案是向上滚动手册并按照使用说明parted
创建分区,并使用他们建议的标志标记启动分区bios_grub
。然后,grub 会自动知道在哪里查找以及要做什么。