起因#
朝、コンピュータを開いて、久しぶりにシステムを更新しようと Terminal を開いた。更新が久しぶりだったので、更新するパッケージがたくさんあったので、更新中にブラウザを開いて他のことをしようとしたら、2 分も経たないうちに突然画面が真っ暗になった... 何の反応もなく、ただコンピュータが動いている音が聞こえるだけだったので、特に考えずに強制的にシャットダウンした。結果、再起動して、grub 画面に入ったら、何も動かなくなった(通常は 5 秒で自動選択される)。手動で選択すると、次のようなメッセージが表示される:
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 インストールメディアの使用#
- ライブ環境に入った後、ネットワークに接続します。私は 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