UEFI Grub 找不到配置文件

UEFI Grub 找不到配置文件

我需要使用 Grub 启动 Windows 和另外两个 Linux distor。因此,我使用以下命令将 Grub 安装在 UEFI 分区上,并使用专用分区来存储 Grub 使用的文件。

sudo grub-install --efi-directory=/mnt/efi --root-directory=/mnt/grub --bootloader-id=Grub --uefi-secure-boot --target=x86_64-efi /dev/sda

/dev/sda1mounted on/mnt/efi是我的 EFI 分区,/dev/sda2mounted on/mnt/grub是用于 Grub 文件的分区。

然而,启动 Grub 后似乎无法找到我放置在 的 grub.cfg 文件/mnt/grub,并显示默认的 Grub shell。我可以通过键入 或 来手动恢复我的configfile /efi/Grub/grub.cfg系统configfile (hd0,gpt2)/grub/grub.cfg

这是我的一些文件

$ sudo tree /mnt/efi/EFI
/mnt/efi/EFI
├── Grub
│   ├── BOOTX64.CSV
│   ├── fbx64.efi
│   ├── grub.cfg
│   ├── grubx64.efi
│   ├── mmx64.efi
│   └── shimx64.efi
└── Microsoft
    |...


$ sudo tree /mnt/grub/grub
/mnt/grub/grub
├── fonts
│   └── unicode.pf2
├── grub.cfg
├── grubenv
└── x86_64-efi
    |...

$ sudo cat /mnt/efi/EFI/Grub/grub.cfg
search.fs_uuid 3110d895-a376-484a-8dba-e0475b9a977c root hd0,gpt2
set prefix=($root)'/grub'
configfile $prefix/grub.cfg

$ sudo fdisk -l /dev/sda
Disk /dev/sda: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Disklabel type: gpt

Device          Start        End   Sectors   Size Type
/dev/sda1        2048     526335    524288   256M EFI System
/dev/sda2      526336     657407    131072    64M Linux filesystem
/dev/sda3      657408     690175     32768    16M Microsoft reserved
/dev/sda4      690176  563607551 562917376 268.4G Microsoft basic data
/dev/sda5   563607552  697825279 134217728    64G Linux filesystem
/dev/sda6   697825280  966260735 268435456   128G Linux filesystem
/dev/sda7   966260736  983037951  16777216     8G Linux swap
/dev/sda8   983037952 1117254748 134216797    64G Linux filesystem
/dev/sda9  1117255680 1385691135 268435456   128G Linux filesystem
/dev/sda10 1385691136 1402468350  16777215     8G Linux swap

我觉得我犯了一些小错误,但我在这上面花了太多时间。

答案1

GRUB 似乎grub.cfg使用绝对路径从 ESP 加载。也许 GRUB 无法判断它是从哪个目录加载的。

对于 Debian,该路径是/EFI/debian/grub.cfg.

您可以使用此命令查找特定.efi可执行文件可能正在使用的路径:

strings /boot/efi/EFI/devuan/grubx64.efi | less '+/EFI\/'

显然,您可能需要使用与上面不同的路径来访问.efi可执行文件。

似乎是一个相关的错误。

将 复制grub.cfg到预期路径似乎有效:

cd /boot/efi/EFI/
mkdir debian
cp devuan/grub.cfg debian/

当然,您的命令和路径可能会有所不同。如果grub.cfg发生变化,则副本将需要更新,因为 FAT 文件系统不支持链接。不过我的看起来像这样,所以看起来不会有太大变化:

search.fs_uuid $root_fs_uuid root mduuid/$array_uuid 
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg

答案2

在昨天解决了类似的问题之后,我找到了一个可能对您也有帮助的解决方案。我的/boot在 ext4 上,我的 和grub.cfg你的一样,将 EFI 二进制文件重定向到/boot/grub/grub.cfg.

为了解决这个问题,我手动复制/boot/grub/grub.cfg/boot/efi/EFI/ubuntu/而不是使用 grub-install 添加的“configfile”重定向。

grub EFI 二进制文件是否有可能无法读取grub.cfgext4 上的文件?或者正如尼尔·斯托克布里奇所建议的那样,这可能是一个路径问题?

编辑:在进行此更改之前分享我所看到的内容也可能会有所帮助。 Grub shell 正在加载,我能够使用命令启动 Ubuntu 22.04,但 Grub 菜单没有显示。

相关内容