i386 から amd64 移行時に書き換える fstab を間違えた2008年09月20日 14時45分27秒

まさか、間違えているとは思わなかった。今まで、システムを入れ換えたりしても、書き換える fstab を間違えたことは無かった。しかも、間違えたのが一番危険な時だったとは。

今回、システムの実行速度をあげる対策として、i386 系システムで起動していたのを amd64 系システムで起動するのが目的だった。この機種は FreeBSD のブートローダと相性が悪かったので、特に気を付けなければ、再びインストールするのに莫大な時間が掛かる可能性があった。そこで、慎重を期したつもりだったが。なお、相性が悪かったのは 6.1-RELEASE の時で、それ以降にブートローダへの変更が幾つかあった。そのため、新しいリリースでは問題なく起動する可能性もある。

二スライスを FreeBSD としている。一度に二スライスを壊す作業としては、これ以外だと fdisk ぐらいしか無いぐらいの最強の間違いだった。

現在、ad4 デバイスとして認識される内蔵ディスクの第三と第四スライスに各々 FreeBSD が入っている。最近使っていたのは第四スライスに入っている物でだった。そこで、第三スライスを amd64 に変換してみようと考えた。newfs をやろうとも思ったが影響は無いに等しいと判断して、結局やらなかった。この偶然的な判断が、後に九死に一生を得る手立てとなった。

第四スライスにて amd64 向けの build が終わりインストールを始めた。


# tar cf - /etc | tar xvf - -C /mnt/local

があるので、編集するファイルを間違えると i386 と amd64 のキメラが二つも出来てしまう。間違えて、第四スライスの fstab を編集してしまった。第三スライスは amd64 の kernel が入っていて、/usr には i386 が入っている。第四スライスには、i386 のシステムが入っているが、起動するのに amd64 が入っている、第三スライスの ad4s3a から起動する様になってしまった。

第三スライスから、普通に起動すると、amd64 のカーネルが読まれた後に、ad4s4a がルートシステムとして / にマウントされる。/bin/sh が i386 なので、rc が起動できずない。最悪にも /bin/sh すら起動できないのでシングルユーザモードにすら移れない。

そして、第四スライスから起動する。i386 のカーネルが読まれて、amd64 の ad4s3a がルートシステムとして、/ にマウントされる。こちらは実行形式の書式が違うとして、rc つまり /bin/sh が起動できなかった。

何度か再起動を重ねてどちらからも起動しないのを再確認すると共に、八方塞がりかと思って一度は諦めた。次の日に試すことに。現状を再確認して、ふと気が付いたのが kernel.old だった。newfs を行なっていないので、amd64 を入れた第三スライスの ad4s3a だが、kernel.old は i386 のままの筈だと。

そこで、F3 キーを押して、第三スライスから起動。第二ローダでは、プロンプトに戻り、boot kernel.old で古い、i386 のカーネルを用いて起動する。概ね、うまくいった。しかし、/usr は amd64 のままなのでプロンプトの出てくるところまではいかない。しかし、これでシングルユーザモードの落ちることが出来るようになった。

この状況では、/bin と /sbin 以下のプログラムしか使えない。そこで、久しぶりに ed を起動して /etc/fstab を編集し、事無きを得た。

今回の失敗は、本当に危険だった。newfs をやらなかったのが偶然にも打開の鍵となった。また、普段使うことはほぼ無いが、ed はシステムを扱う上ではやはり必須項目だと思い直した次第だった。

前回