事象
Ubuntuがフリーズしてしまったので、再起動を試したところ下記のようなエラーがでてしまった。
/dev/sda1 contains a file system with errors. check forced.
/dev/sda1 :
Inodes that were part of a corrupted orphan linked list found.
/dev/sda1 : UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
(i.e.,without -a or -p options)
fsck exited with status code 4
The root filesystem on /dev/sda1 requires a manual fsck
BusyBox v1.27.2 (Ubuntu 1:1.27.2-2ubuntu3.2) built-in shell (ash)
Enter 'help' for a list of built-in commands.
(initramfs) _
対処法
色々調べると下記コマンドで対処できるとのこと。
fsck -y /dev/sda1
fsckコマンドを実行する。 -y と指定すれば、fsckが表示するすべてのプロンプトに対して自動でyesと答えてくれる。
fsckによる修復が完了した後は
exit
で抜ける。自分の場合、"reboot"だと抜けることができなかった。
注意点
fsckコマンドで修復を試みる対象がルートファイルシステムの場合は、unmount状態で行う必要がある。
そのため通常は、Live USBでubuntuを起動し、そのルートファイルシステムをunmountしてからfsckを実行する。
なので、この画面でfsckを打っていいのかとても不安であった。
ただ、
このエラー画面は、ディスクの障害や、ブート時のエラーなどにより本来のルートファイルシステムをマウントできなくなったときに、initramfsの中のBusyBoxのシェルが起動している状態であるので、そもそもルートファイルシステムはまだマウントされていない状態。そのままfsckを実行しても問題ない。
エラーの原因
Linuxの起動シーケンスは
- 電源オン
- BIOS/UEFIの起動
- ブートローダの起動(GRUBなど)
- Linuxカーネルの起動
- initramfs(ミニルート)の展開
- 本来のrootファイルシステムのマウント
- init起動
- systemdによるサービスの起動
- ログインプロンプトの表示
上記のとおり
このエラーは、5. initramfs(ミニルート)の展開 の段階で、本来のルートファイルシステムをマウントできなかった時に発生する。
ミニルートとは、メモリ上に展開可能な小さな一時的なルートで、initスクリプトがルートファイルシステムをマウントするためのスクリプトやモジュールが含まれている。
このマウントに失敗すると、BusyBoxシェルに落ちる。
まとめ
BusyBoxで表示されるこの画面は、まだ本来のルートファイルシステムがマウントされていない状態
fsck コマンドを実行しても問題ない
ディスクの不調は疑うべき
参考
https://gihyo.jp/admin/serial/01/ubuntu-recipe/0384
https://tanoike.com/initramfs-errors-exit-fsck