カレーうどん屋

Lao_Liu's Blog

马上订阅 カレーうどん屋 RSS 更新: https://blog.laoliu.eu.org/atom.xml

修复 UEFI 引导的 GRUB

2023年4月16日 00:00

问题与解决方法

环境

Manjaro Linux x86_64

Kernel: 6.2.10-1-MANJARO

使用 UEFI 引导

问题

在 GRUB 尝试引导 Linux 内核时,出现如下错误:

1
2
3
4
5
error: sparse file not allowed.

452: out of range pointer: xxxxxxxxxx

Aborted. Press any key to exit.

用户将无法进入系统。

解决方法

进入恢复系统

插入 Manjaro LiveCD, 启动 Live 系统。

确定磁盘分区

在 Live 系统中,使用 fdisk -l 查看磁盘分区情况,找到安装 Manjaro 的磁盘,假设为 /dev/sda

我的磁盘分区如下:

1
2
3
4
5
设备            起点       末尾      扇区   大小    类型
/dev/sda1 2048 821247 819200 400M EFI 系统
/dev/sda2 821248 723390463 722569216 344.5G Linux 文件系统
/dev/sda3 723390464 983437311 260046848 124G Linux 文件系统
/dev/sda4 983437312 1000214527 16777216 8G Linux 文件系统

可以确定,/dev/sda1 是 EFI 系统分区,/dev/sda2 是系统所在分区。

挂载分区

挂载系统分区:

1
mount /dev/sda2 /mnt

将当前系统的工具分区挂载到 /mnt 下:

1
2
3
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys

将 EFI 分区挂载到 /mnt/boot/efi 下:

1
mount /dev/sda1 /mnt/boot/efi

进入系统

1
chroot /mnt

重新安装 GRUB

1
grub-install --target=x86_64-efi --efi-directory=/boot/efi --removable

具体参数需要根据实际情况进行修改。

在这之后

重启,进入通过 GRUB 引导系统。

在系统中使用 sudo grub-install --recheck /dev/sda 命令再次安装 GRUB,确保系统能够正常启动。

一些思考

接下来的内容是我的整个修复流程,包含了如何在搜索引擎查找问题、根据文章内容调整目标等杂碎的内容,和我在修复过程中的一些感想。

为什么会出现这个问题

不是很清楚。

在启动 Manjaro 前我不小心打开了电脑里的 Windows 系统,但没有连接移动硬盘。

按照以往的经验,这最多只会导致找不到 GRUB 的位置,手动指定 GRUB 所在分区就可以启动系统。

但这次不大一样。

在打开 GRUB 之后,尝试引导内核,就发现了这个问题。

初步解决思路

立刻格式化磁盘,重新安装 Manjaro。

我已经不是曾经那个只会重装的我了,这次我希望可以解决问题,而不是简单地重装。

首先,我 Google 了这个错误,发现了几篇内容相关的文章...

剩余内容已隐藏

查看完整文章以阅读更多