我有一台 acer aspire e 14。
它有一个带有 7 个分区的硬盘:
- /dev/sda1 上的 EFI 系统
- /dev/sda2 上描述为“Microsoft Reserved”的内容
- /dev/sda3 上的 Windows 10 FS
- /dev/sda5 上的 Linux FS
- /dev/sda6 上的交换
- /dev/sda4 上的 Microsoft Windows 恢复管理器
- /dev/sda 上的可用空间
现在的问题是,我确定 Windows 10 和 Linux(lubuntu)都安装在 UEFI 模式下,但是启动顺序中没有条目让我选择 ubuntu 或 grub 作为首选启动选项。
如果我在启动时不执行任何操作,它将自动启动到 Windows 10 而不询问任何内容。
如果我想启动 ubuntu 我必须执行以下技巧:
- 插入可启动的 USB 驱动器(带 grub)
- 计算机启动后,USB 驱动器的 grub 让我选择尝试 USB 中的操作系统实时版本还是安装它,我只需按 Esc 键。
- 这将打开一个控制台,我只需在其中输入“exit”即可。
- 以下屏幕似乎是 UEFI 启动选择,它让我选择启动 USB、“未知设备”或 Windows 10 启动管理器。如果我选择 USB,它只会返回到步骤 2 的屏幕。如果我选择最后一个,它会启动 Windows 10,如果我选择“未知设备”,它最终会显示安装在计算机中的 grub 的屏幕,让我选择启动 lubuntu 或 Windows。
我真的不知道如何解决这个问题,所以欢迎任何建议或意见。
(编辑)我尝试过以下方法:
- “efibootmgr -v” 显示同一文件(\EFI\ubuntu\shimx64.efi)的两个条目,一个名为 ubuntu,另一个名为“未知设备”,最后一个条目也以 RC 结束描述。我尝试在 Windows 启动管理器之前更改 --bootorder 以匹配它们,但没有效果,重新启动时我启动到 Windows,而当返回 Linux 时,启动顺序不是我之前设置的顺序。
- 我尝试按照 SmallLoanOf1M 的建议重新构建 grub,结果相同,但我注意到一件奇怪的事情,我的 linux 有一个 /boot/efi 文件夹。但是当我挂载 EFI 系统 (/dev/sda1) 来重建 grub 时,我得到的结果是有一个“EFI”文件夹(注意大写字母),这可能是问题所在吗?如果是这样,我应该如何解决这个问题而不弄乱任何东西?
答案1
您正在寻找“efibootmgr”。此程序可以在已启动到 EFI 模式的 GNU/Linux 系统上使用(因此请使用活动磁盘或其他东西来获取它)。
它有几个开关,总体来说非常简单。您要创建 EFI 启动项,并查看现有项。
您可以使用“efibootmgr -v”查看现有的启动项。这将揭示缺少 EFI 项,或者可能是 EFI 项格式错误。
如果你已经有条目,或者那里什么都没有,重建 GRUB应该调用 efibootmgr 为您创建一个条目。这是最简单的操作方法。您应该在已安装系统的 chroot 中执行此操作(我们使用实时系统的另一个原因)。如果您不知道如何设置 chroot 环境,请参考本指南:https://help.ubuntu.com/community/BasicChroot
完成后,重新安装 GRUB 包:
sudo apt-get install --reinstall grub-efi
完成后,将 GRUB 再次粘贴到磁盘上:
sudo grub-install /dev/sda
重新创建您的 GRUB 配置(这也应该调用 efibootmgr):
sudo update-grub
检查 /boot/EFI 中是否有适用于 Linux 安装的 EFI 启动映像。您应该同时拥有 Windows 和 Linux 目录,每个目录中都有 .efi 文件。
最后,使用以下命令检查 EFI NVRAM 中是否有正确的启动项efibootmgr -v
如果你还没有,可以验证你有在 /boot/EFI 上挂载的 FAT 文件系统中创建 .efi 文件,然后自己创建条目。这里描述起来有点奇怪,但 efibootmgr 手册页非常有用:http://linux.die.net/man/8/efibootmgr
编辑:有关手动创建 EFI 条目的更多信息:
由于自动 GRUB 步骤似乎对您的情况没有帮助,让我们创建一个全新的 EFI 条目,该条目将指向您的 GRUB 二进制文件。我们将为此使用 efibootmgr。
感谢您提供的信息,我们可以创建一个命令,该命令应该可以以复制/粘贴的方式为您工作。太棒了。在开始之前,请按照上述建议,从 EFI 启动的实时系统进入本机系统上的 chroot 环境。此外,在 chroot 中将您的 EFI 文件系统挂载到 /boot/efi。
这可以通过一个命令来完成(根据您的情况量身定制):
efibootmgr -c -l \\EFI\\ubuntu\\shimx64.efi -L UbuntuBoot
这是一个安全启动(即 shimx64)EFI 条目,它指向 GRUB 二进制文件(而不是默认的 elilo.efi - 您没有),有一个外观名称 UbuntuBoot(以区别于其他名称),并且将分别使用 /dev/sda 和 /dev/sda1 作为磁盘和分区。这是 efibootmgr -c 的默认设置,因此如果您的 EFI 文件系统位于不同的磁盘或分区上,则必须通过选项明确指定。必须使用反斜杠对反斜杠进行转义才能将其视为“文字”。
创建该条目后,您应该能够通过 efibootmgr -v 看到它。如果存在,请尝试启动它。如果可以启动它,您可能应该删除旧的。
安装 Windows 时出现此类问题很常见,但前提是您选择将 EFI 二进制文件安装到驱动器的“可移动磁盘 EFI 区域”。只有一个 EFI 条目可以进入那里,那就是 Windows 无论如何都要使用的区域来完成 EFI 引导。我们通常只在无法以任何其他方式引导的有缺陷的 EFI 系统上使用该区域,但它保证可以在任何系统上运行。
但是,在同一区域安装另一个支持 EFI 的操作系统会毁掉您之前安装的 EFI 二进制文件。在安装大多数 Linux 发行版时,它通常会询问您是否要强制将 GRUB 安装到 EFI 的“可移动媒体路径”。选择否,这种情况就不会再发生。几乎任何现代 EFI 都不需要使用可移动媒体路径。
答案2
我有同样的问题。
对我来说,BIOS 中列出了 2 个 Windows 启动管理器。当我将后面没有数字的启动管理器提升到优先级并重新启动时。现在出于某种原因,我进入了 GRUB。当我返回 BIOS 时,优先级最高的 Windows 启动管理器不再有名称。
这一切都很奇怪,我不明白发生了什么,但现在对我来说有用。回复帖子有点晚了,但也许对其他人有帮助。
答案3
在早期启动时尝试按 F12 或 Fn+F12(如果您在 BIOS 中设置了多媒体键优先级)。这将显示 UEFI 启动菜单,您可以在其中选择所有启动项,无论是 EFI 还是 CSM。