Quelle est la bonne façon de redémarrer udev?


46

J'ai changé le nom de mon eth1interface en eth0. Comment demander udevmaintenant de relire la configuration?

service udev restart

et

udevadm control --reload-rules

n'aide pas. Alors, y a-t-il un moyen valable, sauf de redémarrer? (oui, le redémarrage aide à résoudre ce problème)

  • oui, je sais que je devrais préfixer les commandes sudo, mais l'une ou l'autre que j'ai postée ci-dessus ne change rien à la ifconfig -asortie: je vois toujours eth1, pas eth0.

  • Je viens de changer la NAMEpropriété de udev-rule line. Je ne connais aucune raison pour que cela soit inefficace.

Il n'y a aucune erreur dans l'exécution des deux commandes que j'ai postées ci-dessus, mais elles ne changent tout simplement pas le nom de l'interface réelle dans la ifconfig -asortie. Si j'effectue un redémarrage, le nom de l'interface change comme prévu.

À des fins de développement, j'écris un script qui clone des machines virtuelles (pilotées par VirtualBox) et les pré-configure en quelque sorte.

Donc, j'exécute une commande pour cloner la machine virtuelle, la démarrer et tant que l'interface MAC du réseau est modifiée - udevajoute la deuxième règle aux règles persistantes du réseau. Juste après le démarrage de la machine pour la première fois, il y a 2 règles:

  • eth0, qui n'existe pas, tant qu'il existait dans l'image MAC d'origine
  • eth1, qui existe, mais toute la configuration de tous les fichiers fait référence à eth0, donc ce n’est pas très bon pour moi

Donc, je sedsupprime la ligne avec eth0(elle est obsolète et inutile dans une image clonée) et la remplace eth1par eth0. Donc , actuellement je règle persistante valide, mais il reste encore eth1à /dev.

Le problème: je ne veux pas redémarrer la machine (cela prendra un autre temps, ce qui n’est pas une bonne chose sous building-VM-stage) et je veux juste avoir ma /devreconstruction reconstruite avec une commande afin que j’ai une machine virtuelle prête à l’emploi. sans aucun redémarrage.


Comment avez-vous changé eth1pour eth0? Vous venez de renommer le fichier de périphérique? Si tel est le cas, ce n'est pas un moyen efficace de le faire (et vous devez vous attendre à ce que le changement soit annulé par un redémarrage réussi du udevdémon). Si vous avez utilisé une autre méthode, décrivez-la en détail et donnez également le texte complet et exact de tous les messages d'erreur que vous voyez lorsque vous exécutez les commandes que vous avez essayées (pour redémarrer le udevdémon ou recharger ses règles). Vous pouvez modifier votre question pour fournir ces informations.
Eliah Kagan

@Eliah Kagan: mise à jour. ps: pourquoi devrait-il être inversé? Cela ne devrait pas ;-)
zerkms

udevgénère dynamiquement vos appareils dans /dev. Si vous le redémarrez, il les régénérera selon ses règles. Les modifications qui leur sont apportées directement ne sont généralement pas persistantes. Il semble que le redémarrage udevfonctionne bien, mais que vous n’avez simplement pas modifié correctement les noms de périphérique.
Eliah Kagan

@Eliah Kagan: udev ajoute seulement (et ne modifie pas) de nouvelles règles s'il ne peut pas trouver celle d'un périphérique particulier. S'il existe une règle qui correspond, elle la suit sans modifications.
Zerkms

@Eliah Kagan: et je l'ai changé correctement. Je crois juste que je peux changer un caractère dans une ligne ;-) (aussi redémarrer les helpes, et cela prouve que tout va bien avec les règles)
zerkms

Réponses:


29

Je ne sais pas si cela aide à recharger la configuration réseau, mais lorsque je modifiais /etc/udev/rules.d/70-persistent-cd.rulespour corriger le lien du périphérique DVD de /dev/dvd1à /dev/dvd, je devais exécuter

sudo udevadm trigger

pour avoir les nouveaux liens créés.


3
Je pense que sudo udevadm trigger --action=changec'est plus sûr, comme indiqué dans ce courrier électronique à propos de ce qui est sûr et incertainudev : lists.ubuntu.com/archives/ubuntu-devel/2009-January/027260.html
Ehtesh Choudhury

En effet, et ça s'appelle/etc/udev/rules.d/70-persistent-net.rules
msanford

Sous Ubuntu, 15.04 a udevadm triggerverrouillé ma session X11 et m'a renvoyé à mon écran de connexion.
Ian D. Allen le

20

Vous devez combiner tous les conseils donnés ici dans le bon ordre:

  1. Abattre le réseau service networking stop
  2. Décharger le module de pilote du noyau
    1. Recherchez le nom du module lspci -vet recherchez "Pilote du noyau utilisé:"
    2. modprobe -r <driver module>
  3. Recharger les règles udev udevadm control --reload-rules
  4. Déclencher les nouvelles règles udevadm trigger
  5. Charger le pilote modprobe <driver module>
  6. Redémarrer le réseau service networking start
  7. (Facultatif) Ré-exécutez tous les iptablesscripts qui ont référencé le ethnom de l' interface avant son activation.

Je soupçonne que l’étape 4 ou l’étape 5 n’est pas vraiment nécessaire, mais ces étapes ont fonctionné pour moi. Après l'étape 4 et l'étape 2.1, vous pouvez vérifier si la commande de déclenchement a déjà effectué l'étape 5, éditez cette réponse pour refléter vos conclusions, le cas échéant.


1
Ubuntu 15.04 avec tous les périphériques énumérés dans /etc/network/interfaces(Network Manager les laisse donc seuls): Tout ce que je devais faire, c’était d’éditer /etc/udev/rules.d/70-persistent-net.rulespuis de faire les N ° 2, N ° 3, N ° 5. Pas besoin d'arrêter tous les réseaux; pas besoin de rien d'autre.
Ian D. Allen

5

J'avais un problème similaire. Comme je ne voulais pas prendre le temps de redémarrer, j’ai utilisé une seule ligne en suivant la suggestion de Chris Wesseling.

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

Cela a fonctionné pour moi en utilisant le serveur Ubuntu 12.04.02. Mes nics utilisaient le pilote de module du noyau tg3, changez donc tg3 pour le module utilisé par vos interfaces. J'ai trouvé les miens utilisés dans /etc/udev/rules.d/70-persistent-net.rules:

Périphérique PCI 0x14e4: / sys / devices / pci0000: 00/0000: 00: 1c.4 / 0000: 02: 00.1 (tg3) <Pilote du module de noyau pour le nic

Le seul problème que je rencontrais était un mauvais itinéraire que j'ai corrigé avec une simple commande add route. Merci pour l'aide Chris!



3

sudo /etc/init.d/udev restartdevrait faire l'affaire. Certaines des commandes que vous avez essayées, si elles sont exécutées sudo, peuvent également être efficaces.


Non, ifconfig -ame montre toujours l'ancienne eth1interface
zerkms

3

Cela devrait le faire en toute sécurité:

sudo reload udev

Comme j'ai utilisé cette commande sans aucun problème.


Non, ifconfig -ame montre toujours l'ancienne eth1interface
zerkms

1

Cela fait un moment que je fais des recherches dans ce but, et je n'ai pas réussi à trouver le moyen de changer le nom de l'interface réseau dans un système actif.

La solution de contournement que j'ai choisie consiste à supprimer le fichier /etc/udev/rules.d/70-persistent-net.rules dans le modèle, ce qui signifie qu'au prochain démarrage, toute carte réseau sera identifiée par eth0.


1

Vous devez recharger udev pour déclencher la modification de la règle, mais le périphérique ne sera renommé que si vous déchargez / rechargez le module du pilote.

Donc, modprobe -r e1000 && modprobe e1000après udev, recharger devrait faire l'affaire. Bien sûr, ne le faites pas si vous avez besoin du réseau et que vous n’avez que des interfaces e1000.



0

Donc, pour moi sur VirtualBox avec Ubuntu 12.04, je bascule souvent entre Ethernet et sans fil.

Ainsi, lorsque ma connexion change, je dois choisir la carte pontée dans Périphériques> Paramètres réseau. Soit 'Connexion réseau Intel 82579LM Gigabit' ou 'Intel Centrino Ultimate-N 6300 AGN'.

Après cela, je peux courir

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

Ceci est juste une explication de mes résultats après avoir lu toutes les réponses ci-dessus.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.