在这种情况下,update-grub 和 'modprobe efivars' 程序会做什么?

在这种情况下,update-grub 和 'modprobe efivars' 程序会做什么?

我正在廉价的 Acer Aspire ES 系列上安装 Ubuntu 17.04(但也适用于 16.04)。它预装了 Windows 或 Linpus Linux。我的是 Linpus。

对于许多拥有此类笔记本电脑的用户来说(讨论 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

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

另外,我只尝试了最后几个步骤——EFI 复制和重命名,但没有成功。我打算进行一些更复杂的分区,包括加密分区,所以我有一些问题:

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

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

答案1

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

GRUB 是 Linux 的引导管理器和引导加载程序的组合——它提供了一个引导选项菜单(引导管理器部分),当您选择一个 Linux 选项时,它会将 Linux 内核加载到内存中并执行它(引导加载程序部分)。这些功能依赖于 GRUB 配置文件,该文件存储在 Ubuntu 中的/boot/grub/grub.cfg;菜单是根据此配置文件生成的。如果该文件不存在,GRUB 会显示一个提示,提示为grub>,这对专家以外的人来说没什么帮助。如果配置文件包含不正确的信息,您可能会或可能不会看到菜单,并且至少某些菜单项可能无法使用。

update-grub的作用是扫描计算机中的操作系统和 Linux 内核并创建一个新grub.cfg文件。通常,当您安装新内核时,此脚本会自动运行(这可以以自动或半自动方式进行,具体取决于您的操作系统更新设置)。您也可以update-grub手动运行 - 比如,如果您对另一个操作系统进行了更改,您正在进行双启动,并且您希望 GRUB 识别这些更改。对于您来说,我不确定这是否有必要。理论上,它应该在您安装 Ubuntu 时设置。另一方面,显然安装并不完全成功,所以可能是grub.cfg缺失或配置错误。

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

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

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

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

为了更多地了解这些主题,我建议:

相关内容