我最近决定尝试一下 Linux,安装我认为最用户友好的发行版 Ubuntu。在将 Windows 7 安装切换到 SSD 后,我有一块备用硬盘。因此,我觉得在空硬盘上尝试 Linux 相对安全。
我使用推荐的设置安装了 Ubuntu(在摸索了好多分区和交换空间之后,我认为,设法在没有引导加载程序的情况下安装 Ubuntu,一切似乎都很好,我很高兴地发现一个提供多个启动选项的菜单,包括另一个磁盘上新安装的 Ubuntu 和 Windows 7。
当我选择 Ubuntu 时,它可以完美加载和运行。当我选择 Win 7 时,它给出了无效 EFI 错误。当我将启动顺序更改为首先使用 SSD 时,Win 7 会像往常一样加载。我的安装没有问题,我猜问题出在启动管理器上。
在查看了有关 EFI 问题的类似问题和帖子后,我安装并运行了引导修复,选择了推荐/默认选项。它提到了一个与 GPT 有关的问题(我现在记不太清楚了),并建议启用单独的 EFI 分区选项,我照做了,然后重新运行,但无济于事。我还没有尝试错误消息中的其他建议,即使用 GParted 之类的东西创建分区。
我尝试从 debian 包安装 rEFInd,但是出现错误并且没有完成。
如果能得到关于如何解决我的问题或正确安装 rEFInd(如果有帮助的话)的任何建议,我将不胜感激。
我不想每次想要更改操作系统时都必须更改启动顺序,尤其是当我使用启动时无法检测到的无线键盘时。
这是一台 64 位机器。
http://paste.ubuntu.com/5758960/- 我的启动修复输出。
编辑:尝试重新安装 rEFInd,显然这次成功了,尽管 Windows 7 选项只将我送入我认为是 GRUB 的界面,但 Windows 7 选项仍然给出了无效的 EFI 错误。
我在本帖中读到,EFI 文件路径无效,Windows 加载程序可能已被重命名。按照说明重命名文件只会在从 rEFInd 启动时产生错误。grubx64.efi 文件是否相关?
编辑 2:SSD 上的 Windows 文件夹中有一个 bootmgfw.efi,是否值得尝试将 grub.cfg chainloader 参数指向该文件夹?
答案1
您的 Windows 安装在 MBR 磁盘上。鉴于 Microsoft 将分区表类型(MBR 与 GPT)与启动模式(BIOS/CSM/legacy 与 EFI/UEFI)联系起来,这意味着 Windows 几乎肯定是在 BIOS 模式下安装的。您已打开 Windows 启动加载程序,这一事实/dev/sdb
进一步/dev/sdc
支持了这一分析。将 BIOS 模式的 Windows 与 EFI 模式的 Linux 混合在一起很棘手,GRUB 无法处理。
最简单的解决方案(但不保证一定有效)是编辑文件/boot/efi/EFI/refind/refind.conf
(或您安装 rEFInd 的任何位置)。取消注释该scanfor
行并确保hdbios
在选项中列出。如果您很幸运,这将在 rEFInd 中创建一个新图标,使其能够将启动过程重定向到 BIOS 模式的引导加载程序。但是,如果您的固件缺少 CSM,这将不起作用;如果您的 CSM 设置为仅从 启动,它也不会起作用/dev/sda
。不过,这是一个很容易尝试的方法,如果它有效,它应该可以让一切正常运行。请注意,如果您选择这种方法,您可能需要删除目录/boot/efi/EFI/Microsoft
(来自 Linux),因为它显然不包含真正的 Windows 引导加载程序,只是 Boot Repair 创建的 GRUB 副本。(这就是从 rEFInd 中选择 Windows 会启动 GRUB 的原因。)
另一个解决方案是安装 BIOS 模式版本的 GRUB(从软件包中安装grub-pc
;安装时会自动卸载 EFI 模式版本的 GRUB)并重新配置固件以仅在 BIOS/CSM/旧模式下启动。该任务的后半部分无法详细描述,因为具体操作方法因计算机而异。
如果所有这些都失败了,您可能需要/dev/sda
从 GPT 转换为 MBR。您可以这样做gdisk
:启动gdisk
磁盘,键入r
以进入恢复和转换菜单,键入g
以从 GPT 转换为 MBR,键入p
以查看分区表以验证所有分区都已包含在内,然后键入w
以保存更改。然后您需要重新安装 BIOS 模式版本的 GRUB。(整个过程基本上是让计算机以 BIOS 模式而不是 EFI 模式启动的最后努力。)
答案2
您的 Windows 以 Legacy 模式安装,但 Ubuntu 以 UEFI 模式安装。这无法正常工作。
你需要将 Ubuntu 转换为传统模式。
要做到这一点:
- 通过分区,删除您的 sda1 分区。在释放的空间中,创建一个 BIOS-Boot 分区(未格式化的文件系统,
bios_grub
标志)。 - 然后运行 Boot-Repair 的
Recommended Repair
答案3
毫无疑问,“chainloader +1”对于 EFI 启动来说是错误的,但我认为 boot-repair 已将它们修复为类似“chainloader (${root})/EFI/Microsoft/Boot/bkpbootmgfw.efi” 请注意名称中的“bkp”(可能在末尾),这是原始的 Windows 启动加载程序。您应该在新的 ubuntu 磁盘上有一个单独的 efi 分区,但安装程序可能实际上安装了 ssd 上的那个(如果您从“try”桌面运行安装,您可以准备好一个 shell 来卸载错误的 efi 并安装正确的 efi)。如果新磁盘上的 EFI 为空,只需手动设置它 - 复制 SSD 上的那个就可以了。现在,我认为 12.04.2 的 grub.cfg 文件位于 EFI 分区中,而不是 /boot/grub 中,所以也许这就是 boot-repair 错过修复的原因。检查两个文件 /boot/grub/grub.cfg 和 /boot/efi/EFI/ubuntu/grub.cfg,并修复 EFI 路径中的一个(如果这是为您修复的一个启动修复,应该能够复制另一个)。13.04 改变了一些东西,所以 EFI 路径 grub.cfg 会拉入另一个。