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

2. よくある問題

このセクションでは、よくある問題について説明します。 ここに質問の答えが見つからなかったら、お使いのホストアダプタや デバイスのセクションも調べて見てください。

2.1 不安定なシステム

再現性のないエラーが発生する場合、ケーブルや終端に問題がある ことが多いのです。

最近の NCR チップを採用した製品などには、ディジタルフィルタリングや アクティブシグナルネゲーションなどの機能を持っているものがあり、 これらはケーブルにはそれほど敏感ではありません。

例えば Adaptec の 154xC や 154xCF、それに 274x など、それ以外の 製品はケーブルに非常に敏感で、他のシステムでは問題なく動作する ケーブルでも動かないことがあります。

もう一度繰り返します。一部のホストアダプタはケーブルやターミネーターの 問題に非常に敏感なので、問題が起こった時にはまずケーブルや ターミネーターを調べてみてください。

問題を最小限にするため、以下のようなケーブルを使うべきです。

  1. SCSI-II 準拠をうたっていること。
  2. 特性インピーダンスが 132 オームであること。
  3. インピーダンスの不整合を避けるために、すべてのケーブルを 同じメーカーのもので揃えること。
  4. アンフェノールなどの有名メーカーの製品であること。
訳注: SCSI-2 規格では、同期転送を行なう場合のケーブルのインピーダンスは 90オームから132オームと規定されています。 SCSI-2 規格は ftp://ftp.symbios.com/pub/standards/io/x3t10/drafts/scsi2/ に あります。

ターミネータが接続されるケーブルの両端に十分な電力を供給するため、 ターミネータパワーは SCSI バス上のすべてのデバイスから 電流の逆流を防止するダイオードを通して供給されなくてはなりません。 バスが短絡された場合の損傷を防ぐため、TERMPWR はヒューズなどの 電流制限デバイスを通して供給されなければなりません。

訳注: SCSI-2 規格では、すべてのイニシエータデバイスは ターミネーターパワーを供給しなければならないと規定されていますが、 ターゲットデバイスは供給しなくてもよいことになっています。

複数のデバイスや外部ケーブル、あるいは FAST SCSI 2 を使用する場合には、 SCSI バスの両端にアクティブターミネータを使う必要があります。

アクティブターミネータについての詳しい情報は、 Comp.Periphs.Scsi の FAQ ( tsx-11 の pub/linux/ALPHA/scsi に あります) を参照してください。

2.2 カーネルコマンドライン

この文書の中で「カーネルコマンドライン」について言及することがあります。

カーネルコマンドラインとは、LILO : プロンプトに対してイメージ名の後に、 あるいは LILO 設定ファイルの append フィールドに指定するオプション群の ことです。 LILO 設定ファイルは LILO .14 以降では /etc/lilo.conf、 それ以前のバージョンでは /etc/lilo/config にあります。

プロンプトを表示させるには、LILO でブートし、起動中に Alt か Ctrl、または Shift キーのいずれかを押して下さい。 以下のプロンプトが表示されます。

:

ここで、ブートするカーネルイメージを選択します。また次のように ? を 入力すると、カーネルイメージのリストが表示されます。

:?

ramdisk floppy harddisk

選択したコマンドラインオプションでカーネルをブートするには、 カーネル名の後にオプションのリストをスペースで区切って入力し、 最後にリターンキーを押せば良いのです。

オプションは以下の形式で指定します。

variable=valuelist

valuelist は単一の値、あるいはスペースを含まない値のリストを コンマで区切ったものです。ルートデバイスは例外ですが、それ以外の 値は10進または16進で指定する数値です。

例えば、ブート時に認識されない Adaptec 1520 のクローンを持った システムで Linux をブートするには次のようにします。

:floppy aha152x=0x340,11,7,1

ブート時にこれらの値を入力するのが面倒ならば、次の例のように、 LILO 設定ファイルの append オプションに指定することも 可能です (LILO .13 以降が必要です)。

append="aha152x=0x340,11,7,1"

2.3 SCSI デバイスがすべての ID に反応する

この現象は、そのデバイスがコントローラと同じ ID を持っていることが 原因です。(コントローラの ID は普通は 7 ですが、ボードによっては 違う ID を使っている場合があります。 例えば Future Domain のボードには 6 を使っているものがあります。)

ジャンパーの設定を変更してください。

2.4 SCSI デバイスがすべての LUN に反応する

そのデバイスのファームウェアがバグっています。

暫定的な解決方法として、以下のカーネルコマンドラインオプションを 試してみてください。

max_scsi_luns=1

これでうまくいったら、カーネルソースの drivers/scsi/scsi.cblacklist 変数にある、バグありデバイスのリストに そのデバイスを追加し、その情報を Linus Torvalds <Linus.Torvalds@cs.Helsinki.FI> に メールして下さい。

2.5 エラーフリーのはずのデバイスにセンスエラーが起こる

この問題は、質の悪いケーブルや不適当なターミネータによって引き起こされる ことがあります。

不安定なシステム を参照してください。

2.6 ネットワーク機能を組み込んだカーネルが動かない

多くのネットワークドライバの自動検出ルーチンはレジスタへの書き込みを 行なうため、SCSI ドライバの動作と干渉することがあります。

2.7 デバイスは検出されるが、アクセスできない

カーネルによって SCSI デバイスは検出されるが、アクセスすることが できない。 mkfs /dev/sdc とか tar xvf /dev/rst2 などの コマンドが失敗する。

そのデバイスに対するスペシャルファイルが /dev にないのでしょう。

Unix のデバイスにはブロックデバイスとキャラクタデバイスの区別があり、 それぞれのデバイスはメジャーデバイス番号とマイナーデバイス番号で区別 されます。 ブロックデバイスはバッファキャッシュを通してアクセスされますが、 キャラクタデバイスはバッファキャッシュを通さずにアクセスされます。 メジャーデバイス番号は、使用されるドライバを表します。 例えばメジャー番号 8 のブロックデバイスは SCSI ディスクを表します。 マイナーデバイス番号は、そのドライバを通してどのユニットがアクセス されるかを表します。例えばメジャー番号 4、マイナー番号 0 の キャラクタデバイスは最初の仮想コンソールを表し、マイナー番号 1 は次の 仮想コンソールを表す、といった具合です。 しかし、この方法でデバイスをアクセスすることは、「すべてはファイルと して表現される」という Unix/Linux のメタファにそぐわないため、 キャラクタデバイスとブロックデバイスのスペシャルファイル が /dev の下に作成されており、例えば3番目の SCSI ディスク は /dev/sdc、最初のシリアルポートは /dev/ttyS0 として アクセスできるようになっています。

スペシャルファイルを作成するには、MAKEDEV スクリプトを使うのが 普通です。/devcd し、作成したいデバイスを指定して 次のように MAKEDEV を実行して下さい (root で)。

 ./MAKEDEV sdc

訳注: パッケージによっては MAKEDEV はスクリプトではなく、バイナリ コードになっている場合もあります。

ワイルドカードも使える「はず」です。

 ./MAKEDEV sd\*

これによってすべての SCSI ディスクデバイスが作成される「はず」 (/dev/sda から /dev/sdp までと、それぞれに対して 15個のパーティションが作成されるはず) です。

 ./MAKEDEV sdc\*

これによって /dev/sdc 自身と /dev/sdc 上の15個の パーティションすべてが作成される「はず」です。

カギカッコつきで「はず」といったのは、これが標準的な Unix の振舞い だからです。インストールされている MAKEDEV スクリプトがこのように 振舞うとは限りませんし、作成するデバイスの数が制限されているかもしれません。

MAKEDEV では望む結果が得られない場合、mknod コマンドを使って 手動でデバイスファイルを作成する必要があります。

各種 SCSI デバイスのデバイス種別 (ブロックデバイスかキャラクタデバイスか)、 メジャーデバイス番号、マイナーデバイス番号は デバイスファイル に示してあります。

mknod コマンドの書式は次の通りです。 root で実行して下さい。

mknod /dev/device b|c major minor

以下は実行例です。

mknod /dev/sdc b 8 32
mknod /dev/rst0 c 9 0

2.8 SCSI システムがロックアップする

ここに書かれている情報はごく限られたものです。 使用しているホストアダプタの項も参照してください。 ここに書かれている以外の解決法が書かれているかもしれません。

複数のデバイスが同時にアクセスされる時にロックアップすると思われる 場合には、デバイスのメーカーに連絡して、ファームウェアをバージョン アップすることで問題が解決できないか聞いてみるのがいいでしょう。 可能な場合には、SCSI ケーブルを換えてみたり、別のシステムで試して みてください。 また、ディスクのバッドブロックや、マザーボードの DMA 処理 (DMA を 行なうホストアダプタの場合) が原因となっていることも考えられます。 この種の問題には、他にも多くの原因が考えられます。

同一バス上の複数のデバイスが同時にアクセスされる時にロックアップする と思われる場合もあります。 同時に複数のコマンド処理を行なえるホストアダプタを使用している場合、 この値を 1 に減らして様子を見てください。バス上に低速のテープドライブ や CDROM がある場合、これは現実的な解決とはならないでしょう。

2.9 カーネルの設定と再構築

カーネルメモリはページングされないので、 使用しない SCSI ドライバは貴重なメモリを消費してしまい、 小さなシステムではメモリ不足の悪化にもつながります。

したがって、使用するシステム向けにチューンアップしたカーネルを 構築し、必要なドライバだけがインストールされるようにします。

cd /usr/src/linux

現在とは違うルートデバイス、あるいは 80x25 VGA 以外の ディスプレイを使いたい場合で、ブートフロッピーに書き込みを 行なう場合には、makefile を編集して

ROOT_DEV =

および

SVGA_MODE =

以上の行にルートデバイスあるいはディスプレイの指定を行ないます。

パッチを当てた場合、すべてのファイルが再構築されるようにしたい場合が あります。そのためには以下のように入力します。

make mrproper

mrproper の結果がどうであれ、

make config

として、コンフィギュレーションに関する質問に答えて下さい。それから

make depend

を実行し、最後に

make

を実行します。終了したら、lilo を設定し直すか、以下のようにして ブートフロッピーの作成を行ないます。

make zdisk

2.10 0 以外の LUN が使えない

SCSI デバイスにはまともに LUN をサポートしていないものが多く、 0 以外の LUN にアクセスしようとしたとき SCSI バスを ロックさせるなどの悪さをします。

そのため、最近の Linux カーネルはデフォルトでは 0 以外の LUN を 見に行かないようになっています。0 以外の LUN を使うためには、 max_scsi_luns command コマンドラインオプションを使うか、 CONFIG_SCSI_MULTI_LUN オプションを指定してカーネルを再 コンパイルする必要があります。

普通は LILO コマンドラインに以下のように指定すればいいはずです。

max_scsi_luns=8

この変更を行なっても、マルチ LUN デバイスが正しく検出されないことが あります (SCSI から MFM、RLL、ESDI、SMD などへのブリッジボードに多く みられます)。 これは drivers/scsi/scsi.c 中の scan_scsis() にある、 以下のコードのせいです。

/* Some scsi-1 peripherals do not handle lun != 0.                
   I am assuming that scsi-2 peripherals do better */
if((scsi_result[2] & 0x07) == 1 &&                    
   (scsi_result[3] & 0x0f) == 0) break;                    

このコードを削除すれば、うまく行くはずです。


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