udev 忘记了自定义规则中的标签

udev 忘记了自定义规则中的标签

我有一套相当简单的自定义规则:

ACTION=="add", SUBSYSTEM=="usb", ENV{ID_MODEL_ID}=="0748", ENV{ID_VENDOR_ID}=="05e3", TAG+="my-card-reader"
TAGS=="my-card-reader", ENV{DEVTYPE}=="disk", ENV{ID_INSTANCE}=="0:1", SYMLINK+="sdcard"
TAGS=="my-card-reader", ENV{ID_INSTANCE}=="0:1", ENV{DEVTYPE}=="partition", SYMLINK+="sdcard%n"

我正在尝试识别我的 USB 读卡器,然后在 /dev 中为 microSD 卡指定众所周知的名称。这组规则在 16.04 中有效,但在 18.04 中无效。

检查后udevadm monitor -p,我可以看到 USB 读卡器已被识别:

UDEV  [1832291.742219] add      /devices/pci0000:00/0000:00:14.0/usb4/4-2 (usb)
ACTION=add
[…]
SUBSYSTEM=usb
TAGS=:my-card-reader:
[…]

但是当我稍后使用检查 sysfs 路径时udevadm info /sys/devices/pci0000:00/0000:00:14.0/usb4/4-2,我的 TAG 不再显示 - 事实上,E: TAGS根本没有可用的条目。

对于其他设备,例如我的 microSD 卡上的分区,Ubuntu 的默认systemdTAG 仍然可用:

P: /devices/pci0000:00/0000:00:14.0/usb4/4-2/4-2:1.0/host3/target3:0:0/3:0:0:2/block/sdf
N: sdf
[…]
E: SUBSYSTEM=block
E: TAGS=:systemd:
[…]

更新 1

我一直在运行,udev_log="debug"同时拔下并重新插入读卡器和 SD 卡,突然到现在只有一次,我的规则应用。但是,查看来自 udev 的 journalctl 调试日志并进行比较,除了内核日志、udev 守护进程日志和分叉的 udev 工作进程之间的竞争以及序列号之外,我看不到其他区别。

更新 2

我几乎已经解决了这个问题。启动期间连接 USB 读卡器时,标签可用。当我稍后(重新)连接它时,标签不见了。

我错过了什么?

答案1

最有可能的是,该标签已被另一条规则覆盖。

  • Ubuntu 18.04 获得了更新的规则.. 检查grep -r TAG系统规则文件夹中的使用,请参阅man udev
  • 自定义规则文件给定低数字..使用udevadm test ...udevadm trigger ...来验证针对该事件处理哪些规则。

答案2

显然,事情正在发生:https://github.com/systemd/systemd/issues/7587

长话短说:TAGS 仅对每个事件有效,且不会持久化。ACTION=="add",从我的规则文件中删除后,它就可以正常工作了

相关内容