我有一台预装了 Windows 8 的联想 IdeaPad Y400。我想在双启动配置中同时运行 Ubuntu。过去一周我一直在折腾,在各种配置中重新安装了 Windows 和 Linux,我几乎成功了,但似乎遇到了 Grub 问题。
对于我最近的尝试,我采取了以下步骤:
- 已禁用安全启动
- 从隐藏的恢复分区重新镜像 Windows 8,有效地将机器恢复到出厂状态
- 在 BIOS 中激活了一个名为“Legacy Support”的选项(或者现在是 UEFI?)
- 从 USB 启动 Ubuntu 13.04 x64,选择“与 Windows 一起安装”并接受所有默认选项
- 重启后,发现可以启动Ubuntu,但无法启动Windows
- 进入 Ubuntu 后,我使用推荐的设置运行 Boot Repair 并接受所有默认设置。
- 当启动修复完成后,我看到了以下消息:
[当前使用的操作系统 - Ubuntu 13.04] 的启动文件距离磁盘的起始位置较远。您的 BIOS 可能无法检测到它们。您可能需要在创建 /boot 分区(EXT4,>200MB,磁盘的起始位置)后重试。这可以通过 gParted 等工具执行。然后通过 [Boot Repair] 的 [Separate /boot partion:] 选项选择此分区。(https://help.ubuntu.com/community/BootPartition)
- 我按照消息中 URL 上的说明,在驱动器开始处附近创建了一个 1GB EXT 4 分区
- 当我尝试再次运行 Boot Repair 时,“Grub 位置”选项卡上的“单独的 /boot 分区”选项被禁用。
- 新的分区是 /dev/sda11,标签为 GRUB。
- 重新启动时,我收到以下错误消息:
错误:未找到文件‘/boot/grub/i386-pc/normal.mod’。grub rescue>
- 但是,如果我通过按 F12 手动选择启动分区,则可以顺利启动 Windows。从启动设备菜单中选择 Ubuntu 会给我一个 Grub 菜单,其中包含以下选项:
Ubuntu
Ubuntu 的高级选项
Windows UEFI 恢复 bootmgfw.efi
Windows 启动 UEFI 恢复
Windows UEFI 恢复 LrsBootmgr.efi
Windows 启动 UEFI 恢复 bkpbootx64.efi
Windows 恢复环境(加载器)(在 /dev/sda3 上)
Windows 8 (加载程序) (在 /dev/sda5 上) 系统设置
- 从此菜单中选择 Ubuntu 可以让我进入我的 Ubuntu 桌面。我还没有尝试其他选项,因为担心会丢失我所取得的进展。
因此看起来我已经成功实现了机器的双重启动,但是 Grub 由于某种原因损坏了。
我的当前分区方案可以在以下位置看到: http://paste.ubuntu.com/5948753/
提前致谢 - Jonathan
答案1
首先,激活“旧版支持”是错误的做法。在预装 Windows 8 的电脑上,激活固件中的旧版支持可能会引发新的问题,事实上,这正是你所做的。(话虽如此,有时确实需要激活此支持,但它更有可能引发问题而不是解决问题。)
其次,“启动文件……远离磁盘起始位置”的消息几乎肯定是转移注意力的借口。这可能是某些磁盘大小和某些 BIOS 的一个因素,但您使用的是 EFI 实现,而不是 BIOS。EFI 应该能够从当前可用磁盘上任何位置的内核启动。当然,您的 1TB 磁盘应该不会出现问题。因此,从那时起您所做的一切在最好的情况下都是不必要的,在最坏的情况下会产生问题。
尽管您在固件中激活了旧版支持,但可以想象,在您运行 Boot Repair 后,您的系统会启动 Windows。不过,您没有说明当时是否尝试这样做,因此不清楚这样做是否会成功,或者您是否只是尝试修复“远离磁盘起始位置”这个非问题,而没有进行测试。
在某个时候,您似乎安装了 BIOS(旧版)版本的 GRUB,这可能是您默认启动的版本(以获取提示grub rescue>
)。可以想象,禁用固件中的旧版支持将导致系统直接启动到 Windows 或直接启动到 GRUB 的 EFI 模式安装。如果它启动到 Windows,您仍然可以通过按 F12 进入 GRUB。如果它启动到 GRUB,那么您应该能够启动 Linux,甚至可能是 Windows。(我建议尝试前两个 Windows 选项。最后三个 Windows 选项不太可能做任何有用的事情。)
如果你尝试这样做,并让 GRUB 默认运行,你可以尝试使用GRUB 定制器稍微清理一下 GRUB 菜单。不过我对这个软件不是很熟悉,所以我不能更详细地告诉你如何使用它。
您可以尝试的另一件事是安装我的rEFInd 启动管理器。如果您安装了 Debian 软件包,并且一切运行正常,这将为您提供一个菜单,其中包含适用于 Windows、适用于 Ubuntu(通过 GRUB)以及适用于 Ubuntu 的选项。然后,您可以通过删除目录树.efi
中不必要的文件/boot/efi/EFI
或编辑/boot/efi/EFI/refind/refind.conf
和取消注释并调整dont_scan_files
或dont_scan_dirs
选项来删除多余的启动项。
您可能还想检查一下您的分区。您的 Boot Repair 输出表明您有四个 NTFS 分区,我怀疑其中至少有一个是不需要的/不必要的,但我不能确定。您也不应该需要,/dev/sda6
或者/dev/sda11
在您修复了所有问题后。
答案2
罗德·史密斯 (Rod Smith) 报道了大部分问题。
磁盘启动距离很远只是个幌子。我还没有看到过 UEFI 系统无法启动。那只是对一些存在 grub 启动问题的 BIOS 系统的检查。
您向新的 grub 分区添加了启动标志,因此它会尝试将其视为 efi 分区。(从 Rod Smith 那里我了解到,每个 gpt 分区驱动器只能有一个 efi 分区。)Grub 无论如何都不会使用启动标志。并且只有在具有 MBR 分区的 BIOS 上,您才会在 Windows NTFS 分区上设置启动标志。
Grub2 的 os-prober 确实存在错误,并且仍然会创建无法正常工作的 BIOS 类型启动项。grub2 的 os-prober 创建了错误样式 (BIOS) 链式启动项 https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/1024383 来自 Boot-Repair 的应该起作用的条目类型。菜单项“Windows UEFI bootmgfw.efi”{菜单项“Windows Boot UEFI loader”{不起作用的条目类型:'Windows ...)(在/dev/sdXY 上)'