{Linux}WindowsXPとLinuxのdualbootにさんざん手こずる

周りの人たちには簡単だよ?っていわれたXPとLinuxのDualBootですが、えらい苦労しました。この作業またやるかもなので、その課程をまとめたいと思います。
みなさんの参考になると幸いですw
ちなみにこの記事で壊れたからって私は責任とれませんのであしからず。

DualBootって?

複数のOSを同じパソコンにインストールすることをいいます。それ以上はMultiBootとも。Macの場合はBootcampとかが代わりにやってくれるから簡単ですがWinやLinuxだとそうもいかなくて大変。。。

DualBootする方法

コンピューターを起動する際にどのOSを起動するか選ばなくてはなりませんが、その際選択するプログラムのことをBootLoaderといいます。
BootLoaderにはおおきく二種類あってMicrosoftの提供するntloaderを使う方法とUnixlilogrubを使う方法です。
ntloaderとgrubを両方入れておくことで双方向に行き来できるみたい。
私は色々試行錯誤しましたがXPを主に使うのでntloaderでいきました。*1

そもそもなんでdualbootしようと思ったのか

今回1.5TBのHDDを衝動買いしたので、それまでつかっていた300GBのHDD(WindowsXP)をCentOSにまわそうと思いました。で、仕事でOpenGLLinux上で動かすプログラムを作っていたのですが、うちで試す環境が欲しくてGeforce8600GTSを積んでるマシンにWindowsXPとFedoraCore10をdualbootさせようと思い至ったわけです。

理想的な流れ

PartitionをWindowsXPFedoraCore、もしほしければほかのにもわりあてられるように区切ります。
XPをインストールする際MBR(MasterBootRecord)にntloaderが書き込まれます。MBRに書き込まれたBootLoaderがデフォルトで起動するようになります。*2
別のパーティッションにFedoraCoreをインストールします。この際注意があります。BootLoaderをMBRに書き込まないでそのパーティッションに書き込んでやる必要があります。もし、ここでMBRに書き込むとntloaderが上書きされて、Windowsが起動できなくなってしまいます。*3

あとは起動の設定(ntloaderの設定)をしてやるだけです。
方法は二種類。

Windows側のみで解決(BootPartを使う)

使い方に関してはhttp://nobumasa-web.hp.infoseek.co.jp/multi_boot/bootpart.htmlが秀逸。ここのリンクからBootPartをダウンロードしてください。
解凍したディレクトリをブートしているパーティッションのルートにおきます。

>cd $(bootpart.exeのあるディレクトリ)
>bootpart.exe
//Linuxの入っているパーティッションのIDを見つける。
Boot Partition 2.20 for WinNT (c) 1995-98 G. Vollant (info@winimage.com)
WEB : http://www.winimage.com and http://www.winimage.com/bootpart.htm
Add partition in the Windows NT Multi-boot loader
Run "bootpart /?" for more information

0 : C:* type=b (Win95 Fat32), size = 1670728 KB
1 : C: type=f (Linux Native), size = 16265812 KB
2 : C: type=b (Win95 Fat32), size = 1309266 KB
3 : C: type=5 (Extended), size = 1429785 KB
....
//今回の場合1であることがわかる。
>bootpart.exe 1 c:\fedora.lnx "Fedora Core"

するとfedora.lnxがc:\直下にでき、Boot.iniがこんな感じで書き換わる。

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(2)\Windows
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\Windows="Windows XP"
c:\fedora.lnx="Fedora Core"

ちなみにこのファイルは直接はみることができない。フォルダオプションを変えるのもありだが素直に、[スタート]-[コントロールパネル]-[システム]-[詳細設定]-[起動と回復]-[起動システム]
にある編集ボタンを押すのがよいと思う。
このBoot.iniの意味は「30秒以内に次のチョイスから選んでね。デフォルトはc:\Windowsを開くよ。選択肢にはWindowsXPFedora Coreがあるよ」ってなかんじ。

LinuxWindows両方。

Linuxインストーラーを起動し、"Rescue Installed System"を選択。
LinuxからWindowsへファイルを移動する必要があるが、USBメモリかフロッピー、もしくはリモートにコピーしておくのもありだろう。ネットにアクセスするかきかれるのでリモートにコピーする場合はつないでおきましょう。
このあたりはhttp://www.multiburst.net/ElectricBrain/2007/10/rescue_cdfedoragrubconfに親切に書かれてます。

chroot /mnt/sysimage/

してrootになります。
次にLinuxが入っているPartitionの最初の512byte分をファイルに書き出す処理をします。

dd if=/dev/hda1 of=fedora.lnx bs=512 count=1

ちなみにこの作業はbootpart.exeがやっていることと同じ。
このfedora.lnxをなんとかしてWindowsのc:\直下におきます。
そして
フォルダオプションを変えるのもありだが素直に、[スタート]-[コントロールパネル]-[システム]-[詳細設定]-[起動と回復]-[起動システム]
にある編集ボタンを押して

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(2)\Windows
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\Windows="Windows XP"
c:\fedora.lnx="Fedora Core"

てな感じに編集すればOK。

これが書かれていることを確認したら再起動。すると黒画面に"Windows XP"と"Fedora Core"てでてきたらOK。
両方起動することを確認しよう。

はまりどころ

今回はあちこちはまりました。その例を挙げていきます。

上記のfedora.lnx(に相当するファイル)を違うパーティッションにおくとBoot時に読めません。最初d:\fedola.lnxとおいてたので読めませんでした。この場合は
BootPart 2.60 Bootsecter (c) 1993-2005 Gilles Vollant http://www.winimage.com/bootpart.htm
Loading New partision
Bootsector from C.H. Hochstatter
Cannot load from harddisk.
Insert Systemdisk and press any key.
NTLDRが消える

色々やってたらNTLDRが消えてしまいました><
NTLDR is missing
なんて出る。
これはWindowsのinstallerから回復コンソールを起動し、
(WindowsのパーティッションをC、CDドライブをDとして)

copy d:\i386\Ntldr c:\ntldr
copy d:\i386\Ntdetect.com c:\ntdetect.com
bootcfg /rebuild
fixboot
exit

すればよいかと。このあたりは
http://support.microsoft.com/kb/318728/ja
http://kkariya.vox.com/library/post/ntldr-is-missing.html
を参考のこと

MBRが壊れた

ということもわりとよくあります。このときは

Invalid partition table

とでる。
このときはやはり回復コンソールで(壊れたMBRのあるドライブをsdaとして)

fixmbr sda
exit

としてやればOK。

cドライブが無いとBoot.iniできない。

最初前に使ってたHDDを指してたのですが(Cドライブ)、サーバー用にするために抜いたところCドライブがなくなりました。するとntloaderが「Boot.iniがないよ〜」っていって「仕方ないから*:\Windowsをデフォルトで起動するよ><」ってしてくれます。
パーティッションの番号を変えればいいのですが、コントロールパネルからでは「ブート中のパーティッション番号は変えられんないよ!」って怒られます。
むりやりレジストリをかきかえてやったところあまりに腹が立ったのかWindowsが起動しなくなりました。
というわけでWindowsを再インストールしてC:\を割り当てたところ無事ntloaderが起動しました。

一応上記の原因と対処法は私なりの解釈ですが、間違っているところがありましたら指摘していただけると嬉しいです。

*1:単にntloaderでうまくいっただけ、という説もw

*2:逆にFedora側からgrubMBRに上書きするとgrubがデフォルトで起動するようになります。

*3:もちろんgrub側からWindowsを起動してあげる方法もあります。