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_uevent
或kobject_uevent_env
了解導致事件引發的原因。