首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Grub只在shell模式下,错误的根和前缀设置

Grub只在shell模式下,错误的根和前缀设置
EN

Ask Ubuntu用户
提问于 2020-10-18 13:28:15
回答 2查看 3.4K关注 0票数 1

我正在用Windows 10和PopOS使用grub2双引导笔记本电脑。

问题是grub没有显示OS选择菜单,而是转到grub。如何配置/安装grub2以自动显示选择菜单?

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

代码语言:javascript
复制
grub>set prefix=(hd0,gpt5)/boot/grub
grub>insmod normal
grub>normal

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

grub开头的路径如下:

代码语言:javascript
复制
cmdpath=(hd0,gpt1)
prefix=(hd0,gpt1)/boot/grub
root=hd0,gpt1

gpt1是windows引导程序,所以我想它是在寻找它的配置,却找不到它。

我尝试重新安装grub包,重新安装grub,更新它,并运行ubuntu引导修复工具,这是各种有类似问题的在线线程推荐的(都是单独的):

代码语言:javascript
复制
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中设置了正确的值:

代码语言:javascript
复制
search.fs_uuid 1672afd3-3d1c-462d-9284-1f0d6b1e07e9 root hd0,gpt5 
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg

我的分区布局(德文):

代码语言:javascript
复制
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引导程序,grub作为ubuntu,以及引导grub的硬盘驱动器。

还禁用了安全启动,否则grub拒绝加载内核。

EN

回答 2

Ask Ubuntu用户

发布于 2020-12-10 16:42:24

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

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

在引导系统上,将此命令输入终端:

代码语言:javascript
复制
sudo cp -r /boot/efi/EFI/pop /boot/efi/EFI/ubuntu

或者另一种

代码语言:javascript
复制
sudo cp -r /boot/efi/grub /boot/efi/EFI/ubuntu

这样做的目的是:

当grub启动时,它在定义路径($prefix)上搜索一个D7文件。在pop-os上,这个路径通常是从grub加载的分区上的/EFI/ubuntu。当您启动系统时,efi分区会自动挂载到/boot/efi。因此,用于grub的/与用于操作系统的/boot/efi/相同。将文件移动到/boot/efi/EFI/ubuntu使grub能够在路径/EFI/ubuntu中找到它。

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

注意:当我在grub中执行ls -la /时,它将EFI文件夹显示为efi,这使我感到非常困惑。但显然grub并不那么在意资本化。

票数 3
EN

Ask Ubuntu用户

发布于 2020-10-22 17:36:24

好吧,我想出来了:

显然,我的UEFI不理解一个硬盘上的多个EFI分区,默认为Windows创建的分区,这可能是因为一个古老的ubuntu安装,在它上有一个grub。

对于任何发现这个问题的人来说,都有类似的问题:确保您正在引导的引导映像实际上是您想要的。为此,在grub中执行set并查看cmdline参数。它将告诉您启动了哪个分区。

票数 0
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1284787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档