在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了解引发事件的原因。

相关内容