As udev
regras que criei até agora tratam apenas da adição ou remoção de dispositivos, ou seja:
ACTION=="add"...
ouACTION=="remove"...
eu me depareium exemplode uma regra que parece lidar com dispositivosmudanças de estadotambém:
ACTION=="add|change", KERNEL=="sd[b-z]", ATTR{queue/rotational}=="1", RUN+="/usr/bin/hdparm -B 127 -S 12 /dev/%k"
Presumo que a regra acima se aplica sempre que um dispositivo correspondente éadicionadoOU seu estadomudanças.
Pergunta:Que tipo de alterações de estado são possíveis (geral e específicas para um disco rígido USB)?
Verifiquei toda a documentação do udev que encontrei e quase não há menção ou orientação de uso em relação às alterações de estado do dispositivo ou especificamente ACTION="change"
.
Responder1
“alterar” corresponde, por exemplo, a remover ou inserir um sdcard num leitor de sdcard, ou a mudar o disco rígido dentro de um compartimento usb-para-sata. O dispositivo em si não é adicionado nem removido, mas a mídia não é mais a mesma.
Responder2
O evento de alteração do udev é acionado quando o trocador de mídia (em relação à fita - ambiente semelhante ao Netbackup) ou o leitor de cartão SD é usado em continuação com mídia ou cartão SD diferente. Quando um mesmo dispositivo é adicionado novamente (um disco san é adicionado novamente ou você desativa/ativa o switch no lado do switch ou desativa/ativa a porta de destino no lado do destino)
Abaixo estão alguns eventos de alteração do udev que vemos no lado do host, quando desativei a porta de destino (do array Vexata VX100) para um 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)
Responder3
Isso significa que o kernel emitiu um uevent para relatar que algo no dispositivo mudou, acompanhado de propriedades de evento ( ENV
) para descrever exatamente o que e propriedades do dispositivo (também ENV
) para fornecer contexto. Eles são diferentes dos atributos do dispositivo ( ATTR
, que correspondem à estrutura do arquivo em sysfs), e você pode ver quais são essas propriedades executando sudo udevadm monitor --kernel --udev -p --subsystem-match=usb
.
Esses uevents são gerados pelos módulos específicos do kernel que gerenciam o dispositivo, portanto não há uma lista completa ou um conjunto garantido de eventos. Você precisaria verificar a documentação ou consultar o código-fonte dos módulos em questão para chamadas kobject_uevent
ou kobject_uevent_env
para saber o que causa o surgimento de eventos.