具有Insyde H2O EFI BIOS的Sony VAIO无法启动到GRUB EFI


12

我购买了新的Sony 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的恢复分区,可通过基本的恢复界面加载Windows。可以通过按下“ 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 [但这似乎很激进]。

有人可以帮我吗?谢谢-非常感谢您的帮助,因为这个问题使我发疯!


我在Sony Vaio S上采用了相同的方法-用GRUB替换MS .efi文件,将MS .efi的副本保留在另一个目录中,然后链式加载到该副本以启动Windows。通常这是可行的,但是一个令人讨厌的副作用是我无法从休眠状态恢复Windows-它的引导加载程序出错,需要重新启动。

Answers:


11

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

这意味着该固件经过硬编码以查找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目录重命名为其他名称,即使安装了rEFInd,Grub仍会加载。
  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支持仍然是一团糟。我拒绝再次触摸它。)


请注意,我还尝试从Windows修改BCD [使用bcdedit.exe]设置,以将Windows引导管理器设置为grub,但这仍然行不通-我不得不用grub的.efi替换.efi文件。 。
Rohan Dhruva 2012年

5

首先,您没有两个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设置“启动标志”)并同时使用这两个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
}

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


非常感谢你,罗德!但是,sda1本身就是ESP(默认情况下可能无法引导),该ESP用于引导进入应急分区(20Gb SONSYS)。我知道这是一个奇怪的设置,但是索尼出于某种原因选择了这种方式。与电源按钮相反,按下“ ASSIST”按钮将调用该引导程序。
Rohan Dhruva

感谢您提供信息Rod,我遇到了同样的问题,请按照您的步骤进行部分修复。GRUB工作正常,然后我尝试为Win7添加条目,而GRUB没有显示,只是直接启动到Ubuntu。任何想法为什么以及如何解决?另外我的EFI分区是sda1,Win是sda3,应该在此行“ set root ='(hd0,gptX)'”中的X等于1还是3?我都尝试过!
barro32

@Rod,我应该在哪里添加菜单项(Windows 7)?在\ etc \ default \ grub中?
alekhine 2012年

4

在新的索尼vaio e系列中,此处的起始位置相同。感谢Rod的回答。

万一有人需要演练,这对我有用:

从USB和Win7一起安装了ubuntu 12.04。

从实时会话挂载/ 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

我建议两种不同的选择:

  1. 不要覆盖Windows MBR,而是用它来启动GRUB

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


MBR是不是适用于EFI的计算机
本·沃伊特

0
  1. 从liveCD / liveUSB 运行引导修复
  2. 点击Recommended Repair按钮。(这将自动为grub-efi安装正确的参数,包括SecureBoot参数(如果需要),并在UEFI固件锁定到Windows文件的情况下重命名EFI文件)。指出出现问题时出现的URL。

开机修复

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.