Grub 仅在 shell 模式下,根和前缀设置错误

Grub 仅在 shell 模式下,根和前缀设置错误

我正在使用 grub2 对装有 Windows 10 和 PopOS 的笔记本电脑进行双启动。

问题是 grub 不显示操作系统选择菜单,而是直接进入 grub shell。如何配置/安装 grub2 以自动显示选择菜单?

我可以按如下方式手动加载 Grub 菜单,然后按预期运行,查看 popOS、高级 popOS、Windows、系统设置,甚至是我配置的自定义“关机”菜单项/etc/grub.d/40_custom

grub>set prefix=(hd0,gpt5)/boot/grub
grub>insmod normal
grub>normal

当检查 grub 加载的值时,问题似乎是所有路径都指向第一个分区(windows 引导加载程序),因此指向无处。

grub 启动的路径如下:

cmdpath=(hd0,gpt1)
prefix=(hd0,gpt1)/boot/grub
root=hd0,gpt1

gpt1是 Windows 引导加载程序,所以我推测它正在寻找它的配置但没有找到它。

我尝试重新安装 grub 包,重新安装 grub,更新它并运行 ubuntu 启动修复工具,正如各种在线帖子中提到的类似问题所建议的那样(全部单独):

sudo apt install --reinstall grub-common grub-efi-amd64-bin grub-efi-amd64-signed grub-efi-amd64 grub2-common
sudo grub-install /dev/sda
sudo update-grub2

所有这些都有效并报告了成功但并没有改变任何事情。

我还检查了是否/boot/efi/EFI/pop/grub.cfg设置了正确的值:

search.fs_uuid 1672afd3-3d1c-462d-9284-1f0d6b1e07e9 root hd0,gpt5 
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg

我的分区布局(德语):

Festplatte  /dev/sda:  256GB
Sektorgröße (logisch/physisch): 512B/4096B
Partitionstabelle: gpt
Disk-Flags: 

Nummer  Anfang  Ende   Größe   Dateisystem  Name                          Flags
 1      1049kB  106MB  105MB   fat32        EFI system partition          boot, esp
 2      106MB   123MB  16,8MB               Microsoft reserved partition  msftres
 3      123MB   202GB  202GB   ntfs         Basic data partition          msftdata
 5      202GB   256GB  53,2GB  ext4
 4      256GB   256GB  537MB   fat32                                      boot, esp

我推测 grub2 位于分区 4 中。

我的 UEFI 显示 3 个启动选项,Windows 引导加载程序、Ubuntu 的 grub 以及仅启动 grub-shell 的硬盘。

安全启动也被禁用,否则 grub 将拒绝加载内核。

答案1

显然 OP 已经解决了他们的问题,但对于仍然发现此问题的人来说:

我遇到了一个非常类似的问题,我的$prefix变量指向了错误的目录。我通过将文件移动grub.cfg到 中定义的路径来解决这个$prefix问题。在 pop-os 上,该路径位于/EFI/ubuntuefi 分区上。

在启动的系统上在终端输入此命令:

sudo cp -r /boot/efi/EFI/pop /boot/efi/EFI/ubuntu

或者

sudo cp -r /boot/efi/grub /boot/efi/EFI/ubuntu

它的作用是:

grub.cfg当 grub 启动时,它会在定义的路径 ( )处搜索文件$prefix。在 pop-os 上,此路径通常/EFI/ubuntu位于 grub 加载的分区上。当您启动系统时,efi 分区会自动挂载到/boot/efi。因此,/对于 grub 来说,这与您的操作系统相同/boot/efi/。将文件移动到/boot/efi/EFI/ubuntu可使 grub 在路径 处找到它/EFI/ubuntu

我希望这是合理的。这只是我的理解,我可能错了。

注意:当我ls -la /在 grub 中执行此操作时,它将EFI文件夹显示为efi,这确实让我感到困惑。但显然 grub 并不真正关心大写字母。

答案2

好的,我明白了:

显然,我的 UEFI 不理解一个硬盘上的多个 EFI 分区,并且默认使用 Windows 创建的分区,这可能是因为安装了旧的 ubuntu,上面有 grub。

对于遇到类似问题的人,请确保您正在启动的启动映像确实是您想要的。通过set在 grub shell 中执行并查看cmdline参数来做到这一点。它会告诉您启动了哪个分区。

相关内容