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