Failed to execute /init (error -2) でカーネルパニックした
ひさしぶりに再起動をかけたら戻ってこなくなった...
ブートローダーで initramfs を起動した後に、ブランクスクリーンになってしまった。HDD のアクセス音はしないし、LAN のアクセスランプも点滅していないので、どうしようもないと判断して強制シャットダウンする。
とりあえず、カーネルパラメータを変更して詳細なログが出るようにする。
Rufus で Arch Linux の iso を焼いて、ライブ起動するための USB を作った。マシンに差し込んで、Arch Linux をライブ起動する。
chroot して、ライブ起動環境からもとのマシンのファイルシステムにアクセスできるようにする。
code:console
$ mkdir /mnt/root
$ mount /dev/nvme0n1p2 /mnt/root
$ arch-chroot /mnt/root
$ mount /dev/nvme0n1p1 /boot
カーネルパラメータを更新して、再起動してみる。
code:/boot/loader/entries/arch.conf
title Arch Linux
linux /vmlinuz-linux
initrd /intel-ucode.img
initrd /initramfs-linux.img
options root=UUID=5bc7dcd9-c7ed-4606-b319-644a5d74e223 rw debug
どうやら Failed to execute /init (error -2) というのが出て、カーネルパニックしているのが分かった。この時点ではググったけどよく分からなかった。
https://scrapbox.io/files/673890d9055787083eb2d50a.png
画面がきたなくて味が出ている
そして、思考錯誤する。
systemd, linux カーネルの再インストール
initramfs の再生成 (mkinitcpio -P)
systemd-boot を一度やめてみる
systemd, linux の Issue を探しに行く
など...
数時間後...
原因
なんと /usr/lib64 が吹き飛んでいた!
あとで分かったことだけど正常なシステムでは /usr/lib への symlink になっている。
推測だけど、行儀の悪いパッケージが /usr/lib64 をふっ飛ばしてしまったのかな...
同じエラーコード -2 かつ同じ原因でカーネルパニックしている人がいる
すべてのパッケージを再インストールするスニペットを実行して復旧した
ちなみに /usr/lib64 を所有しているのは filesystem パッケージだった
code:console
$ pacman -Qnq | pacman -S - --overwrite '*'
犯人が分かった!
code:console
$ ll /usr/lib64
合計 4.7M
drwxr-xr-x 3 root root 4.0K 2024-11-20 17:44:12 .
drwxr-xr-x 11 root root 4.0K 2024-11-20 17:44:16 ..
drwxr-xr-x 2 root root 4.0K 2024-11-20 17:44:12 bpftune
-rwxr-xr-x 1 root root 2.4M 2024-11-16 21:15:02 libbpftune.so
-rwxr-xr-x 1 root root 2.4M 2024-11-16 21:15:02 libbpftune.so.0.1.3
yay -S bpftune-git すると /usr/lib64 の symlink が吹き飛び、上の内容に上書きされてしまった