如何从我的新efi文件中将HP笔记本电脑启动到grub?

我有一台HP Pavilion Sleekbook 14笔记本电脑,我用原装windows 8安装了Ubuntu 12.10双启动。我使用boot-repair设置启动进入grub。

我的问题是我无法直接启动创建的新efi文件。 我查看了bios屏幕中的启动选项,但它并没有让我选择Ubuntu。 我可以启动到Ubuntu的唯一方法是在打开系统电源时按F9,然后手动导航到ubuntu efi文件。 这有效,但如果我没有密切关注,它将启动进入Windows。

在我完成运行boot-repair后,它告诉我从sda2 / EFI / ubuntu / shimx64.efi启动我看到一些建议,我应该移动这个文件代替windows bootmgfw.efi,但我担心我会破解东西而不能启动Windows 8安装。 虽然我已经不喜欢win8甚至超过win7,但我确实需要它来完成一些任务……

我的启动修复细节在这里: http : //paste.ubuntu.com/1418009/

当我尝试双启动Ubuntu 12.04.3 LTS和Windows 8时,我的HP Pavilion g6遇到了同样的问题。也就是说,即使在“成功”运行Boot-Repair之后,我仍然将笔记本电脑直接启动到Windows 8中。如果我在HP符号出现之前按下F9,我能够进入启动菜单(HP的菜单?我不知道……)并从那里选择“Ubuntu”条目,然后将我带到GRUB 2,最后到我的Ubuntu安装。

不过,我希望能够让计算机直接启动到Linux,而无需任何用户干预。

最后, 罗德史密斯上面的回答 ,加上我在另一个论坛上发现的信息,为我做了诀窍。 我禁用了安全启动,也禁用了传统启动。

这就是我做的:

  • 我在启动时使用F9键的技巧启动进入我的Ubuntu安装,以便能够选择启动加载程序。
  • 进入Ubuntu后,我开了一个终端。
  • 使用下面的命令,我检查了Windows引导加载程序所在的位置:

     $ sudo efibootmgr -v 
  • 在我的例子中,原始的引导加载程序在这里:/boot/efi/EFI/Microsoft/Boot/bootmgfw.efi。 请注意,在您的计算机中,它可能位于不同的位置。 如果是这样,您需要调整以下命令。

  • 根据Rod在他的回答(关于如何手动修复引导装载程序)的建议,我通过向下移动一级来备份该文件:

     $ sudo cp /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi /boot/efi/EFI/Microsoft/bootmgfw.efi 
  • 最后,我在那个地方复制了GRUB2的引导加载程序,“欺骗”系统加载我想要的引导加载程序而不是Windows的原始引导加载程序。

     $ sudo cp /boot/efi/EFI/ubuntu/grubx64.efi /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi 

所以最后我的双启动工作与GRUB2。 如果Windows在更新后再次覆盖引导加载程序(就像我一样),我已经知道了让grub回到原位的步骤。

希望这有助于某人。 如果我的解决方案有任何问题,请告诉我。

我在HP ProBook 4340上遇到了同样的问题,原装Windows 8已被新的Kubuntu 15.04覆盖(我不喜欢双启动)。 除了其他尝试之外,我还尝试了Boot-Repair(安装后通过HD和引导修复磁盘 ),但这种练习很可能是不必要的。

诀窍是BIOS设置中的以下更改(在计算机启动后按F10 – 进入系统配置 – 打开引导选项 ):

  1. 检查自定义启动

  2. 检查SecureBoot

  3. 引导模式 :选择UEFI HybridUEFI Native (我选择UEFI Native)

  4. UEFI引导顺序 :将自定义引导置于顶部

  5. 定义自定义引导选项 :选择添加 +设置: \EFI\ubuntu\grubx64.efi

我们在快速启动选项 (F9)中通过“ 从EFI文件 引导”选项打开GRUB时找到了正确的路径字符串。 最初,选项列表包含:

  • OS启动管理器
  • 从EFI文件启动

添加Customized Boot选项后,它被添加到列表中:

  • 定制启动
  • OS启动管理器
  • 从EFI文件启动

通常,运行Boot Repair bootmgfw.efi Microsoft的原始引导加载程序文件( bootmgfw.efi )备份为bootmgfw.efi.bkp ,并将原始bootmgfw.efi文件替换为GRUB(或shim)副本,并且您发布的引导修复输出将显示这个; 但是,我没有看到这样的备份文件。 因此,我建议你做三件事之一:

  • 再次运行引导修复,但查找与备份和更换Microsoft引导加载程序相关的选项。 激活这些选项以继续该过程。 GRUB可能会也可能不会启动Windows; 这似乎是命中或错过 – 如果你让安全启动处于活动状态,那么更多的“未命中”。
  • 手动完成工作:从Linux,备份/boot/efi/EFI/Microsoft/Boot/bootmgfw.efi (我建议将其向下移动一级,到/boot/efi/EFI/Microsoft/bootmgfw.efi ,而不是重命名它是bootmgfw.efi.bkp ,因为后者是非标准的,并且使Boot Repair和Ubuntu的GRUB之外的工具无法找到它。 复制/boot/efi/EFI/ubuntu/grubx64.efi ; 或者如果您计划保持安全启动工作, /boot/efi/EFI/ubuntu/shimx64.efi复制到其位置,并使用其原始名称将grubx64.efi复制到/boot/efi/EFI/Microsoft/Boot 。 然后,您需要修改GRUB配置,以使其能够在新位置或新名称下启动Windows引导加载程序。 (我听说GRUB还不能在安全启动模式下启动Windows启动加载器,所以如果你想从GRUB启动Windows,你可能需要禁用安全启动.OTOH,我自己从未尝试过这个,所以我可能会误解GRUB在这方面的能力。)
  • 禁用安全启动,然后启动到Linux并使用Debian软件包安装我的rEFInd启动管理器 。 完成后,键入sudo mvrefind.sh /boot/efi/EFI/refind /boot/efi/EFI/Microsoft/Boot 。 后一个命令以类似于我刚才描述的手动过程或Boot Repair的方式移动和重命名文件,但是它将rEFInd设置为默认的引导加载程序而不是GRUB。 如果你想使用安全启动,你可以通过杂乱文件和安装新版本的垫片来做到这一点(Ubuntu的垫片足够早,以至于它无法正常使用rEFInd)。 以这种方式安装rEFInd使您无需使用GRUB即可启动,并且安装脚本(在安装Debian软件包时由软件包系统执行)和mvrefind.sh脚本的组合解决了您遇到的问题。

为了记录,您遇到的问题与HP EFI实施中的已知错误有关。 基本上,固件是硬编码的,可以从Microsoft的引导加载程序启动,并且很难或无法从其他任何东西启动。 我强烈建议您向HP投诉; 除非人们抱怨,否则他们不会解决这些问题。

在这三种解决方案中,使用Boot Repair可能是最容易上手的; 但正如我所指出的,Boot Repair使用的非标准命名最终会导致其他实用程序出现问题。 手动调整需要更多努力才能开始工作,但从长远来看会更加清洁。 有些人报告说让GRUB链接Windows引导加载程序有问题,因此任何一个选项都可能让你头疼。 rEFInd更有可能在没有问题的情况下启动Linux或Windows,但正如您可以从程序中看出的那样,让它运行起来可能比再次运行Boot Repair需要更多的努力,尽管可能不如手动文件 – 杂耍。 将rEFInd与安全启动结合使用需要更多的箍跳。 (有关详细信息,请参阅rEFInd的文档。)rEFInd还提供了比GRUB更漂亮的用户界面,这对您来说可能重要,也可能不重要。

这三种解决方案都存在风险; EFI实现之间的差异太大,这意味着在一台计算机上运行良好的自动或手动过程可能会在另一台计算机上失败。 为了保护自己,我建议备份你的ESP(通常是Linux下的/boot/efi ); 只需将文件打包在tarball中或将它们复制到备份目录中。 如果出现严重错误,您可以使用紧急光盘启动并恢复文件。 这可能会让计算机再次启动。

Hewlett-Packard的UEFI已经让我心痛了一段时间。 您的修复程序帮助我重新启动GRUB中的HP笔记本电脑 – 无需先按F9。

我有一个问题:修复后,我可以在GRUB中选择Windows 8,但Windows 8然后拒绝启动,我再次显示GRUB菜单。

我的修复:

  1. 将原始Microsoft efi文件复制到/boot/efi/EFI/Microsoft/Boot/bootmgf2.efi
  2. 编辑/boot/grub/grub.cfg以识别重命名的Microsoft efi文件

笔记本电脑现在启动到GRUB,Ubuntu和Windows 8现在可以从GRUB启动。

我花了一天时间来解决同样的问题,最后我解决了这个问题。 以下是确切的解决方案。 解决问题的完整文章在这里由Rod Smith撰写。

有用的信息

为了使用efi引导加载程序启动到GPT分区表。 efi文件由安装时的操作系统创建,必须提供给计算机的UEFI BIOS,以使其能够启动到相应的操作系统。

要保存efi文件,我们需要有一个EFI分区。 这通常是一个小于200MB的分区, fat32格式,带有EFI system标签。 它包括引导到任何可引导分区(通常是操作系统)所需的.efi文件及其依赖项(以.dll.efi的forms)。 在我的计算机中,此分区具有以下架构所示的结构:

 \EFI |_Boot |_fw |_Microsoft |_Boot |_Recovery |_Ubuntu |_fw 

通常.efi文件可以有任何名称,但似乎有些计算机正在寻找特定的名称。 所以我也提到了标准名称。

  1. Boot文件夹:由于某种原因,如果NVRAM被擦除,则会将其识别为默认引导选项。 这将默认使用。 efi引导加载程序的名称是“bootx64.efi”。 如果要选择默认的efi引导加载程序,请将efi文件及其周围的所有文件复制到引导文件夹,并将源的efi文件重命名为“bootx64.efi”。

  2. Microsoft文件夹:它包含Windows的efi启动文件。 有几个efi文件,但主要是“efibootmgfw.efi”。 我确信Windows使用它来启动。

  3. Ubuntu文件夹:它包含Ubuntu或Mint的efi文件。 有几个.efi文件,但主要的是grubx64.efi

该怎么办?

在操作系统安装时已经安装了一些引导选项。 但是,由于各种原因,例如移除和重新安装HDD或安装新的操作系统甚至是新的主板电池,它们可能会从bios的启动选项中消失。 有两种方法可以恢复引导选项。

  1. (不推荐)正如在某些答案中所描述的那样,我们可以将工作引导选项替换为不工作的引导选项。 但问题仍然是另一种方式。

  2. 手动注册丢失的efi引导加载程序文件。

怎么做?

  1. 从Linux可启动闪存启动(我使用Linux Mint的可启动闪存)。 这必须是EFI usb。 (可由rufus等程序创建的GPT usb)

  2. 挂载EFI分区,您的发行版可以自动执行此操作。 如果/boot可用,请跳过此步骤,并显示与上面类似的结构。 现代Ubuntu应该为你做这个。

    1. 找到EFI分区的地址。 这可以通过使用parted命令或Disks程序来完成。 它通常是可引导磁盘中的第一个或第二个分区。( /dev/sda1/dev/sda2 )此分区通常介于100MB-200MB之间,FAT32和分区类型为EFI System。

    2. 挂载EFI分区。 您可以使用df命令检查之前是否已安装分区。

       df /boot/efi 

      如果之前未安装分区(未在上一个命令中显示)使用mount命令mount分区:

       mount /dev/sda1 /boot/efi 
  3. 现在,如果您浏览/boot/efi您将看到类似于上面解释的文件结构。 控制是否可以找到丢失的操作系统的文件夹。 在我的情况下,计算机的BIOS只能看到Windows启动选项,但我也有linux Mint的Grub启动选项。

    • (不推荐)我的Windows启动选项正在运行所以首先出于测试目的,我制作了一个Microsoft文件夹的备份,其中包含一堆文件,其中包含windows的启动efi文件。 ( bootmgfw.efi )然后我将ubuntu文件夹重命名为Microsoft,接下来我将grubx64.efi重命名为bootmgfw.efi 。 重新启动后,而不是启动到Windows grub菜单加载,但是,这次启动到Windows只能使用grub。 并且无法直接启动到Windows。

       sudo cp /boot/efi/EFI/ubuntu/grubx64.efi /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi 
    • 推荐方式 )只需在bios的启动选项中查看您希望其相关操作系统的efi文件的地址。 就我而言,Linux Mint在计算机BIOS的启动列表中丢失了。 其efi文件的地址相对于EFI分区的根目录是/efi/ubuntu/grubx64.efi 。 然后我使用efibootmgr命令将其注册到NVRAM中。

       efibootmgr -c -d /dev/sda -p 1 -l \\efi\\ubuntu\\grubx64.efi -L nameForBootOption 

      p 1部分命令中,1定义了给定磁盘中efi分区的分区号。 nameForBootOption是为引导选项指定的自定义名称

*注意写正确的地址。 当您在Linux中挂载分区时。 它将分区安装到根目录下的某个文件夹,将实际地址扩展为/media/mint/CC1F-9708/EFI/ubuntu但是我们只需要给/EFI/ubuntu部分。

* Disks程序是一个很棒的图形工具,默认情况下是linux Mint的可启动闪存。 它可用于检查和查找EFI分区,也可用于安装EFI分区,而无需使用任何mount或parted命令。 您只需要在菜单,首选项,磁盘中搜索它。

你受到这个bug的影响: https : //bugs.launchpad.net/ubuntu/+source/grub2/+bug/1091477

解:

  1. 通过Gparted,创建另一个EFI分区(FAT32,200MB,位于磁盘的前100GB内)
  2. 移动’boot’标志
  3. 让Ubuntu使用这个新的ESP(例如通过引导修复 – >推荐修复)。

在Windows 10上安装Cent-OS 7后,我遇到了类似的问题。这是我遵循的以下过程。

  • 最初的操作系统是Windows 10
  • 使用由rufus创建的uefi usb安装cent-os 7

问题:Windows 10正在加载,分操作系统启动菜单甚至没有显示。

  1. 我是怎么解决的:
  2. 去了Bios
  3. 启用旧版启动(这是未来预防措施的额外步骤)
  4. 转到引导选项
  5. 单击OS启动管理器
  6. 将CentOS UEFI移到窗口上方:按f10保存
  7. 再次单击OD bootmanager并validation它。
  8. 按f10保存并退出

现在你的系统将在centos UEFI中启动

因为我们启用了传统启动,所以我们可以选择esc键转到bios或其他启动选项

我找到了一种让我的HP Pavilion g7-2269wm(UEFI)启动rEFInd(GRUB也可能)的方法,而无需用rEFInd或GRUB替换bootmgfw.efi

我安装了rEFInd并使用sudo efibootmgr -c -d /dev/sda -p 2 -L "rEFInd" -l "\EFI\refind\shimx64.efi"将rEFInd添加到启动管理器列表中

使用F9重新启动以选择rEFInd,然后选择Ubuntu。

然后使用将bootmgfwms.efibootmgfw.efibootmgfwms.efi

 sudo mv /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi /boot/efi/EFI/Microsoft/Boot/bootmgfwms.efi 

然后我重新启动并重新启动到rEFInd而不必使用F9.Windows 10条目现在丢失了所以我选择了Ubuntu。

然后返回我运行的Windows 10条目

 sudo mv /boot/efi/EFI/Microsoft/Boot/bootmgfwms.efi /boot/EFI/EFI/Microsoft/Boot/bootmgfw.efi 

然后我重新启动并且rEFInd没有按F9而出现,Windows 10显示为条目。

对于那些像Vince或我一样无法启动Windows的人来说,这是mairabc的另一个答案。 你需要fs_uuid:

# grub-probe --target=fs_uuid /boot/efi/EFI/Microsoft/bootmgfw.efi

和hints_string:

# grub-probe --target=hints_string /boot/efi/EFI/Microsoft/bootmgfw.efi

然后你必须像这样编辑文件/etc/grub.d/40_custom:

 menuentry "Microsoft Windows x86_64 UEFI-GPT" { insmod part_gpt insmod fat insmod search_fs_uuid insmod chain search --fs-uuid --no-floppy --set=root your_hints_string your_fs_uuid chainloader /EFI/Microsoft/bootmgfw.efi } 

保存并做一个

 # update-grub 

重启到Windows …

在笔记本电脑上安装Ubuntu 14.04 64位后,安装了Windows 8的HP-15-r248nf安装得很顺利,除了与Realtek Wifi驱动程序的Wifi连接丢失问题之外(使用echo“选项解决”rtl8723be fwlps = N ips = N“| sudo tee /etc/modprobe.d/rtl8723be.conf),PC仍然在Windows下启动。 通过grub的Ubuntu仅在启动阶段使用ESC键时才可用。 boot-repair没有帮助,它实际上在grub中安装了很多选项,但是grub仍然无法直接访问。 实际上,只需要从默认值更改引导顺序。 在打开PC类型Esc后的启动步骤,然后F10进入BIOS设置。 转到“系统配置”选项卡,然后转到“引导选项”。 按Enter键。 禁用“安全启动”转到UEFI启动顺序。 我把F5 / F6的操作系统启动管理器放在最上面(可能不是必需的)。 使用回车选择“OS启动管理器”。 使用F5 / F6将ubuntu移动到Windows启动管理器上方的顶部。 将Bios设置保留为F10保存/退出并确认您所做的更改。 现在,您将被定向到grub,在那里您选择了标有顶部星形的Ubuntu选项,该选项将在短暂延迟后自动启动。

这不是Windows问题! HP固件完全错误,因为它不使用(甚至不支持)UEFI firmare变量“BootOrder”。 我认为唯一的解决方法是用你的grub.efi替换Windows引导加载程序文件(如已经提到的那样)。

我的情景类似于MichalŽarnay的2015年8月19日15:20发布:我有一些HP Pavillion Slimline 400-314迷你塔,不需要预先安装的Windows 8,所以立即重新分配硬盘并安装Ubuntu 14.04和GRUB2。

不幸的是,Pavillion的BIOS菜单在启动配置方面非常有限。 它没有大多数其他人在这里描述的花哨选择。 即使尝试更改启动顺序也无法坚持下去。

我开始工作的唯一解决方案是使用本博客的“备用命名解决方案”部分中所述的“备用命名”解决方法。

在我的惠普笔记本电脑上,我按照以下步骤逐步完成:

1 – 使用F9启动到ubuntu

2 – 检查Windows引导加载程序的位置

 sudo efibootmgr -v 

在我的情况下/boot/efi/EFI/Microsoft/Boot/bootmgfw.efi

3 – 备份.efi文件:

 sudo cp /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi /boot/efi/EFI/Microsoft/bootmgfw.efi 

4 – 用ubuntu替换原始.efi文件( 技巧 ):

 sudo cp /boot/efi/EFI/ubuntu/grubx64.efi /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi 

5 – 在grub上添加windows 10 menuentry。 打开/etc/grub.d/40_custom并在文件末尾添加此菜/etc/grub.d/40_custom

 menuentry "Windows 10 click here!" { search --set=root --file /EFI/Microsoft/bootmgfw.efi chainloader /EFI/Microsoft/bootmgfw.efi } 

6 – 节省40_custom和:

 sudo update-grub 

7 – 关于bios禁用安全启动(我不确定是否需要)

8 – 如果一切正常,默认情况下它将在ubuntu上启动,而windows 10将是grub上的另一个选项。

这比我想象的容易。

我确认@Vitor Abella的步骤解决了HP 2000笔记本的双启动问题,但我需要执行以下任一操作(如@mairabc所述):

  • 启用旧版启动(默认情况下,禁用安全启动)

要么

  • 禁用旧版启动,并启用安全启动。

如果您不想移动引导文件 ,可以尝试手动更改引导顺序:

手动进入ubuntu并使用以下命令检查当前的引导顺序及其ID:

 sudo efibootmgr -v 

然后使用-o和ID更改引导顺序(从左到右的引导顺序):

 sudo efibootmgr -o 0000,3000,0001,2001,2002,2003 

示例
1.显示当前的启动设置

 $ sudo efibootmgr -v BootCurrent: 0001 Timeout: 2 seconds BootOrder: 0001,3000,0000,2001,2002,2003 Boot0000* ubuntu HD(2,GPT,c451cb3c-a684-45ac-9925-4046e57c40cb,0x145800,0x82000)/File(\EFI\ubuntu\shimx64.efi) Boot0001* Windows Boot Manager HD(2,GPT,c451cb3c-a684-45ac-9925-4046e57c40cb,0x145800,0x82000)/File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...BCDOBJECT=.{.9.dea8.6.2.c.-.5.cdd-.4.e.7.0.-.acc1.-.f.3.2.b.3.4.4.d.4.7.9.5.}.................... Boot2001* USB Drive (UEFI) RC Boot2002* Internal CD/DVD ROM Drive (UEFI) RC Boot3000* Internal Hard Disk or Solid State Disk RC Boot3001* Internal Hard Disk or Solid State Disk RC Boot3002* Internal Hard Disk or Solid State Disk RC Boot3003* Internal Hard Disk or Solid State Disk RC 

2.更改启动顺序(我们首先要启动ubuntu,它会在启动时显示启动菜单):
请注意,第一次尝试给出了错误,因为它无法找到Boot2003(floppydisk驱动器?),因为您可以看到它在重新启动后重新创建。

 $ sudo efibootmgr -o 0000,3000,0001,2001,2002,2003 Invalid boot order entry value: 0000,3000,0001,2001,2002,2003 ^ Boot entry 2003 does not exist $ sudo efibootmgr -o 0000,3000,0001,2001,2002 BootCurrent: 0000 Timeout: 2 seconds BootOrder: 0000,3000,0001,2001,2002 Boot0000* ubuntu Boot0001* Windows Boot Manager Boot2001* USB Drive (UEFI) Boot2002* Internal CD/DVD ROM Drive (UEFI) Boot3000* Internal Hard Disk or Solid State Disk Boot3001* Internal Hard Disk or Solid State Disk Boot3002* Internal Hard Disk or Solid State Disk Boot3003* Internal Hard Disk or Solid State Disk 

3.Reboot。 现在应该出现启动菜单。 (2003年自动重新添加):

 $ sudo efibootmgr -v BootCurrent: 0000 Timeout: 2 seconds BootOrder: 0000,3000,0001,2001,2002,2003 Boot0000* ubuntu HD(2,GPT,c451cb3c-a684-45ac-9925-4046e57c40cb,0x145800,0x82000)/File(\EFI\ubuntu\shimx64.efi) Boot0001* Windows Boot Manager HD(2,GPT,c451cb3c-a684-45ac-9925-4046e57c40cb,0x145800,0x82000)/File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...BCDOBJECT=.{.9.dea8.6.2.c.-.5.cdd-.4.e.7.0.-.acc1.-.f.3.2.b.3.4.4.d.4.7.9.5.}.................... Boot2001* USB Drive (UEFI) RC Boot2002* Internal CD/DVD ROM Drive (UEFI) RC Boot3000* Internal Hard Disk or Solid State Disk RC Boot3001* Internal Hard Disk or Solid State Disk RC Boot3002* Internal Hard Disk or Solid State Disk RC Boot3003* Internal Hard Disk or Solid State Disk RC 

在我知道grub4dos正在加载之后我的解决方案实现了

men.lst输入此条men.lst

 title Linux find --set-root /-name.efi boot /-name.efi 

我有一台2018 HP笔记本电脑,14英寸Windows 10和Ubuntu双启动。 我曾经按F9选择我想要的操作系统,现在已经做了几周。

解:

  • 关机并按F10进入BIOS

  • 导航到列出引导顺序的BIOS部分

  • 在OS启动管理器上按Enter键。

  • 使用F5或F6在Windows上切换Ubuntu。

  • 保存并退出。