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.
# udevadm control --reload-rules && udevadm trigger
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.
/etc/udev/rules.d/70-persistent-net.rules
(ou son équivalent)udevadm control --reload-rules
udevadm trigger --attr-match=subsystem=net
J'ai été surpris de voir à quel point cela fonctionnait bien.
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.
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.
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é!):
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.
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.
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 .
Voir également les commentaires sous les deux réponses ci-dessus.
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