Windows 7 + Ubuntu 12.04 + 无效的 EFI 文件路径 + 启动修复 + Grub 许多条目

Windows 7 + Ubuntu 12.04 + 无效的 EFI 文件路径 + 启动修复 + Grub 许多条目

我有一台 ASUS N56VZ,配备 Intel Core i7 - 3610QM,预装了 Win 7 Home Premium x64。这台电脑配备 EFI,而不是传统的 BIOS。

当我购买它时,我有 3 个可见分区。C(系统)- 包含窗口和程序;D(数据)- 空白,我存储我的个人数据和电影;E(恢复)- 从华硕到恢复计算机的软件。

因此,由于我正在攻读计算机科学硕士学位,因此我需要安装 Ubuntu。我从 Win 7 中创建了一个分区,为 Ubuntu 12.04 保留了大约 35 GB 的空间。

一切顺利,安装成功。我重新启动后就可以进入 Ubuntu。启动时显示 4 个条目:2 个用于 Ubuntu,一个用于 Windows,一个用于 Windows 恢复。

当我尝试进入 Windows 7,“Windows 7(加载器)”时,收到以下消息:

error: Invalid EFI file path.
Press any key to continue...

用于恢复的那个也无法启动。

于是我再次进入 Ubuntu,并使用修复工具,它在 GRUB 上插入新条目。现在我有 11 个条目!

其中一个新条目名为“Windows UEFI 加载程序”。旧条目“Windows 7(加载程序)”仍然无法使用。这个新条目“Windows UEFI 加载程序”让我进入了 Windows。然后我就在这里停下来了。

我想要一个仅具有两个所需选项的单一启动管理器。

我认为这并不完美,但我不知道如何解决它。

此外,如果我在 Windows 7 上将其置于休眠状态,则当我打开计算机时,我会看到黑屏和一条消息,提示无法恢复会话。(我不确定确切的措辞。-我不得不重新启动并再次启动 Windows。)

这是一个主要问题。我也想解决这个问题。

这是运行启动修复后的链接:

这是我今天做的,通过启动修复并请求启动信息摘要:

答案1

引导修复工具会创建太多引导加载程序文件的备份副本,从而导致问题越来越严重。有很多方法可以解决这个问题。下面是其中一种方法:

  1. 备份您的 EFI 系统分区 (ESP),它/dev/sda1安装在/boot/efi。基于文件的备份(例如,使用tarcp)应该可以。如果情况不妙,这将使您能够恢复。
  2. 安装我的rEFInd 启动管理器。最简单的方法是安装 Debian 包。
  3. 重新启动。rEFInd 应该会出现并显示 Ubuntu 和 Windows 的启动选项。
  4. 依次测试每个 rEFInd 选项,记下每个选项下指定的文件名及其功能。(有些选项可能缺少这样的文件名。带有 Windows 图标的选项可能就是其中之一,但它可能会启动 GRUB。)确保您可以从 rEFInd 启动 Linux 和 Windows。
  5. 在 Linux 中,打开 shell 并更改为目录/boot/efi,即存储引导加载程序的 EFI 系统分区 (ESP)。
  6. 删除测试时无法正常工作的引导加载程序,或将其复制到备份位置(例如/boot/efi/backups)。对重复项执行相同操作 — 例如,如果两个引导加载程序都启动了 GRUB,则可以删除或移动其中一个。
  7. 将实际启动 Windows 的引导加载程序(如果它由 rEFInd 主菜单中的文件名标识)移动到/boot/efi/EFI/Microsoft/Boot/bootmgfw.efi。这是它应该属于的地方。Boot Repair 将其复制到另一个文件名,因此您只需将其复制回来。
  8. 如果您可以通过vmlinuz-3.5.0-23-generic条目直接启动 Linux,您可能可以删除 GRUB,或者取消注释该dont_scan_files/boot/efi/EFI/refind/refind.conf并添加grubx64.efi到其列表中。

如果一切顺利,您现在应该可以通过 rEFInd 进行启动,它应该会向您显示一个更小的启动选项列表。如果仍然有太多,您可以尝试追踪错误的文件并删除它们(如果您认为合适),或者使用dont_scan_filesdont_scan_dirsdont_scan_volumes中的选项将剩余项目排除在启动列表之外。如果您的系统有这样的符号链接,/boot/efi/EFI/refind/refind.conf这种“黑名单”可能有助于将 到 的链接排除/vmlinuz在启动列表之外。/boot/vmlinuz-3.5.0-23-generic

请注意,rEFInd 每次启动时都会扫描引导加载程序,因此当您安装新内核时它会自动选择新内核。

如果您希望继续使用 GRUB,您可以执行与我的程序概念上类似的操作,但您需要仔细阅读文件/boot/grub/grub.cfg并将其与您的笔记进行交叉引用,了解哪些引导加载程序条目有效,哪些无效,以找出要删除的文件。然后您需要使用update-grub重写grub.cfg文件。您当前的grub.cfg文件还包含用于启动 Windows 的 BIOS 模式条目,这些条目毫无用处,我不知道如何避免update-grub拾取它们,如果它们确实是这样进入的。

祝你好运!

答案2

这里您会发现与 GRUB/UEFI 相关的问题的链接。也可能是主板制造商实施的 UEFI 不当,导致与 Linux 结合时出现错误。此外,还有一些处理 Win7 和 8 的具体技巧,例如在安装 Linux 之前进行碎片整理和关闭快速启动等。

检查您的 Win7 是否列在/启动/efi/EFI/并查看 GRUB2 中的 chainloader 部分。总而言之,对于经验丰富的 Linux 用户来说并不太复杂,但对于 Linux 新手来说很难。最好寻求帮助,因为您需要阅读大量资料;这不是一键式解决方案。

答案3

您只需编辑 /boot/grub/grub.cfg 来删除无用的条目。

您可以使用该gksudo gedit /boot/grub/grub.cfg命令来实现这一点。

相关内容