web-dev-qa-db-fra.com

Comment recharger les règles udev sans redémarrer?

Comment doit-on recharger les règles udev, pour que celle nouvellement créée puisse fonctionner?

J'utilise Arch Linux et je n'ai pas de commande udevstart ici.

Également vérifié /etc/rc.d, pas de service udev là-bas.

226
daisy
# udevadm control --reload-rules && udevadm trigger
258

Udev utilise le mécanisme inotify pour surveiller les changements dans le répertoire des règles, à la fois dans la bibliothèque et dans les arborescences de configuration locales (généralement situées à /lib/udev/rules.d et /etc/udev/rules.d). La plupart du temps, vous n'avez donc rien à faire lorsque vous modifiez un fichier de règles.

Vous devez uniquement notifier le démon udev explicitement si vous faites quelque chose d'inhabituel, par exemple si vous avez une règle qui inclut des fichiers dans un autre répertoire. Ensuite, vous pouvez utiliser la convention habituelle pour demander aux démons de recharger leur configuration: envoyez un SOUPIR (pkill -HUP udevd). Ou vous pouvez utiliser la commande udevadm : udevadm control --reload-rules.

Cependant, sachez que les différentes versions d'udev ont historiquement eu différents déclencheurs pour recharger automatiquement les règles. En cas de doute, appelez udevadm control --reload-rules: ça ne fera pas de mal de toute façon.

Les règles udev ne sont appliquées que lorsqu'un périphérique est ajouté. Si vous souhaitez réappliquer les règles à un périphérique déjà connecté, vous devez le faire explicitement, en appelant udevadm trigger avec les bonnes options pour correspondre aux appareils dont la configuration a changé, par ex. udevadm trigger --attr-match=vendor='Yoyodyne' --attr-match=model='Frobnicator 300'.

J'ajoute cela parce qu'un jour j'en aurai besoin ... encore.

Parfois, vous obtenez une correspondance incorrecte des numéros de périphérique Ethernet et des adresses MAC. Parfois, cela est vraiment important, comme lors de l'exécution dans un VM et chaque périphérique est affecté à un VLAN différent.

  1. Descendez les interfaces réseau, puis
  2. modifier /etc/udev/rules.d/70-persistent-net.rules (ou son équivalent)
  3. recharger avec udevadm control --reload-rules
  4. re-trigger avec udevadm trigger --attr-match=subsystem=net
  5. mettre en place les interfaces réseau.

J'ai été surpris de voir à quel point cela fonctionnait bien.

19
Otheus

Je ne sais pas si cela s'applique, et c'est certainement un article plus ancien, mais il est apparu assez haut dans ma recherche sur le Web pour les informations udev, donc j'ai pensé que je pourrais partager certaines connaissances.

Vous pouvez déclencher manuellement les règles udev pour des appareils spécifiques. Cela s'applique uniquement aux distributions liées aux redhat (centos Fedora etc etc etc)

Une fois que vous avez apporté les modifications appropriées dans votre fichier de règles (/etc/udev/rules.d/whateveryoucalledyourrules), vous pouvez répercuter change dans l'event de l'appareil.

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

Cela forcera une lecture de règle udev pour SEULEMENT cet appareil. Beaucoup mieux et plus ciblé à mon avis.

13
mbadmin

Pour moi, la séquence de commandes ci-dessous a fonctionné comme souhaité.

J'ai effectué des modifications dans /etc/udev/rules.d/70-persistent-net.rules pour modifier le nombre eth et pour les recharger sans redémarrer.

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

En suivant cela, il a été chargé avec succès lors de l'exécution sans redémarrer la machine.

Toute suggestion ou recommandation à ce sujet est la bienvenue, car je l'ai découverte par moi-même en lisant les pages de manuel.

4
Aditya Malviya

J'ajoute la réponse correcte ici car il m'a fallu un certain temps pour la remarquer dans le commentaire de @enthusiasticgeek. Tout ce que vous devez faire (en supposant que vous êtes sur la console du serveur - c'est clairement mauvais à faire si vous êtes connecté!):

  1. Obtenez une liste des modules d'interface utilisés:

cat /etc/udev/rules.d/70-persistent-net.rules | grep "PCI device" | Perl -pe 's/.*\((\w+)\).*/$1/g'| uniq

Dans mon cas, c'est igb, donc ça imprime juste ça.

  1. tapez Sudo rmmod igb (remplacez igb par votre pilote de carte obtenu à l'étape 1.

ensuite, modifiez /etc/udev/rules.d/70-persistent-net.rules au besoin, puis rechargez le module à l'aide de modprobe igb, en remplaçant à nouveau igb par le vôtre.

2
Clayton Dukes

C'est un léger changement par rapport à la réponse principale : Sudo semblait être requis pour moi sur les deux commandes.

Preuve anecdotique: faire Sudo udevadm trigger a pris ~ 2 sec, mais le faire avecOUT Sudo n'a pris que ~ 0,2 sec. Il est donc clair qu'ils ne font pas la même chose pour moi. Faites ceci à la place:

Sudo udevadm control --reload-rules
Sudo udevadm trigger

Et enfin (par le 2ème lien ci-dessous), débranchez votre appareil et rebranchez-le .

Références:

  1. Comment recharger les règles udev sans redémarrer?
  2. https://askubuntu.com/questions/1048870/permission-denied-to-non-root-user-for-usb-device/1187646#1187646

Voir également les commentaires sous les deux réponses ci-dessus.

1
Gabriel Staples

en cas de réseaux multiples

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
0
alex tmp