これまでに作成したルールudev
は、デバイスの追加または削除のみを扱います。つまり、
ACTION=="add"...
またはACTION=="remove"...
私は出会った例デバイスを扱うと思われるルールの状態の変化同じように:
ACTION=="add|change", KERNEL=="sd[b-z]", ATTR{queue/rotational}=="1", RUN+="/usr/bin/hdparm -B 127 -S 12 /dev/%k"
上記のルールは、一致するデバイスが追加したまたはその状態変更。
質問:どのような状態変化が可能ですか (一般的な状態変化と USB ハード ドライブに固有の状態変化)?
見つけられる限りの udev ドキュメントをすべて確認しましたが、デバイスの状態の変更や特に に関する言及や使用方法のガイダンスはほとんどありませんACTION="change"
。
答え1
「変更」は、たとえば、SD カード リーダーから SD カードを取り外すか挿入するか、USB から SATA へのエンクロージャ内のハード ディスクを変更することに対応します。デバイス自体は追加も削除もされませんが、メディアは同じではなくなります。
答え2
udev 変更イベントは、メディア チェンジャー (テープ - Netbackup のような環境に関して) または SD カード リーダーが異なるメディアまたは SD カードで継続して使用されるときにトリガーされます。同じデバイスが再度追加された場合 (SAN ディスクが再度追加された場合、またはスイッチ側でスイッチの無効化/有効化を行った場合、またはターゲット側からターゲット ポートの無効化/有効化を行った場合)
以下は、既存のSAN LUNのターゲットポートを無効にしたとき(Vexata VX100アレイから)、ホスト側で確認できるいくつかの変更udevイベントです。
KERNEL[34942.047543] change /devices/virtual/block/dm-0 (block)
KERNEL[34942.047596] change /devices/virtual/block/dm-1 (block)
KERNEL[34942.047613] change /devices/virtual/block/dm-2 (block)
KERNEL[34942.047631] change /devices/virtual/block/dm-3 (block)
KERNEL[34942.047678] change /devices/virtual/block/dm-4 (block)
UDEV [34942.053448] change /devices/virtual/block/dm-3 (block)
UDEV [34942.053486] change /devices/virtual/block/dm-4 (block)
UDEV [34942.053507] change /devices/virtual/block/dm-0 (block)
UDEV [34942.053536] change /devices/virtual/block/dm-2 (block)
答え3
これは、カーネルが、デバイスに関する何かが変更されたことを報告するために uevent を発行したことを意味します。これには、ENV
正確に何が変更されるかを説明するイベント プロパティ ( ) と、コンテキストを提供するデバイス プロパティ ( もENV
) が付随しています。これらは、sysfs の下のファイル構造に対応するデバイス属性 ( ) とは異なりますATTR
。 を実行すると、これらのプロパティが何であるかを確認できますsudo udevadm monitor --kernel --udev -p --subsystem-match=usb
。
これらの uevents は、デバイスを管理する特定のカーネル モジュールによって発生するため、完全なリストや保証されたイベント セットはありません。イベントの呼び出しやイベントがkobject_uevent
発生kobject_uevent_env
する原因を知るには、ドキュメントを確認するか、問題のモジュールのソース コードを確認する必要があります。