Las udev
reglas que he creado hasta ahora solo se ocupan de los dispositivos que se agregan o eliminan, es decir:
ACTION=="add"...
oACTION=="remove"...
me he encontradoun ejemplode una regla que parece tratar con el dispositivocambios de estadotambién:
ACTION=="add|change", KERNEL=="sd[b-z]", ATTR{queue/rotational}=="1", RUN+="/usr/bin/hdparm -B 127 -S 12 /dev/%k"
Supongo que la regla anterior se aplica siempre que se encuentre un dispositivo coincidente.agregadoO su estadocambios.
Pregunta:¿Qué tipo de cambios de estado son posibles (generales y específicos de un disco duro USB)?
Revisé toda la documentación de udev que pude encontrar y apenas hay mención o guía de uso con respecto a los cambios de estado del dispositivo o específicamente ACTION="change"
.
Respuesta1
"cambiar" corresponde, por ejemplo, a retirar o insertar una tarjeta SD en un lector de tarjetas SD, o a cambiar el disco duro dentro de una caja USB a SATA. El dispositivo en sí no se agrega ni se elimina, pero los medios ya no son los mismos.
Respuesta2
El evento de cambio de udev se activa cuando el cambiador de medios (con respecto a la cinta, entorno tipo Netbackup) o el lector de tarjetas SD se utiliza a continuación con diferentes medios o tarjetas SD. Cuando se vuelve a agregar el mismo dispositivo (se vuelve a agregar un disco san o se desactiva/habilita el conmutador en el lado del conmutador o se desactiva/habilita el puerto de destino desde el lado de destino)
A continuación se muestran algunos eventos de cambio de udev que vemos en el lado del host, cuando desactivé el puerto de destino (de la matriz Vexata VX100) para un san lun existente.
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)
Respuesta3
Significa que el kernel ha emitido un uevent para informar que algo en el dispositivo ha cambiado, acompañado de propiedades de evento ( ENV
) para describir qué es exactamente y propiedades del dispositivo (también ENV
) para proporcionar contexto. Estos son diferentes de los atributos del dispositivo ( ATTR
, que corresponden a la estructura de archivos en sysfs), y puede ver cuáles son estas propiedades ejecutando sudo udevadm monitor --kernel --udev -p --subsystem-match=usb
.
Estos uevents son generados por los módulos específicos del kernel que administran el dispositivo, por lo que no existe una lista completa ni un conjunto garantizado de eventos. Debería consultar la documentación o consultar el código fuente de los módulos en cuestión para ver las llamadas kobject_uevent
o kobject_uevent_env
saber qué causa que se generen eventos.