在这种情况下,update-grub 和“modprobe efivars”程序有什么作用?

Mar*_* B. 0 boot grub2 dual-boot acer uefi

我正在廉价的 Acer Aspire ES 系列上安装 Ubuntu 17.04(但也适用于 16.04)。它带有预装的 Windows 或 Linpus Linux。我和林普斯一起来的。

对于这种笔记本的许多所有者(讨论 1讨论 2讨论 3讨论 4),我也有同样的问题 - Ubuntu 安装得很好,但系统无法启动。

经过一些试验,我使用了以下命令,我让系统正常工作并启动:

# mmcblk0p1 is my EFI partition
# mmcblk0p2 is my root partition
sudo mount /dev/mmcblk0p2 /mnt
sudo mkdir /mnt/boot/efi
sudo mount /dev/mmcblk0p1 /mnt/boot/efi
for i in /sys /proc /run /dev; do sudo mount --bind "$i" "/mnt$i"; done
modprobe efivars
efibootmgr --verbose
apt-get install --reinstall grub-efi-amd64
grub-install --no-nvram --root-directory=/mnt
chroot /mnt
update-grub
cd /boot/efi/EFI
cp -R ubuntu/ BOOT
cd BOOT cp grubx64.efi bootx64.efi
cp -R BOOT/ Linux
Run Code Online (Sandbox Code Playgroud)

我正在将“ubuntu”复制到“BOOT”和“Linux”,因为 Linpus 在 EFI 中具有相同的名称,我怀疑它们在 BIOS 中是硬编码的。

另外,我只尝试了最后一步——EFI 复制和重命名,但它不起作用。我要做一些更复杂的分区,包括加密分区,所以我有一些问题:

1. 当我运行 update-grub 时,发生了什么神奇的事情?

2. 是否还需要命令“modprobe efivars”和“efibootmgr --verbose”?

Rod*_*ith 5

当我运行 update-grub 时,发生了什么神奇的事情?

GRUB 是 Linux 的引导管理器和引导加载程序的组合——它提供了一个引导选项菜单(引导管理器部分),当您选择一个 Linux 选项时,它会将 Linux 内核加载到内存中并执行它(引导加载程序部分) )。这些功能依赖于一个 GRUB 配置文件,存储在 Ubuntu 中/boot/grub/grub.cfg;菜单是基于这个配置文件生成的。如果文件不存在,GRUB 会显示一个提示,内容为grub>,这对专家没有太大帮助。如果配置文件包含不正确的信息,您可能会或可能不会获得菜单,并且至少某些菜单项可能不起作用。

什么update-grub是扫描计算机的操作系统和 Linux 内核并创建一个新grub.cfg文件。通常,此脚本会在您安装新内核时自动运行(这可能以自动或半自动方式发生,具体取决于您的操作系统更新设置)。您也可以update-grub手动运行——比如说,如果您对另一个操作系统进行了更改,那么您正在双引导,并且您希望 GRUB 识别这些更改。在你的情况下,我不确定这是必要的。理论上,它应该在你安装 Ubuntu 时就已经设置好了。OTOH,显然安装并不完全成功,所以可能grub.cfg丢失或配置错误。

是否还需要命令“modprobe efivars”和“efibootmgr --verbose”?

modprobe efivars命令加载efivars内核模块,它使内核可以访问存储在 NVRAM 中的 EFI 变量。这些变量记录诸如指向固件使用的特定引导加载程序文件的指针以及使用这些引导加载程序的顺序之类的内容。请注意,引导期间的控制顺序是 EFI 到 GRUB(或其他引导管理器/加载程序)到 OS 内核 (Linux)。因此,操作系统安装过程需要某种方式来告诉 EFI 启动 GRUB 而不是其他一些引导加载程序,并且 EFI 变量是完成方式的一部分。

efibootmgr工具是此过程的另一部分;它需要选项使您能够查看或修改 EFI 变量。也就是说,efibootmgr与内核对话,内核使用其efivars模块访问 EFI 的 NVRAM 变量。efibootmgr您提到的特定命令efibootmgr --verbose仅显示当前的引导变量。因此,它在您概述的过程中并不重要,可以省略。OTOH,该grub-install命令在 EFI 系统上,通常会更新 EFI 引导变量;但事实上,你通过它的--no-nvram选项告诉它要这样做。这可能会产生问题,除了......

除此之外,您还复制了 GRUB 并将其重命名为另外两个名称。其中一个是EFI后备文件名EFI/BOOT/bootx64.efi。如果 EFI 缺少将其指向另一个名称的 EFI 变量,或者如果其他条目无效或它们的二进制文件返回到 EFI 而未启动操作系统,则该文件将作为引导加载程序运行。通常,通过修改 EFI 变量efibootmgrgrub-install如果没有调用,这是可以做的一件事 --no-nvram) 将使系统可启动。但是,有些计算机有错误的 EFI,它们会忘记或忽略它们的 EFI 变量。在这样的系统上,需要复制/重命名引导加载程序,正如您所做的那样,以使系统引导。您的“库存”安装不起作用并且您必须跳过这些箍的事实表明您可能拥有这样一台计算机。

有关这些主题的更多阅读,我建议: