Правила 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-to-sata. Само устройство не добавляется и не удаляется, но носитель уже не тот.
решение2
Событие изменения udev запускается, когда устройство смены носителя (относительно ленты - среда Netbackup) или устройство чтения карт SD используется в продолжении с другим носителем или картой SD. Когда то же самое устройство повторно добавляется (диск san добавляется снова или вы выполняете switchdisable/enable на стороне коммутатора или target port disable/enable со стороны цели)
Ниже приведены несколько событий изменения udev, которые мы видим на стороне хоста, когда я отключил целевой порт (из массива Vexata VX100) для существующего san lun.
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
.
Эти uevents вызываются определенными модулями ядра, которые управляют устройством, поэтому нет полного списка или гарантированного набора событий. Вам нужно будет проверить документацию или посмотреть исходный код рассматриваемых модулей на предмет вызовов kobject_uevent
или kobject_uevent_env
узнать, что вызывает возникновение событий.