へっぽこ社会人4年生がプログラミングを頑張る

へっぽこ社会人4年目がプログラミング系統を中心に書きたいことをつらつらと書きます

FreeBSDのファイルシステムの修復についての備忘録的なもの

自作PCのHDDにFreeBSDを入れて、デスクトップ環境を構築してぼちぼちと使っていました。 特に問題なく動作していたのですが、ある日、起動したらこんなメッセージが表示されました。

error 32 lba 106366
error 32 lba 475711486
No /boot/loader

FreeBSD/x86 boot
Default: 0:ad(0,a)/boot/kernel/kernel
boot:
起動しないじゃん...

とりあえず、FreeBSDのインストールCDを入れて、シングルユーザモードで起動して、 HDDをマウントしてみて、/boot/loaderがあるか、とか色々確認しましたが、 この時はどうして良いか分からず。 自分で色々ググってみたり、回りの知り合いの人達に聞いてみたりしたけれど、結局解決出来ず。 解決策が見つからず、しばらくほったらかしにしました。

解決のきっかけは、2017年8月5日に京都で開催された、 オープンソースカンファレンス(以下OSCと表記)でした。 日本NetBSDユーザーグループさんのブースを回ったときに、 エラーメッセージを見ていただき、ファイルシステムが壊れているから、 修復すれば直るというアドバイスをいただきました。 そして、帰ってから調べてファイルシステムを修復してあげ、 FreeBSDが復帰しました。

解決方法
  1. CDやUSBなどのインストールメディアからFreeBSDを起動し、シングルユーザモードを選択
  2. (マルチユーザモードのShellからでも同じように出来るとは思います...)
  3. 修復したいディスクを指定してfsck_ffs(8)を実行
    自分の環境では、HDDは/dev/ada0s1なので、実行コマンドは次のようになります。(#はプロンプト)
    # fsck_ffs /dev/ada0s1
    JOURNAL機能を利用するかなど、いくつか聞かれるかもしれませんが、 とりあえず状況に合わせてY/N(Yes/No)を選択してください。 (多分Yを選べば大丈夫だと思いますが...)
  4. 修復が完了したら、シャットダウンし、修復したディスクから起動出来るか確認
  5. 問題なく起動出来たら、修復完了です。 間違って、インストールメディアを起動しないように注意。 (直っていない場合に、直ったと思い込んでぬか喜びするのを防ぐため。 意外とやらかすかもしれないので、一応...)

FreeBSDでデスクトップ環境を構築して、ある程度開発環境も構築していたので、 起動しなくなってかなり焦りましたが、なんとか解決出来て一安心。 ただ、どのタイミングでファイルシステムがおかしくなったのか... 最後に起動したときにOSが異常終了した覚えがない... (かなり間が空いて覚えてないだけかもしれませんが...)

今回はfsck_ffs(8)を使ったのですが、ググった時は、fsck(8)の記事が出てきたので、 最初はそちらで試したのですが、以下のエラーが出て、修復出来ず...

# fsck /dev/ada0s1
fsck: Could not determine filesystem type

自分がファイルシステムに関する知識に乏しいので、 fsck(8)の使い方を間違えているのかもしれませんが... FreeBSDのユーザマニュアルにファイルシステムについて書いてあるページがあったはずなので、 これを機に、ファイルシステムについて勉強してみようかなと思います。

謝辞

京都のOSCで相談に対応してくださった日本NetBSDユーザーグループさん、本当にありがとうございました。

エンジニアさんって、本当に凄い!!