在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

當媒體更換器(涉及磁帶 - Netbackup 等環境)或 SD 卡讀卡機連續使用不同媒體或 SD 卡時,會觸發 udev 變更事件。重新新增相同裝置時(再次重新新增 san 磁碟或您在交換器端執行 switchdisable/enable 或從目標端停用/啟用目標連接埠)

以下是當我對現有 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) 來提供上下文。這些與設備屬性( ATTR,對應 sysfs 下的檔案結構)不同,您可以透過執行 來查看這些屬性是什麼sudo udevadm monitor --kernel --udev -p --subsystem-match=usb

這些 uevent 是由管理設備的特定核心模組引發,因此沒有完整的事件清單或保證的事件集。您需要檢查文件或查看相關模組的原始程式碼以呼叫kobject_ueventkobject_uevent_env了解導致事件引發的原因。

相關內容