Yeni udev kuralları nasıl çalışmalı?
Arch Linux kullanıyorum ve udevstartburada bir emrim yok.
Ayrıca kontrol /etc/rc.d, orada udev hizmeti yok.
udev? Yönetici /devmi?
Yeni udev kuralları nasıl çalışmalı?
Arch Linux kullanıyorum ve udevstartburada bir emrim yok.
Ayrıca kontrol /etc/rc.d, orada udev hizmeti yok.
udev? Yönetici /devmi?
Yanıtlar:
# udevadm control --reload-rules && udevadm trigger
udevtriggersonra ihtiyacınız var mı?
udevtrigger(veya daha udevadm triggerçok dağıtımda) gerekebilir (bu veya cihazı takıp tekrar takın). --reload-rulesotomatik olarak olduğu gibi neredeyse her zaman işe yaramaz.
udevadm triggerCentOS 6'daki numarayı benim için yaptı.
udevtriggerya udevadm triggerda 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 e1000daha sonra modprobe ixgbe, modprobe tg3, modprobe e1000ağ 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. laneth1ip 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.dve /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'.
inotifyMekanizması 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-rulessadece nadir durumlarda gerekli oldu.
inotifymekanizma ç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.rulesdeğiştirmek ethve 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 igbdeğiştirin ( igbadım 1'den alınan kart sürücünüzle değiştirin) .daha sonra, /etc/udev/rules.d/70-persistent-net.rulesgerektiği gibi düzenleyin , ardından modprobe igbtekrar igbkendinizle 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