freebsd-dev/share/doc/ja_JP.EUC/handbook/scsi.sgml
1997-01-02 17:59:59 +00:00

959 lines
44 KiB
Plaintext

<!-- $Id: scsi.sgml,v 1.2 1996/11/23 23:49:40 max Exp $ -->
<!-- The FreeBSD Japanese Documentation Project -->
<!-- Original revision: 1.20 -->
<!--
<title>SCSIの概要と FreeBSDでの使い方</title>
<author>(c) 1995-1996, Wilko Bulte, <tt/wilko@yedi.iaf.nl/
<date>Sat Jul 6 20:57:39 MET DST 1996</date>
Copyright 1995-1996, Wilko C. Bulte, Arnhem, The Netherlands
<abstract>
このドキュメントはSCSIの背景, FreeBSDでの使い方,
よくある落し穴について書いてあります.
</abstract>
-->
<sect1><heading>SCSIとは?<label id="scsi"></heading>
<!--
<p><em>Copyright &copy; 1995, &a.wilko;.<newline>July 6, 1996.</em>
-->
<p><em>原作:&a.wilko;. <newline>July 6, 1996.</em>
<p><em>訳: &a.yoshiaki;. <newline>
4 November 1996. </em>
SCSI は Small Computer Systems Interface (小規模コンピュータシ
ステムインタフェース) の頭文字をとったものです.
これはANSI標準でコンピュータ業界においては最もよく使われるI/O
バスの一つになっています. SCSIはシュガート社 (ミニフロッピーディ
スクを世界で最初に販売しました) の開発した SASI (Shugart
Associates Standard Interface) バスが元になって規格化されました.
その後の業界の努力により,異なるベンダのデバイスが混在して使え
るようにより厳密な規格へと規格化されました.この結果が ANSIの
SCSI-1規格として認可されました. SCSI-1の仕様は (1985年ごろ
に規格化されました 訳注: SCSI-1の最終案決定は1985年, ANSIの標準
規格としての認可は1986年です) すでに現在では時代遅れです.
現在の標準は SCSI-2 (<ref id="scsi:further-reading" name="さらに詳
しい情報">を参照してください) で, SCSI-3へ移行していくでしょう.
物理的な相互接続の規格に加えて, SCSIではディスクドライブに不可欠な
論理的な規格 (コマンドセット) も定義しています.
この規格は標準コマンドセット (CCS : Common Command Set) と呼ばれ,
ANSIのSCSI-1とほぼ同時期に制定されました. SCSI-2には (改定された)
CCSが規格の一部として組み込まれました. コマンドはデバイスの種
類によって変わります. 例えばスキャナでは Writeコマンドは意味が
ありません.
SCSIバスは多くの種類があるパラレルバスです. 最も古く, 最も利用
されているのが 8 bit 幅, シングルエンド (不平衡) 信号, 50線の信号線
のバスです. (もしシングルエンドの意味が分からなくても気にするこ
とはありません. このドキュメントの中にその説明があります.) よ
り新しい設計では 16 bit幅で平衡信号のバスを使います. この場合,
転送速度は 20Mbytes/second まで,ケーブルの長さは 25mまで可能です.
SCSI-2では追加のケーブルを使った最大32 bitのバス幅までが含まれ
ます.
早くも Ultra SCSI (Fast-20とも呼ばれます) と Ultra2 (Fast-40とも
呼ばれます) が現れています. Fast-20は1秒間に 2000万回の転送 (8bit
バスで20Mbyte/sec), Fast-40は1秒間に 4000万回の転送 (8bitバスで
40Mbytes/sec) をおこないます.
訳注: ここでは電気的な用語としては平衡,不平衡を用いて,バ
スの名称としては基本的にはシングルエンド,ディファレンシャルとしま
した.
もちろん SCSIバスにはデータ信号だけではなく, 多くのコントロール信
号線があります. 複数のデバイスがバスを効率よく共有するための複
雑なプロトコルも規格の一部です. SCSI-2ではデータは常に独立した
パリティ信号を使ってチェックされます. SCSI-2以前ではパリティは
オプションでした.
SCSI-3ではさらに高速なバスタイプが導入され, それと共にケーブル
の線数を減らし, より最大バス長を伸ばしたシリアルSCSIが導入されま
す. SSAや Fiberchannelといった名前を聞いたことはありませんか?
シリアルバスは現在ではまだいずれの方式も普及していません (特に一般的な
FreeBSD環境では) . このためシリアルバスタイプについてはここでは
これ以上は触れません.
今までの記述から想像されるように SCSIデバイスはインテリジェント
です. これは SCSIの規格 (ところでこの文書は2インチ以上の厚さがあり
ます) と切り離すことはできません. このため例えばハードディスク
では特定のブロックをさすのに ヘッド/シリンダ/セクタ によって決
めるのではなく単に必要なブロック番号を指定します.
巧妙なキャッシュ動作や,不正ブロックは自動置き換えなど
の機能はこの 「インテリジェントデバイス」のアプローチによって可
能になっています.
SCSIバスでは任意のデバイスの組で通信することが可能です.
(訳注: 任意のデバイスがイニシエータになれるという意味です.)
デバイスの機能がそれを許すかどうかは また別の問題ですが, 規格では
禁止されていません. 信号の衝突を防ぐために2つ
のデバイスはバスを使う前に調停 (arbitrate) をおこなう必要があります.
SCSIの考え方として古い規格のデバイスと新しい規格のデバイスが同
じバスの上で動くように規格を作っています. したがって, 古い SCSI-1の
デバイスは SCSI-2バスの上でも普通は動きます. 普通は, とことわった理
由は, ある古いデバイスが新しいバスでも問題ない程に (古い) 規格に
対して十分沿った実装になっているかどうかは絶対的に保証はできな
いということです. 最近のデバイスは普通はよりうまく動作します. そ
の理由は規格化はより厳密になり,デバイスの製造においてより支持
されるものになって来ているからです.
一般的に言って, 単一のバス上で動かすデバイスは SCSI-2あるいはよ
り新しいデバイスであればうまく動く可能性は高いと言えます.
これは新しい 2GBのディスクを手に入れたとしたら古いデバイスを捨
ててしまわなければならないという意味ではありません. 私のシステ
ムでは SCSI-1以前のディスク, SCSI-2の QICテープユニット,SCSI-1
のヘリカルスキャンテープユニット (訳注: VTRのような回転ヘッドを
持ったテープ装置のことです. DATテープドライブもその一つです) ,
2台の SCSI-1 ディスクが一緒に問題なく動いています. ただし効率
の点から古いデバイスと新しい (= 速い) デバイスを分けたいかもしれ
ません. (訳注: 古いデバイスの中には disconnectをサポートしな
いために一連のコマンド実行中に SCSIバスを占有してしまうデバイス
もあります.)
<sect2><heading>SCSIの構成要素</heading>
<p>
<sect3><heading> <it>インテリジェント</it> インタフェース</heading>
<p> (訳注:原文では smart interface です)
先に述べたように, SCSIデバイスはインテリジェントです.
つまりハードウェア細部にからむ知識は SCSIデバイス自身に
持たせてしまおうという考え方です. この考
え方では SCSIデバイスはそれ自身のハードウェアの詳細を知って
います. この場合, ホストシステムはハードディスクがいくつのヘッ
ドを持ち, テープデバイスがいくつのトラックを持つかというよう
なことを知る必要がありません.
もしあなたが知りたいのであれば, 規格で定義されているコマンド
を使ってデバイスにハードウェアの詳細について質問することがで
きます.
インテリジェントデバイスの利点は明らかです. ホストのデバイス
ドライバはより一般的に書くことができ, 新しいデバイスを導入す
る場合でも変更の必要がありません.
<sect3><heading>接続でおこなうべきこと, してはならないこと</heading>
<p>
ケーブルの接続には鉄則があります. よい部品を使うことです. バ
スの速度を上げることができ, 多くの災難を防ぐことができます.
ですから, 金メッキのコネクタ, シールドケーブル, 固定器具付き
の頑丈なコネクタカバーなどを選ぶのは正しいことです. 2つ目の
鉄則は, ケーブルを必要以上に長くしないことです.
私は以前にあるマシンでトラブルの 原因を探すのに
3日間悩んでいましたが, SCSIバスを 1m短
くすることで問題を解決したことがあります. もちろん, 元のバス
の長さでもSCSIの仕様はきちんと満たしていたのですが.
<sect2><heading>SCSI バスのタイプ</heading>
<p>
電気的に互換性のない 2種類のバスのタイプがあります. シングルエ
ンドとディファレンシャルのバスです. これは SCSI
デバイスとコントローラは同一のバス上に混在することのできな
い2つのグループにに大きく分けられるということを意味しています.
しかし,特別なハードウェアを使えばシングルエンドバスをディファ
レンシャルバスに (その逆も) 変換することはできます. これらのバ
スのタイプの違いは次のセクションで説明します.
SCSI関連のドキュメントでは異なるタイプのバスを一種の用語とし
て略語で表します. これを次の表に示します.
<itemize>
<item>FWD: Fast Wide Differential (高速 ワイド 平衡)
<item>FND: Fast Narrow Differential (高速 ナロー 平衡)
<item>SE: Single Ended (不平衡)
<item>FN: Fast Narrow (高速 ナロー)
<item>etc.
</itemize>
少し想像力を働かせればどのような意味であるかはわかるでしょう.
ワイド (Wide) はいくらか曖昧で, 16 または 32 bitのバスを示しま
す. 私の知る限りでは, 32 bit のインタフェースは (まだ) 使わ
れていませんので Wide は通常 16 bitを意味します.
高速 (Fast) はバスのタイミングがいくつかの点で異なり, ナロー
(8 bit) バスでは 低速 (slow) SCSIバスの 5 Mbytes/sec に対して 10
Mbytes/sec の能力があります. 前にも述べたように, 20Mbytes/sec や
40Mbytes/sec のバス速度を持つものも現れてきています
(Fast-20 == Ultra SCSI で Fast-40 == Ultra2 SCSI です).
データ線の上位 (&gt; 8) はデータの転送とデバイスの指定だけに
利用されているという点を指摘しておきます. コマンドの送出とス
テータスメッセージ等は下位側の 8 bitのデータ線のみを使います.
この規格によりナローデバイスはワイドバス上でも動作する事がで
きます. 利用できるバスの幅はデバイス間で調停 (ネゴシエーショ
ン) されます. デバイスの IDについてはワイドとナローが混在する
時には気をつけなければなりません.
<sect3><heading>シングルエンドバス (不平衡バス) </heading>
<p>
シングルエンド SCSIバスは 5Vと 0Vの電圧 (実際はTTLレベルです)
を信号として使い,それらは共通のグラウンド (GND) レベルを基準
にします. シングルエンド SCSI 8 bitバスは約25本のグラウンド線
を持ち, すべてのデバイスを「直線状」に接続しま
す. 基準ではシングルエンドバスは最大の長さは 6mです. これ
は Fast-SCSIデバイスを使う場合は最大長さは 3mに短くなります.
Fast-SCSIでは 5Mbytes/sec ではなく 10Mbytes/sec の転送速度
が可能になります.
Fast-20 (Ultra SCSI) と Fast-40ではそれぞれ1秒間に2000万 (20M)
ないしは 4000万 (40M) 回の転送ができます. したがって, Fast-20では
8bitバスで 20Mbytes/sec, 16bitバスで 40Mbytes/secとなりま
す. Fast-20ではバスの最大の長さは 1.5m, Fast-40では 0.75mに
なります. Fast-20は限界を相当に広げるものなので SCSIバス
に雑音が多い場合はその影響を即座に受けます.
バス上のいずれかのデバイスが「高速の」転送を利用する場合は
Fastバスの長さの制限を受けるということに注意してください.
最近の Fast-SCSI デバイスではバスの長さが実際の問題になり
つつあるのが明らかになっています. これがデファレンシャル
SCSIバスがSCSI-2の規格に導入された理由です.
コネクタのピン配置やコネクタの種類については SCSI-2の規格
(<ref id="scsi:further-reading" name="さらに詳しい情報">を
) を参照してください.コネクタ等について詳細なリ
ストがあります.
非標準のケーブルを使うデバイスに気をつけてください. 例えば
Apple (の Macintosh は) 25pin の D-type のコネクタ (シリア
ルポートやパラレルプリンタに使われているコネクタ -- 訳注:
日本では一般的に D-sub 25pinと言っています) を使っています.
公式なSCSIバスでは50 pin が必要である事からこのコネクタで
は 「独創的なピン配置」が必要な事が想像できるでしょう. ここ
でおこなわれているようにグラウンド線の数を減らすことはよい考え
ではありません. SCSIの規格通りの 50 pinの接続の方が望まし
いです. Fast-20 や 40 でこのようなケーブルを使おうなんて
考えてはいけません.
<sect3><heading>ディファレンシャル (平衡) バス</heading>
<p>
ディファレンシャル SCSIバスは最大長が 25m です. シングルエ
ンド Fast-SCSIバスの 3mとはまったく違います. 平衡信号の背景と
なっている考え方は, それぞれのバスの信号はそ
れぞれ独立したリターン信号線を持つというものです. つまり,
それぞれの信号は (できればより線の) ペアの信号線で伝えられま
す. これら2つの信号線の差分の電圧で信号が「真」(assert) で
あるか「偽」(de-assert) であるか判定されます. かなりの電圧
がグラウンド電位と信号線ペアの間にかかったとしても影響があ
りません (だからといって 10kVの電圧をかけてみたりしないでく
ださい.. ).
なぜ平衡信号がよいのかについての説明はこのドキュメントの範
囲を越えています. 電気的に平衡信号はノイズマージンの点で
非常に優れたものとして利用されているということを受け入れて
ください. ディファレンシャルバスは普通は外部接続に利用さ
れています. これは低コストのシングルエンドバスが筐体内の短
い距離のバスでは非常に多く利用されているからです.
FreeBSDを使うにおいて, FreeBSDでサポートされているデバイス
ドライバがあるのであればディファレンシャルバスの利用で問題
になることは何もありません. 例をあげれば, アダプテックの
AHA1740はシングルエンドで, AHA1744はディファレンシャルで
す. 双方のソフトウェアインタフェースはまったく同一です.
<sect3><heading>ターミネータ</heading>
<p>
SCSIにおける用語でのターミネータとはインピーダンスの
マッチングを正確におこなうための抵抗ネットワークです. インピーダンス
マッチングは反射やリンギングを抑え, バスの信号をきれいにす
る重要なものです. たとえば,あまり状態のよくない回線で長距
離の電話をかけた時にあなたは反射をどんなものか感じるかもしれません.
20Mbytes/sec で信号の伝わる SCSIバスでは信号のエコーはあ
りがたくありません.
訳注: 電気信号に限らずすべての波で反射
という現象は起きます. ここの例はあまり実感がわかないと思う
ので簡単に書きますと, 3mのバスの端からパルスを入れた場合,
反対の端からの反射波は 20ns後 - 本当は電線中の信号の伝達は
光速よりも少し遅くなるのでもう少し時間がかかりますが -
に帰ってきます. 10MHzのクロックは1:1のパルスだとすると幅
50nsのパルスで, 反射波がやってくる時間とそれほど変わりません.
このため, 場合によっては反射波によってクロックや信号が異常
になってしまう可能性があります.
ターミネータはいろいろな - 洗練されたものもそうでないもの
も - 実現方法があります. もちろん,内蔵のものと外部という
区別もあります. ほとんどすべての SCSIデバイスにはいくつかの
ソケットがあり,その中には抵抗ネットワーク (集合抵抗) が入っ
ているものもあるかもしれません (いや,おそらく間違いなくあ
るでしょう). ターミネータを
デバイスから外す時は大事にしまっておいてください. SCSIの接
続の変更をしようと思った時に必要になるかもしれません. ま
た, それらしい抵抗ネットワークが見つからないこともあります.
この場合, SCSIデバイスは内蔵ターミネータの有効と無効を切替
えるジャンパがあります. フラットケーブルに取り付ける特別
なターミネータもあります. 他には外部コネクタのような形をし
たものやケーブルのないコネクタヘッドだけのものもあります.
いろいろと見られるように多くの選択があります.
どのような場合に単純な抵抗 (パッシブ) ターミネータからアクティ
ブターミネータへ切替えるかという問題があります.アクティブ
ターミネータはいくらか精巧な回路が信号をよりきれいにするた
めに入っています. 一般的に一致する意見としては, 長いバス
を使ったり 高速なデバイスを使う場合はアクティブターミネー
タの有効性は増加すると言えます. SCSI バスですでに問題が起
きているならアクティブターミネータを試すことを考えていいで
しょう. まず借りることができないか探してみてください. ア
クティブターミネータは非常に高価だそうですから.
ディファレンシャルとシングルエンドバスのターミネータは互換
性がないということを覚えておいてください. これらの2つの種
類を <bf>混在させることはできません</bf>.
OK, ではあなたはターミネータをどこに入れればいいでしょうか?
これは SCSIで最も多く誤解されているところです. しかし, これ
は極めて単純なことです.. ここでのルールは <bf>すべての SCSI
バスは 2個のターミネータをそれぞれの両端に入れる</bf>とい
うことです. つまり 2個であって1個でも3個でもありませ
ん. このルールを受け入れてしたがってください. そうすれば終りの
ない苦しみから救われるでしょう. なぜなら間違ったターミネー
ションは不可解なバグを引き起こす可能性が非常に高いから
です.
よく陥りやすい落し穴はマシンの内部 (フラット) ケーブルと外部
ケーブルがコントローラにつながっている場合です. よく見られ
るのはコントローラのターミネータを外すのを忘れることで
す. ターミネータは最後の外部デバイスで必要で, コントローラ
には必要ありません! 一般的に, SCSIバスの接続の変更をする場
合はこのようなことに注意をしなければなりません.
私自身は, すべてのデバイスとコントローラのターミネータを外し
ています. 2個の外部ターミネータをセントロニクスタイプ (訳注:
日本ではケーブルに対してこういう言い方はあまりしないのでは
ないでしょうか) 外部ケーブルと内部フラットケーブルのコネク
タの両端に接続しています. こうすることにより接続の変更はか
なり簡単になります.
最近のデバイスは, ICターミネータが使われることもあります.
コントロールピンにより無効/有効を設定できる特別のICがあり
ます. これは物理的にデバイスから外す必要がありません. 新し
いホストアダプタではセットアップツール等を使ってソフトウェ
ア的に設定をおこなう場合があります. マニュアルを調べてくださ
い.
<sect3><heading>ターミネータの電源</heading>
<p>
ここまでの章で議論したターミネータは正常に動作するためには
電源が必要です. SCSIバス上にはこの目的のために利用される線
があります. だから特に気にする必要はないと思いますか?
ところがそうではないのです. それぞれのデバイスはデバイス上
にあるターミネータソケットに電源を供給することはできま
す. けれども外部ターミネータがある場合やSCSIバスにターミネー
タの電源を供給するデバイスのスイッチがオフになっているよう
な場合にはトラブルが起きるかもしれません.
イニシエータ (ここではバスの動作を開始-initiate-させるデバ
イスを指します -- 訳注: 簡単に言えばホスト側のアダプタです
がSCSIの規格によれば, 例えばディスク側がコマンドを発行する
ようなシステムがあってもかまわないことになっているのでこう
いう言い方をしています) はターミネータ電源を供給しなければ
なりません. すべてのSCSIデバイスはターミネータの電源を供給す
ることができます (必ずしも供給しなければならないというわけ
ではありません).
スイッチがオフになっているデバイスがバス上に存在することを
許すために, ターミネータの電源はダイオードを通して供給され
なければなりません. これはスイッチを切ったデバイスに電流
が逆流することを防ぐためです.
最悪の事態を避けるために, ターミネータの電源は普通はヒュー
ズが入っています. 当然ヒューズは飛ぶかもしれません. この
場合でもバスが機能停止するとは限りません. 複数のデバイスが
ターミネータの電源を供給しているのであれば, ヒューズが一つ
飛んでも全体の機能には影響しません. ただ一つの供給線のヒュー
ズが飛んだのであれば確かに問題になるでしょう. 外部ターミネー
タによっては LEDでターミネータ電源が与えられていることを示
すものもあります.
最新の設計ではある程度の時間がたつと 「リセット」され自動復
帰するヒューズが使われることもあります.
<sect3><heading>デバイス アドレッシング</heading>
<p>
SCSIバスでは接続された異なるデバイスを区別して指定できなけ
ればなりません.
これには SCSIではターゲットIDが使われます. それぞれのデバイ
スは特定のターゲットIDを持ちます. デバイスの IDはジャンパや
DIPスイッチなどで設定できます. より詳しい情報はデバイスの
マニュアルを見てください.
複数のデバイスを使う場合は IDの重複に気をつけてください. 重
複すると普通は混乱状態になります. 同じ IDを共有しているデバ
イスがI/Oリクエストに答えようと処理をおこなうことが落し穴にな
ります.
8 bitバスでは, 最大8台のターゲットまで可能です. 最大8台で
ある理由は, バスの8本のデータ線がデバイスの選択に使われる
からです. バス幅の広いバスでは使えるデバイスの数は増えます.
同時にバス使用の要求が発生した場合, 最も IDの大きいデバイス
が優先されるという調停がおこなわれます. このことは (ナローバス
では) SCSIホストアダプタの IDは通常7番が使われる理由でもあり
ます.
さらにサブユニットとして, 規格では ロジカルユニット,短縮形
で LUNを持つことができます. 一つのターゲットIDが複数の LUNを
持つことができます. 例えば, テープチェンジャを持つテープ
ドライブは LUN 0をテープドライブ自身, LUN 1をテープチェン
ジャ に与えることができます. このようにして, ホストシス
テムはテープチェンジャの目的のテープユニットの部分を指定す
ることができます.
<sect3><heading>バスレイアウト</heading>
<p>
SCSIバスは直線状です. つまり, Y接続, スター接続, クモの巣
状の接続などの直線以外の接続ではありません.
先に議論したターミネータの問題は直線状以外の場合ではより困
難になるだろうということに注意してください.
電気的特性はそのノイズマージンや全体の信頼性において,直線
状のバスのルールに強く依存しています.
<bf>直線状バスであるというルールにしたがってください!</bf>
<sect2><heading>FreeBSD で SCSIを使う</heading>
<p>
<sect3><heading>トランスレーション, BIOS, そしてマジック...</heading>
<p>
まず始める前に, 電気的に問題のないバスであるか調べておいてく
ださい.
SCSIディスクをPCでブートディスクとして使う場合に, PC BIOSに
関する気まぐれについて知っておく必要があります. PC BIOSは ハー
ドディスクへの低レベル物理インタフェースを利用するように実
現されています. したがって, BIOSに (セットアップツールやBIOSビル
トイン セットアップを使って) ディスクの物理パラメタを教えてや
る必要があります. これはヘッドの数, シリンダの数, トラックあ
たりのセクタなどがあり, プリコンペンセーションや書き込み電流を
減少させるトラック, などのあまりよく知られていないものもあります.
SCSIディスクはこれらのことをユーザは気にする必要がないはず
だと考えるかもしれません. しかし, 不思議なことに (これらの項
目の) セットアップはいまだにあるのです. システム BIOSはブート
時にFreeBSDのカーネルを読み込むためにSCSIディスクに
/ヘッド/シリンダ/セクタ を指定する方法でアクセスするため,
パラメタを知る必要があるのです.
AT/EISA/PCIバスなどにあり,ディスクに接続される SCSI ホストア
ダプタや SCSI コントローラは それ自身のオンボードBIOSを持っ
ています. システムの起動時に, SCSI BIOSは システムBIOSのハー
ドディスクのインタフェースルーチンを乗っ取ります. システ
ム BIOSをごまかすために システムセットアップでは普通は
`No hard disk' とします. 簡単ですね?
SCSI BIOS はドライブの<bf>トランスレーション</bf>と呼ばれる機
能を持ちます. これはPCがブートするために作られたドライブテー
ブルをごまかすものです. このトランスレーションは多くは (すべて
の場合ではありません) トラックあたり64あるいは32個のヘッドを
持つ仮想的なドライブを使います. シリンダの数を変更することで
SCSI BIOS は実際のドライブのサイズに適合させます. 総セクタ数
を 32 * 64 / 2 で割った結果がメガバイト単位のドライブのサイズ
になります. 2で割っているのは, 通常 512バイトのサイズのセク
タを kByte 単位に変換するためです.
ではこれですべてうまくいくのでしょうか. いいえ, そういう訳で
はありません. ブート可能なハードディスクのシリンダ数は 1024よ
り多くすることはできないのです. トランスレーションを使った
場合でもディスクの 1GB以上の領域は見えません. ディスクの容量
がどんどん増加していくにつれこれは問題になってきました.
幸いにして, 単純な解決方法があります. 単に別のトランスレーショ
ンを使えばよいのです. 例えば, 32個に代わり,128個のヘッドを使いま
す. ほとんどの場合, 古いSCSIホストアダプタをアップグレードす
るための新しいバージョンの SCSI BIOS が用意されています.
新しいアダプタではジャンパ
やセットアップソフトによって SCSI BIOSの使うトランスレーショ
ンが選択できる物もあります.
ここで非常に重要なことは, ディスク上の<bf>すべての</bf>オペレー
ティングシステムが <bf>同一のトランスレーション</bf>により正
しいパーティションを得ることです. つまり FreeBSDをインストー
ルする時に, ヘッド/シリンダなどについての質問にあなたのホスト
アダプタが使用しているトランスレートされた値を使わなくてはな
りません.
トランスレーションによる失敗で見られるのは, ブートしないシス
テムや他のパーティションを上書きしてしまうことです. すべてのシ
ステムが見えるように fdiskを使うべきです.
あなたはデバイスについてこれとは食い違った話を聞いたことがあ
るかもしれません. 古い FreeBSDのカーネルはブートする時に SCSI
ディスクのジオメトリ情報を報告していました. 私のシステムの
一つの例を示しましょう.
<verb>
aha0 targ 0 lun 0: <MICROP 1588-15MB1057404HSP4>
sd0: 636MB (1303250 total sec), 1632 cyl, 15 head, 53 sec, bytes/sec 512
</verb>
最近のカーネルは, 普通はこのような情報を報告しません. たとえば,
このようになっています.
<verb>
(bt0:0:0): "SEAGATE ST41651 7574" type 0 fixed SCSI 2
sd0(bt0:0:0): Direct-Access 1350MB (2766300 512 byte sectors)
</verb>
なぜこのように変わったのでしょう?
この情報は SCSIディスク自身から得られます. 最近のディスクで
はよくゾーンビット記録方式 (zone bit recording) という技術が使
われています. これはドライブの外側のシリンダは内側よりもスペー
スが広いのでトラックあたりのセクタ数を増やすことができるとい
うアイディアです. この結果, 外側のシリンダ上のトラックの容量
は内側のシリンダよりも大きくなり, 全体ではより大きな容量とな
ります. この場合, ドライブにのジオメトリについての報告は,
最善のものかどうか疑わしく, ほとんどの場合誤解を招くものであ
ることがわかるでしょう.
ジオメトリを調べる場合, ほとんどの場合は BIOSの用い
ている値を与える方がよい結果となり, <em>BIOSがそのディスクに
ついてまったく関知しないのであれば</em> (例えばブートディスクで
はないなら) 都合のよい仮想のジオメトリを与えればいいでしょう.
<sect3><heading>SCSI サブシステムの設計</heading>
<p>
FreeBSDでは階層的な SCSIサブシステムを用いています. 各々異な
るコントローラカードのデバイスドライバが書かれています. この
ドライバはコントローラのハードウェアの詳細を知っています. ド
ライバは SCSIサブシステムのより上位の階層のコマンドを受け取り,
ステータスを報告するインタフェースを持ちます.
カードのドライバの最上位には, デバイスのクラスのためのいくつ
かの一般的なドライバがあります. 具体的にいうと, テープドライ
ブのためのドライバ (略号は: st), 磁気ディスク (sd), CD-ROM
(cd) などです. これらのソースコードは<tt>/sys/scsi</tt>にあり
ます. マニュアルページ (man) のセクション 4 にはより詳しい内
容があるので見てください.
多階層の設計は低レベルとより高位のレベルを分離させることがで
きます. 新たに他の種類のハードウェアのサポートを加えることを
より処理しやすい問題にします.
<sect3><heading>カーネルコンフィグレーション</heading>
<p>
あなたのハードウェア構成にしたがって, カーネルのコンフィグファイ
ルにホストアダプタについて 1行あるいは数行程度の記述をする
必要があります.
これには I/O アドレスや割り込みなどについての内容も含
みます. あなたのアダプタのドライバについてのマニュアルページ
にはより多くの情報があるのでよく読んでください. これとは別に
/sys/i386/conf/LINT にはカーネルコンフィグファイルについての
概要があります. LINTには一般的なものについては可能なすべてのオ
プションが含まれています. ただし, LINTでは実際に動作するカー
ネルを作ることは <em>できません</em>.
おそらく何をするかは明らかでしょう. カーネルコンフィグファイ
ルは実際のハードウェア構成を反映すべきです. そのように割り込
みやI/Oアドレス等に合わせてカーネルコンフィグファイルを書か
なければなりません. システムのブート時のメッセージは実際に
見つけたハードウェアの設定を表示します.
例として FreeBSD 2.0.5-Releaseのいくつかのコメント
(&lsqb;&rsqb;の中) をつけた LINTカーネルコンフィグファイルを示
します.
<verb>
# SCSI host adapters: `aha', `ahb', `aic', `bt', `nca'
#
# aha: Adaptec 154x
# ahb: Adaptec 174x
# ahc: Adaptec 274x/284x/294x
# aic: Adaptec 152x and sound cards using the Adaptec AIC-6360 (slow!)
# bt: Most Buslogic controllers
# nca: ProAudioSpectrum cards using the NCR 5380 or Trantor T130
# uha: UltraStore 14F and 34F
# sea: Seagate ST01/02 8 bit controller (slow!)
# wds: Western Digital WD7000 controller (no scatter/gather!).
#
&lsqb; Adaptec AHA274x, 284x などのコントローラ&rsqb;
controller ahc0 at isa? bio irq ? vector ahcintr # port??? iomem?
&lsqb; Adaptec AHA174x コントローラ&rsqb;
controller ahb0 at isa? bio irq ? vector ahbintr
&lsqb;Ultrastor アダプタ&rsqb;
controller uha0 at isa? port "IO_UHA0" bio irq ? drq 5 vector uhaintr
# Map SCSI buses to specific SCSI adapters
controller scbus0 at ahc0
controller scbus2 at ahb0
controller scbus1 at uha0
# The actual SCSI devices
disk sd0 at scbus0 target 0 unit 0 [SCSI ディスク 0 は scbus 0, LUN 0]
disk sd1 at scbus0 target 1 [unit を省略すると暗黙で LUN 0]
disk sd2 at scbus1 target 3 [uha0 上の SCSIディスク]
disk sd3 at scbus2 target 4 [ahb0 上の SCSIディスク]
tape st1 at scbus0 target 6 [SCSI テープ は ターゲット (ID)6]
device cd0 at scbus? [最初に見つけた CDROM, 固定にしない]
</verb>
上の例では カーネルは ahc (Adaptec 274x) コントローラをまず
探し, その次に Adaptec 174x のボードというように順番に探して
行きます. その下の行の controller の記述ではデバイスの詳細
を記述して, 対応するバスでターゲット ID と LUN が指定された
ものと一致する場合<em>だけ </em>認識するようにカーネルに伝え
ています.
固定された (Wired down) デバイスは 「最初に」ユニット番号が与え
られるので, 「固定」されいないデバイスは同じ種類の「固定」され
たユニット番号の最も大きい番号の1つ上の番号から割り当てられ
ます.
したがって, ターゲットID 2の SCSIテープを加えると, ターゲットID 6
のテープがユニット番号1に固定されているので, それはst2に設定
されるでしょう. ブート時に見つからなくても<em>固定されたデバ
イスにはユニット番号が常に割り当てられる</em>ということに注
意してください. 固定のデバイスに
割り当てられたユニット番号は,もしそのデバイスのスイッチがブー
ト時に切られていてもそのデバイスにリザーブされています.
これは, 電源を入れて接続した時のユニット番号が与えられます.
デバイスのユニット番号は SCSIバスのター
ゲットIDとは <em>何の関係もない</em>ことに注意してください.
下の例は FreeBSDのバージョン 2.0.5 以前の カーネルコンフィ
グファイルです. 最初の例との違いはデバイスの「固定 (wired
down)」がないことです. 「固定」によりどのSCSIターゲットをどの
デバイスに割り当てるかを記述できるようになりました.
下のコンフィグファイルにより構築されたカーネルでは最初に見つ
けた SCSIディスクが sd0になり, 次に見つけたディスクが sd1に,
という具合に割り当てられます. もしディスクの削除や追加をおこなう
と, 他の同じタイプのデバイス (この場合はディスク) のすべてが
「移動して」しまうかもしれません. これによりそのたびに
<tt>/etc/fstab</tt> を変更する必要があります.
古いスタイルでも動きますが, 新しいスタイルを使うことが<em>強
く</em> 推奨されています. これにより SCSIバスのハードウェアを
どのように変更した場合でもトラブルを避けることができます.
ですから, 2.0.5.R以前の FreeBSDからアップグレードした後に古い
信頼できるコンフィグファイルを再利用する時はこの部分をチェッ
クして直してください.
<verb>
&lsqb;Adaptec 174x用のドライバ&rsqb;
controller ahb0 at isa? bio irq 11 vector ahbintr
&lsqb;Adaptec 154x用のドライバ &rsqb;
controller aha0 at isa? port "IO_AHA0" bio irq 11 drq 5 vector ahaintr
&lsqb;Seagate ST01/02インタフェースのドライバ&rsqb;
controller sea0 at isa? bio irq 5 iomem 0xc8000 iosiz 0x2000 vector seaintr
controller scbus0
device sd0 &lsqb;4台のSCSI ディスクのサポート, sd0 から sd3&rsqb;
device st0 &lsqb;2台の SCSI テープのサポート&rsqb;
&lsqb;cdromのドライバ&rsqb;
device cd0 #Only need one of these, the code dynamically grows
</verb>
両方の例で SCSIディスクがサポートされています. ブート中に
「固定」の記述がされているタイプ(例えば sd ディスク) のデバ
イスで記述より多くのデバイスが見つかると,
システムは単純に最後の「固定」のデバイスの番号より
1つずつ増加させた番号をデバイスに割り当てて行きます. もし
「固定」のデバイスがなければユニット番号は0から始まります.
<tt>man 4 scsi</tt> によって SCSIサブシステムの最新の情報を
チェックしてください. より詳細なホストアダプタドライバの使い
方は, たとえば Adaptec 154xドライバの場合は<tt>man 4
aha</tt> にあります.
<sect3><heading>カーネルセットアップでの SCSI チューニング</heading>
<p>
経験的に SCSIバスリセット (ブート時におきます) 後のINQUIRYコマ
ンドに対して応答が遅くなるデバイスがあります. INQUIRYコマン
ドは ブート時にカーネルがどの種類のデバイス (ディスク, テープ,
CDROMなど) がどのターゲットIDに接続されているかを調べるために
発行します. ちなみにこのプロセスをデバイスプロービング (デバ
イス検出) と言います.
「応答の遅いデバイス」の問題を解決するために, FreeBSDは SCSIバ
スをリセットした後に SCSIデバイスの検出をおこなうまでのディレ
イタイムを調整することができます. カーネルコンフィグレーショ
ンファイルの下に示すような行にディレイタイムを設定してくださ
い.
<verb>
options SCSI_DELAY=15 #Be pessimistic about Joe SCSI device
</verb>
この行ではディレイタイムは 15秒です. 私のシステムでは, 信頼
できる古い CDROMが認識できるように3秒の値を使っています. もし
デバイスの認識で問題が起きる時は大きな値 (30秒であるとか) から
始めてください. うまく動いたら,値を減らしてちょうどよい値に
にチューニングしてください.
<sect3><heading>Rogue な SCSI デバイス</heading>
<p>
(訳注: rogue は有名なゲーム, ではなくて 悪党, 群から離れた, 凶暴
な, という意味)
SCSIの規定は完全で簡潔なものにしようという努力はされましたが,
複雑な規定となり, 正確に実現するのは簡単なことではありません.
いくつかのベンダは他よりもよい仕事をしています.
ここで 「イカレた」デバイスが現れることになります. このような
デバイスは FreeBSD のカーネルにいくらか標準的
ではない振舞をするものと認識されます. 「イカレた」デバイスは
ブート時にカーネルによって報告されます. 次の例は私の2つのカー
トリッジテープユニットです.
<verb>
Feb 25 21:03:34 yedi /kernel: ahb0 targ 5 lun 0: <TANDBERG TDC 3600 -06:>
Feb 25 21:03:34 yedi /kernel: st0: Tandberg tdc3600 is a known rogue
Mar 29 21:16:37 yedi /kernel: aha0 targ 5 lun 0: <ARCHIVE VIPER 150 21247-005>
Mar 29 21:16:37 yedi /kernel: st1: Archive Viper 150 is a known rogue
</verb>
例えば, あるターゲットIDから実際には1つのデバイスしかないの
にすべての LUNからの応答があるようなデバイスがあるとします. カー
ネルはその特定のターゲットIDに8個の LUNがあると誤解してしまう
かもしれません. このような混乱の起きる原因については読者へ
の課題にしておきます.
FreeBSDの SCSIサブシステムは 検出時の INQUIRYの応答を見て
悪い習慣を持つデバイスの認識をしています. INQUIRYの応答にはデ
バイスのファームウェアのバージョン番号が含まれるため, 異なる
動作をするファームウェアのバージョンを区別することも可能です.
例えば, /sys/scsi/st.c や /sys/scsi/scsiconf.c を見てくださ
い. どのように行っているか, より多くの情報があります.
この方法はうまく行きますが, もちろん既知のデバイスがつながっ
ている場合だけうまくいくということに気をつける必要があります.
もしあなた以前に Mumbletech SCSI CDROM (訳注: 架空のメーカ
のデバイスです) を接続した人がいないとしたら, どんな「ワザ」
を使ってそれを使うか自分で見つけないといけないかもしれません.
あなたの Mubletech を動かすことができたらその成果を FreeBSDの
次のリリースへ含めるために FreeBSD開発チームへ送ってくださ
い. 他の Mumbletechの利用者たちはあなたに感謝するでしょう.
<sect3><heading>複数の LUNを持つデバイス</heading>
<p>
単一の SCSI ID上に複数の論理ユニット (LUN) を持つデバイスを使う
ような場合もあるかもしれません. 多くの場合では FreeBSDは LUN 0
のみを検出します. このような例としては2台の SCSIではないハード
ディスクを SCSIバスにつなぐブリッジボード (例えば古い Sunシステ
ムに見られる Emulex MD21) があります.
LUN が0ではないデバイスは普通はシステムブート時の検出では
見つかりません. この問題にうまく対処するには
/sys/scsi/scsiconf.c に適切なエントリを加えてカーネルを再構築
しなければなりません.
以下のように初期化されている構造体を探します.
<verb>
{
T_DIRECT, T_FIXED, "MAXTOR", "XT-4170S", "B5A",
"mx1", SC_ONE_LU
}
</verb>
LUNが複数あるあなたの Mumbletech BRIDGE2000 はハードディスク
として働きます. またファームウェアのリビジョン123などを次のよ
うに書き加えます.
<verb>
{
T_DIRECT, T_FIXED, "MUMBLETECH", "BRIDGE2000", "123",
"sd", SC_MORE_LUS
}
</verb>
訳注: 複数 LUNに対応するためには構造体の最後の要素を
SC_MORE_LUSにします. エントリを作る必要がある場合は scsiconf.c
にある MBR-7等のエントリを参考にするといいでしょう.
カーネルは INQUIRYに一致するデータをブート時にテーブルから探し
てこれにしたがって振舞います. より多くの情報はソースコードを見て
ください.
<sect3><heading>タグ コマンド キューイング</heading>
<p>
最近の SCSI デバイス, 特に磁気ディスクではタグ コマンド キュー
イング (tagged command queuing: TCQ) がサポートされています.
要約すれば, TCQは複数のI/Oリクエストを同時に受けることを可能
にすることです. デバイスはインテリジェントですから,リクエスト
キューにある処理 (ヘッドのポジショニングなど) の最適化をおこなうこ
とができます. RAID (Redundant Array of Independent
Disks) のようなSCSIデバイスではTCQ機能はデバイスの持つ並列性の
利点を生かすために不可欠です.
各々の I/O リクエストは単一の `tag' (タグ コマンド キューイン
グの名前の由来) が与えられます. FreeBSDはこの tagによりデバ
イスドライバのキューの中のどの I/Oリクエストが完了したかの識
別をおこないます.
TQCのリクエストはデバイスドライバがサポートしていたとしても
あるデバイスのファームウェアではインプリメントが正しくないかもし
れません. このような問題に出会うと非常に不可解な問題につ
ながります. このような場合は TCQ を無効にしてみてください.
<sect3><heading>バスマスタ ホストアダプタ</heading>
<p>
すべてではありませんが多くの SCSIホストアダプタはバスマスタコ
ントローラです. これはホストCPUにデータ転送の負荷をか
けず, ボード自身がI/Oをおこないます.
これは FreeBSDのようなマルチタスクのオペレーティングシステム
では大きな利点になります. しかし, 何らかの問題の起きることも
あります.
例えば Adaptec 1542 コントローラは ホストバス (ここではISAま
たはATバス) を異なった転送速度に設定できます. コントローラが
異なるレートに設定できるのはすべてのマザーボードで高速な転送が
できる訳ではないからです. マザーボードに合っていない高速の
データ転送速度を用いた時には, ハングアップやデータの損傷等の
問題が起きるかもしれません.
これを解決する方法は明らかです. より低いデータ転送速度に設定
してうまく動くか確かめることです.
Adaptec 1542の場合, 可能な限り高速な転送レートを動的に読み取って,
正しい決定をおこなうためのオプションをカーネルコンフィグファイルに
追加することができます. このオプションはデフォルトでは無効に
なっています.
<verb>
options "TUNE_1542" #dynamic tune of bus DMA speed
</verb>
あなたの使うホストアダプタについてのマニュアルページをチェッ
クしてください. また最終的な手段としては究極のドキュメントを
使ってください (つまりドライバのソースを読んでくださいというこ
とです).
訳注: 2.1.5Rの時点ではすべてのドライバに関してマニュアルページ
があるわけではありません. また上の例の TUNE_1542のオプション
も <tt>man aha </tt>にはないようです. ソースのコメントだけで
も一度見ておいてもいいかもしれません.
<sect2><heading>問題を突き止める </heading>
<p>
以下は SCSI で一般的に問題が起きた場合に解決をするためのチェッ
クリストの試みです. これは完全な物ではありません.
<itemize>
<item>
コネクタとケーブルがゆるんでいないかチェックする.
<item>
ターミネータの場所と数を念には念を入れてチェックする.
<item>
少なくとも1つのターミネータの電源の供給源があるかチェック
する (特に外部ターミネータを使う場合).
<item>
ターゲットIDが重複していないかチェックする.
<item>
使用するすべてのデバイスの電源がONになっているかチェックする.
<item>
必要最小限のデバイスだけの構成を試してみる.
<item>
可能であれば, ホストアダプタのスピードを遅くする.
<item>
問題をより単純にするために, タグコマンドキューイングを可能
であれば無効にする. (NCRベースのホストアダプタについては
man ncrcontrol を見てください)
<item>
カーネルのコンパイルができるのであれば, SCSIDEBUGオプショ
ンをつけて makeして, デバイスをデバッグモードにしてアクセ
スしてみてください. もしそれでも起動時にデバイスが検出
されないのであれば, デバイスの設定アドレスが間違っている
のかもしれません. また, <tt>/sys/scsi/scsidebug.h </tt>に
あるデバッグレベルを変えてみてください. 検出はされるが
動かないのであれば, <tt>scsi(8)</tt>コマンドで (SCSIDEBUG
をつけてmakeした) カーネルが動いている状態で動的にデバッグ
レベルを設定することができます. これは guru (UNIXの達人) で
も混乱してしまうほどの非常に大量のデバッグ情報を出すでしょ
う. <tt>man 4 scsi
</tt>にはより正確な情報があります. また<tt>man 8
scsi</tt> も見てください.
</itemize>
<sect2><heading>さらに詳しい情報<label id="scsi:further-reading"></heading>
<p>
もしあなたがいくらかは本気で SCSIハッキングをする気があるなら
たぶん正規の規格を持っていたくなるでしょう.
承認ずみのアメリカ工業規格は ANSI から購入できます. 住所と電話
番号は11 West 42nd Street, 13th Floor, New York, NY 10036,
Sales Dept: (212) 642-4900 です.
また, ANSIの規格および委員会の規格案 (ドラフト) のほとんどはGlobal
Engineering Documentsより買うことができます. 連絡先は 15
Inverness Way East, Englewood, CO 80112-5704, Phone: (800)
854-7179, Outside USA and Canada: (303) 792-2181, FAX: (303) 792-
2192です.
X3T10のドラフトの多くは電子的に利用できる形で SCSI
BBS (719-574-0424) と ncrinfo.ncr.com の Anonymous FTP (誰でも
ファイルを取ってくることができるFTPサービス) サイトから得るこ
とができます.
最新の X3T10委員会のドキュメントは:
<itemize>
<item>AT Attachment (ATA or IDE) &lsqb;X3.221-1994&rsqb; (<em>Approved</em>)
<item>ATA Extensions (ATA-2) &lsqb;X3T10/948D Rev 2i&rsqb;
<item>Enhanced Small Device Interface (ESDI) &lsqb;X3.170-1990/X3.170a-1991&rsqb; (<em>Approved</em>)
<item>Small Computer System Interface - 2 (SCSI-2) &lsqb;X3.131-1994&rsqb; (<em>Approved</em>)
<item>SCSI-2 Common Access Method Transport and SCSI Interface Module (CAM)
&lsqb;X3T10/792D Rev 11&rsqb;
</itemize>
追加情報を得ることのできる出版物は:
<itemize>
<item>"SCSI: Understanding the Small Computer System Interface", NCR社
編. 出版: Prentice Hall, Englewood Cliffs, NJ, 07632
Phone: (201) 767-5937 ISBN 0-13-796855-8
<item>"Basics of SCSI", a SCSI tutorial, Ancot Corporation 編
Ancot の連絡先:
Phone: (415) 322-5322 Fax: (415) 322-0455
<item>"SCSI Interconnection Guide Book", AMP社の出版物 (発行 4/93, カ
タログ 65237) 色々な SCSI コネクタのリスト と ケーブル接続方法のガイド.
AMP 社より入手可能. (800) 522-6752 または (717) 564-0100
<item>"Fast Track to SCSI", 富士通によるプロダクトガイド,
入手先: Prentice Hall, Englewood Cliffs, NJ, 07632
電話: (201) 767-5937 ISBN 0-13-307000-X
<item>"The SCSI Bench Reference", "The SCSI Encyclopedia", "SCSI Tutor",
ENDL Publications, 14426 Black Walnut Court, Saratoga CA, 95070
電話: (408) 867-6642
<item>"Zadian SCSI Navigator" (クイックリファレンス) および "Discover the Power of SCSI"
(最初の本は1時間のビデオとチュートリアルが付属), Zadian Software,
Suite 214, 1210 S. Bascom Ave., San Jose, CA 92128, (408) 293-0800
</itemize>
Usenet のニュースグループ <htmlurl
url="news:comp.periphs.scsi" name="comp.periphs.scsi">
と <htmlurl url="news:comp.periphs" name="comp.periphs">
は特により多くの情報を得るには注目すべき場所です. また定期的に
ポストされる SCSI-FAQをここから得ることができます.
多くの主要な SCSIデバイスとホストアダプタの供給元は FTP サイト
や BBSを開いています. これらはあなたの持っているデバイスに関す
る貴重な情報源となるでしょう.