起因#
早上打開電腦,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 安裝介質#
- 進入 live 環境後,連接網絡,我用的是 iwd
[root@archiso]# iwctl
[iwd]# station wlan0 connect wifi-ssid # 連接指定Wi-Fi
[iwd]# station wlan0 show # 確認是否連接成功
[iwd]# exit
- 掛載
/
和boot
分區
mount /dev/sdaX /mnt
mount /dev/sdaY /mnt/boot
- chroot 系統,重新安裝內核
arch-chroot /mnt
pacman -S linux-zen
- 重新生成 grub 引導
grub-mkconfig -o /boot/grub/grug.cfg
- 取消掛載分區,重啟
exit
umount -R /mnt
reboot
啟動之後,就可以正常進入系統了。
grub 命令行#
這個方法和上面的類似,不過不用使用安裝介質
確認/
分區位置#
- 使用
ls
列出電腦上所有硬盤,輸出類似:
grub>ls
(hd0) (hd0, gpt1) ...... (hd1, gpt4)
- 確認
/
分區,可以使用cat
/ls
命令 +Tab
測試,例如:
grub>ls (hd0,gpt3)/ TAB
boot usr ....
上面的輸出說明(hd0,gpt3)
是 /
分區。
手動加載內核#
- 設置根分區和 grub 路徑前綴
假設(hd0,gpt3)
是根分區:
grub>set root=(hd0,gpt3)
grub>set prefix=(hd0,gpt3)/boot/grub
- 加載內核和系統鏡像
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
- 啟動系統
grub>boot
- 重新配置 grub
啟動之後,按照第一種方法的第 2、4、5 步,在命令行下重新生成一下 grub.cfg 文件即可。
參考鏈接#
https://bbs.archlinux.org/viewtopic.php?id=274616
https://wiki.archlinux.org/title/GRUB#Using_the_command_shell