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

6. ディスク

ここでは、ディスクドライブに固有の情報を示します。

6.1 対応している (いない) ハードウェア

すべてのダイレクトアクセス SCSI デバイス (訳注: これは「ハードディスク」を 意味する SCSI 用語です) で、ブロックサイズが 256バイトか 512バイト、または 1024バイトのものは使えるはずです。 これ以外のブロックサイズは使えませんが、多くの場合ブロックサイズまたは セクタサイズは SCSI の MODE SELECT コマンドを使って変更できます。

セクタサイズとは、デバイスのセクタに割り当てられたデータバイト数のことです。 例えば、CDROM のセクタサイズは 2048 です。

ブロックサイズとは、デバイスとのインターフェースに使用される論理ブロックの 大きさのことです。これは通常セクタサイズと等しいのですが、複数の小さな 物理セクタ (55M サイクエストドライブの場合には 256バイト) を大きな論理 ブロックにマップしたり、逆にひとつの物理セクタを複数の論理ブロックに 分割する (例えば、SUN コンパチブルの CDROM ドライブのブロックサイズは 512 バイトです) こともあります。

リムーバブルメディアデバイスには、Bernouli、フロプティカル、MO ドライブ、 Syquest などの種類があります。

理論的には、1テラバイトまでのドライブは使えるはずです。 9ギガバイトまでの小さなドライブに関しては、まったく問題はありません。

6.2 よくある問題

「シリンダが 1024 よりも多い」というメッセージ

パーティションを切るときに、「シリンダが 1024 よりも多い」という 警告メッセージが表示される。 あるいは、1024 以降の論理シリンダを含んだパーティションからブート できない。

これは、BIOS の制限によるものです。

詳しい説明は、 ディスクのジオメトリ および パーティションの作成 を参照してください。

/dev/hd* にパーティションが切れない

/dev/hd* は SCSI デバイスではありません。 SCSI デバイスは /dev/sd* です。

正しいデバイス名とパーティションの切り方については、 デバイスファイルディスクのジオメトリ、それに パーティションの作成 を参照してください。

リムーバブルメディアドライブからメディアを排出できない

Linux は、メディアがマウントされている時にはドライブのドアを ロックします。予期せぬメディアの入れ替えによって ファイルシステムが壊れるのを防ぐためです。

まずディスクをアンマウントしてください。

SCSI ディスクから LILO でブートできない

SCSI ドライバと BIOS との間で、使用すべき BIOS マッピングに関して 情報が食い違っていることがあります。 この場合、ブート時に LILO が「LI」まで表示してハングする などの問題を引き起こすことがあります。

この問題を回避するためには、DOS で使われる BIOS ジオメトリ マッピングを調べて、これを /etc/lilo/disktab に書き込む 必要があります。

あるいは、「linear」jfile 設定オプションを使うという方法も あります。

fdisk が以下のようなメッセージを出力する

You must set heads sectors and cylinders.
You can do this from the extra functions menu.

そして fdisk を再起動すると、変更したはずのディスクジオメトリが 変更されていない。

パーティションの作成 を参照して ください。

ブリッジボードに複数のドライブが接続されているのに、ひとつのドライブしか検出されない。

Linux は ANSI SCSI リビジョン 1 以前の SCSI デバイスに対しては、 0 以外の LUN を探しに行きません。 0以外の LUN を認識させたければ、drivers/scsi/scsi.cscan_scsis() 関数を変更する必要があります。

スワップ時にシステムがハングする

この問題はすでに解決されています。 カーネルを 1.1.38 にバージョンアップしてください。

Conner の CFP1060S ディスクの内容が壊れる

訳注: 現在 Conner は Seagate に買収されています。

これは、先読みとキャッシュに関するマイクロコードのバグのためです。

Soenke Behrens (Conner テクニカルサポート) からのメールより :

過去数週間の間に、Linux オペレーティングシステムを使用していて Conner CFP1060x 1GB SCSI ドライブに深刻な問題が生じたという電話を 何人かのお客様から頂きました。 症状は、ファイルシステムの破壊 (inode の損傷) がシステムブート時に e2fsck によって報告されるというものです。
CFP1060x (マイクロコードリビジョン 9WA1.62/1.66/1.68) と Linux を 使用されているお客様には、マイクロコードの修正が御利用頂けます。 マイクロコードをバージョンアップするためには、DOS ブートディスクと ハードディスクドライブにアクセスできる ASPI ドライバが必要です。 バージョンアップによって、新しいキューイングと先読みのコードが ドライブの不揮発性 SCSI RAM にダウンロードされます。
マイクロコードリビジョンが 9WA1.60 のディスクで問題が生じた 場合には、最寄りの Conner サービスセンターに連絡して、ディスクを バージョンアップしてもらう必要があります。 マイクロコードのリビジョンは、ドライブ上のラベルと、ドライブの下側の IC のひとつに貼られたラベルに書いてあります。
自分でバージョンアップできる自信のある方は、Conner テクニカルサポートに 連絡して、最新のマイクロコードを入手してください。 ヨーロッパの Conner テクニカルサポートの電話番号は +44-1294-315333 です。 アメリカの Conner テクニカルサポートの電話番号は 1-800-4CONNER です。
敬具
Soenke Behrens
ヨーロッパテクニカルサポート

6.3 デバイスファイル

SCSI ディスクのブロックデバイスメジャー番号は 8 で、BSD のような「ロー」 デバイスは存在しません。

ひとつの SCSI ディスクには、16個のマイナー番号が割り当てられています。 minor % 16 == 0 はディスク全体を表し、1 <= (minor % 16) <= 4 は4つのプライマリパーティションを、5 <= (minor % 16) <= 15 は拡張パーティション (訳注: 正確には「拡張パーティション中の 論理ドライブ」でしょう) を表します。

たとえば、以下のような構成では次のようにデバイス名が割り当てられます。 (ひとつのホストアダプタの場合)

Device                  Target, Lun     SCSI disk
84M Seagate             0       0       /dev/sda
SCSI->SMD bridge disk 0 3       0       /dev/sdb 
SCSI->SMD bridge disk 1 3       1       /dev/sdc
Wangtek tape            4       0       none
213M Maxtor             6       0       /dev/sdd

標準的なデバイス名の付け方は、次のようになります。

/dev/sd{letter} ディスクデバイス全体 ((minor % 16) == 0)
/dev/sd{letter}{partition} そのデバイス上のパーティション (1 <= (minor % 16) <= 15)

たとえば次のように。

/dev/sda        block device major 8 minor 0
/dev/sda1       block device major 8 minor 1
/dev/sda2       block device major 8 minor 2
/dev/sdb        block device major 8 minor 16

6.4 パーティションの作成

SCSI ディスクにパーティションを切るには、DOS、OS/2、Linux やその他の 標準的なパーティションの作成方法をサポートしている OS 上のパーティション 作成プログラムを使用することができます。

Linux の fdisk プログラムを起動する場合は、必ずデバイスをコマンド ラインで指定してください。例えば最初の SCSI ディスクにパーティションを 作成する場合には、以下のように入力します。

fdisk /dev/sda

デバイスを指定しなかった場合には、デフォルトの /dev/hda が 使われてしまうことがあります。これは SCSI ディスクではありません。

fdisk が次のようなメッセージを出力することがあります。

You must set heads sectors and cylinders.
You can do this from the extra functions menu.

Command (m for help): 

あるいは HDIO_REQ または HDIO_GETGEO ioctl が失敗したという メッセージが出力されることもあります。 こういう場合には、 ディスクのジオメトリ での説明にしたがって、ディスクのジオメトリを入力しなければなりません。 また LILO を使ってそのディスクからカーネルをブートするには、 /etc/disktab にもディスクジオメトリを設定する必要があります。

ディスクジオメトリを入力した場合には、その後 fdisk を起動しよう とすると同様のメッセージが表示されます。これは PC がディスクジオメトリ 情報をパーティションテーブルに保存しないためで、異常ではありません。 それ自体は問題とはなりませんし、そのドライブに作成したパーティション を Linux でアクセスすることにも問題はありません。 しかし、いくつかのメーカーの出来の悪いインストールプログラムの中には、 これをうまく処理できないものもあります。 その場合にはメーカーに連絡し、プログラムを修正するよう要求してください。

場合によっては、シリンダ 1024 以降に食い込んだパーティションに 関する警告メッセージが出力されることがあります。そのような パーティションを作成した場合、そのパーティションから LILO を 使って Linux カーネルをブートすることはできません。 しかし、一部または全部がシリンダ 1024 以降にあるルートパーティションを 作成できないわけではありません。 シリンダ 1024 以下に小さな /boot パーティションを 作成するか、既存のパーティションからカーネルをブートすれば よいからです。

6.5 ディスクのジオメトリ

Linux では、ディスクは SCSI ホストアダプタから見える通りに、エラーの ない 0 から N-1 まで番号づけされた N 個のブロックとして認識されます。 一方 DOS や BIOS では賢いディスクにも過去の慣習が適用されてしまい、 このようなリニアなアドレッシングが恣意的にヘッド/シリンダ/セクタに マッピングされてしまいます。

このことは、Linux でドライブにパーティションを切る場合に問題となる おそれがあります。DOS や BIOS がどのようにジオメトリをマップするかを 知る汎用的な方法がないからです。多くの場合 HDIO_GETGEO ioctl() が このマッピングを知るために使えます。 残念ながら、一部のメーカー (Seagate) のように、ひねくれた、標準から 外れた、しかも文書化されていない方法でマッピングを行っている場合、 この方法は使えず、ジオメトリをマニュアルで指定する必要があります。

マニュアル指定には、いくつかの方法があります。

  1. DOS を使うつもりがないか、LILO がインストールされているドライブ からカーネルをブートする場合、ヘッド * シリンダ * セクタ * 512 < ドライブのサイズ (バイト数) となるようにそれぞれの値を設定する (メガ バイトは 2^20 バイトと定義されます)。
    1 <= heads <= 256
    1 <= cylinders <= 1024 
    1 <= sectors <= 63
    
  2. BIOS マッピングを使う方法。場合によっては、ディスクの SCSI ID を 0 に 設定し直し、2番目の IDE ドライブ (もしあるならば) をディセーブルする必要 があります。

NU (訳注: Norton Utilities のことでしょう) のようなプログラムを使うこと もできますし、次のプログラムも使えます。

begin 664 dparam.com
MBAZ``##_B+^!`+N!`(H'0SP@=/D\,'5:@#]X=`6`/UAU4(!_`3AU2H!_`P!U
M1(I7`H#J,(#Z`7<Y@,*`M`C-$PCD=3-14HC()#\PY.@R`.@J`%J(\/[`,.3H
M)0#H'0!8AL2Q!M+L0.@7`+K"`;0)S2'#NIP!ZR"ZQ0'K&[K5`>L6N]T!,=*Y
M"@#W\8#",$N(%PG`=>^)VK0)S2'#=7-A9V4Z(&1P87)A;2`P>#@P#0H@("!O
L<B`@9'!A<F%M(#!X.#$-"B1);G9A;&ED(&1R:79E#0HD("`D```````D``!O
`
end

このプログラムを実行すると、コマンドラインで指定した BIOS アドレス (0x80 が最初のディスク、0x81 が 2番目のディスク) のドライブについて、 セクタ数、ヘッダ数、シリンダ数をプリントします。

つまり、dparam 0x80 を実行して以下のように表示された場合、

60      17      1007

C: ドライブのセクタ数が 60、ヘッド数が 17、シリンダ数が 1007 で あることを示しています。


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