2009/06/30(Tue)デュアルブートにおけるNTLDR is missingのチェックポイント

2009/06/30 15:55 Software::Windows
別にある特定の機種に限った話ではないが、Windowsユーザであれば、NTLDR is missingというエラーは比較的見る機会の多いエラーだと思う。
というわけで、今回はこのTips。

はじめに

シングルブートならXPのセットアップCDでブートし、回復コンソールに入ってfixmbr, fixbootと打つのが常套手段であろう。(VistaならGUI画面からブート領域の修復だかを行うだけと、お手軽である)
が、デュアルブート(マルチプルブート)環境の場合は、「Windowsは入っているけどNTLDRはMBRに置いていない」ということもあろう。私もLinuxとデュアルブートにするため、先にXPを入れ、後からFedoraを突っ込み、MBRにはgrub2が鎮座している。
このような場合に、単純にfixmbrを行うとNTLDRのMBRに書き換わり、とりあえずXPは起動できるもののLinuxが起動できなくなるという弊害がある。
こういう場合はどうするか。

基本的には

MBRに鎮座しているブートローダーを設定をいじる。
NTLDRからWindowsとLinuxに分岐しているならWindows側のboot.ini(XPまで)やbcdedit(Vista)辺りであるし、grubやliloを使っているならLinux側の設定ファイルを設定し直せばよい。
これを行う際には各種Live Linuxがお手軽なので、安価なUSBメモリ等に放り込んでおいて損はないだろう。

が、今回私が遭遇したケースはちょっと違った。

ことのあらまし

元々FMV-BIBLO LOOX U50WN2を2台、Windows+Linuxのデュアルブート環境を整備していて、とりあえず1台完成させた。
後はパーティションごとバックアップして2台目に書き戻せばよいや~と思い、True Image等でバックアップを取り、Disk Suiteでパーティションサイズを同じように切り、True Imageで戻したのはいいが、XP側がNTLDR is missingで立ち上がらないという状況だったのである。

2台の設定を見比べてみたところで
  • grubのmenu.confも全く同一
  • ntldrやNTDETECT.COMなどのmd5sumは同じ
  • fdiskで見るBoot flagは両方同一
という状況。
2台目の方でもLinuxはきちんと動作する。

Partition table entries are not in disk order

しかし、気になったのが2台目でfdiskを起動し、pコマンドで一覧を表示したときの↑のエラーらしきコマンド。
訳せば、「パーティションテーブルのエントリがディスク順ではない」ということだが、確かにSTARTがsector1のパーティションがsda3にいる時点でおかしい。
なるほど、これでNTLDRを見に行くパーティションを混乱しているのか……。

Partition table entries are not in disk orderの直し方

Linux(LiveCDでもよい)で起動して、以下のようにやればよい。
# fdisk /dev/sda
Command (m for help): x


Expert command (m for help): f
Expert commandにおけるfとは、"fix partition order"であるので、まさにこれの修復のことである。
この後、wコマンドで保存し、再起動すれば、無事NTLDRの位置を認識し、起動することができた。
たぶん、インストールシーケンス外でパーティションをぐちゃぐちゃいじってると、このようにパーティションオーダとディスクオーダに差異ができることがあるのだろう。