そもそもこの記事を書くに至ったきっかけ
やらかした
自宅で運用している Raspberry Pi につないだ USB HDD を一個減らしたんだけど、fstab をいじるのを忘れた。
結果起きたこと
SSH でログイン不可能な状況に!
通常ヘッドレスで運用してるのだけど、慌ててディスプレイを繋いでエラーを見てみたら、何やら emergency mode とやらに入っている。
キーボードを繋いでキーを押しても同じエラーメッセージをぐるぐるしてて、ディスプレイとキーボードを繋いでも復旧作業できず。
対応したこと
起動不能になった Raspberry Pi の micro SD を引っこ抜いて、別の Raspberry Pi に USB カードリーダー経由で接続。
んで、適当なディレクトリにマウントして、起動不能になった Raspberry Pi の fstab を以下のように変更。
/dev/sdb1 /mnt/hoge ext4 defaults 0 0
/dev/sdb1 /mnt/hoge ext4 defaults,nofail 0 0
これで元のマシンに micro SD を差し込んで起動しなおしたところ、マウント時のエラーを無視して復活。
あとから何が起きたものかと、fdisk -l で見てみたら、/dev/sdb1 に今までつながってたドライブが /dev/sda1 に引っ越してた。
調べて分かったこと
どうやら、fstab に書かれているドライブが見つからなかったりエラーがあったりすると、Linux はあっさり起動を諦めて emergency mode に入るらしい?
(ディストリビューションによって違うのかもしれませんが、やらかし起点の取り急ぎ調査なので、詳しい方いたら教えてください。)
ベストプラクティス
Linux において、取り付け取り外しが行われる類のディスクを fstab でマウントするときは、nofail オプションを付けとくとよさげ。
多分、クラウド上の仮想マシンとかでも、仮想 VHD をマウントする設定を fstab に書いた後にクラウド側の管理操作で取り外して、うっかり OS をリブートしてしまったら同じような状況に陥る気がする。