ATTRS{*}
USBデバイスのudevルールを作成しようとしていますが、ルールの属性を一致させるのに問題があります。を使用していくつかのデバッグを実行した後、udevadm info
私のデバイスのどれも属性を表示しないことがわかりました。
udevadm info -a
Linuxサーバーでルートボリュームを実行すると、次の結果が表示されます。
looking at device '/devices/vbd-768/block/xvda':
KERNEL=="xvda"
SUBSYSTEM=="block"
DRIVER==""
ATTR{ro}=="0"
ATTR{size}=="83886080"
ATTR{stat}==" 717683 43803 15924796 381200 8002096 5757360 169243664 6994333 0 635530 7372343"
ATTR{range}=="16"
ATTR{discard_alignment}=="0"
ATTR{ext_range}=="16"
ATTR{alignment_offset}=="0"
ATTR{inflight}==" 0 0"
ATTR{removable}=="0"
ATTR{capability}=="10"
ただし、ノートブックで実行すると、次の結果が表示されます。
looking at device '/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda':
KERNEL=="sda"
SUBSYSTEM=="block"
DRIVER==""
これはすべてのデバイスで発生する可能性があります。ATTR{*}
システム内のすべてのデバイスの変数を取得できないようです。この問題の原因は何ですか?
注:私はこの記事現在、最新のカーネルであるArch Linuxを実行しています。
答え1
あなたが見ている正確な項目を知りたいですudevadm
。
/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda
ラップトップからのアクセスは、/devices/vbd-768/block/xvda
サーバーからのアクセスとは大きく異なります。
ディスクに興味があれば、バスIDで探すことをお勧めします。
を使ってディスクのバスIDを見つけることができますlsblk -S
。 7行が必要です。最初の2行は興味のある行です。NAME
とHCTL
。NAME
はドライブ名(例sda
:)を表し、HCTL
バスID(例2:0:0:0
:)を表します。
これで、照会時にこのバスIDが使用されます。udevadm
udevadm info --path=/sys/bus/scsi/devices/[bus ID] -a
これにより、出力グループの1つがあなたに似たものに/devices/vbd-768/block/xvda
も適用されますATTRS
。ここで指定するパスは、ドライブ情報のサブセットにのみ適用されるようです。