Estou criando uma nova regra básica
/etc/udev/rules.d/10-myrule.rules
contendo:
KERNEL!="sdb*", GOTO="auto_mount_end"
ACTION=="add", RUN+="/usr/bin/mount /dev/sdb1 /media"
LABEL="auto_mount_end"
Salvei, reiniciei e inseri um cartão SD (reconhecido por /dev/sdb1
, eu o vejo dmesg
), mas nada acontece. Quando eu faço manualmente mount /dev/sdb1 /media
, ele funciona.
Como posso solucionar / depurar essa udev
regra?
Nota: Estou usando o ArchLinux, mas deve ser o mesmo em qualquer distro?
arch-linux
mount
udev
Basj
fonte
fonte
99-myrule.rules
...systemd
algo para o comportamento normal do udev?udevadm monitor
, veja isso e isso #udevadm test
regras validadas e contra a realidade comudevadm info
.Respostas:
10-
como mencionado por jasonwryan, use numeração alta (bom dos anos 90). Então você regra não será substituída por outra.Use as teclas mínimas exatamente como você realmente precisa. Exemplo,
!=
&GOTO
/LABEL
, em vez disso, use diretamente==
Seu alvo estava
sdb1
com comando fixo, minimize a correspondência cega usandoKERNEL=="sdb1"
Acho útil criar uma regra de depuração de sombra, chamei de sombra porque sempre a deixo lá no mesmo arquivo, então uso-a quando preciso.
Nota:
udev-env.txt
é criada e a regra é acionada de qualquer maneira. Linha==
correspondente a um nó correspondente. O ENV registrado nesse arquivo pode ser uma mistura entre 2 nós ou mais, criado quase ao mesmo tempo, é umstdout
problema de buffer.Use
udevadm monitor -u
,udevadm test ...
eudevadm trigger ...
para verificar quais as regras processados os eventos.Dentro dos scripts, cabe a você fazer o log de depuração e capturar os comandos com falha, salvando também o valor de retorno
stdout
e asstderr
mensagens.Atualizar:
Referência: udev_237 -
man udev
(Ubuntu_18.04)fonte
udevadm test...
parecem mostrar apenas variáveis de ambiente, para queATTRS
você possa usarudevadm info $DEVICE
para encontrar essas outras configurações.udevadm info
retornos, uma árvore de dispositivos deve ter cuidado ao distinguir configurações entre um dispositivo e seus dispositivos pai (as propriedades parecem ser herdadas se não forem substituídas). No meu caso, o subsistema estava errado.udevadm test "This program is for debugging only, it does not run any program specified by a RUN key. It may show incorrect results, because some values may be different, or not available at a simulation run."
Não há como rastrear o que realmente está acontecendo?udevadm monitor -u
para verificar eventos / condições eudevadm trigger ...
testar suas ações.Eu acho que o comando que você está procurando aqui é
udevadm
. Você usará os parâmetrostrigger
etest
para acionar uma nova varredura dos eventos do udev e para testar um evento específico, respectivamente.Aprendi isso da maneira mais difícil ao brincar com o novo dispositivo de rede nomeado no EL 7. Boa sorte!
fonte
Crie um arquivo de regras do udev
Adicione uma regra que diga aos udiscos para montá-la automaticamente
ATTRS{type}=="SD"
pode não ser necessário se você estiver usando tipos diferentes.Regras de recarga
Ejete e depois recoloque.
Referência: Archlinux Wiki: Alguns dispositivos, que devem ser tratados como removíveis, não são
fonte
Eu estava tendo o mesmo problema com FRAMBOESA PI 3 B +, é possível que os comandos acima possam ajudá-lo. Mas isso não me ajudou. Eu estava tentando invocar um script para inserir um dispositivo de armazenamento USB. As regras não são registradas no syslog; portanto, fica muito difícil entender qual regra funcionou ou qual falhou.
Então eu fiz o seguinte:
(1) Criei meu arquivo de regras em /etc/udev/rules.d/100-myrule.rules
(2) então eu executei o comando
sudo /etc/init.d/udev restart
então eu verifiquei se funcionava. Uma informação pode ser útil para você ou não, mas os sistemas de arquivos são somente leitura para o udev até que o comando em (2) seja executado.
fonte