grub rescue ls – 没有显示分区?

J23*_*J23 2 grub grub2

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

\n\n
/EFI/boot/BOOTX64.EFI\n/grub/grub.cfg\n/grub/x86_64-efi/*\n\xe2\x80\xa6etc.\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
/boot/grub/bootx64.efi\n/boot/grub/grub.cfg\n/boot/grub/x86_64-efi/*\n\xe2\x80\xa6etc.\n
Run Code Online (Sandbox Code Playgroud)\n\n

该分区上还有 Windows\xe2\x80\x99 引导加载程序,格式为/EFI/Microsoft/boot.

\n\n

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

\n\n

...除了没有调出菜单之外,我最终得到了救援提示。我的假设是我只是将 grub.cfg 和模块放在错误的位置 \xe2\x80\x93 然而,\xe2\x80\x99s 真正奇怪的是,它只ls显示没有分区 \xe2\x80\x93 (hd0) (hd1)。我的期望是诸如(hd0) (hd0,msdos1)\xe2\x80\x93 之类的东西,但 grub saving 可以 \xe2\x80\x99t 似乎ls根本没有任何分区。 ls (hd0)并且ls (hd1)两者都产生 \xe2\x80\x9c 文件系统未知。\xe2\x80\x9d

\n\n

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

\n\n
1 = EFI system partition (fat32)\n2 = Veracrypted partition (with Windows installation)\n3 = Veracrypted partition (data)\n4 = Linux swap\n5 = Linux root\n6 = Linux home\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n

tel*_*coM 5

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 救援模式的另一个可能原因。

  • 编辑:感谢您关于不嵌入part_gpt的想法,我能够弄清楚:基本上,我必须明确地“grub”,而不是复制所有已在USB记忆棒上“grub安装”的grub文件-install` 直接到系统分区。据推测,当 grub-install 在 USB 记忆棒上运行时,它会看到它是 MBR 分区的,并将该模块嵌入到 bootx64.efi 中,而当在内部磁盘上运行时,它会看到它是 GPT 和嵌入的 part_gpt。这只是一个猜测,但可以解释行为和解决方案:) (2认同)