2019年7月28日に Debianが起動しなくなりました.原因は sid(unstable)と呼ばれる開発版のみに存在するバグです.
バグレポートも出ています.症状としては,システムを再起動すると" logsave not found - requires manual a fsck "と表示されるだけでシステムが起動しなくなる,という恐ろしいものになります.
Debian Bug report logs - #932935 System refuses to boot, logsave not found - requires manual a fsck
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=932935
このバグはすでに修正されています.しかし不幸にも debianが起動しなくなった場合の対処方法として,復旧手順をメモしておきます.
復旧手順の概要
パッケージのバグが原因でブートしない場合は,バグ修正版のパッケージでアップグレード(つまり上書きインストール)すれば復旧できます.
その手順は
- 無理やり手動でシステムを起動
- IPアドレスを手動設定
- 無理やり apt update して apt install
となります
この手順は,知っておくと結構役に立つので,以下詳しく手順を説明します*1
手順1: 状況の確認
Linuxの起動に失敗すると,次のような画面が表示されます.
Busybox バージョン情報 Enter 'help' for a list of built-in commands. (initramfs)
この画面では,ディスクのエラーチェックだとか,設定ファイルの修正,などが行えます.今回は手動で無理やりシステムを起動させます.
手順2: IPアドレスの付与
まず余っているIPアドレスを手動設定します
(initramfs) ifconfig eth0 IPアドレス
次にデフォルトゲートウェイを手動設定します
(initramfs) route add default gw ルーターのIPアドレス
手順3: システムの root (/) のマウント
まずマウントポイントを作成します./tmp 以下に作るのが無難だと思います.
(intiramfs) mkdir /tmp/root
ディスクをマウントします.カーネルモジュールを手動でロードする必要があります.例えば ext4 でフォーマットしている場合は,次のようなコマンドを実行します.
(intiramfs) modprobe ext4 (initramfs) mount -t ext4 /dev/デバイス /tmp/root
これでマウントできるはずです.確認は df コマンドを使います
(initramfs) df
手順4: システムの起動
chroot でディスク上のシステムに切り替えます.
(initramfs) chroot /tmp/root
本来なら /proc や /dev などをマウントしてから chroot すべきですが,今回は緊急事態なので,細かいことは省略します.
いくつか警告が出ますがそれも無視
手順5: 確認
これで bashに切り替わるはずです.apt コマンドが起動できるか確認します.
$ apt
問題なければ apt update します
$ apt update
ネットワークの設定が合っていれば,update が始まるはずです.これでバグ修正済みのパッケージ情報がgetできます
手順6: バグ修正版パッケージの上書きインストール
上記bugレポートに纏められているように,今回システムが起動しなくなった原因は e2fsprogs というパッケージのバグにあります.すでにバグは修正済みなので,修正済みのe2fsprogs を apt で上書きインストールします
$ apt install e2fsprogs
これで作業は終わりです.再起動すればシステムは元どおり正常起動するようになります.
手順7: それでも復旧できない場合
バグの原因が特定できない場合は,とりあえず更新済みパッケージを全部インストールする,つまり
$ apt upgrade
するという方法もあります.
ただし,/dev や /procを準備してない状態で apt upgrade をすると想定外の事故が起こる可能性もあります.個人的には apt upgrade は最後の手段にとっておいたほうが良いとおもいます.