ドライブ名の順番とARCパス名の順番について

●トライブ名について
 DOSやWindows 9x系のOSでは、HDDのトライブ名は命名規則に従って順に付けられます。これは起動時に毎回行われ、ドライブ名を変更することはできません (CD-ROMドライブなどは変更可能)。
 一方、Windows NT (Windows NT/2000/XP/2003) 系のOSでは、インストール時に命名規則に従ってドライブ名が付けられ、以後はそのドライブ名がレジストリに保存されるため、起動時に毎回ドライブ名を付け直すことはしません。またドライブ名はユーザーが任意のドライブ名に変更することができます。このため、ドライブ名が変更されていると、再インストール時に別のドライブ名を命名規則に従って付けることがあります。

 例えば、既存のNT系OSからインストーラを起動して新規インストールを行う場合、あるいはアップグレードインストールを行う場合は、その既存のOSが保存しているドライブ名が新規インストール後も有効になります。この仕様を利用することで、新規インストール先のドライブ名を自由に設定することも可能です。例えば、システムドライブ (NTLDRなどがあるドライブ) をD:に、ブートドライブ (Windowsフォルダがあるドライブ) をC:にするといった、本来とは逆にすることも可能です (それがどう役に立つかは別として)。

 CD-ROMブートあるいはFDブートで新規インストールを行った場合は、必ず命名規則に従って新たにドライブ名を付け直します。
 この場合のよくあるトラブルが、インストール先のドライブ名がC:にならなかったというものです。これは、インストーラが起動した時点でインストール先のドライブが存在しなかった時に起きます。
 例えば、インストール先ドライブが存在しなくて、別のドライブが存在する場合は、インストーラがその別ドライブにC:のドライブ名を付けてしまうため、インストール中にインストール先のドライブを作成すると、そのドライブ名がD:以降になってしまいます。この場合に、MOドライブやJAZドライブなどはHDDと同じに見なされますので、MOドライブやJAZドライブがあると、そのドライブがC:になってしまいます。CD-ROMドライブの場合はちょっと違って、C:のドライブ名は付けられないようになっていますが、D:ドライブとして割り込むことはあります。

 実はこのトラブルの解決方法は簡単で、インストール中にドライブを作成した場合は、いったん [F3] キーを押して、メッセージに従ってインストールを中断し、再起動すると、再起動時に再度命名規則に従ってドライブ名を付け直すので、インストール先がC:ドライブになります。
 Windows 9xの場合は、FDISKでドライブを作成した時は必ず再起動を求められますので、このトラブルは起きませんが、再起動なしでドライブの削除や作成ができるNT系OSでは、それがトラブルの原因ともなりがちです。

●ドライブ命名規則について
 ドライブ名の命名規則は、次の順番でCから始まるドライブ名を付けます。
1) BIOSで起動用に設定されたHDDのアクティブな基本区画 (プライマリパーティション)
2) BIOSで2番目に設定されたHDDの最初の基本区画
3) 以下同様に、BIOSで3からn番目に設定されたHDDの最初の基本区画
4) BIOSで起動用に設定されたHDDの最初の論理区画
5) BIOSで起動用に設定されたHDDの2番目の論理区画
6) 以下同様に、BIOSで起動用に設定されたHDDの3からn番目の論理区画
7) BIOSで2番目に設定されたHDDの最初の論理区画
8) BIOSで2番目に設定されたHDDの2番目の論理区画
9) 以下同様に、BIOSで2番目に設定されたHDDの3からn番目の論理区画
10) 以下同様に、BIOSで3からn番目に設定されたHDDの1からn番目の論理区画
11) BIOSで起動用に設定されたHDDの2番目の基本区画
12) 以下同様に、BIOSで起動用に設定されたHDDの3から4番目の基本区画
13) BIOSで2番目に設定されたHDDの2番目の基本区画
14) 以下同様に、BIOSで2番目に設定されたHDDの3から4番目の基本区画
15) 以下同様に、BIOSで3からn番目に設定されたHDDの2から4番目の基本区画
 ここで、存在しないドライブや、存在してもそのOSから認識できないドライブはスキップします。なお、この命名規則はDOS以来のもので、基本的にDOSと変わっていません。

●ARCパス名
 ARCパス名は、Windows NT系のOSでBOOT.INIに記述する起動用パーティションの名前になります。ARCパス名中では、ドライブの順番は1から始まる数字で表します (「マルチブートのすべて」−「参考」−「NTLDRとBOOT.INI」−「BOOT.INIファイルの構造」を参照)。これはドライブ名の順番とは異なり、1台のHDDで完結しています。つまり、ドライブ名のように複数のHDDにまたがって順番付けされることはありません。また1台のHDD内の順番もドライブ名の順番とは微妙に異なります。

 ARCパス名の順番は次のとおりです。
1) そのHDDの最初の基本区画
2) そのHDDの2番目の基本区画
3) 以下同様に、そのHDDの3から4番目の基本区画
4) そのHDDの最初の論理区画
5) そのHDDの2番目の論理区画
6) 以下同様に、そのHDDの3からn番目の論理区画
 このように、ARCパス名では、常に基本区画が論理区画より優先される点が、ドライブ名の順番と違います。また、存在しないドライブはスキップされますが、そのOSから認識できないドライブであってもスキップはしません。

●ドライブの順番とは
 上記では、最初のドライブ、2番目のドライブというように表現していますが、この順番は何によって決まるのかという疑問を持った方もいることでしょう。常識的に考えると、この順番はHDD上の物理的な位置の順番と考えがちです。しかし、それは正確ではありません。正確には、基本区画の場合はMBRにあるパーティションテーブルの記述順であり、論理区画の場合は、パーティションのチェーンの順番です。
 それでは、物理的な位置の順番とパーティションテーブルの記述順、あるいはパーティションのチェーンの順番が異なることがあり得るのか? という疑問が次に出てくるでしょう。それがあるのです。

 基本区画の場合を具体的な例で示します。
1) まず、まっさらな (パーティションがまったく作成されていない) HDDに新規にパーティションを作ります。このとき、Partition1、Partition2、Partition3、Partition4を順番に作成します (すべて基本区画)。
Windows NT/2000/XP/2003のディスクの管理で普通の方法で作成する、あるいは作成ずみのパーティションをいったん隠しパーティションにしてから次のパーティションを作成するといった方法でWindows 9xのFDISKで作成する限り、この後のパーティションテーブルの順番は、作成した順番に
Partition1
Partition2
Partition3
Partition4
となります。ここでは、物理的な順番とパーティションテーブルの順番とで食い違いは起きていません。

2) 次に、作成したパーティションの内、Partition2を削除します。
ここで、FDISKを使って削除するか、ディスクの管理で削除するかで違った結 果になります。
FDISKで削除すると、パーティションテーブルのPartition2のフィールドが00 で埋められて空き領域となります。つまり次の様になります。この状態をAとします。
Partition1
空き領域
Partition3
Partition4

一方、ディスクの管理でPartition2を削除した場合は、2つ目のフィールドが後のフィールドから移動して埋められ、最後のフィールドが00で埋められます。つまり次のようになります。この状態をBとします。
Partition1
Partition3
Partition4
空き領域

Aの場合も、Bの場合も、空き領域がどこにあるかに関わりなく、パーティションの番号は同じです (空き領域は無視されるため)。

3) 次に、空き領域に再度同じサイズのパーティションを作成します (これを Partition2xとします)。
ここでもFDISKとディスクの管理では挙動が異なります。
Aの状態からFDISKでPartition2xを作成すると、パーティションテーブルは次のようになります。
Partition1
Partition2x
Partition3
Partition4

一方、
Bの状態からディスクの管理でPartition2xを作成すると、パーティションテーブルは次のようになります。
Partition1
Partition2x
Partition3
Partition4

つまり、FDISKで削除した空き領域にFDISKで再度パーティションを作成する、あるいはディスクの管理で削除した空き領域にディスクの管理で再度パーティションを作成する場合は、物理的な順番とパーティションテーブルの順番に不一致は起きません。

また、FDISKで削除した空き領域 (Aの状態) にディスクの管理で再度パーティションを作成した場合は、
Partition1
Partition2x
Partition3
Partition4
になるので、これも不一致は起きません。

問題は、もう1つの場合です。つまり、ディスクの管理で削除した空き領域 (Bの状態) にFDISKで再度パーティションを作成すると、
Partition1
Partition3
Partition4
Partition2x
になります。ここで物理的順番とパーティションテーブルの順番の不一致が起きることになります。この操作を何度か繰り返すと、物理的な順番とパーティションテーブルの記述順が似ても似つかないものになる可能性があります。

 以上で検証したのはWindows 98SE/MeのFDISKとWindows 2000/XPのディスクの管理ですが、Windows 9xの場合はWindows 98SE/Meと同じで、Windows NT/2003の場合はWindows 2000/XPと同じだと思われます。また、PartitionMagic 7.0で同じ操作を行った場合は、FDISKと同じ結果になりました。

 結論として、ディスクの管理だけでパーティションの作成/削除を行っている限り不一致は起きませんが、FDISKを使ったり、標準以外のツール (例えばPartitionMagic等) を使った場合には、パーティションの物理的な順番とパーティションテーブルの順番が異なる可能性があるということになります。

 このような食い違いが起きるとどんな問題があるかですが、具体的な症状としては、ドライブ名が変わる、ARCパス名のドライブ順が変わるといった症状となります。そして、実際に次のトラブルの発生が考えられます。
・ Windows 9Xで、アプリケーションをC:ドライブ以外にインストールしていたり、データをC:ドライブ以外に置いていた場合はアプリケーションの起動エラーやデータへのアクセス不能といったエラーが起きます。この対処方法は難しく、パーティションテーブルを手動で書き換えるか、アプリケーションの再インストール、データドライブの再変更といった方法しかありません。
・Windows NT/2000/XP/2003で、OS本体をC:ドライブ以外にインストールしている場合は、ntoskrnl.exeが見つからないなどのエラーメッセージを表示して起動できないことがあります。この対処方法はBOOT.INIのARCパス名を書き換えるだけですみます。
 この問題で厄介なのは、OSをインストールしているパーティション、あるいはデータパーティションなどとは別の、一見無関係を見えるパーティションを削除/作成した時にも、OSやデータのパーティションの順番が狂う可能性があることです。パーティション操作を行った後に、何らかのエラーが発生する場合は、この問題を疑う必要があります。

 では正しいパーティション番号をどうやって確認したらよいでしょうか?

 Windows 9xのFDISKやWindows NTのディスクアドミニストレータ、Windows 2000/XP/2003のディスクの管理画面からはパーティションの物理的な順番は確認できても、パーティションテーブルの順番を確認できません。そこで、パーティションテーブルの順番を確認できるツールを探してみたところ、以下のツールでパーティションテーブルの順番を確認できることが分かりました。いずれもDOSまたはWindows 9xのMS-DOSモードで動作します。

・Multiple Boot Manager (MBM)http://elm-chan.org/fsw/mbm/mbm.htmlの区画エディタ
 [MBM edit] で起動すると、パーティションテーブルの順番でパーティションが表示される。このとき、パーティションの物理的な順番は [Start Cyl.] が小さいものほど前にある。
・Boot Partitions for WinNThttp://www.winimage.com/bootpart.htm
 [Bootpart] で起動すると、パーティションテーブルの順番でパーティションが表示される。パーティションの物理的な順番は [Lba Pos=] が小さいものほど前にある。
・FIPShttp://www.igd.fhg.de/~aschaefe/fips/
[FIPS -t] と入力してテストモードで起動すると、やはり、パーティションテーブルの順番でパーティションが表示される。パーティションの物理的な順番は [Start Sector] が小さいものほど前にある。
・PartitionMagichttp://www.netjapan.co.jp/P_powerquest/pm/V7/info/pm70.html付属の Partition Table Editor
 [Ptedit] で起動すると、パーティションテーブルの順番でパーティションが表示される。パーティションの物理的な順番は[Sectors Before] が小さいものほど前にある。
・PartitionMagic付属のPartition Information Program
 [Partinfo] で起動すると、他のツールと異なり、パーティションの物理的な順番でパーティションが表示される。パーティションテーブルの順番は [Partition Sector #] で 0 から 3 までの数字で表示される。

 なお、論理パーティションで同様な食い違いが起こるかですが、論理パーティションの場合は、パーティションテーブルではなく、各パーティションの先頭にある拡張ブートレコードに記述されたパーティションのチェーンで順番が決まります。このチェーンは、途中のパーティションが削除されると、必ずその空き領域を飛ばして次のチェーンに繋がるようになっているのと、筆者が確認した限りでは、Windows 9xのFDISKおよびWindows 2000/XP/2003のディスクの管理どちらで再度パーティションを作成しても、必ず物理的順番でチェーンを付け直すので、物理的順番との不一致は起きないと言えます。
 ただし、標準でないツールでパーティションの作成/削除を行った場合には、論理パーティションでも食い違いが起こる可能性があります。未確認ですが、LinuxのFDISKのバージョンによっては、論理パーティションのチェーンを、論理パーティションの作成順に付けるものがあるという情報があります。