2024-03-27 :-(
_ Arch Linux を pacman -Syu 後に reboot したら起動しなくなったので復旧させた
ようするにこの症状だった pacman - 再起動後に "Unable to find root device" エラー - ArchWiki
手元の計算機では LVM を使っているので 「 /dev/mapper/main-root がマウントできない 」といったメッセージであり、上記メッセージとは異なるが、ようするに initramfs がルートファイルシステムをマウントできなかった。
最後に pacman -Syu したとき initramfs を作るろうとしてエラーになっていたんだが 「 initramfs なんぞそうそう更新することはないんだから 」と無視して reboot したら見事にダメでした。 たしかそのときのエラーは mkinitcpio が
- sd-lvm2 モジュールが無い
- mount.ceph が無い
といったエラーを出していた。
sd-lvm2 や mount.ceph については /etc/mkinitcpio.conf の HOOKS
に書かれている ( mkinitcpio - 通常のフック - ArchWiki) ものであり、 HOOKS
に書かれているフックは mkinitcpio 実行時に initramfs に組み込まれるのだが、 これらがエラーとなり、 initramfs がおかしくなり(?) Arch Linux 起動時に initramfs が /dev/mapper/main-root をマウントできなくなったようだ。
sd-lvm2
についてはどうも名前が変わったらしく、 lvm2
と書くのが正しい。 自分で /etc/mkinitcpio.conf は書いたことがないので Arch Linux の誰かが sd-lvm2
から lvm2
へ変更しなかったか。
mount.ceph については HOOKS
の filesystems
が影響している。 mount.ceph という名前から分かるとおり ceph ファイルシステム ( Ceph - Wikipedia ) をマウントするためのコマンドである。 ceph ファイルシステムなんぞ使わんので filesystems から除外したいんだが mkinitcpio はどこで filesystems に ceph を含めているのか分からない。ふと /lib を見ると /lib/ceph というディレクトリや /lib/libcephなんとか.so といったファイルがある。 これかな。 どうも過去の自分が ceph パッケージをインストールしたらしい。 Arch Linux の ceph は AUR となっている ( AUR - ceph ) ので yay -R ceph-bin ceph-libs-bin
を実行してアンインストールした。
再度 mkinitcpio -p linux
を実行するとエラーなく完了した。
その後 reboot したらちゃんと Arch Linux が起動した。
Arch Linux の復旧用ブータブル USB メモリを作る
Windows 11 で作業した。
ISO イメージファイルをダウンロードし、 Rufus を使って書き込んだ。 念のため USB メモリ 2 つ用意して 「ISO イメージモード」と「dd イメージモード」の 2 つを作っておいた。結局 ISO イメージモードのものでよかったが。
hp の PC で USB ブートさせる
この手順 DVD や USB メモリから起動する方法を知りたい(文書番号:a50048) | 日本HP LIVEサポートナビ
電源 ON してすぐに ESC を連打。メニューが表示されるので boot menu を選択し、 USB デバイスが表示されてるのでそれを選択し Enter すると Arch Linux のブータブル USB メモリから起動する。
Arch Linux のブータブル USB メモリで起動しルートファイルシステムをマウントする
再起動後に "Unable to find root device" エラー に書いてあるとおり。
まずマウントしておく。 /boot はどこのデバイスか覚えてなかったんだが、最初に /dev/mapper/main-root を /mnt にマウントして /mnt/etc/fstab を見たら /dev/sda1 を /boot にマウントしていたので以下のように実行した。 この作業では /mnt/boot にマウントしないといけないことに注意。
mount /dev/mapper/main-root /mnt
mount /dev/sda1 /mnt/boot
chroot してパッケージを再インストールする。
arch-chroot /mnt
pacman -Syu mkinitcpio systemd linux
ここで pacman -Syu mkinitcpio
を実行すると、 最初に書いたように sd-lvm2 と ceph のエラーが再現するので、 そのエラーを解消 (上述) したあとに pacman -Syu mkinitcpio ...
を再度実行すればよい。
あとは exit してアンマウントして reboot する。 (reboot するならアンマウントしなくてよさそうけど。 sync されない可能性を懸念してるのかしら)
exit
umount /mnt/boot
umount /mnt
reboot