如何修复 Linux 引导进入 BIOS 错误
已发表: 2022-09-28
众所周知,GRUB 更新会导致 Linux 计算机引导至 BIOS 或 UEFI 设置。 对此的修复利用了您真正应该知道的有用的系统恢复技巧。
案例研究:GRUB 2:2.06.r322
2022 年夏季的 Arch 和基于 Arch 的 Linux 发行版的系统更新包括新版本的 GRUB。 GRUB代表gr和统一引导程序。
引导加载程序是一个应用程序,它在您的计算机打开时启动启动过程。 需要从正确的分区以正确的顺序启动多个软件工具和实用程序,以最终生成可操作且可访问的操作系统。 GRUB 启动了一系列事件。
如果您的计算机上安装了多个操作系统,GRUB 会提供一个菜单,以便您选择要使用的操作系统。 对 GRUB 2:2.06.r322 的代码更改之一添加了对新 GRUB 选项 --is --is-supported
。 该选项用于指示是否存在引导至固件功能。 如果是,GRUB 会在启动菜单中添加一个条目,让您启动到 EUFI 设置。
在名为“30_uefi-firmware.in”的脚本中引用了新选项。 此文件的差异显示删除了if
语句,并添加了两行。
其中一个新行是替换if
语句。 另一个新行包含fwsetup --is-supported
。 “fwsetup”中的“fw”代表固件。 但是因为那行在新的if
语句之上,所以它总是会运行。 如果它在if
语句的主体内,它只会在if
语句中的测试解析为 true 时运行。
这会导致许多(但不是全部)UEFI 计算机出现问题。 这取决于您已经安装的 GRUB 版本是否支持此命令。 受影响的机器会做两件事之一。 他们要么进入引导过程从未完成但不断重新启动的引导循环,要么计算机将直接引导至 UEFI 固件设置。 无论哪种方式,都无法强制您的计算机启动到 Linux。
当您遇到这样的情况时,总是有一个完全重新安装的核选项。 这会起作用,但取决于您的硬盘驱动器的分区方式,如果没有最近的备份,您可能会丢失数据。
低影响方法使用chroot
和 Live USB 或 Live CD/DVD。 当您无法启动或登录 Linux 计算机时,这是一种很好的技术,可以帮助您了解和应对各种系统故障。
我们将使用的技术
为了使用这种技术,您需要有一个可引导的 USB 或带有 Linux 发行版的 CD/DVD,它可以引导到一个实时的 Linux 实例。 通常这些被称为 Live USB 或 Live CD/DVD。 所有主要发行版都支持此功能。
我们不会安装任何东西,因此实时媒体不必与您在计算机上安装的发行版相同。 例如,您可以使用 Ubuntu USB 修复 EndeavourOS 计算机。 如果您无法访问任何实时媒体,则需要使用另一台计算机下载图像并将其写入 USB 记忆棒或 CD/DVD。
当您从实时媒体启动时,您将能够安装和访问您现有的文件系统。 您安装的文件系统将显示为从实时媒体引导的 Linux 文件系统的一部分。 那太棒了。 如果我们可以访问它,我们就有机会修复它。 但它确实提出了一个问题。
此混合文件系统的根是实时媒体文件系统的根,而不是您安装的文件系统的根。 为了让你的 Linux 系统中配置的文件路径引用它们正确的目标位置——在你的文件系统中的某个地方,而不是相对于实时 Linux 的根目录的某个地方——我们需要使用chroot
来设置一个新的根目录,它指向您安装的文件系统。 换句话说,以“/”开头的路径将使用文件系统的根目录作为它们的起点。

我们为此使用的测试计算机使用ext4
文件系统,但您也可以在其他文件系统上使用此技术。 您只需确定需要挂载的分区或卷,以及挂载它们的位置。 原理是一样的。
付诸实践
我们创建了一个可启动的 USB 驱动器并从中启动了我们受灾的计算机。 我们使用的发行版是 EndeavourOS。 EndeavourOS 实时媒体启动到 XFCE 4 桌面环境。
要确定哪些分区包含文件系统的根,哪些是引导分区,请打开终端窗口并使用fdisk
命令。 我们使用-l
(列表分区)选项。 您还需要使用sudo
。
须藤 fdisk -l
滚动输出,直到看到标有“EFI 系统”和“Linux 文件系统”的条目。
在这台计算机上,它们都在sda
硬盘上。 它们位于分区一和二中,如分区标签/dev/sda1
和/dev/sda2
所示。
在您的计算机上,它们可能位于不同的硬盘驱动器和分区上。 注意它们所在的分区,我们需要在接下来的命令中使用它们。
我们需要通过将文件系统附加到活动文件系统来将文件系统挂载到这些分区上。 mount
命令将为我们做到这一点。 请记住,您的分区标签可能不同,因此请确保使用fdisk
命令结果中的标签。
须藤挂载/dev/sda2 /mnt
sudo mount /dev/sda1 /mnt/boot/efi
为了使文件系统的有效根目录从您实际安装的文件系统的根目录开始,我们将使用chroot
将根目录设置为“/mnt”挂载点。 这是将已安装文件系统的根移植到活动文件系统的位置。
须藤chroot /mnt
请注意,命令提示符更改为显示您现在以 root 身份有效登录,并且您位于计算机文件系统的根目录“/”中。
我们可以通过切换到“/home”目录并检查其中存在哪些目录来轻松测试这一点。
光盘 /home
ls
您应该会看到在您的计算机上配置的每个用户的目录,包括您自己的用户帐户的目录。 这台计算机只有一个用户,称为“dave”。 如果我们在使用chroot
命令之前使用了cd /home
,我们就会进入实时文件系统的“/home”目录。
为了清楚起见,您现在以root用户身份访问您的真实文件系统,所以要小心。
要解决 GRUB 2:2.06.r322 的问题,我们需要做的就是运行grub-install
命令。
grub-安装
通常不建议像这样盲目地运行grub-install
。 在这种情况下,这是需要的。
修理或更换
如果您尝试解决不同的问题,则需要查看您的发行版的论坛,以找到适合您问题的解决方案。 如果这是一个普遍的投诉,您很快就会找到解决方案。
至少,现在您可以访问您的文件系统,您可以将数据复制到一些可移动媒体。 如果您决定完全重新安装,您将不会丢失数据。
相关:如何在 Linux 上使用“安装”命令复制文件