udev では、どのようなデバイス イベントが ACTION=="change" と一致しますか?

udev では、どのようなデバイス イベントが ACTION=="change" と一致しますか?

これまでに作成したルール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する原因を知るには、ドキュメントを確認するか、問題のモジュールのソース コードを確認する必要があります。

関連情報