Harap dicatat bahwa versi udev yang lebih baru telah menjatuhkan dukungan yang tidak memberitahukan sehingga diperlukan pemuatan ulang peraturan tentang perubahan lebih sering akhir-akhir ini.
Colin Guthrie
Apa udev? Apakah itu manajer /dev?
Sandburg
1
@Sandburg ya itu menangani plug-n-play di sistem Linux.
Aaron D. Marasco
Jawaban:
231
# udevadm control --reload-rules && udevadm trigger
@Nils Sebenarnya, Anda mungkin perlu udevtrigger(atau lebih tepatnya udevadm triggerpada sebagian besar distribusi) sebagai gantinya (itu, atau colokkan perangkat dan balikkan ). --reload-ruleshampir selalu tidak berguna karena terjadi secara otomatis.
Gilles
12
udevadm triggermelakukan trik pada CentOS 6 untuk saya.
astrostl
3
udevtriggeratau udevadm triggertidak bekerja untuk saya. Saya menemukan beberapa perangkat akan berfungsi setelah membongkar dan memuat modul untuk hal yang sama (dengan asumsi itu adalah modul yang dapat dimuat). Apa yang saya temukan adalah seseorang tidak harus me-reboot sistem. Contoh untuk perangkat jaringan, saya lakukan rmmod ixgbe, rmmod tg3, rmmod e1000maka modprobe ixgbe, modprobe tg3, modprobe e1000tergantung pada jenis driver jaringan.
Antusiasme
1
Tak satu pun dari hal-hal yang disebutkan di antara jawaban-jawaban itu berhasil bagi saya di Debian Jessie (8.0). Hal yang bekerja adalah ip link set $oldname name $newnamedisebutkan di sini . Dalam kasus saya, saya perlu mengganti iface yang dinamai lanbridace iface (untuk KVM), dan karenanya asli - yang sekarang mendasari - iface harus mendapatkan nama lamanya eth1,, kembali. Jadi triknya adalah: 1) menjatuhkan iface; 2) memperbaiki konfigurasi jaringan; 3) memperbarui file aturan penamaan udev; 4) ganti nama iface menggunakan ip link...; 5) angkat jembatan.
kostix
69
Udev menggunakan mekanisme inotify untuk melihat perubahan dalam direktori rules, di perpustakaan dan di pohon konfigurasi lokal (biasanya terletak di /lib/udev/rules.ddan /etc/udev/rules.d). Jadi sebagian besar waktu Anda tidak perlu melakukan apa pun ketika Anda mengubah file aturan.
Anda hanya perlu memberi tahu udev daemon secara eksplisit jika Anda melakukan sesuatu yang tidak biasa, misalnya jika Anda memiliki aturan yang menyertakan file di direktori lain. Kemudian Anda dapat menggunakan konvensi yang biasa untuk meminta daemon untuk memuat ulang konfigurasinya: kirim SIGHUP ( pkill -HUP udevd). Atau Anda dapat menggunakan udevadmperintah: udevadm control --reload-rules.
Namun, berhati-hatilah karena versi udev yang berbeda secara historis memiliki pemicu yang berbeda untuk memuat ulang aturan secara otomatis. Jadi jika ragu, hubungi udevadm control --reload-rules: tidak akan ada salahnya pula.
Aturan udev hanya diterapkan ketika perangkat ditambahkan. Jika Anda ingin menerapkan kembali aturan ke perangkat yang sudah terhubung, Anda perlu melakukan ini secara eksplisit, dengan memanggil udevadm triggerdengan opsi yang tepat untuk mencocokkan perangkat yang konfigurasinya telah berubah, misalnya udevadm trigger --attr-match=vendor='Yoyodyne' --attr-match=model='Frobnicator 300'.
Apakah systemd udev menggunakan inotify untuk mengawasi perubahan aturan?
Craig McQueen
The inotifyMekanisme tidak selalu menangkap perubahan file aturan udev. Misalnya ketika saya gunakan cat > 10-name.rulesuntuk mengubah file aturan dengan menempelkan konten, saya harus memuat ulang aturan secara manual menggunakan udevadm. Diuji pada Peregangan Raspbian.
Daniel K.
@DanielK. Apakah ini berubah baru-baru ini? IIRC Saya memeriksa udev systemd dan non-systemd udev ketika saya memposting jawaban ini, dan keduanya memang menggunakan inotify, jadi --reload-ruleshanya diperlukan dalam kasus-kasus yang tidak umum.
Gilles
@Gilles: mungkin contoh saya di atas (menimpa file aturan yang ada menggunakan pengalihan shell) dapat dianggap sebagai "kasus yang tidak biasa". Ketika saya memodifikasi file ini melalui editor, misalnya, vi, inotifymekanismenya bekerja.
Daniel K.
@DanielK. Ah, itu baik untuk diketahui. Ini bukan kasus yang tidak biasa: beberapa editor akan menyimpan file dengan menulis ulang (dengan Vim dan Emacs, tergantung bagaimana mereka dikonfigurasikan). Aneh bahwa udev hanya menangani salah satu kasus - sepertinya bug bagi saya, karena saya tidak bisa memikirkan alasan untuk memperlakukan mereka secara berbeda.
Gilles
19
Saya menambahkan ini karena suatu hari nanti saya akan membutuhkannya ... lagi.
Kadang-kadang Anda mendapatkan pencocokan nomor perangkat ethernet dan alamat MAC yang salah. Kadang-kadang ini sangat penting, seperti ketika berjalan di VM dan setiap perangkat ditugaskan ke VLAN yang berbeda.
Turunkan antarmuka jaringan, lalu
memodifikasi /etc/udev/rules.d/70-persistent-net.rules(atau yang setara)
memuat ulang dengan udevadm control --reload-rules
memicu kembali dengan udevadm trigger --attr-match=subsystem=net
tentang Red Hat:service network stop && udevadm control --reload-rules; udevadm trigger --attr-match=subsystem=net; service network start
Alexander Torstling
1
Pada pengujian Debian 'udevadm trigger --attr-match = subsistem = net' tidak berfungsi. Saya harus mencabut dan pasang kartu ethernet usb hanya kemudian udev memicu aturan baru.
Trismegistos
Saya berani bertaruh, Trismegistos, bahwa cabut / steker mirip dengan menghapus dan memuat kembali driver jaringan, sesuai jawaban Clayton Dukes.
Mike S
12
Saya tidak yakin apakah ini berlaku, dan ini jelas merupakan posting yang lebih lama tetapi muncul cukup tinggi pencarian web saya untuk info udev jadi saya pikir saya mungkin berbagi pengetahuan.
Anda dapat memicu aturan udev secara manual untuk perangkat tertentu. Ini hanya berlaku untuk distro terkait redhat (centos fedora dll dll dll)
Setelah Anda membuat perubahan yang relevan dalam file aturan Anda ( /etc/udev/rules.d/whateveryoucalledyourrules), Anda dapat menggema changeke uevent perangkat.
echo change > /sys/block/devname/partname1/uevent
Ini akan memaksa pembacaan aturan udev untuk HANYA perangkat ini. Jauh lebih baik, dan lebih bertarget menurut saya.
Saya menambahkan jawaban yang benar di sini karena butuh beberapa saat untuk memperhatikannya dalam komentar dari @enthusiasticgeek. Yang perlu Anda lakukan (dengan asumsi Anda berada di konsol server - jelas ini tidak baik jika Anda ssh'd in!):
Ini, dikombinasikan dengan jawaban Otheus, adalah saus rahasia yang memungkinkan saya untuk memperbaiki konfigurasi kartu jaringan Mellanox saya tanpa reboot mesin. Saya percaya memuat driver dan membaca udevadm dari file persistent-net.rules kira-kira mirip dengan apa yang dilakukan sistem ketika boot.
Mike S
0
dalam hal beberapa jaringan
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
udev
? Apakah itu manajer/dev
?Jawaban:
sumber
udevtrigger
sesudahnya?udevtrigger
(atau lebih tepatnyaudevadm trigger
pada sebagian besar distribusi) sebagai gantinya (itu, atau colokkan perangkat dan balikkan ).--reload-rules
hampir selalu tidak berguna karena terjadi secara otomatis.udevadm trigger
melakukan trik pada CentOS 6 untuk saya.udevtrigger
atauudevadm trigger
tidak bekerja untuk saya. Saya menemukan beberapa perangkat akan berfungsi setelah membongkar dan memuat modul untuk hal yang sama (dengan asumsi itu adalah modul yang dapat dimuat). Apa yang saya temukan adalah seseorang tidak harus me-reboot sistem. Contoh untuk perangkat jaringan, saya lakukanrmmod ixgbe
,rmmod tg3
,rmmod e1000
makamodprobe ixgbe
,modprobe tg3
,modprobe e1000
tergantung pada jenis driver jaringan.ip link set $oldname name $newname
disebutkan di sini . Dalam kasus saya, saya perlu mengganti iface yang dinamailan
bridace iface (untuk KVM), dan karenanya asli - yang sekarang mendasari - iface harus mendapatkan nama lamanyaeth1
,, kembali. Jadi triknya adalah: 1) menjatuhkan iface; 2) memperbaiki konfigurasi jaringan; 3) memperbarui file aturan penamaan udev; 4) ganti nama iface menggunakanip link...
; 5) angkat jembatan.Udev menggunakan mekanisme inotify untuk melihat perubahan dalam direktori rules, di perpustakaan dan di pohon konfigurasi lokal (biasanya terletak di
/lib/udev/rules.d
dan/etc/udev/rules.d
). Jadi sebagian besar waktu Anda tidak perlu melakukan apa pun ketika Anda mengubah file aturan.Anda hanya perlu memberi tahu udev daemon secara eksplisit jika Anda melakukan sesuatu yang tidak biasa, misalnya jika Anda memiliki aturan yang menyertakan file di direktori lain. Kemudian Anda dapat menggunakan konvensi yang biasa untuk meminta daemon untuk memuat ulang konfigurasinya: kirim SIGHUP (
pkill -HUP udevd
). Atau Anda dapat menggunakanudevadm
perintah:udevadm control --reload-rules
.Namun, berhati-hatilah karena versi udev yang berbeda secara historis memiliki pemicu yang berbeda untuk memuat ulang aturan secara otomatis. Jadi jika ragu, hubungi
udevadm control --reload-rules
: tidak akan ada salahnya pula.Aturan udev hanya diterapkan ketika perangkat ditambahkan. Jika Anda ingin menerapkan kembali aturan ke perangkat yang sudah terhubung, Anda perlu melakukan ini secara eksplisit, dengan memanggil
udevadm trigger
dengan opsi yang tepat untuk mencocokkan perangkat yang konfigurasinya telah berubah, misalnyaudevadm trigger --attr-match=vendor='Yoyodyne' --attr-match=model='Frobnicator 300'
.sumber
inotify
Mekanisme tidak selalu menangkap perubahan file aturan udev. Misalnya ketika saya gunakancat > 10-name.rules
untuk mengubah file aturan dengan menempelkan konten, saya harus memuat ulang aturan secara manual menggunakanudevadm
. Diuji pada Peregangan Raspbian.--reload-rules
hanya diperlukan dalam kasus-kasus yang tidak umum.inotify
mekanismenya bekerja.Saya menambahkan ini karena suatu hari nanti saya akan membutuhkannya ... lagi.
Kadang-kadang Anda mendapatkan pencocokan nomor perangkat ethernet dan alamat MAC yang salah. Kadang-kadang ini sangat penting, seperti ketika berjalan di VM dan setiap perangkat ditugaskan ke VLAN yang berbeda.
/etc/udev/rules.d/70-persistent-net.rules
(atau yang setara)udevadm control --reload-rules
udevadm trigger --attr-match=subsystem=net
Saya terkejut betapa baiknya ini bekerja.
sumber
service network stop && udevadm control --reload-rules; udevadm trigger --attr-match=subsystem=net; service network start
Saya tidak yakin apakah ini berlaku, dan ini jelas merupakan posting yang lebih lama tetapi muncul cukup tinggi pencarian web saya untuk info udev jadi saya pikir saya mungkin berbagi pengetahuan.
Anda dapat memicu aturan udev secara manual untuk perangkat tertentu. Ini hanya berlaku untuk distro terkait redhat (centos fedora dll dll dll)
Setelah Anda membuat perubahan yang relevan dalam file aturan Anda (
/etc/udev/rules.d/whateveryoucalledyourrules
), Anda dapat menggemachange
ke uevent perangkat.Ini akan memaksa pembacaan aturan udev untuk HANYA perangkat ini. Jauh lebih baik, dan lebih bertarget menurut saya.
sumber
Bagi saya, urutan perintah di bawah ini berfungsi seperti yang diinginkan.
Saya telah melakukan modifikasi
/etc/udev/rules.d/70-persistent-net.rules
untuk mengubaheth
nomor dan memuatnya kembali tanpa me-reboot.Dengan mengikuti ini, Itu berhasil dimuat dalam jangka waktu tanpa me-reboot mesin.
Setiap saran atau rekomendasi mengenai hal ini disambut baik, karena saya telah menemukan ini sendiri dengan membaca halaman manual.
sumber
Saya menambahkan jawaban yang benar di sini karena butuh beberapa saat untuk memperhatikannya dalam komentar dari @enthusiasticgeek. Yang perlu Anda lakukan (dengan asumsi Anda berada di konsol server - jelas ini tidak baik jika Anda ssh'd in!):
cat /etc/udev/rules.d/70-persistent-net.rules | grep "PCI device" | perl -pe 's/.*\((\w+)\).*/$1/g'| uniq
Dalam kasus saya, ini
igb
, jadi hanya mencetaknya saja.sudo rmmod igb
(gantiigb
dengan driver kartu Anda yang diperoleh dari langkah 1.selanjutnya, edit
/etc/udev/rules.d/70-persistent-net.rules
seperlunya, lalu muat modul lagi menggunakanmodprobe igb
, lagi gantiigb
dengan milik Anda.sumber
dalam hal beberapa jaringan
sumber