Qual é a maneira correta de reiniciar o udev?

46

Eu mudei o nome da minha eth1interface para eth0. Como pedir udevagora para reler a configuração?

service udev restart

e

udevadm control --reload-rules

não ajude. Existe alguma maneira válida, exceto a reinicialização? (sim, a reinicialização ajuda com esse problema)

  • sim, eu sei que devo acrescentar os comandos com sudo, mas qualquer um que eu publiquei acima não altera nada na ifconfig -asaída: ainda vejo eth1, não eth0.

  • Acabei de alterar a NAMEpropriedade da linha de regra do udev. Não conheço nenhuma razão para isso ser ineficaz.

Não há nenhum erro na execução dos dois comandos que eu publiquei acima, mas eles simplesmente não mudam o nome da interface real na ifconfig -asaída. Se eu executar a reinicialização - o nome da interface mudará conforme o esperado.

Para fins de desenvolvimento, escrevo alguns scripts que clonam máquinas virtuais (baseadas em VirtualBox) e as pré-configuram de alguma forma.

Portanto, eu executo um comando para clonar a VM, iniciá-la e contanto que o MAC da interface de rede seja alterado - udevadiciona a segunda regra às regras persistentes da rede. Logo após a inicialização da máquina pela primeira vez, existem duas regras:

  • eth0, que não existe, desde que existisse na imagem original da VM MAC
  • eth1, que existe, mas toda a configuração em todos os arquivos se refere eth0, portanto, não é tão bom para mim

Então, eu sedexcluo a linha com eth0(é obsoleta e inútil na imagem clonada) e substituo eth1por eth0. Assim, atualmente tenho regra persistente válido, mas ainda há eth1no /dev.

O problema: não quero reiniciar a máquina (levará outro tempo, o que não é bom no edifício VM-stage) e só quero que eu seja /devreconstruído com algum comando para que eu tenha a VM pronta para usar sem nenhuma reinicialização.

zerkms
fonte
Como você mudar eth1para eth0? Você acabou de renomear o arquivo do dispositivo? Nesse caso, essa não é uma maneira eficaz de fazer isso (e você deve esperar que a alteração seja revertida por uma reinicialização bem-sucedida do udevdaemon). Se você usou outro método, descreva-o em detalhes e forneça também o texto completo e exato de todas as mensagens de erro que você vê ao executar os comandos que você tentou (para reiniciar o udevdaemon ou recarregar suas regras). Você pode editar sua pergunta para fornecer essas informações.
Eliah Kagan
@Eliah Kagan: atualizado. ps: por que deveria ser revertido? Não deveria ;-)
zerkms
udevgera dinamicamente seus dispositivos /dev. Se você reiniciá-lo, ele os regenerará de acordo com suas regras. As alterações feitas diretamente a eles não são, em geral, persistentes. Parece que a reinicialização udevestá funcionando bem, mas você não alterou corretamente os nomes dos dispositivos.
Eliah Kagan
@Eliah Kagan: udev apenas adiciona (não modifica) novas regras se não conseguir encontrar a regra para um dispositivo específico. Se houver uma regra que corresponda - apenas a segue sem modificações.
Zerkms
@Eliah Kagan: e eu mudei corretamente. Basta acreditar que eu faço pode mudar um caractere em uma linha ;-) (também helpes reiniciar, e isso prova que está tudo bem com regras)
zerkms

Respostas:

29

Não sei se isso ajuda a recarregar a configuração de rede, mas quando modifiquei /etc/udev/rules.d/70-persistent-cd.rulespara corrigir o link do dispositivo de DVD de /dev/dvd1para /dev/dvd, tive que executar

sudo udevadm trigger

para obter os novos links criados.

akaihola
fonte
3
Eu acredito que sudo udevadm trigger --action=changeé mais seguro, de acordo com este e-mail sobre o que é seguro e não é seguro fazer a respeito udev: lists.ubuntu.com/archives/ubuntu-devel/2009-January/027260.html
Ehtesh Choudhury
Na verdade, e é chamado/etc/udev/rules.d/70-persistent-net.rules
msanford 6/15/15
No Ubuntu 15.04, encerrei udevadm triggerminha sessão do X11 e me jogou de volta à minha tela de login.
22615 Ian Ian Allen
20

Você precisa combinar todos os conselhos fornecidos aqui na ordem correta:

  1. Derrubar a rede service networking stop
  2. Descarregue o módulo do driver do kernel
    1. Encontre o nome do módulo lspci -ve procure "Driver do Kernel em uso:"
    2. modprobe -r <driver module>
  3. Recarregar as regras do udev udevadm control --reload-rules
  4. Disparar as novas regras udevadm trigger
  5. Motorista de carga modprobe <driver module>
  6. Reinicie a rede service networking start
  7. (opcional) Execute novamente todos os iptablesscripts que referenciaram o ethnome da interface antes que ele fosse ativado.

Eu suspeito que a etapa 4 ou a etapa 5 não é realmente necessária, mas essas etapas funcionaram para mim. Você pode verificar após a etapa 4 com a etapa 2.1 para ver se o comando de acionamento já executou a etapa 5 e, se o fizer, edite esta resposta para refletir suas descobertas.

Chris Wesseling
fonte
1
Ubuntu 15.04 com todos os dispositivos listados em /etc/network/interfaces(para que o Network Manager os deixe em paz): Tudo o que eu precisava era editar e /etc/udev/rules.d/70-persistent-net.rulesdepois fazer # 2, # 3, # 5. Não há necessidade de parar todas as redes; não há necessidade de mais nada.
Ian D. Allen
5

Eu tive um problema parecido. Como não queria gastar tempo com a reinicialização, executei um liner usando a sugestão de Chris Wesseling.

/etc/init.d/networking stop && modprobe -r tg3 && udevadm control --reload-rules && udevadm trigger && modprobe tg3 && /etc/init.d/networking start

Isso funcionou para mim usando o servidor Ubuntu 12.04.02. Minhas placas de rede estavam usando o driver do módulo tg3 do kernel, então mude o tg3 para o módulo que suas interfaces estão usando. Encontrei os meus usados ​​em /etc/udev/rules.d/70-persistent-net.rules:

Dispositivo PCI 0x14e4: / sys / devices / pci0000: 00/0000: 00: 1c.4 / 0000: 02: 00.1 (tg3) <driver do módulo <-kernel para o nic

O único problema que tive foi uma rota ruim, que eu consertei com um comando simples de adição de rota. Obrigado pela ajuda Chris!

user197674
fonte
3

sudo /etc/init.d/udev restartdeve fazer o truque. Alguns dos comandos que você tentou, se executados sudo, também podem ser eficazes.

Eliah Kagan
fonte
Não, ifconfig -aainda me mostra velha eth1de interface
zerkms
3

Isso deve ser feito com segurança:

sudo reload udev

Como eu usei este comando sem problemas.

rdh
fonte
Não, ifconfig -aainda me mostra velha eth1de interface
zerkms
1

Venho pesquisando isso há algum tempo com praticamente o mesmo objetivo e não consegui encontrar uma maneira de alterar o nome da interface de rede em um sistema ativo.

A solução alternativa que eu procurei é excluir o arquivo /etc/udev/rules.d/70-persistent-net.rules no modelo, o que significa que na próxima inicialização ele verá qualquer placa de rede como eth0.

Merlijn
fonte
1

Você precisa recarregar o udev para acionar a alteração de regra, mas o dispositivo não será renomeado, a menos que você descarregue / recarregue o módulo do driver.

Então, modprobe -r e1000 && modprobe e1000após a atualização do udev, faça o truque. Obviamente, não faça isso se você precisar da rede e tiver apenas interfaces e1000.

acena
fonte
0
udevadm trigger 

funcionará, digite a descrição do link aqui

zhou yunjian
fonte
1
Bem-vindo ao Ask Ubuntu! Embora isso possa teoricamente responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
Braiam 30/08/2013
0

Então, para mim no VirtualBox com Ubuntu 12.04, geralmente alterno entre ethernet e sem fio.

Portanto, quando minha conexão muda, devo escolher o Adaptador Bridged em Dispositivos> Configurações de rede. 'Conexão de rede Intel 82579LM Gigabit' ou 'Intel Centrino Ultimate-N 6300 AGN'.

Depois de fazer isso, eu posso correr

sudo modprobe -r e1000
sudo service udev restart
sudo modprobe e1000
ping google.com # To test I ran this between each command.

Esta é apenas uma explicação dos meus resultados depois de ler todas as respostas acima.

Derek Robati
fonte