次のページ 前のページ 目次へ

13. 拡張パーティションと論理パーティション

前述の通り、 我々は 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 シリンダを越える論理パーティションによって クラッシュしないようにできるのです。


次のページ 前のページ 目次へ