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

8. IDEディスクのためのカーネルでのディスク変換

Linux カーネルが IDE ディスク上に何らかのディスクマネージャの存在を 検出した場合、そのディスクマネージャがするのと同じ方法でディスクを 再マップしようとするので、Linux は例えば OnTrack や EZ-Drive を使っている DOS のように同じディスクパーティションを見ることになります。 しかし、ジオメトリが(訳注: LILOの)コマンドラインから指定された場合は 再マップは行われません - つまり `hd=cyls,heads,secs' (訳注: `hdx=cyls,heads,secs' が正しい) というコマンドラインオプションはディスクマネージャとの互換性を 失わせてしまいます。

再マップは、C <= 1024 になるか H = 255 になるまで、 (H*C が一定であるように) ヘッド数(H)を 4, 8, 16, 32, 64, 128, 255 と増やしていきます。

詳細は以下のようになります - 以下のサブセクションの題名はブートマネージャに対応すると思われる文字列です。 以降、パーティションタイプはすべて 16 進数であらわします。

8.1 EZD

最初の基本パーティションタイプが 55 であるとき、 EZ-Drive が存在すると判断されます。 ジオメトリは上で説明したように変換され、 セクタ 0 にあるパーティションテーブルは無視されます。 その代わりに、パーティションテーブルはセクタ 1 から読み出されます。 ディスクのブロック番号は変更されませんが、セクタ 0への書き込みは、 セクタ 1 への書き込みに強制されます。 この振る舞いは、ide.c (訳注: カーネル 2.2.12 では drivers/block/ide.h) の中で #define FAKE_FDISK_FOR_EZDRIVE 0 としてカーネルを再構築すれば切り替えられます。

8.2 DM6:DDO

(一台目のドライブの)最初の基本パーティションタイプが 54 であると、 OnTrack ディスクマネージャが組み込まれていると判断されます。 ジオメトリはすでに述べた方法で変換され、 ディスク全体が 63 セクタ分ずらされます (つまり、元々のセクタ 63 はセクタ 0 と呼ばれることになります)。 この結果、新しい(パーティションテーブルを含む) MBR は、 新しいセクタ 0 から読み込まれます。 もちろん、このずらしは DDO のための空間を確保するためで、 これが一台目のディスク以外にはずらしが入らない理由です。

8.3 DM6:AUX

(一台目のディスク以外の)基本パーティションがタイプ 51 か 53 のときには、 OnTrack ディスクマネージャが効いていると判断されます。 ジオメトリの変換は上に述べた通りです。

8.4 DM6:MBR

古い OnTrack ディスクマネージャは、 パーティションタイプではなくシグネチャで検出されます。 (検出方法: MBR のバイト 2,3 にある数をオフセットと考え、 このオフセット値が430以下であるか確認します。 次にこのオフセット位置にある short int 値が 0x55AA で、 なおかつ、次の 1 バイトが奇数かどうかを監査します。) 変換方法は、上に述べた通りです。

8.5 PTBL

最後に、基本パーティションの start と end の値から、 変換が行われてることを知る方法があることをご紹介しましょう。 もし、あるパーティションが startend にそれぞれセクタ番号 1 と 63 を持っていて、さらに end のヘッド番号として 31, 63, 127, または 254 を持っているとすると、 パーティションの終わりはシリンダ境界におかれる慣習であること、 IDE インターフェースは最大 16 ヘッドであることから、 BIOS による変換がおこなわれていることが分かり、 また、ジオメトリはヘッド数 32, 64, 128, または 255 を使って 再マップされていることが分かります。 しかし、現在のジオメトリがすでにトラックあたり 63 セクタで、 たくさんのヘッドがあるというなら、変換は行いません (ヘッドがたくさんあるというのは、すでに変換が行われているということですから)。


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