33.4. キーの選択

デバイスを一意に識別し、複数のデバイスを相互に区別するためには、使用するudevルールでの一意なプロパティが重要となります。ここでは、標準的なキーに関するいくつかの例を示します。

SUBSYSTEM

デバイスが属しているサブシステム

BUS

デバイスのバスタイプ

KERNEL

カーネルが使用するデバイス名

ID

バスのデバイス番号(たとえば、PCIバスのID)

SYSFS{...}

ラベル、ベンダー、またはシリアル番号のような、sysfsのデバイス属性

SUBSYSTEMIDの各キーは役に立つこともありますが、通常はBUSKERNEL、およびSYSFS{...}の各キーが使用されています。udevの設定は、外部スクリプトを呼び出してその結果を評価するためのキーも用意しています。詳細は、udevのmanページを参照してください。

ファイルシステムsysfsは、ハードウェアについての情報をディレクトリツリーとして公開しています。一般的に、各ファイルにはデバイス名、メーカ、シリアル番号など、ただ1項目の情報が含まれます。これらの各ファイルは、キーとマッチングするために用いられます。しかし、1つのルールで複数のSYSFSキーを使用する場合、同じディレクトリの中にあるファイルだけがキー値として使用できます。有効で一意なキー値を見つけるには、ツールudevinfoが役に立ちます。

該当のデバイスを参照していて、devファイルが含まれている/sysの1つのサブディレクトリを見つける必要があります。これらのディレクトリはいずれも、/sys/blockまたは/sys/classの下に配置されています。デバイスにデバイスノードがすでに存在している場合は、 udevinfoが正しいサブディレクトリを見つけられます。udevinfo -q path -n /dev/sdaコマンドは、/block/sdaという出力をします。これは、必要とするディレクトリが/sys/block/sdaであることを意味します。今度は、コマンドudevinfo -a -p /sys/block/sdaを使用して、udevinfoを呼び出します。これら2つのコマンドを組み合わせて、たとえばudevinfo -a -p `udevinfo -q path -n /dev/sda`のようにすることもできます。次に、出力の一部を抜粋します。

BUS=="scsi"
ID=="0:0:0:0"
SYSFS{detach_state}=="0"
SYSFS{type}=="0"
SYSFS{max_sectors}=="240"
SYSFS{device_blocked}=="0"
SYSFS{queue_depth}=="1"
SYSFS{scsi_level}=="3"
SYSFS{vendor}==" "
SYSFS{model}=="USB 2.0M DSC"
SYSFS{rev}=="1.00"
SYSFS{online}=="1"

出力情報から、変化しない適切なキーを探します。1つのルール内では、他のディレクトリにあるキーを使用できないことに注意してください。