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

itc*_*355 10 linux arch-linux multi-boot uefi windows-8

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

迄今为止:

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

进入拱门:

  • 在 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 出现了!

到现在为止还挺好。我将整个 W8 Boot\ 目录保存在 EFI\windows8 中,并为它设置了一个启动菜单;它启动得很好。

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

使用 live CD 重新启动到 Arch,发现 EFI 分区有错误的 FAT 表。fsck.vfat 修复了它,我发现 EFI\Microsoft\Boot 恢复到它的原始状态(所有重新查找文件都被删除并替换为 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 秒)。所以理论上我可以通过硬重置笔记本电脑而不是正常关机来解决这个问题,但这并不好。

Rod*_*ith 5

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

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

如果efibootmgr不起作用,请尝试bcfg在 EFI 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 或类似程序管理),因此如果这些实用程序不起作用,则您的固件已损坏,您可能需要考虑返回另一个型号的电脑。(如果你这样做,一定要告诉索尼你为什么退回电脑!)这种类型的问题实际上相当普遍;例如,我有一个带有“混合 EFI”的 Gigabyte 主板,它不断忘记其 NVRAM 设置。但是,至少在这个板子上,可以通过命名我的 boot manager/loader of choice 来绕过这个问题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
Run Code Online (Sandbox Code Playgroud)