MBRの復旧覚書 / FreeBSD7.0-R and Windows

FreeBSDを入れた後で、WindowsXPを入れました。
ええ、勿論MBRは吹っ飛ばされます。

で。

簡単に復旧できると思ったら、なかなかうまく行かなかったのでメモメモ。

thanks id:goth_wrist_cut !

以下今回行った手順

私のマシンには、FreeBSDを先にインストールし、FreeBSDが第一パーティションWindowsが第二パーティションに入っております。
これを念頭に以下の記事を読んでください。

とりあえず、気合でHDDに入っているFreeBSDを起動して、ports辺りからgrubをインストールします。
ブートローダgrubが使われているDisk bootなOSを使えば良いのですが、ubuntuとかはgrub使ってないっぽいですね*1
今回私はid:viverのviver*2を使いました。
ブート選択画面が出たら'c'キーを押してコマンドモードに入ります。

grub> root (hd0,0,a) // <= kernelがあるスライス指定, "(ドライブ名,スライス,パーティション,)"
grub> kernel /boot/loader
grub> boot

これで、いつもの見慣れたBSDロゴに迎えられます。やったね☆

んで、ブートローダの設定をします

/usr/local/share/grub/i386-freebsd
から/boot/grubにstage1とstage2,またufs2_stage1_5(自分の使っているファイルシステム名_stage1_5)をコピーします。

# cp /usr/local/share/grub/i386-freebsd/stage1 /boot/grub
# cp /usr/local/share/grub/i386-freebsd/stage2 /boot/grub
# cp /usr/local/share/grub/i386-freebsd/ufs2_stage1_5 /boot/grub // <=私はufs2なので

で、menu.lstを/boot/grubに置きます。
私の環境の場合は、以下の通りとなりました。

timeout 3
default 0

title FreeBSD
root(hd0,0,a)
kernel(hd0,0,a)/boot/loader

title Windows
root(hd0,1)
chainloader +1

こんな感じ。

で、grubコマンドから以下のコマンド実行。
注意して欲しいのは、BSDが先頭パーティションにある場合、です。
先頭以外にある場合は、hd0,1,a なりhd0,2,aなり、適当に書き換えて下さい。

# root=(hd0,0,a)
# setup (hd0)

これでインストール完了!
rebootしてくだしあ!><
…だといいんですが、なかなかそうも行かず。
「disk write error」とか出ます。
うざいっす。

で、これはGEOMとかいうもんでセキュリティ上ロックしているらしいので、これを解除してやります。

$ sysctl kern.geom.debugflags

で確認してみて下さい。たぶん、0になってます。
で、これを解除するには、この値を16にしてやれば良いらしいので、セットしちゃいます。

# sysctl kern.geom.debugflags=16

これで、もっかい先ほどのgrubコマンドを実行してやって下さい。
たぶん上手くいくはずです。

*1:knoppixも使ってないとか?使っているディスクブートOSがありましたら教えてください

*2:partty.orgもいいけど、vivier開発再開まだー?