修复 UEFI 引导的 GRUB
问题与解决方法
环境
Manjaro Linux x86_64
Kernel: 6.2.10-1-MANJARO
使用 UEFI 引导
问题
在 GRUB 尝试引导 Linux 内核时,出现如下错误:
1 |
|
用户将无法进入系统。
解决方法
进入恢复系统
插入 Manjaro LiveCD, 启动 Live 系统。
确定磁盘分区
在 Live 系统中,使用 fdisk -l
查看磁盘分区情况,找到安装 Manjaro 的磁盘,假设为 /dev/sda
。
我的磁盘分区如下:
1 |
|
可以确定,/dev/sda1
是 EFI 系统分区,/dev/sda2
是系统所在分区。
挂载分区
挂载系统分区:
1 |
|
将当前系统的工具分区挂载到 /mnt
下:
1 |
|
将 EFI 分区挂载到 /mnt/boot/efi
下:
1 |
|
进入系统
1 |
|
重新安装 GRUB
1 |
|
具体参数需要根据实际情况进行修改。
在这之后
重启,进入通过 GRUB 引导系统。
在系统中使用 sudo grub-install --recheck /dev/sda
命令再次安装 GRUB,确保系统能够正常启动。
一些思考
接下来的内容是我的整个修复流程,包含了如何在搜索引擎查找问题、根据文章内容调整目标等杂碎的内容,和我在修复过程中的一些感想。
为什么会出现这个问题
不是很清楚。
在启动 Manjaro 前我不小心打开了电脑里的 Windows 系统,但没有连接移动硬盘。
按照以往的经验,这最多只会导致找不到 GRUB 的位置,手动指定 GRUB 所在分区就可以启动系统。
但这次不大一样。
在打开 GRUB 之后,尝试引导内核,就发现了这个问题。
初步解决思路
立刻格式化磁盘,重新安装 Manjaro。
我已经不是曾经那个只会重装的我了,这次我希望可以解决问题,而不是简单地重装。
首先,我 Google 了这个错误,发现了几篇内容相关的文章。
报错与我一致的文章,但没有给出解决方案。
要我删除 GRUB 和 UEFI 所在分区所有内容的文章,有点可怕,不敢这么干。
提到应该重新安装 GRUB 的文章,这还有点道理。
于是,我的目标转变为重新安装 GRUB。
重新安装 GRUB
在之前遇到找不到 GRUB 分区的问题时,在手动引导然后进入系统后,我会执行 sudo grub-install --recheck /dev/sda
重新安装 GRUB,解决这个问题。
那这次的觉得方案应该是差不多的……吧?
不对啊,这次是在 LiveCD 的系统里操作,怎么能直接安装 GRUB 呢?
这个问题比较难描述。
我先是 Google grub-install 修复 GRUB
,中文网站的内容都是关于在可以启动的系统下修复 GRUB 的,没有我需要的内容。
然后我开始求助于 ChatGPT,输入的 Prompts 是:
1 |
|
不难发现,我并没有说明我使用的是 UEFI 引导,这直接影响到了 ChatGPT 回复的准确性。
ChatGPT 给出的修复步骤与上述的相差不大,只是在挂载系统分区和工具分区后,直接尝试执行 grub-install
命令,尝试修复。
grub-install
返回错误 this gpt partition label contains no bios boot partition
把我弄得更懵了。
再次 Google 这个问题,发现了 这篇在长篇大论讲 GRUB 的文章,虽然没有给出解决方案,但它让我意识到 UEFI 和 Legacy BIOS 两种启动方式的区别。
UEFI 和 Legacy BIOS
UEFI 和 Legacy BIOS 是两种启动方式,它们的区别在于,Legacy BIOS 是在 BIOS 中直接加载内核,而 UEFI 是在 BIOS 中加载 EFI 系统,然后由 EFI 系统加载内核。
使用 UEFI 引导的系统一般都有一个 200MB 到 400MB 的 EFI 系统分区,用于存放 EFI 系统。在上述的,我的硬盘分区中可以看到。
使用 findmnt
命令可以查看当前系统的挂载情况,其中 TARGET
列就是挂载点,SOURCE
列就是挂载的分区。
EFI 分区的挂载情况为:
1 |
|
可以看到,/boot/efi
里的内容正是 EFI 系统分区的内容。(我也是刚学到这个知识的)
解决 UEFI 相关问题
在修复过程中,我是通过 Google 发现上述的问题。
这篇文章 给了我莫大的帮助。
其中提到了 EFI 分区,也提到了如何正确安装 UEFI 引导的 GRUB:
1 |
|
在补充挂载 EFI 分区、切换 Root 目录后,执行第一条命令,发现有错误。尝试执行第二条命令,发现没有错误,代表 GRUB 已经重新安装成功。
此时我想起来,在之前安装 GRUB 时,会提示 正在为 x86_64-efi 平台进行安装
,我才意识到前面的修复过程并没有去指定平台。
总结一下
总之,这就是我此次修复的心路历程。我没有研究过 UEFI 和 Legacy BIOS 的区别,也没有研究过 GRUB 的安装过程,所以在修复过程中,我是通过 Google 和 ChatGPT 的帮助才解决了这个问题。
希望这个探索过程能给你一些启发吧。
此文章以 我无所谓 By 不 By 什么 AI,对我有帮助的文章就是好文章 标识发布。