きょうの失敗
HDD のパーティションテーブルをとばしてしまった。以下、自戒を込めて状況説明。
うちのメインマシンは Windows XP と FreeBSD のデュアルブートなんだけど、FreeBSD の方は前にタイミングの悪い状態でカーネルを入れ替えたところ立ち上がらなくなって、さらにバックアップの復旧にも失敗したまま放置状態。ちなみに HDD は2台で ad0s1 と ad0s5、ad1s2 が Windows、ad1s1 が FreeBSD。
そろそろ復帰させようと急におもいたって、7.1-BETA のインストール CD から /boot だけをコピー。ソースを更新して make world (ほんとは make buildworld とかだけど)もおわって、ぶじブートもできるように。
でも放置期間中に MBR を Windows 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 のパーティションテーブルを上書きしてしまったらしい。
というあたりまで、あたりをつけた時点できょうの作業は切り上げ。われながらぐったり。