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
擬似ディレクトリを使うこと
でしょう。現在作業が進行中なので、どのような方法になるかはまだ正確には
言えませんが、この問題を解決するためには有望だと思えます。