Come si dovrebbero ricaricare le regole udev, in modo che una nuova creazione possa funzionare?
Sto eseguendo Arch Linux e non ho un udevstartcomando qui.
Anche controllato /etc/rc.d, nessun servizio udev lì.
udev? È il manager di /dev?
Come si dovrebbero ricaricare le regole udev, in modo che una nuova creazione possa funzionare?
Sto eseguendo Arch Linux e non ho un udevstartcomando qui.
Anche controllato /etc/rc.d, nessun servizio udev lì.
udev? È il manager di /dev?
Risposte:
# udevadm control --reload-rules && udevadm trigger
udevtriggerdopo?
udevtrigger(o meglio udevadm triggernella maggior parte delle distribuzioni) invece (quello, o collegare il dispositivo e ripristinarlo). --reload-rulesè quasi sempre inutile come accade automaticamente.
udevadm triggerha fatto il trucco su CentOS 6 per me.
udevtriggero udevadm triggernon ha funzionato per me. Ho scoperto che alcuni dispositivi funzioneranno dopo aver scaricato e caricato il modulo per lo stesso (supponendo che sia un modulo caricabile). Quello che ho scoperto è che non è necessario riavviare il sistema. Esempio di un dispositivo di rete, faccio rmmod ixgbe, rmmod tg3, rmmod e1000quindi modprobe ixgbe, modprobe tg3, modprobe e1000a seconda del tipo di driver di rete.
ip link set $oldname name $newnamemenzionata qui . Nel mio caso, avevo bisogno di sostituire un iface di nome lancon un iface ponte (per KVM), e, quindi, l'originale - ora sottostante - iface dovuto ottenere il suo vecchio nome, eth1, indietro. Quindi il trucco era: 1) abbattere iface; 2) correggere la configurazione della rete; 3) aggiorna il file delle regole di denominazione udev; 4) rinominare l'iface usando ip link...; 5) solleva il ponte.
Udev utilizza il meccanismo inotify per controllare le modifiche nella directory delle regole, sia nella libreria che negli alberi di configurazione locali (generalmente situati in /lib/udev/rules.de /etc/udev/rules.d). Quindi la maggior parte delle volte non è necessario fare nulla quando si modifica un file delle regole.
Devi solo avvisare esplicitamente il demone udev se stai facendo qualcosa di insolito, ad esempio se hai una regola che include file in un'altra directory. Quindi puoi usare la solita convenzione per chiedere ai demoni di ricaricare la loro configurazione: invia un SIGHUP ( pkill -HUP udevd). Oppure si può utilizzare il udevadmcomando: udevadm control --reload-rules.
Tuttavia, attenzione che diverse versioni di udev hanno storicamente avuto diversi trigger per ricaricare automaticamente le regole. Quindi, in caso di dubbio, chiama udevadm control --reload-rules: non farà comunque alcun danno.
Le regole udev vengono applicate solo quando viene aggiunto un dispositivo. Se si desidera applicare nuovamente le regole a un dispositivo già connesso, è necessario farlo esplicitamente, chiamando udevadm triggerle opzioni giuste per abbinare i dispositivi la cui configurazione è cambiata, ad es udevadm trigger --attr-match=vendor='Yoyodyne' --attr-match=model='Frobnicator 300'.
inotifymeccanismo non rileva sempre una modifica di un file di regole udev. Ad esempio, quando uso cat > 10-name.rulesper modificare il file delle regole incollando il contenuto, devo ricaricare le regole manualmente usando udevadm. Testato su Raspbian Stretch.
--reload-rulesera necessario solo in casi non comuni.
inotifymeccanismo ha funzionato.
Sto aggiungendo questo perché un giorno ne avrò bisogno ... di nuovo.
A volte si ottiene una corrispondenza errata dei numeri di dispositivo Ethernet e degli indirizzi MAC. A volte questo è davvero importante, come quando si esegue in una macchina virtuale e ogni dispositivo è assegnato a una VLAN diversa.
/etc/udev/rules.d/70-persistent-net.rules(o suo equivalente)udevadm control --reload-rules udevadm trigger --attr-match=subsystem=net Sono rimasto sorpreso da quanto funzionasse.
service network stop && udevadm control --reload-rules; udevadm trigger --attr-match=subsystem=net; service network start
Non sono sicuro se questo si applica, e questo è sicuramente un post più vecchio, ma è arrivato piuttosto in alto la mia ricerca web per informazioni su udev, quindi ho pensato di condividere alcune conoscenze.
È possibile attivare manualmente le regole udev per dispositivi specifici. Questo vale solo per le distribuzioni relative a redhat (centos fedora ecc ecc ecc)
Dopo aver apportato le modifiche pertinenti nel file delle regole ( /etc/udev/rules.d/whateveryoucalledyourrules), è possibile echeggiare changenell'event del dispositivo.
echo change > /sys/block/devname/partname1/uevent
Questo forzerà la lettura di una regola udev SOLO per questo dispositivo. Molto meglio e più mirato secondo me.
Per me, la sequenza di comandi di seguito ha funzionato come desiderato.
Ho apportato modifiche /etc/udev/rules.d/70-persistent-net.rulesper modificare il ethnumero e ricaricarli senza riavviare.
/etc/init.d/networking stop
/etc/init.d/udev stop
udevadm control --reload-rules
/etc/init.d/udev start
/etc/init.d/networking start
In seguito, è stato caricato correttamente in fase di esecuzione senza riavviare la macchina.
Qualsiasi suggerimento o consiglio su questo è il benvenuto, come ho scoperto da solo leggendo le pagine man.
Sto aggiungendo la risposta corretta qui perché mi ci è voluto un po 'di tempo per notarla nel commento di @enthusiasticgeek. Tutto quello che devi fare (supponendo che tu sia sulla console del server - chiaramente questo è male da fare se sei entrato!):
cat /etc/udev/rules.d/70-persistent-net.rules | grep "PCI device" | perl -pe 's/.*\((\w+)\).*/$1/g'| uniq
Nel mio caso, lo è igb, quindi stampa proprio quello.
sudo rmmod igb(sostituire igbcon il driver della scheda ottenuto dal passaggio 1.quindi, modifica /etc/udev/rules.d/70-persistent-net.rulessecondo necessità, quindi carica nuovamente il modulo utilizzando modprobe igb, nuovamente sostituendolo igbcon il tuo.
in caso di più reti
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