grub2-install:错误:/ boot / efi在新的Gentoo安装上看起来不像EFI分区


4

我需要一台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来自Bootloader在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/grubemerge -pv sys-boot/grub然后重建grub


尝试mkdir,然后重新启动,并执行grub2-install --target=x86_64-efi --boot-directory=/boot --efi-directory=/boot/efi
约瑟夫A.

@ bytec0de - 谢谢。如果我重新启动,那么机器将无法启动,因为它没有启动加载程序。在一个可以继续的状态下,我对目前的操作系统感觉好多了。如何强制重新读取磁盘分区(需要做什么)?
jww 2016年

@ bytec0de - 我尝试了重启,但它不会重启。错误消息是“找不到操作系统”。我可以问你......你知道问题是什么,或者你在猜?我能说的最好,两天的工作现在已经消失了......
jww

这是一个有根据的猜测@jww,这就是我评论的原因。
约瑟夫A.

Answers:


5

答案很简单。EFI系统分区(ESP)应该是FAT32(FAT16甚至FAT12也适用于大多数正确的UEFI;它们主要显示vfat在Linux中)而不是ext2:

mkfs.fat -F32 /dev/sda2

FWIW,如果您不打算安装grub i386-pc(用于BIOS / CSM启动),则不需要“BIOS启动”分区。它仅在GPT上需要grub i386-pc(但不是grub x86_64-efii386-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你的分区/,打开/mnt; 然后,安装sda2,你的ESP /mnt/boot/efi,然后你可以简单地运行:

grub2-install --boot-directory /mnt/boot --efi-directory /mnt/boot/efi

虽然grub2-mkconfig需要在chroot AFAIK中运行。但是如果你打算grub.cfg自己写一个简单而干净的(这是使用grub2的唯一优雅方式),那么这将是你不在乎的问题。


谢谢汤姆。看起来他们的手册在这个领域几乎被打破了。让我尝试一下这些东西,然后再回复你。
jww 2016年

再次感谢汤姆。我表演了mkfs.fat -F32 /dev/sda2。我根据手册重新安装了一些东西,并且能够运行grub2-install --target=x86_64-efi --boot-directory=/boot --efi-directory=/boot/efi/一些警告。grub2-install完成“安装完成。未报告错误。” 但是,它无法启动,并产生错误“未找到操作系统”。难怪这些家伙不会制作执行安装的LiveCD。根据他们的指示,它无法完成。
jww 2016年

根据手册?那是什么意思?告诉mount你在OR ORDER中运行的命令。考虑到你使用的params,你有chroot吗?通常你不能真的忽略“警告” grub2-install,所以请说明它们到底是什么。
Tom Yan

再次感谢汤姆。对于那个很抱歉; 我以为你熟悉这些程序。根据准备磁盘安装磁盘 安装。Chroot是根据安装Gentoo基础系统进入的 挂载必要的文件系统。我不得不Chroot因为没有它我得到了一个错误。错误是“grub2-install:error:/usr/lib/grub/x86_64-efi/modinfo.sh不存在。”
jww 2016年

这不是关于“程序”或我是否熟悉它们。这是你如何安装你的设备。所以你mount /dev/sda4 /mnt/gentoo; mount /dev/sda2 /mnt/gentoo/boot/efi在这个ORDER中并且chroot到了/mnt/gentoo吗?再一次,你提到的警告是什么?
Tom Yan

0

问题似乎是混合和匹配BIOS,EFI,MBR和GPT。我试图按照指南使用GPT,但有一些我无法解决的依赖,因为我太缺乏经验。我甚至不清楚内核是否支持GPT(通过配置选项CONFIG_EFI_PARTITION)。

当我放弃GPT和EFI并切换到纯BIOS和MBR时,我能够启动生成的机器。BIOS和GPT应该是一个有效的组合,但我想知道它是否在实践中有效(例如,参见Bootloader Options)。

这是我能够运行机器的配置:

$ 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


您甚至不需要GPT来获得符合标准的UEFI,并且您可以在GPT磁盘上安装分区。您刚刚没有在UEFI的NVRAM中成功注册grub的EFI二进制文件,因为警告grub2-install清楚地告诉您。无论原因是什么,--removable都应该能够帮助你(除非它共享一个Windows的ESP)。
Tom Yan

0

我刚刚遇到这个问题,发现/ boot已存在,但没有安装我的启动分区。只需安装启动分区来修复此问题

mnt /dev/sda1 /boot
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.