Linux では、dev_t に 16ビットを使用しており、マイナー番号には 8ビット
しか割り当てられていないため、SCSI ディスクやテープ、CDROM、それに
汎用デバイスのマイナー番号は、以下にしたがって動的に割り当てられます。
For すべての SCSI ホストアダプタ (scsi0 から scsiN まで) について
For ホストアダプタ自身の ID を除く、すべての SCSI ID (0 から 7 まで) について
For すべての LUN (0 から max_scsi_luns まで) について
- TEST UNIT READY コマンドを発行して、バス、ターゲット、
LUN の組み合わせを探索する。あるバス上の SCSI ID に
デバイスが存在しないと判断したら、そのバスと SCSI ID の
対しては LUN の探索を行わない。
- INQUIRY コマンドを発行して、見つかったデバイスに関する
情報を集める。デバイスタイプ、メーカー、モデル名、
ファームウェアのバージョンなど。
- この結果を特別な認識関数を通して、存在するハイレベル
ドライバ (ディスク、テープなど) に通知する。
このデバイスを扱えるドライバのユニットとしてアタッチする。
汎用ドライバはすべてのデバイスをアタッチする。
- SCSI-I デバイスの場合、あるいは複数の LUN を扱えない
デバイスのリストに載っているデバイスの場合は、
このバスのこの SCSI ID に対して LUN の探索を行わない。
- 複数の LUN を持っていることがわかっているデバイスの
場合は、max_scsi_luns を無視してすべての LUN を
スキャンする。
この方法では、しばしば問題が生じる場合があるということが分かっています。
ある時点でしか存在しないデバイスがあった場合、そのデバイスのマイナー
デバイス番号は、ブート時に見付かったデバイスに依存して決まります。
この場合、rc スクリプトや /etc/fstab ファイルによって
マウントされるパーティションのマイナー番号が異なってしまう可能性が
あるからです。
この問題は、まだ完全には解決されていません。
/dev/scsi 以下のデバイス階層をホスト番号と SCSI ID および
LUN から作成するプログラムがあり、
ftp://tsx-11.mit.edu から
取ってくることができます。
ちょっと扱いづらい点もありますが、これによって問題の一部が軽減される
ことは確かでしょう。
多分もっと良い解決法は、/proc/scsi 擬似ディレクトリを使うこと
でしょう。現在作業が進行中なので、どのような方法になるかはまだ正確には
言えませんが、この問題を解決するためには有望だと思えます。