前述の通り、 我々は MBR (セクタ 0) の構造を知っています: シグネチャ AA55、 続けて 16 バイトずつの 4 つのパーティションテーブルのエントリ、 続けてブートローダのコード。 タイプが(16進数で) 5 か F か 85 のパーティションテーブルエントリ (訳注: 5, F, 85 は順に拡張パーティション、Windows95 拡張パーティション、 Linux 拡張パーティション)は特別な意味があります。これらは、 その内部をさらに論理パーティションとして分割される空間である、 拡張パーティションであることを意味しています。 (そう、拡張パーティションとは単なる箱で、それ自身を使用することはできず、 その中の論理パーティションを使うことになります。) 拡張パーティションの一番目のセクタの位置のみが重要です。 この一番目のセクタは、四つのパーティションテーブルを含んでいます: 一つは論理パーティション、一つは拡張パーティション、そして二つは未使用です。 このようにして、ディスク全体に散らばったパーティションテーブルセクタの 連鎖構造ができあがります。 最初のセクタは 3 つの基本パーティションとひとつの拡張パーティションを 規定します。 これに続くパーティションテーブルセクタはそれぞれ、 ひとつの論理パーティションと次のパーティションテーブルセクタの 位置を規定します。
これは次のことを理解するために重要です: ディスクのパーティションを切る際に間抜けなことをした時 (訳注: パーテイションを削除してしまった時など)、 人々は「私のデータはまだそこにあるの?」ということを知りたがります。 そしてその答は決まってこうです。 「はい、まだあります。しかし論理パーティションを作成したら、 それを記述するパーティションテーブルセクタは これらの論理パーティションの先頭に書き込まれるので、 以前そこにあったデータは失われますよ。」
プログラム sfdisk は完全なチェーンを表示できます。例えば、
# sfdisk -l -x /dev/hda
Disk /dev/hda: 16 heads, 63 sectors, 33483 cylinders
Units = cylinders of 516096 bytes, blocks of 1024 bytes, counting from 0
Device Boot Start End #cyls #blocks Id System
/dev/hda1 0+ 101 102- 51376+ 83 Linux
/dev/hda2 102 2133 2032 1024128 83 Linux
/dev/hda3 2134 33482 31349 15799896 5 Extended
/dev/hda4 0 - 0 0 0 Empty
/dev/hda5 2134+ 6197 4064- 2048224+ 83 Linux
- 6198 10261 4064 2048256 5 Extended
- 2134 2133 0 0 0 Empty
- 2134 2133 0 0 0 Empty
/dev/hda6 6198+ 10261 4064- 2048224+ 83 Linux
- 10262 16357 6096 3072384 5 Extended
- 6198 6197 0 0 0 Empty
- 6198 6197 0 0 0 Empty
...
/dev/hda10 30581+ 33482 2902- 1462576+ 83 Linux
- 30581 30580 0 0 0 Empty
- 30581 30580 0 0 0 Empty
- 30581 30580 0 0 0 Empty
#
おかしなパーティションテーブルを構築することも可能です。 拡張パーティションのチェーンが自分自身を指すか、 あるいはもっと前のパーティションを指す場合、多くのカーネルはループに陥ります。 1つのパーティションテーブル内に 2つの拡張パーティションを持つことも可能です。 これはパーティションテーブルのチェーンが分岐することを意味します。 (これは例えば、5, F, 85 のそれぞれを拡張パーティションとして認識できない fdisk で、F の次に 5 を作る、という方法で可能になります) 普通の fdisk タイプのプログラムではそのような状況を取り扱うことができないので、 それを修復するためには手作業が必要となります。 Linux カーネルは、一番外側のレベルにおいて分岐を受け付けます。 これは、2つの論理パーティションのチェーンを持つことができることを意味します。 時々、これは便利です - 例えば、 一方ではタイプ 5 を使用して DOS から参照できるようにし、 もう片方ではタイプ 85 を使用して DOS から見えないようにします。 つまり、DOS の fdisk が、1024 シリンダを越える論理パーティションによって クラッシュしないようにできるのです。