grub rescue ls – 没有显示分区?

grub rescue ls – 没有显示分区?

我正在尝试为 UEFI Windows/Linux 多重引导设置构建自定义 grub 菜单。我已经通过 USB 驱动器成功测试了菜单,其中包含:

/EFI/boot/BOOTX64.EFI
/grub/grub.cfg
/grub/x86_64-efi/*
…etc.

从该驱动器启动时,我可以毫无问题地访问菜单。接下来,我将 grub 转移到我的 PC 的 EFI 系统分区:

/boot/grub/bootx64.efi
/boot/grub/grub.cfg
/boot/grub/x86_64-efi/*
…etc.

该分区上还有 Windows 的引导加载程序,采用/EFI/Microsoft/boot.

最后,我使用 Windows 实用程序 BOOTICE(或只是系统 BIOS)来添加\boot\grub\bootx64.efi.我重新启动,grub 出现了。

...除了没有调出菜单之外,我最终得到了救援提示。我的假设是我只是将 grub.cfg 和模块放在错误的位置 - 然而,真正奇怪的是它ls没有显示分区 - 只是(hd0) (hd1)。我的期望是诸如(hd0) (hd0,msdos1)等之类的东西 - 但 grub 救援似乎根本无法在ls任何分区上进行。 ls (hd0)两者ls (hd1)都会产生“文件系统未知”。

我的系统包含一个物理磁盘,带有分区:

1 = EFI system partition (fat32)
2 = Veracrypted partition (with Windows installation)
3 = Veracrypted partition (data)
4 = Linux swap
5 = Linux root
6 = Linux home

为什么 grub 能够从 EFI 系统分区启动 - 但随后无法看到该分区或任何其他分区?更重要的是,如何才能像 USB 一样从内部驱动器获取其菜单?

答案1

ls (hd0)意味着您正在尝试将整个磁盘作为单个文件系统进行访问;如果磁盘以任何方式分区,则该消息(hd0): Filesystem is unknown.是正常的且符合预期。

相反,只需输入ls (hd0 没有右括号,然后按 TAB 键。如果 GRUB 可以识别分区类型,那么它应该列出 GRUB 已知的分区及其文件系统类型。

您的问题可能是 GRUB 期望其配置文件位于 中<partition root>/grub/grub.cfg,而不是位于 中<partition root>/boot/grub/grub.cfg,模块目录也是如此。

GRUBbootx64.efi文件包含 GRUB 核心映像,以及一些可选的 GRUB 模块。如果这组嵌入式模块不包含part_gpt,GRUB 将无法识别 GPT 分区表,这将导致无法访问包含其余 GRUB 模块的文件系统。这可能是进入 GRUB 救援模式的另一个可能原因。

答案2

感谢 telcoM 关于 bootx64.efi 中嵌入式模块的信息,我能够找到解决方案:基本上,grub-install我必须明确地grub-install直接复制到内部系统分区,而不是复制 USB 记忆棒上的所有 grub 文件。

据推测,当 grub-install 在 USB 记忆棒上运行时,它发现它是一个 MBR 分区设备,并且没有在 bootx64.efi 中嵌入 part_gpt 模块,这就是为什么它无法识别任何内部分区 - 而当grub-install 直接在内部磁盘上运行,它看到 GPT 并嵌入该模块。无论哪种情况,解决方案都不是从 USB 记忆棒复制 grub 文件,而是直接将 grub 安装到内部分区。

答案3

我遇到了由 msdos 分区引起的内核错误,它导致我的计算机说找不到磁盘,只能启动到 grub。在 grub 中,我运行了 ls 命令,但没有列出任何内容。这是我为让 ls 显示列表所做的事情......

 Go to your grub command line type:

  set root=ls     ; Hit enter

然后再次运行 ls 命令,所有分区将被列出。如果您遇到 msdos 内核错误,这将有所帮助,您将能够找到并修复 msdos 分区导致 grub 失控的损坏分区。

相关内容