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

7. 変換とディスクマネージャ

(ヘッド数、シリンダ数、トラック数というような) ディスクジオメトリは MFM や RLL 時代の産物で、 当時は物理的なハードウェア構造を反映していました。 現在では、IDE でも SCSI でも、 ディスクの「本当の」ジオメトリについて興味を持つ人はいません。 実際のところ、1トラックあたりのセクタ数は可変で、 ディスクの外周の方がよりセクタ数が多くなっています。 つまり、一意に決まるような「本当の」 1トラックあたりのセクタ数というものは 存在しません。 それとはまるっきり反対に: IDE コマンド INITIALIZE DRIVE PARAMETERS (91h) は現在では、 ヘッド数と 1トラックあたりのセクタ数をどれだけ持っていることになっているかを ディスクに設定するために提供されています。 今時の大容量ディスクが実際にはヘッドを 2つしか持っていなくても BIOS に対しては 15 か 16 ヘッドであると報告したり、 また BIOS がユーザのソフトウェアに対して それをさらに 255 ヘッドだと報告したりするのは、ごく普通です。

ユーザーにとって最善なのは、 ディスク上にあたかも一直線にセクタ番号が並んでいる(0, 1, ...)として ディスク上のどこにセクタが存在するかといったことを ファームウェアに任せられることです。 このリニアナンバリングは LBA と呼ばれます。

概念は以下の通りです。 DOS やいくつかのブートローダは (c,h,s) 表記を使って BIOS と会話します。 BIOS は、ユーザが使用する偽のジオメトリを使って (c,h,s) を LBA 表記に変換します。 ディスクが LBA を受け付ける場合は、この値をディスク I/O に使用します。 さもなければ、ディスクが使っているジオメトリを使って (c',h',s') に変換し直し、ディスク I/O に使います。

`LBA' という表現の使用におけるちょっとした混乱があることに注意してください: ディスクの性能を記述する用語としてならば `Linear Block Addressing' (CHS アドレッシングの逆)を意味します。BIOS 設定での用語としてならば、 しばしば `assisted LBA' と呼ばれる変換方式を意味します。 - 前述の ` 8.4 GB の壁' を見てください。

(訳注: ハードディスクの)ファームウェアが LBA を理解しないけど、 BIOS がジオメトリ変換を利用できる場合は、似たようなことが起きます。 (BIOS 設定ではこれはしばしば `Large' と表示されます。) 今、BIOS が OS にジオメトリ (C,H,S) を示して、 ディスクコントローラと話す時に (C',H',S') を使うとします。 通常は S=S', C=C'/N, H=H'*N となります。 N は、C' <= 1024 となる最も小さい 2 の乗数です。 (これは、C' = C/N とする際の丸め(切捨て)によって無駄になる容量を 最小限にするためです。) さらに、この方法では 8.4GB (7.8 GiB) までアクセスできます。

(BIOS の 三つ目の設定オプションは通常 `Normal' と呼ばれ、 どんな変換も行いません。)

BIOS で `Large' や `LBA' を利用できない場合は、 ソフトウェアによる解決方法もあります。 OnTrack や EZ-Drive のようなディスクマネージャは BIOS のディスク制御ルーチンを自分自身のものと置き換えます。 普通これは、ディスクマネージャのコードを MBR とそれに続くセクタ (OnTrack ではこのコードを DDO: Dynamic Drive Overlay と呼んでいます) に配置することで実現されており、他のすべての OS の前に起動されます。 ディスクマネージャがインストールされている所で、 OS をフロッピーから起動すると、何か問題があるかもしれません。

ディスクマネージャの効果は多かれ少なかれ BIOS による変換と同じです - しかし特に、同じディスク上でいくつかの異なる OS を動作させると、 ディスクマネージャに由来する多くのトラブルが起きる可能性があります。

Linux は OnTrack Disk Manager のバージョン 1.3.14 からと、 EZ-Drive のバージョン 1.3.29 からをサポートしています。 詳細を以下に述べます。


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