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

6. BIOS が扱えない大容量ディスクをアクセス

私のオフィスのシステムには 1GB の IDE ドライブがありますが、BIOS からは 最初の 504MB しか見えません。(ここでは MB = 1000 バイトではなく、1024 バイトとします)ですから、MS-DOS を 350MB パーティション /dev/hda1 に、Linux のルートを 120MB パーティション /dev/hda2 に置いています。

(訳注:バイト数を表現する際には、K = 1024(つまり 1KB = 1024)という決 まりがありますが、M = 1024KB という決まりはありません。ですから各 HDD メー カーは M = 1000KB として HDD の容量を表しています。ちなみに、k と小文字 で記述した場合 k = 1000 となります)

買ってきたばかりのドライブでは、MS-DOS は自分自身を正常にインストールす ることができませんでした。Novell DOS 7 にも同じ問題がありました。さらに 幸運な事に、"IBM の選定先" は "OnTrack" ディスクをドライブのパッケージの 中に入れ忘れていました。ドライブには "OnTrack Disk Manager" という製品が 付属しているはずでした。MS-DOS しか持っていない場合、それを使う必要があ るでしょう。

(訳注:おそらくドライブが IBM 製で、IBM がパッケージングを発注している 会社/工場がマニュアルを入れ忘れたということでしょう)

そこで、パーティションテーブルを Linux から作りましたが、MS-DOS 6.2 は /dev/hda1 にインストールする時に ``this release of MS-DOS is for new installations. Your computer already has MS-DOS so you need to get an upgrade release from your dealer.'' というメッセージが表示されま した。ですが、このディスクは新品でした。

(訳注:エラーメッセージをあえて訳すとすると、``このリリースの MS-DOS は 新規インストール用です。コンピューターにはすでに MS-DOS がインストールさ れています。アップグレード版を入手する必要があります。''でしょうか。日本 語版 MS-DOS を持っていないので、確認はできませんが。ご存じの方は翻訳者 (cz8cb01@linux.or.jp)までご一報を :-))

なんてこった。それから Linux の fdisk を再び実行して作成したパーティショ ン 1 を削除しました。これで MS-DOS 6.2 が満足したのか、いま削除したのと まったく同じパーティション 1 を作成すると、そこにインストールできました。 MS-DOS 6.2 はそのドライブの MBR に書き込みましたが、ブートすることはでき ませんでした。

幸い、Slackware のカーネルがフロッピー(Slackware インストールプログラム の "setup" で作られたもの)にあったので、Linux をブートして Lilo で MS-DOS の壊れた MBR を上書きしました。これはうまくいきました。これが使 用した /etc/lilo.conf です。

boot = /dev/hda
map = /lilo-map
delay = 100
ramdisk = 0             # Slackware カーネルのラムディスクをオフ
timeout = 100
prompt
disk = /dev/hda         # BIOS は始めの 500MB のみ認識
   bios = 0x80          # 1 番目の IDE を指定
   sectors = 63         # ドライブのマニュアルからこの数値を調べてください
   heads = 16
   cylinders = 2100
image = /vmlinuz
  append = "hd=2100,16,63"
  root = /dev/hda2
  label = linux
  read-only
  vga = extended
other = /dev/hda1
  label = msdos
  table = /dev/hda
  loader = /boot/chain.b

これらのシステムをインストールした後、zImage, boot.b, map, chain.b およ び メッセージファイルのあるパーティションが msdos fs(ファイルシステム) を、"stackered" や "doublespaced" されていない限り、使用できることを確認 しました(訳注:"stackered" は Stacker、"doublespaced" は Double Space で圧縮されているファイルシステムの事でしょう。懐かしいですね(笑))。こ れで、DOS パーティションを /dev/hda1 500MB に作成することができ ました。

私は "OnTrack" がパーティションテーブルを先頭からではなく数十バイト先か ら書いてしまうことを知っていました。この問題は Linux の IDE ドライバをハッ クすることで対処できますが、コンパイル済みの Slackware カーネルではイン ストールすることはできませんでした。最終的に、IBM は "OnTrack" ディスク を送ってきました。OnTrack のテクニカルサポートに電話したところ、Linux は BIOS を使わないから欠陥品だと言われました。このフロッピーディスクは誰 かにあげてしまいました。

(訳注:いつから実装されたのかは知りませんが、現在では Linux の標準カー ネルに DiskManager や EZ Drive に対応するコードが含まれているはずです。 drivers/block/genhd.c を見るといいでしょう。たしか 2.0.27 あたりには既に あったはず。ソースコード中のコメントにはこのように書かれています。DM6 は Ontrack DiskManager 6 の意味だと思う)

if (SYS_IND(p) == EZD_PARTITION) {
/*
 * The remainder of the disk must be accessed using
 * a translated geometry that reduces the number of
 * apparent cylinders to less than 1024 if possible.
 *
 * ide_xlate_1024() will take care of the necessary
 * adjustments to fool fdisk/LILO and partition check.
 */

               (中略)

} else if (SYS_IND(p) == DM6_PARTITION) {

/*
 * Everything on the disk is offset by 63 sectors,
 * including a "new" MBR with its own partition table,
 * and the remainder of the disk must be accessed using
 * a translated geometry that reduces the number of 
 * apparent cylinders to less than 1024 if possible.
 *
 * ide_xlate_1024() will take care of the necessary
 * adjustments to fool fdisk/LILO and partition check.


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