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

11. マイナー番号の割り当て

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


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