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

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

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

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

在 chrooted 环境中手动运行grub-install /dev/sda+后,它会在恢复模式下启动 grub,并提示“未找到文件”。update-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

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

因此我无法理解任何说明如何安装支持 EFI 的 Grub2 的指南。他们都希望我将 EFI 分区挂载在 /boot/efi 上。我也无法直接创建 EFI 分区,因为大多数指南都说它应该是第一个分区(至少必须是主分区),但如您所见,我已经有一个分区 1。

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

如果没有,创建 EFI 分区能解决问题吗?我可以使用分区 4 吗?

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

更新:

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

新的 BootInfo 可以在这里找到:http://paste.ubuntu.com/1012223/

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

Operating system not found.

更新2(解决方案):

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

我遇到的问题是,我意外地将驱动器的启动标志更改/dev/sda6逻辑分区。BIOS 在它想要启动的硬盘上搜索启动标志,但只查找基本的分区。如果找不到启动标志,它会跳过硬盘。如果找不到任何驱动器或介质来启动,您会看到错误“未找到操作系统”。

答案1

硬盘肯定是为 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 问题。

我看到的最大线索是,来自启动信息脚本输出:

=> 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.

请特别注意对 的引用(,msdos6)/root/grub。在 Boot Info Script 输出的后面,有一个 /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 模式下启动该文件也会不存在)。

答案2

帮助部分链接至早期(已删除?)答案描述如何使用 UEFI BIOS 启动系统。这就是启动 Linux 的含义”天生地“。

如果在您的 Thinkpad 上可用,另一种选择可能是使用 CSM 或与其等效的功能。这是兼容性支持模块。这是英特尔术语。(UEFI BIOS 规范由英特尔开发。

CSM 允许具有 UEFI BIOS 的系统启动仅知道如何与传统 BIOS 交互的传统(非 UEFI)操作系统。

我的理解是,只能使用所谓的普通的(即传统 BIOS)如果您可以使用 CSM 之类的东西,则可以在 UEFI 硬件上使用 GRUB 工具。

更新:

在仔细查看 OP 分区表之前,我写下了我之前的建议。

显然,驱动器上的 MBR 分区是由 Lenovo 放置在那里的。因此,Thinkpad Edge 必须已经具备某种 BIOS 兼容性,才能允许启动 MBR 分区驱动器。

如果确实如此如果是,则删除当前分区并使用 GPT不是是一条好路。

我建议在进行任何重大更改之前,您首先要了解系统当前的运行情况。您能收集系统的 BootInfo 摘要吗?您可以通过在连接到 Internet 时使用 Live CD/USB 进行引导,选择Try Ubuntu,然后使用 中概述的步骤来执行此操作这个答案

笔记:此时我建议只收集信息。在更好地了解自己的情况之前尝试应用修复可能只会破坏其他东西。


我同意Rod Smith 的分析您的 BootInfo 摘要。Ubuntu 已安装在分区/dev/sda6。GRUB 并且似乎在上grub.cfg设置正确 。问题是您的启动顺序目前如下:/boot/grub//dev/sda6

  • GRUB 引导加载程序从 的 0 扇区 (MBR) 加载。它将控制权转移到位于 '/dev/sda' 的 1 扇区中的/dev/sdaGRUB 。core.img
  • 加载core.img器对文件系统有足够的了解,可以从它认为的 GRUB 所在的位置加载 GRUB 的其余模块(,msdos6)/root/grub
  • core.img当无法从以下位置加载 GRUB时,GRUB 进入救援模式(,msdos6)/root/grub

更新:比较老的新的糕点箱


我对您的两个 pastebin 进行了文件比较。我在下面列出了我认为的显著差异。

  • 07 号线
    以前,扇区 1 中的 GRUBcore.img会查找(,msdos6)/root/grub。现在它会查找(,msdos6)/boot/grub。换句话说,您通过重新安装 GRUB 解决了试图更正的问题。

  • 47 行
    core.img我无法解释为什么会发生这种情况,但是除了显然仍存在于第 1 扇区中的 启动文件之外,GRUB 还添加/boot/grub/core.img/dev/sda6。(也许这与下一个更改有关?)

  • 77 和 81 号线
    之前/dev/sda1被标记为引导旗帜。现在引导标志位于您的 Ubuntu 分区上/dev/sda6。我认为这可能是导致您启动问题的原因。尝试切换引导返回到驱动器上标有的第一个 NTFS 分区系统驱动看看这是否有帮助。(我不认为这会造成任何伤害。)

  • 154、155 和 537 号线(旧)523 号线(新)
    设置“电喷“在以前版本的 pastebin 中,现在似乎使用了旧版 BIOS GRUB 的值。特别是,在 部分下,PARTITIONS & DISKS:该分区sda6以前具有属性grub-efi。现在为grub-pc

还有一些其他更改似乎不值得详细描述。例如,您对文件的编辑已丢失。文件已恢复为其默认安装内容。此外,重新安装后的文件中缺少/etc/default/grub菜单项。memtestgrub.cfg

相关内容