研究室の計算機にFreeBSDを入れる際、使い慣れてないviでfstabに項目を追加しようとして、中身をぐちゃぐちゃにしてしまいました。
保存せずに終了するつもりが:q!の:(コロン)が打てず。 仕方なく一度保存して、pkgでemacsをいれて改めて編集しようとするも、emacs24-24.5_3,3の_(アンダーバー)が入力できず。 (# pkg install emacsでは複数のemacsを入れてしまいうまく動かないようです。*1 )
ここで英字配列としてキーボードを認識してるから_が書けないのだと気づくも、:も同じ理由で書けていなかったとまで頭が回りませんでした。 てっきりコマンドモードに移行できていないのかと思っていました。
とりあえず、fstabの問題はおいておき別の設定をし、満足して電源を落とすところから長い格闘が始まります。
結果的にどうでもいいことに悩まされていたのですが、記録に残しておかなくては気が収まりません。
解決方法
fstabはデバイスを起動時に自動的にマウントさせるための設定ファイルです。
私はそのなかのHDDを/(ルートディレクトリ)にマウントする行をぐちゃぐちゃにしてしまっていました。 もちろん、いつも通りにブートしようとするとマウントするデバイスが適切でない旨のエラーが表示され、FreeBSDは起動しません。
その時、適切なデバイスをマウントさせるよう入力モードになります。
mountroot>
ここで入力できる値はヘルプの?と形式にのっとったマウントするデバイスの名前だけです。
?を入力するとその計算機に接続されているストレージ情報が列挙されます。 その中のHDDにあたるものをマウントさせたいわけですね。
今回の私の例ですと以下のように/etc/fstabには書かれていたので、
/dev/ada0p2 / ufs rw 1 2
デバイス名は/dev/ada0p2、ファイルシステムはufs、オプションはrwとわかります。
形式は[ファイルシステム]:[デバイス名] [オプション]です。 なお、:は英字配列では[shift] + [ ; ]です。[shift] + [ ] ]はブロークンバーなんですが、フォントによっては:に見えるので注意です。
mountroot> ufs:/dev/ada0p2 rw
すると次はシェルが起動します。 正しくブートされたわけではなく、ここでエラーの原因を直せということです。
使えるエディタはviだけではないことを研究室仲間に教えてもらい、ここからはeeを使ってfstabを直しました。 eeはemacsライクなキーバインドを持ちあわせており、親切にも上方にコマンドの説明が書かれています。
ぐちゃぐちゃにしてしまったfstabを正しく直して、リブートすれば元通りにFreeBSDが起動してくれます。
他に試したこと
「fstab いじる」などで検索するとシングルユーザーモードを使えと出ます。 FreeBSDの最初のメニューで選択できるんですが、2.シングルユーザーモードでも結局
mountroot>
が表示されてしまい、本当に悩まされました。
3.Escape to loader promptでは上の問題が起こらずコマンドのようなものを打てるのですが、シェルとは違うようです。 あくまでブートに関するコマンドだけで、詳しくはFreeBSD ハンドブックをご覧ください。
別の手段として、Puppy LinuxをUSBからブートしてHDDのfstabを変更しようと試みたのですが、FreeBSDのファイルシステムGPTはPuppy Linuxで読み込めませんでした。 調べているとgdiskというコマンドでGPT内のファイルも書き込めるようです。*2 ただ、難しくて理解できてません。