Grub2 EFI:我的 EFI 分区在哪里?

lee*_*mes 1 partitioning boot grub2 uefi

我已经使用 USB 棒在我的 Thinkpad Edge (UEFI) 上安装了 ubuntu 12.04。我猜它是使用 EFI 安装的,因为出现了一个 GRUB 菜单,其中包含启动实时系统、安装或检查磁盘的选项。

当我启动笔记本电脑时,grub 只显示其命令行提示符“grub>”。

在chroot 环境中手动运行grub-install /dev/sda+update-grub后,它会在恢复模式下启动 grub,并显示“找不到文件”。

磁盘分区如下:

/dev/sda1:    ntfs,  1.5GB, SYSTEM DRV
/dev/sda2:    ntfs,  150GB, Windows7 OS
/dev/sda3:    extended
  /dev/sda6:  ext4,  140GB, Ubuntu 12.04
  /dev/sda5:  ntfs, 10.7GB, Lenovo Recovery
/dev/sda4:    ntfs, 16.8GB, a custom additional partition
Run Code Online (Sandbox Code Playgroud)

我猜测标有“SYSTEM DRV”的分区可能是 EFI 分区,但后来我读到 EFI 分区的类型是 FAT32。我这里没有任何 FAT32 分区!

所以我无法遵循任何解释如何安装具有 EFI 支持的 Grub2 的方法。他们都希望我将 EFI 分区挂载到 /boot/efi。我也不能只创建一个 EFI 分区,因为在大多数 How-Tos 中他们说它应该是第一个分区(至少它必须是主分区),但正如你所看到的,我已经有了一个分区 1。

难道只能在 EFI 硬件上使用普通的 Grub2 工具吗?

如果没有,创建一个 EFI 分区会解决问题吗?我可以为此使用分区 4 吗?

可以在此处找到使用本文创建的我的BootInfohttp : //paste.ubuntu.com/1011739/。请注意,它是由 Ubuntu Live USB 驱动器制作的,因此您应该忽略此驱动器。/dev/sdb

更新:

由于 EFI 似乎不是这里的问题,我使用 .grub 重新安装了(非 EFI-)grub boot-repair

可以在此处找到新的 BootInfo:http ://paste.ubuntu.com/1012223/ 。

现在的问题是,BIOS 无法启动,但出现错误:

Operating system not found.
Run Code Online (Sandbox Code Playgroud)

更新 2(解决方案):

当您在遇到相同问题(未找到操作系统)时阅读此问题时,您可能会在阅读答案时只见树木不见森林,因此我在此处重复解决方案:

我的问题是,我不小心将驱动器的引导标志更改为/dev/sda6,这是一个逻辑分区。BIOS 在它想要启动的硬盘驱动器上搜索启动标志,但只在分区中查找。如果找不到引导标志,它会跳过硬盘驱动器。如果找不到任何驱动器或媒体来启动,您会看到错误“找不到操作系统”。

小智 6

硬盘绝对是为 BIOS 式启动设置的。这方面的具体证据包括:

  • 分区表是 MBR。尽管理论上可以从 MBR 分区表以 EFI 模式启动,但据我所知,Windows 不支持此配置。当然它的安装程序没有;Windows 安装程序支持 MBR-on-BIOS 或 GPT-on-EFI,但不支持 MBR-on-EFI 或 GPT-on-BIOS。
  • /dev/sda 上没有 ESP。(/dev/sdb1 上有 EFI 启动文件,但它看起来像 USB 闪存驱动器,而不是常规启动磁盘。)
  • 引导信息脚本输出将 GRUB 标识为安装在 /dev/sda 的 MBR 中。这与 BIOS 模式 GRUB 安装一致。
  • 启动信息脚本输出已将 /Windows/System32/winload.exe 识别为 /dev/sda2 上的启动文件。如果这是 Windows 的 EFI 安装,您会在某处看到对 winload.efi 的引用。

因此,无论问题的根源是什么,它似乎都与 EFI 没有任何关系;这是一个直接的 GRUB-on-BIOS 问题。

我从 Boot Info Script 输出中看到的最大线索是:

=> Grub2 (v1.99) is installed in the MBR of /dev/sda and looks at sector 1 of 
   the same hard drive for core.img. core.img is at this location and looks 
   for (,msdos6)/root/grub on this drive.
Run Code Online (Sandbox Code Playgroud)

请特别注意对 的引用(,msdos6)/root/grub。稍后在引导信息脚本输出中,/dev/sda6 上有一个引导文件列表((,msdos6)在 GRUB 中)。此列表包括/boot/grub/grub.cfg,但没有提及root目录中的任何内容。实际上,该root目录(不要与/名称发音为“root”的目录混淆)是超级用户的主目录,它通常不保存引导文件。因此,我怀疑 GRUB 安装错误。也许你使用了选项grub-install您没有提到并且不合适,或者安装脚本中可能存在错误。无论如何,我建议使用在基于 BIOS 的计算机上执行此操作的常用过程重新安装 GRUB。但是请注意,如果您的紧急系统以 EFI 模式启动,则可能会造成复杂情况,因此您应该确保以 BIOS 模式启动您的紧急系统。

您可以通过查找/sys/firmware/efi目录来检查 Linux 中的引导模式。如果它存在,则您已在 EFI 模式下启动。如果它不存在,则您可能已在 BIOS 模式下启动(尽管在某些情况下,即使您已在 EFI 模式下启动,该文件也会不存在)。