あなたが Linux によってサポートされている SCSI コントローラを持ってい
なければならないのは明らかです。加えて、あなたのカーネルに汎用 SCSI サ
ポートだけでなくコントローラのサポートも組込まねばなりません。 Linux
カーネルの(/usr/src/linux での make config
による)コンフィギュレー
ションは典型的には次のようになります。
...
*
* SCSI support
*
SCSI support? (CONFIG_SCSI) [n] y
*
* SCSI support type (disk, tape, CDrom)
*
...
Scsi generic support (CONFIG_CHR_DEV_SG) [n] y
*
* SCSI low-level drivers
*
...
もし利用できるならば、代わりにモジュールを作成してもかまいません。 [訳注]
make menuconfigを使用する方が普通は楽です。
汎用 SCSI ドライバは、他の SCSI デバイスドライバによって用いられるものとは別の、固有のデバイスファイルを使用します。
それらのデバイスファイルは、通常は /dev
ディレクトリにある、MAKEDEV
スクリプトによって生成することができます。MAKEDEV sg
を走らせると以下のファイルが作成されます:
crw------- 1 root system 21, 0 Aug 20 20:09 /dev/sga
crw------- 1 root system 21, 1 Aug 20 20:09 /dev/sgb
crw------- 1 root system 21, 2 Aug 20 20:09 /dev/sgc
crw------- 1 root system 21, 3 Aug 20 20:09 /dev/sgd
crw------- 1 root system 21, 4 Aug 20 20:09 /dev/sge
crw------- 1 root system 21, 5 Aug 20 20:09 /dev/sgf
crw------- 1 root system 21, 6 Aug 20 20:09 /dev/sgg
crw------- 1 root system 21, 7 Aug 20 20:09 /dev/sgh
| |
major, minor device numbers
メジャー, マイナー デバイス番号
これらは直にアクセスするためにキャラクタデバイスであることに注意してく
ださい。システムによってはこれらのデバイスは /dev/{sg0,
sg1,...}
と呼ばれているかもしれませんが、インストールしたもの(訳
注:Slackware,RedHat,Debianなどのパッケージ)に依存しますので、以下の例
は適当に読み換えてください。
これらのデバイスファイルは SCSI バス上の SCSI ID/LUN に対して動的に対 応付けられます(LUN = ロジカルユニット)。この対応付けでは低位の LUN/ID/ バス から始まって、SCSI のスキャンの時点にみつけられた各 SCSI バス上の 各装置の各 LUN に対して連続的にデバイス(ファイルのマイナー番号)が 割当てられます。これは最初の SCSI コントローラから始まり、全ての以降の コントローラによって中断されない限り継続します。これは現在のところ SCSI ドライバの初期化においてなされます。
例えば、三つの SCSI 装置が最初の SCSI バス上の ID 1,3,5 につながっていると しましょう(それぞれが一つのLUNを持っています)。 すると、結果として以下のような対応付けがなされるでしょう:
/dev/sga -> SCSI id 1
/dev/sgb -> SCSI id 3
/dev/sgc -> SCSI id 5
もし新しい装置を ID 4 で追加したならば、(次回の再スキャン後の)対応付けは:
/dev/sga -> SCSI id 1
/dev/sgb -> SCSI id 3
/dev/sgc -> SCSI id 4
/dev/sgd -> SCSI id 5
となります。
ID 5 に関する変化に注意しましょう。対応するデバイス(ファイル)はもはや
/dev/sgc
ではなくて、今や/dev/sgd
の下に対応させられて
います。
幸いにも、新しいカーネルでは順番を変更することができます。
新しいカーネルと/proc
ファイルシステムが走っているならば、使用
されていない装置をシステム稼働中に取り外したり導入することができます。
SCSI 装置を取り外すには:
echo "scsi remove-single-device a b c d" > /proc/scsi/scsi
同様にして、SCSI 装置を追加するには、
echo "scsi add-single-device a b c d" > /proc/scsi/scsi
とします。
ここで
a == ホストアダプタの番号 (最初のものが 0)
b == ホストアダプタ上の SCSI チャネル (最初のものが 0)
c == ID
d == LUN (最初のものが 0)
ですから前述の例における /dev/sgc
と /dev/sgd
の対応付けを入れ替えるためには、次のようにすればできるでしょう。
[訳注:cat /proc/scsi/scsi
を実行すれば、これらの4つの値になにを設定すればいいかがつかめると思います。]
echo "scsi remove-single-device 0 0 4 0" > /proc/scsi/scsi
echo "scsi remove-single-device 0 0 5 0" > /proc/scsi/scsi
echo "scsi add-single-device 0 0 5 0" > /proc/scsi/scsi
echo "scsi add-single-device 0 0 4 0" > /proc/scsi/scsi
なぜなら、汎用デバイスはそれらが挿入された順番で対応付けられるからです。
さらに装置を SCSI バスに追加するときは、新しい装置には登録できる予備が 限られていることを心に留めておきましょう。このメモリはブート時に割当て られ、二つの装置を加えるための余地があります。
[訳注]initrd機構と組み合わせることにより、この仕組みを用いて機器構成の変化に対し柔軟なシステムを構築することができるでしょう。