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


10

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

至今:

  • 使用Recovery Media将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 ---出现了rEFInd!

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

但是,重新启动后,一切都出现了问题-“找不到操作系统”,而不是任何引导加载程序(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秒左右)。因此,从理论上讲,我可以通过硬重置笔记本电脑而不是正常关机来解决此问题,但这并不好。


恐怕我无能为力,我没有UEFI机器来测试东西。即使这可能不是最理想的方式,您也可以尝试在Windows引导加载程序中添加Linux条目并在那里启动,但是我没有在UEFI计算机中尝试过。有关过程,请参见此处:superuser.com/a/499652/18050另外,我始终使用Archboot来安装Arch,如果使用的是官方映像,请尝试一下,因为该安装将UEFI系统考虑在内:bbs.archlinux。 org / viewtopic.php?id = 150833
Xandy 2012年

这听起来像Arch Linux和Windows 8所做的冲突。您是否尝试过另一个发行版来统治它而不是有问题的Arch Linux?
Ramhound 2012年

感谢easyBCD的建议,我一定会尝试一下。我不在乎正在使用什么启动管理器,因此,如果Windows能够做到这一点,我会非常高兴。明天将发布结果,当有空闲时间再次下班弄乱时:) @Ramhound现在这会很痛苦,我不认为这与Arch有关-rEFInd是一个单独的项目,我已经手动安装(跟着那个男人)。
itchy355

Answers:


5

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

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

如果efibootmgr不起作用,请尝试bcfg此Arch Wiki页面上描述的EFI Shell程序中使用

如果这些步骤不起作用,请尝试使用efibootmgrbcfg删除该条目bootmgfw.efi从NVRAM,然后安装rEFInd作为EFI/BOOT/bootx64.efi。从理论上讲,计算机随后可能会启动rEFInd,它应该可以正常工作并启用任何一个OS的启动。但是,有两个潜在的陷阱:固件可能会EFI/Microsoft/boot/bootmgfw.efi胜过EFI/BOOT/bootx64.efi;Windows可能会检查其引导选项,并在引导时将其自身的引导加载程序添加回NVRAM。尽管如此,这种方法还是值得尝试的。

EFI规范要求计算机遵守其NVRAM设置(由efibootmgrLinux,bcfgEFI Shell或类似程序管理),因此,如果这些实用程序不起作用,则固件已损坏,您可能需要考虑返回计算机用于另一种型号。(但是,请务必告诉Sony为什么要退回计算机!)这种类型的问题实际上相当普遍;通常情况下,这种问题很常见。例如,我有一个带有“混合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。Google搜索可能会带来一些好处。

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

powercfg /h off

确实,Windows 8在冷关机时不会损坏任何东西。我不想发布错误,因为毕竟我是搞砸了他们的引导程序的人:)
itchy355 2012年

我试过弄乱了efibootmgr; 它表明引导管理器的数量异常多(超过了我的期望的3个),这使我可以更好地查看磁盘;而且我发现实际上我有两个 EFI分区:-x EFI system partition在GDisk中只有第二个(/ dev / sda2)显示为,因此让我认为这是正确的分区。另一个只是具有相同大小和标准EFI文件结构的FAT分区(sda1)。
itchy355

如果我更改引导顺序以先加载rEFInd,然后再加载名为``sony original”的文件,然后再加载其他文件,则它将自身覆盖为默认值(windows,sony original,其他(refind))PS;考虑到所有这些,“,windows”是我的覆盖bootmgfw.efi
itchy355

1
在此期间,我尝试了powercfg /h offw8,并修复了W8破坏EFI分区的问题。这就是我一直在寻找的圣杯,似乎:)谢谢谢谢!
itchy355

我很高兴听到这个消息powercfg /h off解决了您的主要问题。您可能会想知道我遇到了一些UEFI实现似乎已编码为将名为“ Windows Boot Manager”的引导加载程序移至其列表顶部的信息。因此,使用重命名引导加载程序efibootmgr可以使您能够以更合理的文件名安装rEFInd(或任何您喜欢的文件)。
罗德·史密斯Rod
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.