我有一台 HP Pavilion Sleekbook 14 笔记本电脑,我在其中安装了 Ubuntu 12.10 与原版 Windows 8 双启动。我使用启动修复来设置启动到 grub。
我的问题是我无法让它直接从新创建的 efi 文件启动。我查看了 BIOS 屏幕中的启动选项,但它没有给我 Ubuntu 的选择。我启动 Ubuntu 的唯一方法是在打开系统电源时按 F9,然后手动导航到 ubuntu efi 文件。这有效,但如果我不仔细看,它会启动到 Windows。
在我运行完启动修复程序后,它告诉我从 sda2/EFI/ubuntu/shimx64.efi 启动。我看到一些建议说我应该将此文件移到 windows bootmgfw.efi 的位置,但我担心会破坏某些东西,无法启动 windows 8 安装。虽然我已经比 win7 更讨厌 win8,但我确实时不时需要它来完成一些任务……
我的启动修复细节如下:http://paste.ubuntu.com/1418009/
答案1
当我尝试双启动 Ubuntu 12.04.3 LTS 和 Windows 8 时,我的 HP Pavilion g6 也遇到了同样的问题。也就是说,即使在“成功”运行 Boot-Repair 之后,我的笔记本电脑仍然会直接启动到 Windows 8。如果我在 HP 符号出现之前按下 F9,我就能进入启动菜单(HP 的菜单?我不知道……),然后从那里选择“Ubuntu”条目,然后进入 GRUB 2,最后进入我的 Ubuntu 安装。
不过,我希望能够让计算机直接启动到 Linux,而无需任何用户干预。
到底,Rod Smith 的回答,结合我在另一个论坛找到的信息,对我来说很管用。我已禁用安全启动,也禁用了传统启动。
这是我做的:
- 我使用启动时按 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 回到原位的步骤。
希望这对某些人有帮助。如果我的解决方案有任何问题,请告诉我。
答案2
我在 HP ProBook 4340s 上遇到了同样的问题,原来的 Windows 8 已经被新的 Kubuntu 15.04 覆盖(我更喜欢没有双启动)。除了其他尝试之外,我还尝试了 Boot-Repair(安装后从 HD 进行,并通过啟動修復磁碟),但这种做法很可能是不必要的。
造成这一问题的是 BIOS 设置中的以下更改(计算机启动后按下F10- 去系统配置- 打开启动选项):
查看定制靴子
核对安全启动
引导模式: 选择UEFI 混合或者UEFI 原生(我选择了UEFI 原生
UEFI 启动顺序: 放定制靴子回到顶部
定义自定义启动选项: 选择添加+ 设置:
\EFI\ubuntu\grubx64.efi
通过以下方式打开 GRUB 时,我们找到了正确的路径字符串从 EFI 文件启动选项中的快速启动选项(F9)。一开始,选项列表包含:
- 操作系统启动管理器
- 从 EFI 文件启动
添加自定义启动选项后,它被添加到列表中:
- 定制靴子
- 操作系统启动管理器
- 从 EFI 文件启动
答案3
bootmgfw.efi
通常,运行 Boot Repair 会将 Microsoft 的原始引导加载程序文件 ( )备份为bootmgfw.efi.bkp
并用 GRUB(或 shim)的副本替换原始bootmgfw.efi
文件,您发布的 Boot Repair 输出将显示此信息;但是,我没有看到这样的备份文件。因此,我建议您执行以下三项操作之一:
- 再次运行 Boot Repair,但要查找与备份和替换 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,则可能需要禁用安全启动。另一方面,我自己从未尝试过,所以我可能误解了 GRUB 在这方面的功能。) - 禁用安全启动,然后启动到 Linux 并安装我的rEFInd 启动管理器通过使用 Debian 软件包。完成后,输入
sudo mvrefind.sh /boot/efi/EFI/refind /boot/efi/EFI/Microsoft/Boot
。后一个命令以类似于我刚刚描述的手动过程或 Boot Repair 所做的方式移动和重命名文件,但它将 rEFInd 而不是 GRUB 设置为默认引导加载程序。如果您想使用安全启动,您可以通过处理文件和安装新版本的 shim 来实现(Ubuntu 的 shim 太早了,无法与 rEFInd 正常工作)。以这种方式安装 rEFInd 使您无需使用 GRUB 即可启动,并且安装脚本(由安装 Debian 软件包时软件包系统执行)和脚本的组合可以mvrefind.sh
解决您遇到的问题。
需要说明的是,您遇到的问题与 HP EFI 实现中的已知错误有关。基本上,固件被硬编码为从 Microsoft 的引导加载程序启动,这使得从其他任何设备启动变得困难或不可能。我强烈建议您向 HP 投诉此事;除非有人投诉,否则他们不会修复此类问题。
在这三种解决方案中,使用 Boot Repair 可能是最容易实现的;但正如我所指出的,Boot Repair 使用的非标准命名最终可能会在将来给其他实用程序带来问题。手动调整将需要更多努力才能实现,但从长远来看会更干净。有些人报告说,让 GRUB 链式加载 Windows 引导加载程序时会遇到问题,因此这两种选择都可能让您头疼。rEFInd 更有可能顺利启动 Linux 或 Windows,但从该过程可以看出,让它工作可能需要比再次运行 Boot Repair 多一点努力,尽管可能比手动文件处理要少。目前,将 rEFInd 与 Secure Boot 结合使用需要更多麻烦。(有关详细信息,请参阅 rEFInd 的文档。)rEFInd 还提供了比 GRUB 更漂亮的用户界面,这对您来说可能很重要,也可能不重要。
这三种解决方案都存在风险;EFI 实现方式本身差异太大,这意味着在一台计算机上运行良好的自动或手动程序在另一台计算机上可能会失败。为了保护自己,我建议备份您的 ESP(通常/boot/efi
在 Linux 下);只需将文件打包成 tarball 或将它们复制到备份目录中即可。如果出现严重问题,您可以使用应急磁盘启动并恢复文件。这将大概让计算机重新启动。
答案4
我花了一天时间解决同样的问题,最后终于解决了。以下是确切的解决方案。解决问题的完整文章是这里由罗德·史密斯。
有用的信息
为了使用 efi 引导加载程序引导到 GPT 分区表,efi
操作系统在安装时会创建文件,必须将该文件提供给计算机的 UEFI bios,以使其能够引导到其相应的操作系统。
为了保存 efi 文件,我们需要一个 EFI 分区。这通常是一个小于 200MB 的分区,fat32
格式为EFI system
。它包含引导到任何可引导分区(通常是操作系统)所需的.efi
文件及其依赖项(形状为.dll
或.efi
)。在我的计算机中,此分区的结构如下图所示:
\EFI
|_Boot
|_fw
|_Microsoft
|_Boot
|_Recovery
|_Ubuntu
|_fw
通常情况下,.efi
文件可以有任意名称,但似乎有些计算机需要特定名称。所以我也提到了标准名称。
Boot
文件夹:被识别为默认启动选项,如果 NVRAM 因某种原因被删除。默认情况下将使用此文件夹。efi 启动加载程序的名称为“bootx64.efi”。当您想要选择默认 efi 启动加载程序时,请将您的 efi 文件及其周围的所有文件复制到启动文件夹,并将源的 efi 文件重命名为“bootx64.efi”。Microsoft
文件夹:它保存 Windows 的 efi 启动文件。有多个 efi 文件,但主要文件是“efibootmgfw.efi”。我确信 Windows 会使用它来启动。Ubuntu
文件夹:它包含 Ubuntu 或 Mint 的 efi 文件。有几个.efi
文件,但主要文件是grubx64.efi
该怎么办?
在安装操作系统时,已经安装了一些启动选项。但是,由于各种原因,例如移除并重新安装硬盘、安装新操作系统,甚至是更换新的主板电池,这些启动选项可能会从 bios 的启动选项中消失。有两种解决方案可以恢复启动选项。
(不推荐)正如一些答案中所述,我们可以用不起作用的启动选项替换起作用的启动选项。但反过来问题仍然存在。
手动注册缺少的 efi 引导加载程序文件。
怎么做?
从 Linux 可启动闪存启动(我使用 Linux Mint 的可启动闪存)。这必须是 EFI usb。(可以通过 rufus 等程序创建的 GPT usb)
安装 EFI 分区,您的发行版可能会自动执行此操作。如果
/boot
可用并显示与上述结构类似的结构,请跳过此步骤。现代 Ubuntu 应该会为您执行此操作。找到 EFI 分区的地址。这可以通过
parted
命令或Disks
程序来完成。它通常是可启动磁盘中的第一个或第二个分区。(/dev/sda1
或/dev/sda2
)此分区通常在 100MB-200MB 之间,采用 FAT32 格式,分区类型为 EFI 系统。挂载 EFI 分区。您可以使用
df
命令检查该分区是否已挂载。df /boot/efi
如果之前没有挂载过该分区(也就是前面的命令没有显示),可以使用以下
mount
命令挂载该分区:mount /dev/sda1 /boot/efi
现在,如果您浏览,
/boot/efi
您将看到与我上面解释的文件结构类似的文件结构。检查您是否可以在那里找到丢失的操作系统的文件夹。在我的情况下,计算机的 bios 只能看到 windows 启动选项,但我也有 linux Mint 的 Grub 启动选项。(不推荐)我的 Windows 启动选项正常工作,因此首先出于测试目的,我备份了 Microsoft 文件夹,其中包含一堆文件以及 Windows 的启动 efi 文件。(
bootmgfw.efi
)然后我将 ubuntu 文件夹重命名为 Microsoft,接下来我将 重命名grubx64.efi
为bootmgfw.efi
。重启后,不是启动到 Windows,而是加载 grub 菜单,但是,这次只能使用 grub 才能启动到 Windows。并且无法直接启动到 Windows。sudo cp /boot/efi/EFI/ubuntu/grubx64.efi /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi
(推荐方式)只需写入您希望其相关操作系统在 bios 的启动选项中看到的 efi 文件的地址。在我的情况下,Linux Mint 未出现在计算机 BIOS 的启动列表中。其 efi 文件的地址相
/efi/ubuntu/grubx64.efi
对于 EFI 分区的根目录。然后我使用启动管理器命令。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 命令。您只需在菜单、首选项、磁盘中搜索它即可。