Como recarregar as regras do udev sem reiniciar?

179

Como se deve recarregar as regras do udev, de modo que uma recém criada possa funcionar?

Estou executando o Arch Linux e não tenho um comando udevstart aqui.

Também verificado /etc/rc.d , nenhum serviço do udev lá.

    
por daisy 26.05.2012 / 02:34

6 respostas

184
# udevadm control --reload-rules && udevadm trigger
    
por 26.05.2012 / 02:59
62

O Udev usa o mecanismo inotify para observar alterações no diretório de regras, tanto na biblioteca quanto na configuração local árvores (geralmente localizadas em /lib/udev/rules.d e /etc/udev/rules.d ). Então você não precisa fazer nada quando você altera um arquivo de regras.

Você só precisa notificar o daemon udev explicitamente se estiver fazendo algo incomum, por exemplo, se tiver uma regra que inclua arquivos em outro diretório. Então você pode usar a convenção usual para pedir que os daemons recarreguem sua configuração: envie um SIGHUP ( pkill -HUP udevd ). Ou você pode usar o comando udevadm : udevadm control --reload-rules .

As regras do udev só são aplicadas quando um dispositivo é adicionado. Se você quiser reaplicar as regras a um dispositivo que já está conectado, será 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' .

    
por 28.05.2012 / 02:55
17

Estou adicionando isso porque algum dia eu precisarei ... novamente.

Às vezes, você recebe uma correspondência incorreta de números de dispositivos Ethernet e endereços MAC. Às vezes isso é realmente importante, como quando rodando em uma VM e cada dispositivo é atribuído a uma VLAN diferente.

  1. Traga as interfaces de rede para baixo e, em seguida,
  2. modificar /etc/udev/rules.d/70-persistent-net.rules (ou seu equivalente)
  3. recarregue com udevadm control --reload-rules
  4. reativar com udevadm trigger --attr-match=subsystem=net
  5. traga as interfaces de rede para cima.

Fiquei surpreso com o quão bem isso funcionou.

    
por 21.02.2014 / 14:51
12

Eu não tenho certeza se isso se aplica, e este é definitivamente um post mais antigo, mas surgiu muito alto minha pesquisa na web para informações do udev, então eu pensei que poderia compartilhar algum conhecimento.

Você pode acionar regras do udev manualmente para dispositivos específicos. Isso se aplica somente a distros relacionadas ao redhat (centos fedora etc etc etc)

Depois de fazer as alterações relevantes em seu arquivo de regras ( /etc/udev/rules.d/whateveryoucalledyourrules ), você pode fazer o echo change no dispositivo uevent.

echo change > /sys/block/devname/partname1/uevent

Isso forçará uma leitura da regra do udev somente para este dispositivo. Muito melhor e mais direcionado na minha opinião.

    
por 10.06.2015 / 02:11
3

Para mim, a sequência de comando abaixo funcionou como é desejado.

Eu fiz modificações em /etc/udev/rules.d/70-persistent-net.rules para alterar o número eth e recarregá-las sem reinicializar.

/etc/init.d/networking stop
/etc/init.d/udev stop
udevadm control --reload-rules
/etc/init.d/udev start
/etc/init.d/networking start

Ao seguir isto, foi carregado com sucesso em tempo de execução sem reiniciar a máquina.

Qualquer sugestão ou recomendação sobre isso é bem-vinda, já que descobri isso sozinho lendo as man pages.

    
por 13.06.2016 / 16:34
2

Estou adicionando a resposta correta aqui porque levei um tempo para notar no comentário de @enthusiasticgeek. Tudo que você precisa fazer (supondo que você esteja no console do servidor - claramente isso é ruim de se fazer se você estiver ssh'd!):

  1. Obtenha uma lista dos módulos de interface que estão sendo usados:

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 apenas isso.

  1. digite sudo rmmod igb (substitua igb pelo driver da sua placa obtido na etapa 1.

em seguida, edite /etc/udev/rules.d/70-persistent-net.rules conforme necessário e, em seguida, carregue o módulo novamente usando modprobe igb , novamente substituindo igb pelo seu.

    
por 22.06.2017 / 21:41

Tags