タイトルの通り、マシンのバッテリーが死んでしまった。悪いタイミングでバッテリーが死んでしまったため、マシンのシステム (Arch Linux) が壊れてしまった。その復旧の記録と、バッテリー換装作業の記録を残しておく。今回はシステム破壊と復旧について。
先に教訓をまとめておくと:
- システムアップデートは確実な電源を確保したうえでやろう
- Linux をブート可能な USB メディアはいつでも使える状態にしておこう
です。
かんたんにまとめると、こんなことが起こった:
- yay でシステムアップデート中にバッテリーが死んでマシンがシャットダウンした
- タイミングが悪かったのか、ブートイメージが消えた
- ブートイメージがないのでマシンを起動できなくなった
まず、何はともあれブートイメージを復旧させなくてはならない。というわけで以下のようなことをやった:
- Arch Linux のインストール用に作っていた USB メディアでブート
- / パーティションをマウントする
- LUKS を使っているので事前に
cryptsetup open --type luks hogehoge
が必要だった
- LUKS を使っているので事前に
- /boot パーティションをマウントする
- / をマウントした場所へ
arch-chroot
- /usr/lib/modules/6.1.7-arch1-1/vmlinuz を /boot にコピー
- mkinitcpio -g /boot/initramfs-linux.img -k /boot/vmlinuz-linux
- 念のため linux-lts パッケージ関連のファイルにも同様の操作
- もろもろアンマウントしてリブート
これでマシンが立ち上がるところまで復旧できた。
yay の途中で強制的にシャットダウンしてしまったため、pacman のローカルデータベースが破損したような状態になっていた。 yay をやり直そうとしても、署名があわないとかいうエラーが出てしまう。エラーが出るパッケージのローカルキャッシュの sig ファイルが空っぽになっており、この辺が原因のように見える。
ここから色々やってさらに破壊を進めたり、どうにか復旧したり、また壊れてしまったりを繰り返した。最終的には Arch Wiki のPacman/ローカルデータベースの復元に従って復旧できた。こちらを参考に操作するのがよいと思う。
バッテリーの死亡タイミングがほんの少し前か後ろにずれていれば、こんなすったもんだもなかったはず。この日は他にも小さめのアンラッキーが続いて、まぁそういう日だったんだろう。
教訓としては冒頭に書いた通り。もうやりたくない。