Yeni udev kuralları nasıl çalışmalı?
Arch Linux kullanıyorum ve udevstart
burada bir emrim yok.
Ayrıca kontrol /etc/rc.d
, orada udev hizmeti yok.
udev
? Yönetici /dev
mi?
Yeni udev kuralları nasıl çalışmalı?
Arch Linux kullanıyorum ve udevstart
burada bir emrim yok.
Ayrıca kontrol /etc/rc.d
, orada udev hizmeti yok.
udev
? Yönetici /dev
mi?
Yanıtlar:
# udevadm control --reload-rules && udevadm trigger
udevtrigger
sonra ihtiyacınız var mı?
udevtrigger
(veya daha udevadm trigger
çok dağıtımda) gerekebilir (bu veya cihazı takıp tekrar takın). --reload-rules
otomatik olarak olduğu gibi neredeyse her zaman işe yaramaz.
udevadm trigger
CentOS 6'daki numarayı benim için yaptı.
udevtrigger
ya udevadm trigger
da benim için işe yaramadı. Modülün boşaltılıp takılmasından sonra bazı cihazların çalışacağını gördüm (yüklenebilir modül olduğu varsayılarak). Öğrendiğim şey, birinin sistemi yeniden başlatması gerekmiyor. Bir ağ cihazı için örnek, var rmmod ixgbe
, rmmod tg3
, rmmod e1000
daha sonra modprobe ixgbe
, modprobe tg3
, modprobe e1000
ağ sürücünün türüne bağlı olarak değişir.
ip link set $oldname name $newname
bahsedilir . Benim durumumda, köprülü bir iface (KVM için) adında bir iface değiştirmem gerekiyordu ve bu nedenle orijinal - şimdi temelde olan - iface eski adını almak zorunda kaldı . Yani püf noktası şuydu: 1) iface'i düşürmek; 2) ağ yapılandırmasını düzeltmek; 3) udev adlandırma kuralları dosyasını güncelleyin; 4) iface kullanarak yeniden adlandırın ; 5) köprüyü yukarı kaldırın. lan
eth1
ip link...
Udev kullanan Inotify iki kütüphane ve yerel yapılandırma ağaçları (tipik olarak yer alan olarak, kural dizinde değişiklikleri izlemek için bir mekanizma /lib/udev/rules.d
ve /etc/udev/rules.d
). Bu nedenle, bir kural dosyasını değiştirdiğinizde çoğu zaman hiçbir şey yapmanıza gerek kalmaz.
Alışılmadık bir şey yapıyorsanız, örneğin başka bir dizindeki dosyaları içeren bir kuralınız varsa, udev arka planını yalnızca açıkça bildirmeniz gerekir. Daha sonra, normal toplantıdan, servetlerden yapılandırmalarını yeniden yüklemelerini istemek için kullanabilirsiniz: bir SIGHUP ( pkill -HUP udevd
) gönderin . Veya udevadm
: komutunu kullanabilirsiniz udevadm control --reload-rules
.
Bununla birlikte, udev'in farklı sürümlerinin tarihsel olarak kuralları otomatik olarak yeniden yüklemek için farklı tetikleyicilere sahip olduğuna dikkat edin. Şüpheniz varsa, arayın udevadm control --reload-rules
: Zaten herhangi bir zararı olmaz.
Udev kuralları, yalnızca bir cihaz eklendiğinde uygulanır. Kuralları zaten bağlı olan bir cihaza yeniden uygulamak istiyorsanız udevadm trigger
, yapılandırmasını değiştiren cihazlarla eşleştirmek için doğru seçenekleri arayarak açık bir şekilde yapmanız gerekir udevadm trigger --attr-match=vendor='Yoyodyne' --attr-match=model='Frobnicator 300'
.
inotify
Mekanizması her zaman Udev kural dosyasının bir değişiklik yakalamak değil. Örneğin cat > 10-name.rules
, içeriği yapıştırarak kural dosyasını değiştirmek için kullandığımda , kuralları kullanarak el ile yeniden yüklemem gerekiyor udevadm
. Raspbian Stretch'te test edilmiştir.
--reload-rules
sadece nadir durumlarda gerekli oldu.
inotify
mekanizma çalıştı.
Bunu ekliyorum çünkü bir gün tekrar ihtiyacım olacak.
Bazen ethernet cihaz numaraları ve MAC adresleri arasında yanlış bir eşleşme olabilir. Bazen bir VM'de çalışırken ve her bir cihaz farklı bir VLAN'a atandığında olduğu gibi bu gerçekten önemlidir.
/etc/udev/rules.d/70-persistent-net.rules
(veya eşdeğeri)udevadm control --reload-rules
udevadm trigger --attr-match=subsystem=net
Bunun ne kadar iyi çalıştığına şaşırdım.
service network stop && udevadm control --reload-rules; udevadm trigger --attr-match=subsystem=net; service network start
Bunun geçerli olup olmadığından emin değilim ve bu kesinlikle daha eski bir gönderiydi, ancak udev bilgisi için web araştırmam oldukça yükseldi, bu yüzden biraz bilgi paylaşabilirim diye düşündüm.
Belirli cihazlar için udev kurallarını manuel olarak tetikleyebilirsiniz. Bu sadece redhat ile ilgili dağıtımlar için geçerlidir (centos fedora vb. Vb.)
Kural dosyanızda ( /etc/udev/rules.d/whateveryoucalledyourrules
) ilgili değişiklikleri yaptıktan sonra change
, cihazın kullanım tarihine eko yapabilirsiniz .
echo change > /sys/block/devname/partname1/uevent
Bu SADECE bu cihaz için okumaya udev kural zorlar. Bence çok daha iyi ve daha hedefli.
Benim için, aşağıdaki komut sırası istenildiği gibi çalıştı.
Numarayı /etc/udev/rules.d/70-persistent-net.rules
değiştirmek eth
ve yeniden başlatmadan yeniden yüklemek için değişiklikler yaptım .
/etc/init.d/networking stop
/etc/init.d/udev stop
udevadm control --reload-rules
/etc/init.d/udev start
/etc/init.d/networking start
Bunu izleyerek, makineyi yeniden başlatmadan çalışma zamanında başarıyla yüklendi.
Bu konuyla ilgili her türlü öneri veya öneriniz memnuniyetle karşılanmaktadır, çünkü man sayfaları okuyarak kendi başıma keşfettim.
Buraya doğru cevabı ekliyorum çünkü @enthusiasticgeek'in yorumunda bunu fark etmem biraz zaman aldı. Tek yapmanız gereken (sunucunun konsolunda olduğunuzu farz edersek - açıkçası bunu yapmak kötüdür!):
cat /etc/udev/rules.d/70-persistent-net.rules | grep "PCI device" | perl -pe 's/.*\((\w+)\).*/$1/g'| uniq
Benim durumumda, öyle igb
, bu yüzden sadece yazdırır.
sudo rmmod igb
değiştirin ( igb
adım 1'den alınan kart sürücünüzle değiştirin) .daha sonra, /etc/udev/rules.d/70-persistent-net.rules
gerektiği gibi düzenleyin , ardından modprobe igb
tekrar igb
kendinizle değiştirerek kullanarak modülü tekrar yükleyin .
birden fazla ağ olması durumunda
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