参考


1 システムIDの問題

 比較的よく起こるトラブルとして、Windows NT/2000/XPで作成したFATドライブをDOS/Windows 9xが認識できなかったり、逆にDOS/Windows 9xNTFSドライブを認識してドライブ名を付けてしまうことがある (もちろんそのドライブにはアクセスできない)。これはWindows NT/2000/XPのシステムIDの付け方がいいかげんなために起こる。

 システムIDはパーティションのファイルフォーマットを示すもので、DOS/Windows 9xではシステムIDを元にそのパーティションが認識可能かどうかを判断している。Windows NT/2000/XPではシステムIDを重視していないので、いいかげんなシステムIDを付けてしまうことがある (これはバグと言ってよいだろう)

 例えば、Windows 2000で作成したFAT32ドライブのシステムIDFAT16を示す「06」になっていると、Windows 9xからはアクセスできない (まれにアクセスできる場合もあるが、それはそれで別のトラブルが起きる)。あるいはNTFSドライブのシステムIDFAT16を示す「06」になっていると、Windows 9xではそのドライブをアクセス可能と見なしてドライブ名を付けてしまう。しかし実際にそのドライブにアクセスしようとするとエラーになる。

 Windwos NT/2000/XPで作成したドライブをWindows NT/2000/XPで使う分には、この不具合は表面化しないが、Windows 9xとのデュアルブート/マルチブートシステムでは深刻なトラブルを引き起こす。これを避けるためには、Windows 9xで利用するパーティションはWindows 9xで作成することが一番だ。しかし、場合によってはそれができないこともあり、その場合は、何らかの方法でシステムIDを修正せざるをえない。具体的なシステムIDの修正方法については「その2 実践編」の「Windows 2000のパーティションがFATの場合 その1」で紹介する。

 参考のために主要なシステムIDの値を表1に示す。


表1 主要なファイルフォーマットとシステムID

システムID

ファイルフォーマット

00

空き領域

01

FAT12

04

FAT16(16MB〜33MB)

05

拡張パーティション

06

FAT16(33MB〜4GB)

07

HPFS/NTFS

0B

FAT32

0C

FAT32(拡張INT 13対応)

0E

FAT16(拡張INT 13対応33MB〜4GB)

0F

拡張パーティション(拡張INT 13対応)

1B

隠しFAT32

1C

隠しFAT32(拡張INT 13対応)

1E

隠しFAT16(拡張INT 13対応33MB〜4GB)

82

Linux Swap

83

Linux ext2


2 8GB制限について

 AT互換機のBIOSは今日のような大容量HDDがない時代に設計されたため、HDDにアクセスするためのINT13命令がHDDの先頭から8GBを越える領域にアクセスできないという制限がある。このままでは8GB以上のIDE/EIDE HDDが使えなくなってしまうため、最近のBIOSではINT13を拡張して8GB以上にアクセスできるようになっているが、プログラム側でINT13拡張機能を使わない限り8GB制限が残る。なお、これはマザーボードのBIOSを使ってHDDにアクセスするIDE/EIDE HDDの場合であり、SCSI HDDでは独自のSCSI BIOSを利用するので事情は異なる。SCSI BIOSではかなり早くから8GB超に対応しているので、今日では問題ない筈だ。

 ここでもう1度「その1 理論編」の「Part2 OSの起動プロセス」を見て欲しい。

 BIOSが最初のHDDMBRを読み込む際はINT13拡張を使わない。しかし、AT互換機ではMBRは必ずHDDの先頭にあるので、当然8GB以内であり問題はない。


マスターブートプログラムの問題

 マスターブートプログラムはわずか446バイトの小さなプログラムなので、自分自身でディスクアクセスすることができない。したがってディスクアクセスにはBIOSの助けが必要になる。その際、パーティションブートセクタがHDDの先頭から8GBを越える位置にあると問題が起こる可能性がある。つまり、マスターブートプログラムがINT13拡張を利用してディスクアクセスを行う場合は8GB超の位置にあるパーティションブートセクタにアクセスすることができるが、INT13拡張を使わない場合は8GB超の位置にあるパーティションブートセクタにアクセスできない。パーティションブートセクタにアクセスできなければOSを起動することはできないという結果になる (図1)


図1 INT 13では8GB超の位置にパーティションブートセクタにアクセスできないが、INT 13拡張を使えばアクセスできる


 このような問題が起こるのは、マスターブートプログラムには、INT13拡張を使うものと使わないものとがあるためだ。なぜそんなことが起きるのか?

 実はHDDが出荷されるときにはMBRは書き込まれていない。それではいつMBRが書き込まれるのかだが、それは、DOS/Windows 9xの場合は、FDISKを使って、そのHDDに最初にパーティションを作成する際であり、Windows NT/2000/XPの場合は、そのHDDに署名が書き込まれる際だ。署名というのはWindows NT/2000/XPの持つ機能で、Windows NT/2000/XP上でそのHDDを使用するためには、MBR内の普通は使われない特別な場所に4バイトの特別な記号を書き込む必要がある。この署名はDOS/Windows 9xやその他のOSでは利用されない場所に書き込まれるので、署名を書き込んでも他のOSには影響しない。

 MBRの内、パーティションテーブルはパーティションが作成/削除されると、当然その内容が書き換えられる。一方、マスターブートレコードはいったん書き込まれた後は、明示的に書き換えない限り、勝手に書き換えられることはない。ただし、DOS/Windows 9xでは、インストールの際にマスターブートプログラムを書き換えることがある。

 明示的にマスターブートプログラムを書き換えるプログラムが、DOS/Windows 9xではFDISK /MBRコマンドであり、Windows 2000/XPでは回復コンソールにあるFIXMBRコマンドだ。Windows NTにはこうしたコマンドは存在しない。

 そして、DOS/Windows 95およびWindows NTでマスターブートプログラムを書き込んだ場合は、INT13拡張に対応していないマスターブートプログラムが書き込まれる。一方、Windows 95 OSR2以降 (Windows 98/98 SE/Meを含む) およびWindows 2000/XPでマスターブートプログラムを書き込んだ場合は、INT13拡張に対応したマスターブートプログラムが書き込まれる。

 ただし、Windows 95 OSR2以降で書き込んだマスターブートプログラムとWindows 2000/XPで書き込んだマスターブートプログラムには微妙な違いがあり、その違いがトラブルの原因ともなる。そのトラブルとは、Windows 2000/XPで作成した8GB超の位置にあるパーティションにOSをインストールすると、Windows 9x OSR2以降で書き込んだマスターブートプログラムではOSIPLをロードできず、Windows 2000/XPで書き込んだマスターブートプログラムならロードできるという現象が起きることがある。

 この原因を調査したところ、システムID0C (FAT32X) または0E (FAT16X) の場合はOSを起動でき、07 (NTFS) の場合は起動できないということが分かった。これは実際にインストールされているOSが何であるか、ファイルシステムが何であるかに関わらず、システムIDがどうかだけで決まる。したがってWindows 9xで作成されたFAT16X/32Xパーティションの場合は、システムIDが正しく付けられるので問題なく起動できる。一方、Windows NT/2000/XPで作成されたパーティションの場合は、システムIDがいいかげんで (「1システムIDの問題」を参照)、実際のファイルシステムがFAT16X/32XであってもシステムIDが正しい0E/0Cでない場合があり、その場合は起動できない。またNTFSのパーティションでシステムIDが正しい07の場合は起動できず、システムIDが間違った0E/0Cになっていると起動できてしまうといったおかしな現象となる。なお、パーティションの先頭が (パーティションブートセクタが) GB以内 (正確には7.84GB以内) にある場合は、システムIDに関わらず起動できる。

 システムID06 (FAT16)0B (FAT32) のときは、8GB超からは、ほとんどの場合起動できないが、まれに起動できることがある。これは極めてまれで再現性がないため、その理由を突き止めることは現在できていない。

 いずれのシステムIDの場合も、Windows 2000/XPで作成したマスターブートプログラムでは起動できるので、8GB超の位置にパーティションを作成した場合はWindows 2000/XPのFIXMBRコマンドでマスターブートプログラムを書き込んでおいた方が確実だ。


IPLOSローダーの問題

 IPLOSに依存するが、IPLによってはINT13拡張に対応していない場合がある。INT13拡張に対応していないIPLの場合、HDDの先頭から8GBを越える位置にあるOSローダーにアクセスできない。このことは、パーティションブートセクタが8GB越の位置にある場合だけでなく、例えパーティションブートセクタが8GB以内にあっても、OSローダーのファイルが8GB超の位置にあると、OSローダーをロードできず、結果としてOSの起動に失敗する。

 Windows NTIPLがまさにこれに当たる。したがってWindows NTをインストールする場合は、NTLDRBOOT.INIが格納されるパーティション (C:ドライブ) を先頭から8GB以内に納める必要がある。実はこの他に、Windows NT 4.0SP3以前では、NTLDRが2GB超の位置にあるとIPLNTLDRをロードできないというバグがあるが、これはSP4で修正されている。

 同様にOSローダーがINT13拡張に対応していないと、8GB超の位置にあるOS本体を起動することができない。Windows NTOSローダーのNTLDRがその例で、WINNTフォルダなどのWindows NTシステム本体をインストールするパーティションが8GB超にあるとOS本体を起動できない (図2)。この他に、Windows NT 4.0SP4以前では、Boot.iniファイルにmulti()構文が使用されていて、カーネルが4GB超の位置にあると、NTLDRがカーネルをロードできないというバグがあるが、これはSP5で修正されている。


図2 IPLがINT 13拡張に対応していないと8GB超の位置にあるOSローダーにアクセスできない。またOSローダーが8GB以内にあってIPLからアクセスできても、OSローダーがINT 13拡張に対応していないと8GB超の位置にあるOSのカーネルにアクセスできない


 結局のところ、Windows NTでは、標準的な方法を使う限り、起動用のパーティション (NTLDRBOOT.INIのあるパーティション) Windows NT本体をインストールするパーティションの両方を、HDDの先頭から8GB以内に納める必要がある。


GB制限を克服する方法

 もう一度OSごとに、8GB制限についてまとめておくと、Windows 95 OSR2以降、Windows 98/98SE/Meではマスターブートプログラムを含むすべてが8GB超に対応している。Windows NT 4.0SP4以降ではカーネル以降が8GB超に対応しているが、マスターブートプログラム、IPLOSローダーが8GB超に対応していない。Windows 2000/XPではマスターブートプログラムを含めてすべてが8GB超に対応している (表2)


表2 OSによる8GB対応状況


 8GB超に対応していないマスターブートプログラムを8GB超に対応させるのは簡単だ。Windows 2000/XPFIXMBRコマンドを実行するだけでよい。これだけで、8GB超の位置にある基本パーティションからWindowsを起動できるようになる。Windows 95 OSR2以降のFDISK /MBRでも8GB超に対応させることはできるが、実際に8GB超のIPLをロードできない場合があるので、Windows 2000/XPのFIXMBRコマンドを使った方がよい。

 一方、Windows NT 4.0 SP4以降を8GB超に対応させるためには、まずWindows 2000/XPのFIXMBRコマンドを使ってマスターブートプログラムを8GB対応にする。次に、IPLWindows 2000/XPのものに置き換える必要がある。その方法には、パーティションをWindows 2000/XPでフォーマットするか、Windows 2000/XPの回復コンソールでFIXBOOTコマンドを実行するという2つの方法がある。新規にWindows NTをインストールするパーティションを作成するなら前者がよいだろうし、すでにWindows NTのパーティションがある場合は後者がよいだろう。さらにOSローダーを8GB超に対応させるためには、Windows 2000/XPのNTLDRおよびNTDETECT.COM (SCSIを使っている場合はNTBOOTDD.SYS) Windows NTに上書きコピーする。これでWindows NT 4.0 SP4以降を8GB超に対応させることができる。

 Windows 95以前、Windows NT 4.0 SP3以前は8GB超に対応させることはできない。


次の課題:128GB制限

 Windows 2000の登場により、8GB制限が解決可能となった。これで一安心かと言えば、そうでもない。というのは、8GBの次に128GBの制限が控えているからだ。この128GB制限というのは、現在のIDE HDDのアクセス方法が28ビットのLBA方式で行われているため、228乗×512 (セクタ容量) バイトまでしかアドレス指定ができないためだ。Windows NT/2000/XPでは、OS起動後はBIOSを使わずHDDにアクセスするので、その際はこの制限は起きない。しかし、OSの起動の際はBIOSを利用するので、起動時にこの制限が起きる。またSCSI HDDではこの制限はない。

 現在 (2001年6月) 100GBHDDが製品化されており、ほぼ毎年容量が2倍となっていることを考えると、2002年には128GBを越える容量のHDDが製品化されるだろう。しかし、このままでは128GBを越えるHDDが場合によっては使えないことになってしまうので、LBAアクセスを48ビットに拡張することが検討されている。おそらく128GB超のHDDが製品化されるころには48ビットLBAが規格化されている筈だが、これにはBIOSなどの対応も必要になるので、その移行期には8GB制限と同様の混乱が起こることが予想される。


3 NTLDRとBOOT.INI


NTLDRの働き

 IPLNTLDRに制御を渡すと、まずNTLDRがそれまで16ビットモードで動作していたCPU32ビットモードに切り替える。次にNTLDRが存在する同じパーティションのルートディレクトリからBOOT.INIファイルを読み取り、その内容に合わせてOS選択メニューを表示する (BOOT.INIに複数のOSが設定されていない場合は、すぐに次の処理に移る)OS選択メニューでユーザーがOSを選択すると、そのOSに合わせた処理に移る (ユーザーがOSを選択しない場合は、一定時間後にデフォルトのOSが選択されたものとみなす)

 OS選択メニューでWindows NT/2000/XPが選択された場合は、PCのハードウェア情報を収集するために、やはり同じパーティションのルートディレクトリに存在するNTDETECT.COMを実行する。そして、NTDETECT.COMが収集した情報をNTOSKRNL.EXEに渡してスタートアップ画面を開始する。以下、NTOSKRNL.EXEによりOSが起動する。なお、PCSCSIデバイスが接続されている場合は、この処理中に同じパーティションのルートディレクトリにあるNTBOOTDD.SYSを使ってSCSIデバイスにアクセスする。

 OS選択メニューでWindows NT/2000/XP以外のOSが選択された場合は、通常は同じパーティションのルートディレクトリにあるBOOTSECT.DOSファイルをロードし、それに制御を渡す。BOOTSECT.DOSファイルはWindows NT/2000/XPがインストールされる前のパーティションブートセクタをファイル化したもので、DOS/Windows 9xWindows NT/2000/XPのデュアルブートシステムの場合は、DOS/Windows 9xのパーティションブートセクタがファイル化されている。したがって、NTLDRからWindows NT/2000/XP以外のOSを起動するためには、このBOOTSECT.DOSファイルが重要な意味を持つ。このファイル名は変更可能であり、複数のパーティションブートセクタファイルを指定することが可能だ。この辺の応用については「その2 実践編」で紹介する。


BOOT.INIファイルの構造

 BOOT.INIファイルはシステムパーティションのルートディレクトリに隠しファイル、読み取り専用ファイルとして存在する。内容は単なるテキストファイルなので、テキストエディタで編集することができる。代表的なBOOT.INIファイルの内容を次に示す。


[boot loader]

timeout=30

default=multi(0)disk(0)rdisk(0)partition(2)\WINNT

[operating systems]

multi(0)disk(0)rdisk(0)partition(2)\WINNT="Microsoft Windows 2000 Professional" /fastdetect

C:\ = "Microsoft Windows"


 このBOOT.INIファイルの場合は次のOS選択メニューになる。


画面1 NTLDRによるOS選択メニューの例


 BOOT.INIファイルには2つのセクションがあり、boot loaderセクションには自動的に起動するまでの時間 () と自動起動するデフォルトのOSが記述されている。Operating systemsセクションには起動可能なOSがすべて1行に1つづつ記述されている。起動可能なOSの記述の内、= の右側 " " で囲まれた部分はNTLDROS選択メニューに表示される文字列になっている。この部分は自由に変更できるので、分かりやすいように書き換えておくとよいだろう。例えば「Microsoft Windows」を「MS Windows Me」と書き換えるとか。さらに画面表示文字列の右側 / の後には、起動オプションが記述できる。上の例で「/fastdetect」というオプションが指定されているが、これはWindows 2000/XPの起動時にシリアルマウスの検索をしないというオプションだ (Windows NTでの「/NOSERIALMICE」オプションと同じ)


 multi(0)disk(0)rdisk(0)partition(2)\WINNTという部分は、ARC (Advanced RISC) パス名と呼ばれるもので、Windows NT/2000/XPのカーネルがインストールされているドライブとフォルダを指し示している。上記の例では最初のHDDの2つ目のパーティションの\WINNTフォルダにカーネルが存在するという意味だ。ARCパス名は次のように表現される。

multi(W)disk(X)rdisk(Y)partition(Z)\systemroot

 ここでWはアダプタ番号を示すが、複数のアダプタがあっても通常は0になる。

 Xは必ず0でなければならない。

 Yはアダプタのディスクの番号で、一般的には複数のHDDが存在する場合、BIOSで設定された起動順に0から3のどれかになる。

 Zはパーティション番号で、HDDの先頭位置から順に1からの番号が与えられる (0からでないことに注意)。ただし、基本パーティションの位置が論理パーティションより後であっても、常に基本パーティションに論理パーティションより前の番号が与えられる。また複数の基本パーティションがある場合は、その順番はHDDにおける物理的な位置によらず、MBRのパーティションテーブルに記述されている順番により番号が付けられる。


 ARCパス名には、上記のmulti構文の他に、scsi構文 (scsi(W)disk(X)rdisk(Y)partition(Z)\systemroot) やシグネチャ構文 (signature(wwwwwwww)disk(X)rdisk(Y)partition(Z)\systemroot) もあるが、あまり一般的ではないので説明は省略する。詳細はWindows 2000 Professionalリソースキット、あるいはWindows NT 4.0 Workstationリソースキットを参照していただきたい。なお、ARCパス名が間違っているとWindows NT/2000/XPが起動できず、画面2のようなエラーメッセージが表示される。


画面2 ARCパス名が間違っている場合のエラーメッセージ


 こうしたエラーメッセージが表示された場合は、ARCパス名のWXYZのどれか (特にYZ) が間違っているの可能性が高いので、ARCパス名が正しいかを確認し、間違っていたら修正しよう。Windows 2000のβ版やRC版では結構このエラーが起きたが、製品版では筆者は一度も経験していない。ただし、Windows NT/2000/XPのインストール後にHDDを追加したり、パーティションを追加/削除したりすると、ARCパス名が正しいドライブを指さなくなる場合がある。この場合は、自動的に修正してはくれないので、自分で修正しなければならない。デュアルブート/マルチブートではこうした修正は頻繁に必要になるので、正確なARCパス名の付け方を覚えておこう。

 BOOT.INIファイルの最後の行「C:\ = "Microsoft Windows"」はWindows 9xを起動するための記述だ。

 この記述は「C:\BOOTSECT.DOS = "Microsoft Windows"」と同じ意味で、BOOTSECT.DOSが省略された場合はデフォルトでBOOTSECT.DOSファイルを読み込むことになっている。BOOTSECT.DOSファイルが読み込まれた後は、そのIPLに制御を渡し、IPLが通常のWindows 9xを起動する場合と同じにOSローダー (IO.SYS) をロードする形になる (「その1 理論編」の「Part2 OSの起動プロセス」を参照


4 よくある誤解


複数のHDDがある場合

 8GB制限について、よくある誤解に、複数のHDDがある場合、最初のHDDの容量が8GB以上あると、2つ目のHDDは8GB超になるため起動できないというものがある。しかし、8GB超の問題が起きるのは同じHDD内でのことなので、別のHDDには影響しない。もちろん2つ目のHDDが8GB以上の容量であれば、同様の制限があるのだが、あくまでも個々のHDDで8GB制限があるということだ。


システムパーティションとブートパーティション

 また、よくある誤解、というより混乱に、システムパーティションとブートパーティションの混同および取り違えがある。WindowsつまりMicrosoftの用語法では、OSが最初に起動するアクティブな基本パーティションを「システムパーティション」と呼び、OS本体をインストールしたパーティションを「ブートパーティション」と呼んでいる。システムパーティションはC:ドライブとなるパーティションであり、OSローダーなどのOSをブートするために必要最低限のファイルが置かれる。一方、ブートパーティションにはOSのカーネルを含むシステム本体が置かれる。ブートパーティションはシステムパーティションと同じC:ドライブに置くことも、D:ドライブ以降の任意のドライブに置くことも可能だ。

 このように、OSのブートに使われるファイルが置かれるパーティションがシステムパーティションであり、OSのシステムが置かれるパーティションがブートパーティションと呼ばれるのだから、間違えるなという方が無理かもしれない。雑誌などを見ても、これを逆に記述している例が多いので、その言葉でどちらのパーティションを指しているのかを常に注意しよう。

 システムパーティションとブートパーティションに関して、よくある誤解として、システムパーティションとブートパーティションを別ドライブにした場合、ブートパーティションが8GB超の位置にあると起動できないというものがある。これは少なくともWindows 95 OSR2以降、Windows 2000/XPでは間違いだ。その理由はOSの起動プロセスをよく見て貰えば分かる (図3)


図3 システムパーティションとブートパーティションが異なる場合のOS起動プロセス


 マスターブートプログラムがIPLをロードする際には、IPLがシステムパーティションの先頭、つまり8GB以内にあるので、例えマスターブートプログラムが8GB超に対応していなくても問題なくアクセスできる。そしてIPL以降は8GB超に対応しているので、ブートパーティションが8GB超の位置にあっても問題はない。

 Windows NTの場合は少し事情が異なる。マスターブートプログラムからIPLへのアクセスは同様に問題ない。IPLからNTLDRへのアクセスは、システムパーティションが8GB以上のサイズの場合に問題が起こる可能性がある。またNTLDRからカーネルへのアクセスは確実にできなくなる。この対処法については「8GB制限を克服する方法」を参照していただきたい。


Windows 9xOS本体を別ドライブにインストール

 またWindows NT/2000/XPではOS本体をC:ドライブ以外にインストールできることはよく知られているが、Windows 9xの場合、OS本体をC:ドライブ以外にインストールできないという記述を雑誌などでもよく見かける。これは明らかに間違いだ。筆者はWindows 95の時代から (もっと遡ればWindows 3.xのときから) OS本体をD:ドライブ以降にインストールしていたので、こうした雑誌の記述を見ても、単純な間違いとして気にかけていなかったのだが、あまりに間違った記述が多いので、どうやらWindows 9xOS本体をC:ドライブ以外にインストールできないということが常識として流布しているらしいと気がついた。そこで、Windows 9xOS本体をC:ドライブ以外にインストールする方法を次に説明しておこう。

 Windows 9xのインストールの途中で、インストール先のフォルダを指定する画面が出てくる (新規インストールの場合だけ。アップグレードインストールの場合はこの画面は出ない)。このWindows Meセットアップ画面ではデフォルトでインストール先として「C:\Windows」と表示されている (画面3)。ここで「E:\Windows」とか「D:\WinMe」といった指定が可能だ (画面4)


画面3 Windows Meのインストール中に表示されるインストール先指定画面


画面4 インストール先としてD:\WINMEを指定した例


 Windows 9xのバージョンによっては、デフォルトのインストール先として「\Windows」とドライブ名なしで表示される場合がある。これがインストール先のドライブが指定できないという誤解を生んだ原因ではないかと想像するが、この場合でも、「E:\Windows」、「D:\Win98」というドライブ名を含めた指定が可能なので、Windows本体を別ドライブにインストールできないわけではない。

 Windows 9x本体をC:ドライブ以外にインストールすることで、デュアルブート/マルチブートの幅が広がる。これについては「その2 実践編」で紹介する。

 ただOSローダーは必ずC:ドライブになければならないため、C:ドライブがそのOSからアクセス可能なファイルフォーマットである必要があるということに注意しなければならない。例えば、C:ドライブにWindows 98を、D:ドライブにWindows NT 4.0をインストールする場合、Windows NTOSローダー (NTLDR) C:ドライブに置かれるので、C:ドライブをFAT32でフォーマットすると、Windows NTが起動できなくなる。あるいはC:ドライブにWindows 2000/XPを、D:ドライブにWindows 98をインストールする場合、Windows 98OSローダー (IO.SYS) C:ドライブに置かれるので、C:ドライブをNTFSでフォーマットすると、Windows 98が起動できなくなる。


5 FDISKによるアクティブ設定の不具合

 「その3 応用編」の「Windows 2000Windows Meのインストール」の手順2では、FDISKを使ってアクティブパーティションの変更を行った後、Windows 2000が起動中にSTOPエラーになる現象が発生した。この状態でもセーフモードでは起動でき、一旦セーフモードで起動してから再起動すると回復する。

 この原因について調査したところ、FDISKのとんでもない不具合が原因していることが分かった。具体的には、アクティブ属性はパーティションテーブルの先頭1バイトが80 (アクティブ) 00 (非アクティブ) かを設定するだけのことであるのだが、FDISKを使ってアクティブパーティションを変更すると、アクティブ属性フィールドだけでなく、パーティションの開始セクタ/シリンダ、終了セクタ/シリンダのフィールドまで変更されてしまう (画面5、6。MBRの見方については「その5 上級編」の「Part2 MBRの構造」を参照)


画面5 FDISKでアクティブパーティションを変更前のMBR


画面6 FDISKでアクティブパーティションを変更した後のMBR


 実際には、LBAモードのハードディスクの場合は、ハードディスクの先頭からの相対セクタ値を使ってアクセスするので、開始セクタ/シリンダ、終了セクタ/シリンダの値は重要性を持たないし、Windows Meでは問題なく起動できる。しかし、Windows 2000ではこの値が間違っているとSTOPエラーになってしまう。

 本来アクティブ属性だけを変更するはずの機能が別のフィールドまで変更してしまうというのは、ほとんどバグと言ってよいだろうが、「その3 応用編」のような変則的なパーティション構成の場合は、何が起きても不思議ではないと覚悟しておく必要がある。このFDISKの不具合にしても、これまでの経験では、一般的なパーティション構成の場合に問題が起きたことはない。「その3 応用編」のような特殊なパーティション構成のときだけ起こる不具合と思われる。

 ついでに、Windows 9xのバージョンによるFDISKの違いも調べたところ、Windows 95 (無印) およびOSR2ではこの不具合は起きなかった。Windows 98/98SE/Meでこの不具合が起きる。またMBMでアクティブパーティションを変更しても不具合は起きない。なお、「その3 応用編」の「変則的なパーティションの作成方法」の手順12FDISKを使ってパーティションをアクティブにしているが、これは問題なかった。もし不安であれば、ここでもFDISKを使わずMBMを使うとよいだろう。