我这里有一台新买的笔记本电脑。这是我使用的第一台带有 (U)EFI 的设备。起初我没有运行安装,所以我切换回 BIOS 传统模式并在该模式下安装了 ubuntu。
好的。现在我想将预装的 Windows 重新添加到引导加载程序中以允许多重引导。这只能通过 EFI 来实现。所以我四处搜索,找到了此链接。我做了一些修改,因为经过一番尝试后,我能够在 efi 模式下启动 live cd 上的 grub,然后手动启动到 linux。
所以最后我在 EFI 系统分区上安装了 grub,并且能够直接从 EFI 启动到 linux。现在我已经看到,有grub.cfg
两个位置:/boot/grub/
和/boot/efi/EFI/grub/
。运行时,update-grub
只有 中的版本/boot/grub/
会受到影响。对于(手动)安装,这不是问题,但任何内核更新都不会改变重要的/boot/efi/EFI/grub/grub.cfg
。我尝试创建一个符号链接,但似乎文件在重写之前就被删除了。所以链接丢失了。
我的问题详细如下:
- 我该怎么做才能自动更新?我应该将
mount -o bind
目录/boot/efi/EFI/grub
转到吗/boot/grub
?还有更好的解决方案吗? - 是否可以让 grub 查看另一个位置?
- 更新将
grub.efi
安装在哪里? - 还有其他我至今忘记的问题吗?
答案1
据我上次检查,Ubuntu 版本的 GRUB 2 将 GRUB 二进制文件放在 EFI 系统分区 (ESP) 上,该分区/boot/efi
在 Linux 中安装在。GRUB 配置文件(grub.cfg
和各种支持文件)保留/boot/grub
在另一个分区上。(在我看来,这是一个糟糕的设计,但那是另一回事……)因此,如果您使用 Ubuntu 的 GRUB 二进制文件,GRUB 的菜单应该会自动更新。
但是,如果您从源代码或其他人提供的二进制文件安装 GRUB,则其工作方式可能会有所不同,grub.cfg
ESP 上会同时存在 GRUB 二进制文件及其支持文件。这种设置实际上更安全,但 Ubuntu 的脚本不支持它,因此您必须在每次内核更新后手动更新。根据您的描述,您似乎有这种设置,尽管您链接到的网站似乎描述了使用 Ubuntu 的二进制文件进行设置,这是一个令人费解的不一致之处。您是否在某个时候尝试了其他方法,或者偏离了网站的说明来使其工作?您可以通过更改其中一个文件中的启动选项描述grub.cfg
(假设您有两个文件)进行测试,然后查看重新启动时该更改是否出现在 GRUB 的菜单中。
假设您确实有一个在 ESP 上查找其grub.cfg
文件的 GRUB 二进制文件,则有多种可能的解决方案,包括:
- 安装 Ubuntu 版本的 GRUB 来覆盖您现有的版本。这样做很危险,因为它可能无法工作,因此可能导致无法启动安装。(您的初始描述表明您在 EFI 模式下的初始安装无法启动,这表明您的 Ubuntu 版本的 GRUB 可能有问题。)
- 从 GRUB 切换到另一个引导管理器/引导加载程序作为您的主要启动程序。我自己的重新索引可能很容易运行,并且会自动处理内核更新。如果您尝试这样做,可能会产生无法启动的安装的风险,但风险小于用另一个 GRUB 替换正在运行的 GRUB,因为即使新启动程序完全失败,您也应该能够使用固件的启动管理器通过 GRUB 进行启动。
还有一条评论:新电脑出厂时总是会启用安全启动,这又增加了一个需要克服的障碍。Ubuntu 12.10 及更高版本都支持安全启动,但这并不总是有效。大多数第三方引导加载程序(包括 rEFInd)都需要额外的工作才能使用安全启动。因此,如果您还没有这样做,我建议您在固件中禁用安全启动。如果您想在安全启动处于活动状态的情况下启动,最好在安装引导加载程序后启用它,因为您将能够测试引导加载程序没有首先进行安全启动,然后将安全启动添加到图片中,并在了解基本引导加载程序配置正在运行的情况下对其进行调试。
答案2
如果 grub 在 EFI 分区中没有配置,它似乎会在下面查找/boot/grub
。
boot-repair
导致我的 EFI 分区崩溃。我无法再启动任何 EFI 启动选项。不幸的是,我不知道到底是什么导致了崩溃,所以我无法提交错误。
由于我的整个 EFI 设置崩溃了,我不得不重新安装 Windows 和 Ubuntu 一次才能使一切运行,但现在看来一切设置都正确了。