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

3. ディスクジオメトリとパーティション

コンピュータのディスク上に複数のOSがある 場合、それぞれが一つ以上のパーティションを使うことになります。 こういったパーティションがどこにあるかを、それぞれが同じように把握できて いないと、悲惨極まりない結果になります。

MBR には、パーティションテーブルがあります。パーティションテー ブルはどこにプライマリパーティションがあるかを記述します。テーブルは 四つの要素を持っており、四つのプライマリパーティションを記述 できます。要素は以下のような構造になっています。

struct partition {
        char active;    /* 0x80: bootable, 0: not bootable */
        char begin[3];  /* CHS for first sector */
        char type;
        char end[3];    /* CHS for last sector */
        int start;      /* 32 bit sector number (counting from 0) */
        int length;     /* 32 bit number of sectors */
};
(ここで、 CHS は Cylinder/Head/Sector の略です).

この情報は、冗長です。というのは、パーティションの位置は、24bit の 開始位置、終了位置の他に、32bit の開始位置、長さ情報が与えられてい るのです。

Linux は、startと、lengthフィールドだけをつかいます。ですから、2の32乗 セクターまでのパーティションを使うことができます。これは 2 TB (テラバイト:1000GB)にあたり、現在のハードディスクの容量の100倍に あたります。ですから、あと10年くらいは大丈夫でしょう。

残念なことに、INT13 BIOS 呼び出しは、3バイトからなる CHS 情報 を使います。この CHS 情報は、 10bit をシリンダ番号指定に、8bit をヘッド番号指定に、6bit を トラックセクタ番号指定にわりふっています。 有効なシリンダ番号は、0-1023 で、同様にヘッド番号は 0-255、 トラックセクタ番号は1-63 です(トラック上のセクタ番号は 0 ではなく 1 から数えます)。この 24 ビットを使用すると、 8455716884 バイト(7.875GB)を読み書きできます。1983 年 当時のディスクの 200 倍です。

さらにまずいことに、標準 IDE インターフェースはトラックあたり 256セクター、65536シリンダ、16ヘッドまでを許します。これ自体は、 2^37=137438953472バイト(128GB)までの読み書きを許します。しかし、 BIOS の 制限である、63 セクター、1024 シリンダーと組み合わせると、 たった 528482304 バイト (504 MB) しか、読み書き可能でなくなります。

これは、今日のディスクを使う上では十分ではありません。そこで、 ハードウェアとソフトウェアによるあらゆる種類の手品に頼ること になります。


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