きょうの失敗

HDD のパーティションテーブルをとばしてしまった。以下、自戒を込めて状況説明。

うちのメインマシンは Windows XPFreeBSDデュアルブートなんだけど、FreeBSD の方は前にタイミングの悪い状態でカーネルを入れ替えたところ立ち上がらなくなって、さらにバックアップの復旧にも失敗したまま放置状態。ちなみに HDD は2台で ad0s1 と ad0s5、ad1s2 が Windows、ad1s1 が FreeBSD

そろそろ復帰させようと急におもいたって、7.1-BETA のインストール CD から /boot だけをコピー。ソースを更新して make world (ほんとは make buildworld とかだけど)もおわって、ぶじブートもできるように。

でも放置期間中に MBRWindows XPブートローダでつぶしちゃったので、そっちの復旧もはかる。まずは GRUB を CD に焼いて、どちらも立ち上がることをたしかめてから、ブートセレクタに NTLDR をつかう方針で以下を順に実行。

  • ad1s1 のブートセクタをファイルにコピーして boot.ini に指定 → FreeBSD ブートせず
  • ad1s1a の先頭512バイトをファイルにコピーして boot.ini に指定 → FreeBSD ブートせず

ad1 は以前は単独でつかっていたので MBR には FreeBSD の boot0 が入っている。で、うっかり以下を実行。

  • ad1 の MBR をファイルにコピーして boot.ini に指定

結果、FreeBSD は立ち上がるようになったけど、Windows を立ち上げようとすると途中でリブートがかかるように。

boot0 はメニュー選択をするとつぎのブートのときに撰んだ方をおぼえておいてくれるのだけど、どうやらそのときにパーティションテーブルに何か書き込むらしい(推測)。

NTLDR → ファイル上の boot0 (中身は ad1 の MBR) → メニュー選択 → boot0 が ad0 の MBR に書き込み

で、さいごのところで ad0 のパーティションテーブルに ad1 のパーティションテーブルを上書きしてしまったらしい。

というあたりまで、あたりをつけた時点できょうの作業は切り上げ。われながらぐったり。