笔记本电脑上预装了 Windows 8 和 Linux UEFI 双启动

笔记本电脑上预装了 Windows 8 和 Linux UEFI 双启动

我正在尝试在预装 Windows 8 的新款 Sony Vaio E14 上设置 Windows 8 和 Arch Linux。

迄今为止:

  • 使用恢复介质将 W8 安装到我的新 SSD(已切换为原始 HDD)
  • 缩小了 W8 分区,删除了恢复分区,禁用了交换
  • 确认 W8 启动正常

关于 Arch:

  • 在 bios 中禁用安全启动
  • 确认 W8 启动正常
  • 从 CD 启动 Arch,并将所有内容安装到第 4 和第 5 个分区
  • 为 EFIstub 内核引导加载程序设置 rEFInd

之后情况变得更糟。我无法启动除 Windows 8 之外的任何其他系统(尽管我很高兴它们至少还能正常工作)。

尝试过:

  • 创建 EFI\refind\ 并将 .efi 放在那里(根据 Arch 手册
  • 覆盖 EFI\boot\bootx64.efi
  • 覆盖 EFI\Microsoft\Boot\bootmgr.efi
  • 覆盖 EFI\Microsoft\Boot\bootmgfw.efi --- YAY rEFInd 出现了!

到目前为止一切顺利。我保留了 EFI\windows8 中的整个 W8 Boot\ 目录,并为其设置了启动菜单项;它启动得很好。

但是,重新启动后,一切都出错了——“未找到操作系统”而不是任何引导加载程序(refind 或 w8)。

使用实时 CD 重新引导到 Arch,发现 EFI 分区有错误的 FAT 表。fsck.vfat 修复了这个问题,我发现 EFI\Microsoft\Boot 恢复到了原始状态(所有 refind 文件都被删除并替换为 W8 引导加载程序)。我再次覆盖了它们,然后 rEFInd 正确显示,Arch 完全可以引导。

之后,我尝试将 EFI\Microsoft\Boot\bootmgfw.efi 重命名为 bootmgfw.001.efi(然后将 refind 的 .efi 复制到 bootmgfw.efi 并保留其他所有文件),但结果完全相同。尝试将 GPT EFI 分区标记为只读,结果相同。

现在我有点倒霉了。Arch 启动正常,W8 也正常,但它在启动过程中破坏了 EFI 分区。

感谢您的任何想法,谷歌搜索让我走到了这一步,但我找不到更好的了。

PS -- Windows 8 可能会在关机时破坏分区 -- 当我在 W8 中命令关机时,它花费的时间异常长(大约半分钟,而不是 5 秒)。所以理论上我可以通过硬重置笔记本电脑而不是正常关机来解决这个问题,但这并不好。

答案1

可能值得在 Windows 中进行一次冷关机(按下电源按钮)以查看之后是否可以启动,仅作为测试。显然,您不想定期执行此操作,但确认 Windows 是否正在覆盖您修改后的 ESP 数据可能会有所帮助。如果它在 Windows 关机时确实损坏了文件系统,那么这听起来像是 Windows 错误,应该报告给 Microsoft。如果它只是替换文件bootmgfw.efi,那么从技术上讲这属于 Microsoft 的职权范围,因此它实际上不是一个错误。

不过,从更广泛的角度来看,您是否尝试过使用 Linux 的程序将 rEFInd 以其自己的名称(例如,在 ESP 上)efibootmgr注册到 EFI ?rEFInd 的文档中对此进行了描述,EFI/refind有关手动 Linux 安装的部分。或者,您可以使用install.sh脚本进行安装。这两种方法都需要 EFI 模式启动才能成功,但您应该能够使用 rEFInd CD 执行此操作,或者在 EFI 模式下从紧急磁盘启动。

如果efibootmgr不起作用,请尝试使用bcfgEFI shell 程序,如这个 Arch wiki 页面。

如果这些步骤不起作用,请尝试使用efibootmgrbcfg消除bootmgfw.efi从 NVRAM 中删除 的条目,然后将 rEFInd 安装为EFI/BOOT/bootx64.efi。理论上,计算机可能会启动 rEFInd,它应该可以正常工作并能够启动任一操作系统。不过,有两个潜在的陷阱:固件可能更喜欢EFI/Microsoft/boot/bootmgfw.efiEFI/BOOT/bootx64.efi并且 Windows 可能会检查其启动选项并在启动时将其自己的引导加载程序添加回 NVRAM。不过,这种方法值得一试。

EFI 规范要求计算机遵守其 NVRAM 设置(由efibootmgrLinux、bcfgEFI shell 或类似程序管理),因此如果这些实用程序不起作用,则您的固件已损坏,您可能需要考虑退回计算机换成其他型号。(不过,如果您这样做,请务必告诉 Sony 您退回计算机的原因!)这种问题实际上相当常见;例如,我有一块 Gigabyte 主板,带有“混合 EFI”,它总是忘记其 NVRAM 设置。不过,至少对于这块主板,可以通过命名我选择的启动管理器/加载程序来绕过该问题EFI/BOOT/bootx64.efi

如果您无法使其工作并且不愿意或无法更换计算机,我还有其他两个解决方法的建议:

  • 您可以随身携带一张装有 rEFInd 的可启动 CD 或 USB 闪存驱动器,并在需要启动 Linux 时使用它。不过,这可能需要使用功能键来告诉计算机每次启动时从可移动介质而不是硬盘启动。
  • 您可以从磁盘中擦除分区,使用 MBR 重新分区,然后在 BIOS 模式而不是 EFI 模式下重新安装两个操作系统。这将消除任何 EFI 不稳定性,并使您能够使用 BIOS 模式 GRUB 作为引导加载程序。不过,这可能需要 Windows 8 安装程序的零售副本;至少对于 Windows 7,OEM 副本在安装模式(BIOS 与 EFI)方面不灵活。或者,可以从 EFI 模式启动转换为 BIOS 模式启动而无需重新安装。相反的切换是可能的(我本来要发布一个描述它的网站的链接,但该网站不允许我发布超过两个链接;抱歉),我似乎记得在某个地方看到过进行 EFI 到 BIOS 转换的描述,但我手边没有 URL。谷歌搜索可能会找到一些信息。

我偶然发现这一页在发布我的第一个答案后,它至少有部分问题可能由另一个原因引起:显然,Windows 8 使用的关机方法更类似于挂起到磁盘的操作。结果是,如果您关闭 Windows 然后启动 Linux,则已安装的分区可能会损坏。虽然 ESP 通常不会安装在 Windows 7 中,但据我所知,这可能是 Windows 8 的做法不同,也可能是 ESP在 Windows 7 中安装,但似乎被隐藏了。无论如何,您可以通过在管理员命令提示符窗口中键入以下命令来禁用 Windows 8 的此功能:

powercfg /h off

相关内容