带有Insyde H2O EFI BIOS的Sony VAIO无法启动进入GRUB EFI

我买了一台新的索尼Vaio S系列笔记本电脑。 它使用Insyde H2O BIOS EFI,并试图在其上安装Linux让我发疯。

root@kubuntu:~# parted /dev/sda print Model: ATA Hitachi HTS72756 (scsi) Disk /dev/sda: 640GB Sector size (logical/physical): 512B/4096B Partition Table: gpt Number Start End Size File system Name Flags 1 1049kB 274MB 273MB fat32 EFI system partition hidden 2 274MB 20.8GB 20.6GB ntfs Basic data partition hidden, diag 3 20.8GB 21.1GB 273MB fat32 EFI system partition boot 4 21.1GB 21.3GB 134MB Microsoft reserved partition msftres 5 21.3GB 342GB 320GB ntfs Basic data partition 6 342GB 358GB 16.1GB ext4 Basic data partition 7 358GB 374GB 16.1GB ntfs Basic data partition 8 374GB 640GB 266GB ntfs Basic data partition 

令人惊讶的是,磁盘上有2个EFI系统分区。 sda2分区是一个20gb的恢复分区,它使用基本的恢复接口加载窗口。 可以通过按“ASSIST”按钮而不是普通电源按钮来访问它。 我假设sda1 EFI系统分区(ESP)加载到此恢复中。

sda3 ESP为Microsoft Windows提供了更多的充实条目,实际上是Windows 7(由Windows上的bcdedit.exe确认)。 Ubuntu安装在sda6上,安装时我选择sda3作为我的启动分区。 安装程序正确创建了sda3 / EFI / ubuntu / grubx64.efi应用程序。

真正的问题:对于我的生活,我无法将其设为默认值! 我尝试创建一个名为grubx64.efi的sda3 / startup.nsh,但它没有帮助 – 在重新启动时,系统仍然启动到Windows。 我尝试使用efibootmgr,这表明它工作:

 root@kubuntu:~# efibootmgr BootCurrent: 0000 BootOrder: 0000,0001 Boot0000* EFI USB Device Boot0001* Windows Boot Manager root@kubuntu:~# efibootmgr --create --gpt --disk /dev/sda --part 3 --write-signature --label "GRUB2" --loader "\\EFI\\ubuntu\\grubx64.efi" BootCurrent: 0000 BootOrder: 0002,0000,0001 Boot0000* EFI USB Device Boot0001* Windows Boot Manager Boot0002* GRUB2 root@kubuntu:~# efibootmgr BootCurrent: 0000 BootOrder: 0002,0000,0001 Boot0000* EFI USB Device Boot0001* Windows Boot Manager Boot0002* GRUB2 

但是,在重新启动时,正如您所猜测的那样,计算机会直接重新启动回Windows。

我唯一能想到的是:

  1. sda1分区以某种方式被使用
  2. 使用grubx64.efi覆盖/EFI/Boot/bootx64.efi和/EFI/Microsoft/Boot/bootmgfw.efi [但这看起来真的很激进]。

有人可以帮帮我吗? 谢谢 – 非常感谢任何帮助,因为这个问题让我发疯!

我终于能够解决这个问题了。 我用grub64.efi替换了EFI / Microsoft / boot / bootmgfw.efi。 我将前者重命名为bootmgfw.efi.old并使用grub添加一个菜单选项到chainload中。

这意味着固件硬编码以查找microsoft windows bootloader,并且不遵守efibootmgr设置或startup.nsh。 那太可怕了。

我发现了索尼EFI启动过程的工作原理:

  1. 查看/EFI/Microsoft/Boot/fwbootmgr.efi; 如果存在,启动它。
  2. 查看/ EFI /的所有子目录中的grubx64.efi。 如果存在,请启动它。
  3. 启动/EFI/Boot/bootx64.efi
  4. 显示错误消息,例如“未找到操作系统”。

在Linux下,efibootmgr工具确实有效,但它显示了很多自动生成的废话,包括您使用过的最后一个USB驱动器。

以下是我学习所有这些的方法:

  1. 我打开了我的新机器并折叠了Windows分区,以便并排安装Linux和Mac。
  2. 我安装了Ubuntu 12.10,安装程序覆盖了fwbootmgr.efi,备份了旧的Windows引导程序。
  3. 我恢复了旧的Windows引导程序,但除了Windows之外无法启动任何东西。
  4. 我将Windows引导程序重命名为虚假的东西,然后Grub BL接管了。
  5. 我将ubuntu目录重命名为其他内容,并且Grub仍然加载,即使我已经安装了rEFInd。
  6. 我能让rEFInd做我想做的唯一方法就是:

  7. 将fwbootmgr.efi移动到其父目录; rEFInd仍然会找到它,Windows不会抱怨你重命名它。

  8. 将grubx64.efi重命名为rfgrubx64.efi或其他可识别的内容。
  9. 将rEFInd从/ EFI / refind复制到/ EFI / boot,将/EFI/refind_x64.efi重命名为* .bak,最后将/Boot/refind_x64.efi重命名为bootx64.efi。 您现在应该能够从rEFInd启动Windows BL或GRUB。 我计划将我的MacOS安装升级到Clover,并从rEFInd加载Clover。

(也许可以使用Windows启动管理器完成所有这些操作,但EeasyBCD的EFI支持仍然是我的经验。我拒绝再次触摸它。)

首先,你没有两个ESP。 ESP是分区类型代码为C12A7328-F81F-11D2-BA4B-00A0C93EC93B的分区,其分区标识为设置了“引导标志”的分区。 您的输出表明只有/ dev / sda3设置了“引导标志”,因此您只有一个ESP – / dev / sda3。 在GPT下,分区可以有名称,并且您有两个名为“EFI系统分区”的分区,但这些名称仅用于人工识别目的。 因此,我的猜测是你(或一些自动实用程序)创建了一个/ dev / sda1,目的是使它成为一个ESP,但要么设置其分区类型代码时出错,要么其他一些实用程序不正确地改变了它的类型代码C12A7328-F81F-11D2-BA4B-00A0C93EC93B与其他产品相关。

您可以通过多种方式纠正此问题。 最简单的方法是只更改/ dev / sda1的名称以避免混淆。 如果您认为/ dev / sda1没有用处,您可以备份并删除它。 这样可以避免混淆,但当然你将拥有273 MB的未使用磁盘空间。 或者,您可以将空间用于其他目的,如有必要,可以更改名称和类型代码以避免混淆。 EFI明确允许多个ESP,因此您可以更改类型代码(例如,通过使用parted设置“boot flag”)并使用两个ESP; 但这可能令人困惑。

有可能这个问题与您无法启动Linux无关,因为听起来所有相关文件都在/ dev / sda3上。 我遇到了这个问题的几个可能原因:

  • 可能是你在efibootmgr命令中输错了一些东西。 我没有看到任何明显的拼写错误,但如果GRUB二进制文件不在您指定的位置,则该命令将不起作用。 “ – gpt”和“–write-signature”选项几乎肯定是不必要的,可能会导致问题,但很可能不是。
  • 您的固件可能有一个错误,导致efibootmgr命令的影响是暂时的。 尝试重新启动,然后键入“sudo efibootmgr -v”以查看您创建的条目是否在重新启动后幸存。
  • 您的固件可能存在导致引导顺序变量被忽略的错误。 我有这样的主板; 它按创建引导条目的顺序引导,而不是BootOrder变量指定的顺序。 要解决此错误,您必须删除所有条目并在要使用的引导顺序中重新创建它们。
  • 您的grubx64.efi二进制文件可能会以固件拒绝启动它的方式损坏,因此它会继续执行引导顺序中的下一项。

您可以尝试调整efibootmgr命令,找到新的二进制文件,或者测试这些可能性。 如果所有其他方法都失败了,我建议您执行以下操作:

  1. 使用efibootmgr或您的固件删除所有引导条目(如果它提供了执行此操作的界面)。
  2. 将grubx64.efi复制到ESP上的EFI / Boot / bootx64.efi。
  3. 如果重新启动时仍然获得Windows,请将EFI / Microsoft / Boot / bootmgfw.efi重命名为EFI / Microsoft / bootmgfw.efi。

这应该使用引导加载程序的默认名称(EFI / Boot / bootx64.efi)进行GRUB引导。 这样做的一个问题是GRUB可能没有Windows的工作条目。 您可以手动创建一个; 像这样的条目应该工作:

 menuentry "Windows 7" { set root='(hd0,gpt3)' chainloader /EFI/Microsoft/bootmgfw.efi } 

或者,您可以将rEFIt或rEFInd安装为EFI / Boot / bootx64.efi。 请注意,其站点提供的rEFIt二进制文件不适用于基于UEFI的PC; 你需要使用Ubuntu存储库中的版本。 rEFInd是rEFIt的一个分支,具有许多错误修复和更新,包括更好的UEFI支持。 (大约两年前似乎已经放弃了。)因此,我建议使用rEFInd而不是rEFIt – 但我是rEFInd的维护者,所以我不是这个分数的独立观察者。 不幸的是,AFAIK rEFInd尚未包含在Ubuntu存储库中,因此您必须手动下载并安装它。

这是一个新的索尼vaio e系列的起始位置。 谢谢你的回答。

为了防止有人需要演练,这对我有用:

从USB和win7安装ubuntu 12.04。

从live-session安装/ dev / sda3

  • 将EFI / ubuntu / grubx64.efi复制到EFI / Boot /
  • 将EFI / Boot / bootx64.efi重命名为bootx64.efi.old
  • 将EFI / Boot / grubx64.efi重命名为bootx64.efi

现在它直接启动到grub2,但没有win7条目

加载ubuntu后我编辑了

/etc/grub.d/40_custom

加入

 menuentry "Windows 7" { set root='(hd0,gpt3)' chainloader /EFI/Microsoft/Boot/bootmgfw.efi } 

之后

 sudo update-grub 

一切正常

我建议两种不同的选择:

  1. 不要覆盖windows mbr,而是用它来启动grub

  2. 在启动选项中将bios设置(启动时为f2f3 )从UEFI更改为LEGACY,然后通常会启动以前安装的最后一个系统

  1. 从liveCD / liveUSB运行Boot-Repair
  2. 单击“ Recommended Repair按钮。 (这将自动为grub-efi安装正确的参数,包括SecureBoot参数(如果需要),并在UEFI固件锁定到Windows文件时重命名EFI文件)。 指出出现任何问题时将显示的URL。

启动修复