एक udv नियमों को कैसे पुनः लोड करना चाहिए, ताकि नव निर्मित एक कार्य कर सके?
मैं आर्क लिनक्स चला रहा हूं, और मेरे पास udevstart
यहां कमांड नहीं है ।
यह भी जाँच की /etc/rc.d
, वहाँ कोई udev सेवा नहीं है।
udev
? का प्रबंधक है /dev
?
एक udv नियमों को कैसे पुनः लोड करना चाहिए, ताकि नव निर्मित एक कार्य कर सके?
मैं आर्क लिनक्स चला रहा हूं, और मेरे पास udevstart
यहां कमांड नहीं है ।
यह भी जाँच की /etc/rc.d
, वहाँ कोई udev सेवा नहीं है।
udev
? का प्रबंधक है /dev
?
जवाबों:
# udevadm control --reload-rules && udevadm trigger
udevtrigger
बाद में आवश्यकता है?
udevtrigger
बजाय (या udevadm trigger
अधिकांश वितरणों पर) की आवश्यकता हो सकती है ( जो, या डिवाइस को प्लग आउट करके उसे वापस कर सकते हैं)। --reload-rules
लगभग हमेशा बेकार है क्योंकि यह स्वचालित रूप से होता है।
udevadm trigger
मेरे लिए CentOS 6 पर चाल चली।
udevtrigger
या udevadm trigger
मेरे लिए काम नहीं किया। मैंने पाया कि कुछ उपकरण उसी के लिए मॉड्यूल को उतारने और लोड करने के बाद काम करेंगे (यह मानते हुए कि यह लोड करने योग्य मॉड्यूल है)। मुझे जो पता चला है वह जरूरी नहीं कि सिस्टम को रिबूट करना है। एक नेटवर्क डिवाइस के लिए उदाहरण के लिए, मैं करता हूँ rmmod ixgbe
, rmmod tg3
, rmmod e1000
तो modprobe ixgbe
, modprobe tg3
, modprobe e1000
नेटवर्क चालक के प्रकार पर निर्भर।
ip link set $oldname name $newname
उसका उल्लेख यहां किया गया है । मेरे मामले में, मुझे एक इफिस नाम दिया गया था जिसका नाम lan
एक ब्रिड्ड इफेस (केवीएम के लिए) था, और इसलिए मूल - अब अंतर्निहित - इफेक को अपना पुराना नाम eth1
वापस प्राप्त करना था। तो चाल थी: 1) नीचे iface लाओ; 2) फिक्स नेटवर्क कॉन्फ़िगर अप; 3) अद्यतन udev नामकरण नियम फ़ाइल; 4) का उपयोग करके iface का नाम बदलें ip link...
; 5) पुल को ऊपर ले आओ।
Udev का उपयोग करता inotify , नियम निर्देशिका में परिवर्तन के लिए देखने के लिए दोनों पुस्तकालय में और स्थानीय विन्यास पेड़ (आमतौर पर स्थित में तंत्र /lib/udev/rules.d
और /etc/udev/rules.d
)। जब आप एक नियम फ़ाइल बदलते हैं तो अधिकांश समय आपको कुछ भी करने की आवश्यकता नहीं होती है।
आपको केवल udev डेमॉन को स्पष्ट रूप से सूचित करने की आवश्यकता है यदि आप कुछ असामान्य कर रहे हैं, उदाहरण के लिए यदि आपके पास एक नियम है जिसमें अन्य निर्देशिका में फाइलें शामिल हैं। तो फिर तुम डेमॉन से उनकी विन्यास फिर से लोड करने के लिए सामान्य सम्मेलन का उपयोग कर सकते हैं: एक भेजने SIGHUP ( pkill -HUP udevd
)। या आप udevadm
कमांड का उपयोग कर सकते हैं udevadm control --reload-rules
:।
हालाँकि, सावधान रहें कि udv के विभिन्न संस्करणों में ऐतिहासिक रूप से नियमों को स्वचालित रूप से लोड करने के लिए अलग-अलग ट्रिगर थे। इसलिए यदि संदेह है, तो कॉल करें udevadm control --reload-rules
: यह वैसे भी कोई नुकसान नहीं करेगा।
Udv नियम केवल तभी लागू होते हैं जब कोई उपकरण जोड़ा जाता है। यदि आप पहले से कनेक्ट किए गए डिवाइस पर नियमों को फिर से लागू करना चाहते हैं, तो आपको udevadm trigger
डिवाइस (एस) से मिलान करने के लिए सही विकल्पों के साथ कॉल करके यह स्पष्ट रूप से करने की आवश्यकता है, जिसका कॉन्फ़िगरेशन बदल गया है, जैसे udevadm trigger --attr-match=vendor='Yoyodyne' --attr-match=model='Frobnicator 300'
।
inotify
तंत्र हमेशा एक udev नियम फ़ाइल का एक परिवर्तन को पकड़ने नहीं है। उदाहरण के लिए जब मैं cat > 10-name.rules
सामग्री को पेस्ट करके नियम फ़ाइल को बदलने के लिए उपयोग करता हूं, तो मुझे मैन्युअल रूप से उपयोग करके नियमों को फिर से लोड करना होगा udevadm
। रस्पियन स्ट्रेच पर परीक्षण किया गया।
--reload-rules
केवल असामान्य मामलों में ही इसकी आवश्यकता थी।
inotify
तंत्र ने काम किया।
मैं इसे जोड़ रहा हूं क्योंकि किसी दिन मुझे इसकी आवश्यकता होगी ... फिर से।
कभी-कभी आपको ईथरनेट डिवाइस नंबर और मैक एड्रेस का गलत मेल मिलता है। कभी-कभी यह वास्तव में महत्वपूर्ण होता है, जैसे कि वीएम में चलने पर और प्रत्येक डिवाइस को एक अलग वीएलएएन को सौंपा जाता है।
/etc/udev/rules.d/70-persistent-net.rules
(या इसके समकक्ष)udevadm control --reload-rules
udevadm trigger --attr-match=subsystem=net
मैं हैरान था कि यह कितना अच्छा काम कर रहा है।
service network stop && udevadm control --reload-rules; udevadm trigger --attr-match=subsystem=net; service network start
मुझे यकीन नहीं है कि अगर यह लागू होता है, और यह निश्चित रूप से एक पुरानी पोस्ट है, लेकिन यह udev जानकारी के लिए मेरी वेब खोज को बहुत अधिक आया है तो मैंने सोचा कि मैं कुछ ज्ञान साझा कर सकता हूं।
आप विशिष्ट उपकरणों के लिए मैन्युअल रूप से udev नियम ट्रिगर कर सकते हैं। यह केवल रेडहैट-संबंधित डिस्ट्रोस (सेंटोस फेडोरा आदि) आदि पर लागू होता है।
एक बार जब आप अपनी नियम फ़ाइल ( /etc/udev/rules.d/whateveryoucalledyourrules
) में प्रासंगिक परिवर्तन कर लेते हैं, तो आप change
डिवाइस के uevent को प्रतिध्वनित कर सकते हैं ।
echo change > /sys/block/devname/partname1/uevent
यह केवल इस उपकरण के लिए एक udev नियम पढ़ने को बाध्य करेगा। मेरी राय में बहुत बेहतर, और अधिक लक्षित।
मेरे लिए, नीचे दिए गए कमांड अनुक्रम ने काम किया है क्योंकि यह वांछित है।
मैंने संख्या /etc/udev/rules.d/70-persistent-net.rules
को बदलने eth
और रिबूट किए बिना उन्हें फिर से लोड करने के लिए संशोधन किए हैं।
/etc/init.d/networking stop
/etc/init.d/udev stop
udevadm control --reload-rules
/etc/init.d/udev start
/etc/init.d/networking start
इसका पालन करते हुए, यह मशीन को रिबूट किए बिना रन टाइम में सफलतापूर्वक लोड किया गया था।
इस पर किसी भी सुझाव या सिफारिशों का स्वागत है, जैसा कि मैन पेजों को पढ़कर मैंने अपने दम पर इसे खोजा है।
मैं यहाँ सही उत्तर जोड़ रहा हूँ क्योंकि यह मुझे @enthyericgeek की टिप्पणी में नोटिस करने में थोड़ा समय लगा। आपको बस इतना करना चाहिए (यह मानते हुए कि आप सर्वर के कंसोल पर हैं - स्पष्ट रूप से यह करना बुरा है यदि आप ssh'd हैं::
cat /etc/udev/rules.d/70-persistent-net.rules | grep "PCI device" | perl -pe 's/.*\((\w+)\).*/$1/g'| uniq
मेरे मामले में, यह है igb
, इसलिए यह सिर्फ प्रिंट करता है।
sudo rmmod igb
( igb
चरण 1 से प्राप्त अपने कार्ड ड्राइवर के साथ बदलें)अगला, /etc/udev/rules.d/70-persistent-net.rules
आवश्यकतानुसार संपादित करें , फिर मॉड्यूल का उपयोग करके फिर से लोड करें modprobe igb
, फिर से आपकी जगह ले igb
।
कई नेटवर्क के मामले में
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