Como recarregar as regras do udev, para que um recém-criado possa funcionar?
Estou executando o Arch Linux e não tenho um udevstart
comando aqui.
Também verificado /etc/rc.d
, nenhum serviço udev lá.
udev
? É o gerente de /dev
?
Como recarregar as regras do udev, para que um recém-criado possa funcionar?
Estou executando o Arch Linux e não tenho um udevstart
comando aqui.
Também verificado /etc/rc.d
, nenhum serviço udev lá.
udev
? É o gerente de /dev
?
Respostas:
# udevadm control --reload-rules && udevadm trigger
udevtrigger
depois?
udevtrigger
(ou melhor, udevadm trigger
na maioria das distribuições) (isso ou conectar o dispositivo e instalá-lo). --reload-rules
é quase sempre inútil, pois acontece automaticamente.
udevadm trigger
fiz o truque no CentOS 6 para mim.
udevtrigger
ou udevadm trigger
não funcionou para mim. Descobri que alguns dispositivos funcionarão após descarregar e carregar o módulo para o mesmo (assumindo que seja o módulo carregável). O que eu descobri é que não é necessário necessariamente reiniciar o sistema. Exemplo para um dispositivo de rede, eu rmmod ixgbe
, rmmod tg3
, rmmod e1000
em seguida modprobe ixgbe
, modprobe tg3
, modprobe e1000
dependendo do tipo de controlador de rede.
ip link set $oldname name $newname
mencionada aqui . No meu caso, eu precisava substituir um iface nomeado lan
por iface em ponte (para KVM) e, portanto, o iface original - agora subjacente - precisava recuperar seu nome antigo eth1
. Então o truque foi: 1) derrubar o iface; 2) corrigir configuração da rede; 3) atualizar o arquivo de regras de nomeação do udev; 4) renomeie o iface usando ip link...
; 5) levante a ponte.
O Udev usa o mecanismo inotify para verificar alterações no diretório de regras, na biblioteca e nas árvores de configuração local (normalmente localizadas em /lib/udev/rules.d
e /etc/udev/rules.d
). Portanto, na maioria das vezes, você não precisa fazer nada ao alterar um arquivo de regras.
Você só precisa notificar o daemon udev explicitamente se estiver fazendo algo incomum, por exemplo, se você tiver uma regra que inclua arquivos em outro diretório. Em seguida, você pode usar a convenção usual para solicitar que os daemons recarreguem sua configuração: envie um SIGHUP ( pkill -HUP udevd
). Ou você pode usar o udevadm
comando: udevadm control --reload-rules
.
Entretanto, lembre-se de que versões diferentes do udev têm historicamente diferentes gatilhos para recarregar as regras automaticamente. Portanto, em caso de dúvida, ligue udevadm control --reload-rules
: não fará mal nenhum.
As regras do udev são aplicadas apenas quando um dispositivo é adicionado. Se você deseja reaplicar as regras a um dispositivo que já está conectado, é necessário fazer isso explicitamente, chamando udevadm trigger
com as opções corretas para corresponder ao (s) dispositivo (s) cuja configuração foi alterada, por exemplo udevadm trigger --attr-match=vendor='Yoyodyne' --attr-match=model='Frobnicator 300'
.
inotify
mecanismo nem sempre captura uma alteração de um arquivo de regras do udev. Por exemplo, quando eu uso cat > 10-name.rules
para alterar o arquivo de regras colando o conteúdo, preciso recarregar as regras manualmente usando udevadm
. Testado em Raspbian Stretch.
--reload-rules
só era necessário em casos incomuns.
inotify
mecanismo funcionou.
Estou adicionando isso porque um dia vou precisar ... de novo.
Às vezes, você obtém uma correspondência incorreta de números de dispositivos Ethernet e endereços MAC. Às vezes isso é realmente importante, como ao executar em uma VM e cada dispositivo é atribuído a uma VLAN diferente.
/etc/udev/rules.d/70-persistent-net.rules
(ou equivalente)udevadm control --reload-rules
udevadm trigger --attr-match=subsystem=net
Fiquei surpreso com o quão bem isso funcionou.
service network stop && udevadm control --reload-rules; udevadm trigger --attr-match=subsystem=net; service network start
Não tenho certeza se isso se aplica, e este é definitivamente um post mais antigo, mas surgiu bastante bem minha pesquisa na web por informações do udev, então pensei em compartilhar algum conhecimento.
Você pode disparar regras do udev manualmente para dispositivos específicos. Isso se aplica apenas a distros relacionadas ao redhat (centos fedora etc etc etc)
Depois de fazer as alterações relevantes no seu arquivo de regras ( /etc/udev/rules.d/whateveryoucalledyourrules
), você poderá ecoar change
no evento do dispositivo.
echo change > /sys/block/devname/partname1/uevent
Isso forçará a leitura de uma regra do udev APENAS para este dispositivo. Muito melhor e mais direcionado na minha opinião.
Para mim, a sequência de comandos abaixo funcionou como desejado.
Fiz modificações /etc/udev/rules.d/70-persistent-net.rules
para alterar o eth
número e recarregá-lo sem reiniciar.
/etc/init.d/networking stop
/etc/init.d/udev stop
udevadm control --reload-rules
/etc/init.d/udev start
/etc/init.d/networking start
Seguindo isso, ele foi carregado com êxito em tempo de execução sem reiniciar a máquina.
Qualquer sugestão ou recomendação sobre isso é bem-vinda, pois eu descobri isso sozinho lendo as páginas de manual.
Estou adicionando a resposta correta aqui, porque demorei um pouco para notá-la no comentário de @enthusiasticgeek. Tudo o que você precisa fazer (supondo que você esteja no console do servidor - claramente isso é ruim de fazer se você estiver no ssh!):
cat /etc/udev/rules.d/70-persistent-net.rules | grep "PCI device" | perl -pe 's/.*\((\w+)\).*/$1/g'| uniq
No meu caso, é igb
, então imprime exatamente isso.
sudo rmmod igb
(substitua igb
pelo driver da placa obtido na etapa 1.Em seguida, edite /etc/udev/rules.d/70-persistent-net.rules
conforme necessário e carregue o módulo novamente usando modprobe igb
, substituindo novamente igb
pelo seu.
no caso de várias redes
cat /etc/udev/rules.d/70-persistent-net.rules | grep "PCI device" | awk '{print $NF}'|sed -e 's/(//g' -e 's/)//g'| uniq > /tmp/listnet
rm -rf /etc/udev/rules.d/70-persistent-net.rules
for i in $(cat /tmp/listnet); do rmmod $i; modprobe $i;done
service network restart
rm -rf /tmp/listnet