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

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

ディスクの「本当の」ジオメトリに興味のある人はいません。 実のところ、トラックあたりのセクター数は、一つのディスクの中でも 変動することがあるのです。と、いうのはディスクの縁に近いところほど、 トラックあたりのセクター数を多くとれるからです。ですから、 「本当の」トラックあたりのセクター数などないのです。利用者から見ると、 セクター0,1,... というようディスクをセクターの一次配列としてとらえ るのが一番便利です。そうして、与えられたセクターがディスクのどこにあ るかを探すのは、コントローラに任せてしまうのです。

この線形的な番号づけは、LBA として知られています。この場合、 CHSジオメトリーと (c,h,s) から線形アドレスを計算するにはc*H*S + h*S + (s-1) という式を使用します。SCSI コントローラはすべて LBA を使用しますし、 IDE のコントローラにも LBA を使用するものがあります。

BIOS が 24bit の (c,h,s) を LBA に変換してハードディスクコントローラ に与えるなら、7.875GB という BIOS の制限をいっぱいに使うことができます。 これであらゆるディスクに対応できるというわけには行きませんが、 大きな改良といえます。付け加えておきますと、ここでいう BIOS が あつかう CHS は、もはや現実とは何の関わりも持たない数字です。

コントローラが LBA を扱えなくても、BIOS に変換機能がある場合、 LBA に良く似た方法をとることができます( 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 の切り捨てによる容量の無駄を最小にできます)。 この方法でも、最大で 7.875GB までの読み書きが可能になります。

BIOS が "Large" とか "LBA" を使用できない場合でも、ソフトウェア によってなんとかすることができます。OnTrack や EZ-Drive といった ディスクマネージャーは、BIOS のディスク関連ルーチンに代わって ディスク制御を行います。一般には、ディスクマネージャーのコードを MBR と MBR に続くセクター(OnTrack は DDO : Disk Dynamic Overlay と呼んでいます)に埋め込んでおくことでこれを実現します。MBR に 埋め込まれていますので、こういったコードは他のオペレーティンシステム よりも早く起動します。そして、これがディスクマネージャーが組み込んで あるシステムをフロッピーから起動すると問題がおきる理由です。

ディスクマネージャによる変換は、BIOS による場合と似たようなものです 。しかし、特に異種 OS を同じディスク上で走 らせる場合、ディスクマネージャーは多くの問題を起こし得ます。

Linux は 1.3.14 からは OnTrack に、1.3.29 からは EZ-Drive に 対応しています。詳細を以下に説明します。


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