Bagaimana cara memuat ulang aturan udev tanpa reboot?


210

Bagaimana seharusnya seseorang memuat ulang aturan udev, sehingga yang baru dibuat dapat berfungsi?

Saya menjalankan Arch Linux, dan saya tidak punya udevstartperintah di sini.

Juga diperiksa /etc/rc.d, tidak ada layanan udev di sana.


1
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

4
Apakah Anda perlu udevtriggersesudahnya?
Nils

38
@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'.


1
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.

  1. Turunkan antarmuka jaringan, lalu
  2. memodifikasi /etc/udev/rules.d/70-persistent-net.rules(atau yang setara)
  3. memuat ulang dengan udevadm control --reload-rules
  4. memicu kembali dengan udevadm trigger --attr-match=subsystem=net
  5. tingkatkan antarmuka jaringan.

Saya terkejut betapa baiknya ini bekerja.


6
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.


4

Bagi saya, urutan perintah di bawah ini berfungsi seperti yang diinginkan.

Saya telah melakukan modifikasi /etc/udev/rules.d/70-persistent-net.rulesuntuk mengubah ethnomor dan memuatnya kembali tanpa me-reboot.

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

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.


2

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!):

  1. Dapatkan daftar modul antarmuka yang digunakan:

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.

  1. ketik sudo rmmod igb(ganti igbdengan driver kartu Anda yang diperoleh dari langkah 1.

selanjutnya, edit /etc/udev/rules.d/70-persistent-net.rulesseperlunya, lalu muat modul lagi menggunakan modprobe igb, lagi ganti igbdengan milik Anda.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.