banner
三文字

方寸之间

居善地,心善渊,与善仁,言善信,正善治,事善能,动善时。
github
email
misskey

修复Arch Linux的内核缺失问题

起因#

早上打开电脑,Terminal 久违地更新一下系统,因为太久没更新,很多要更新的包,所以更新的时候打开浏览器去做别的事了,结果还没看两分钟,电脑突然黑屏了。。。什么反应都没有,但是能听到电脑还在转,也没多想,我就直接强制关机了。结果,再启动电脑,进入 grub 界面,直接不动了(一般默认 5s 自动选择),手动选择,提示:

Loading kernel linux-zen
error: file '/boot/vmlinuz-linux-zen' not found
Loading initial ramdisk
error: you need to load the kernel first
Press any key to continue...

猜测应该是因为更新内核的时候电脑被强制关机导致内核出问题了。在 Arch Linux BBS 上找到了一些解决方案,这里记录一下。

Note

我使用的是linux-zen内核,所以后面的相关内容都有-zen后缀,这个根据你自己的配置更改,一般安装的都是linux内核,去掉-zen后缀即可。

解决方案#

使用 Arch Linux 安装介质#

  1. 进入 live 环境后,连接网络,我用的是 iwd
[root@archiso]# iwctl
[iwd]# station wlan0 connect wifi-ssid # 连接指定Wi-Fi
[iwd]# station wlan0 show # 确认是否连接成功
[iwd]# exit
  1. 挂载/boot分区
mount /dev/sdaX /mnt
mount /dev/sdaY /mnt/boot
  1. chroot 系统,重新安装内核
arch-chroot /mnt
pacman -S linux-zen
  1. 重新生成 grub 引导
grub-mkconfig -o /boot/grub/grug.cfg
  1. 取消挂载分区,重启
exit
umount -R /mnt
reboot

启动之后,就可以正常进入系统了。

grub 命令行#

这个方法和上面的类似,不过不用使用安装介质

确认/分区位置#

  1. 使用ls列出电脑上所有硬盘,输出类似:
grub>ls
(hd0) (hd0, gpt1) ...... (hd1, gpt4)
  1. 确认/分区,可以使用cat/ls命令 +Tab测试,例如:
grub>ls (hd0,gpt3)/ TAB
boot usr ....

上面的输出说明(hd0,gpt3)/ 分区。

手动加载内核#

  1. 设置根分区和 grub 路径前缀
    假设(hd0,gpt3)是根分区:
grub>set root=(hd0,gpt3)
grub>set prefix=(hd0,gpt3)/boot/grub
  1. 加载内核和系统镜像
grub>cat (hd0,gpt3)/boot/grub/grub.cfg #确认`/`分区的设备名称,假设是`/dev/sda3`
grub>linux /boot/vmlinuz-linux-zen root=/dev/sda3
grub>initrd /boot/initrd-linux-zen.img
  1. 启动系统
grub>boot
  1. 重新配置 grub
    启动之后,按照第一种方法的第 2、4、5 步,在命令行下重新生成一下 grub.cfg 文件即可。

参考链接#

https://bbs.archlinux.org/viewtopic.php?id=274616

https://wiki.archlinux.org/title/GRUB#Using_the_command_shell

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。