ディスク上にいくつかの OS が存在する場合、 それぞれの OS は一つかそれ以上のディスクパーティションを使用します。 これらのパーティションの不一致は破滅的な結果をもたらすことがあります。
MBR には(基本)パーティションがどこに存在するかを記述した パーティションテーブルが存在します。 4つの基本パーティションのために 4つのテーブルのエントリがあり、 それは以下のようになっています。
struct partition {
char active; /* 0x80: ブート可, 0: ブート不可 */
char begin[3]; /* 最初のセクタの CHS */
char type;
char end[3]; /* 最後のセクタの CHS */
int start; /* 32 bit のセクタ番号 (0 から数え始める) */
int length; /* 32 bit のセクタ総数 */
};
(CHS は シリンダ/ヘッド/セクタを表します。)
この情報は冗長です:
24ビットの begin
および end
フィールドによってと、
32ビットの start
および length
フィールドによっての両方で、
パーティションの位置が与えられています。
Linux は start
と length
のフィールドのみを使用するので、
それゆえに 2^32 セクタまでのパーティションを取り扱うことができます。
つまり、2 TiB (= 2048 GiB) のパーティションです。
これは現在利用できるディスクの 100 倍くらい大きいので、
あと 8年間くらいは大丈夫でしょう。
(そう、パーティションは非常に大きくできます。
しかし深刻な制限があります。
自然な整数が 32bit のハードウェア(訳注: 例えば CPU が Intel x86 系統のマシン)
上の ext2 ファイルシステム上では、
2 GiB 以上のファイルは作成できないのです。)
DOS は begin
と end
フィールドを使用し、
ディスクアクセスのために BIOS INT13 コールを使用しますので、
BIOS 変換を使っても 8.4GB 以下のディスクしか制御できません。
(FAT16 ファイルシステムの制限により、
パーティションは 2.1GB より大きくできません。)
同じことが Windows 3.11・WfWG (Windows for WorkGroup)・
Windows NT 3.* にもいえます。
Windows 95 は拡張 INT13 インターフェースをサポートしており、
パーティションをその方法でアクセスする必要があることを示すための
特別なパーティションタイプを使います(b, 6, 5 の代わりに c, e, f)。
これらのパーティションタイプが使われている場合、
begin
と end
フィールドにはダミーの情報 (1023/255/63)
が格納されます。
Windows 95 OSR2 からは FAT32 ファイルシステム
(パーティションタイプは b または c)が導入され、
2 TiB までのパーティションを作成できます。
実際には何も悪くないのに「重複(overlapping)」パーティションについて
fdisk
からたわごとを聞かされるのはなぜでしょう?
やれやれ - 何か「悪い」のです:
DOS がしているように、そのパーティションの begin
と end
フィールドを見た場合、それがオーバーラップしているのです。
(そしてそれは正しくありません。
なぜならそれらのフィールドは 1024 以上のシリンダ数を格納することができません
- 1024 シリンダ以上の部分を使うと、
常にオーバーラップが発生するのです。)
しかし、Linux や、パーティションタイプが c, e, f であるパーティションの場合に
Windows 95 がしているように、
start
と length
フィールドを見る場合には、
それはまったく問題ありません。
そう、cfdisk
が納得していて Linux でしかディスクを使わないのならば、
警告は無視してください。DOS と共有している場合は注意してください。
/dev/hdx
のパーティションテーブルを見るには
cfdisk -Ps /dev/hdx
と cfdisk -Pt /dev/hdx
コマンドを使ってください。。