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 0title FreeBSD
root(hd0,0,a)
kernel(hd0,0,a)/boot/loadertitle 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コマンドを実行してやって下さい。
たぶん上手くいくはずです。