Udv वास्तव में किन समस्याओं का समाधान करता है?


28

उस मामले के लिए, क्या वास्तव में स्थिर फ़ाइलों का एक गुच्छा के साथ गलत था /dev? यह स्पष्ट रूप से डेवलपर्स के लिए पर्याप्त असंतोषजनक है कि इस पहिया को मेरी गिनती से 3 बार ( devfs-> udev + HAL-> udev) द्वारा फिर से मजबूत किया गया है , और अब जाहिर तौर पर यह ग्रैंड यूनिफाइड इनिट प्रोग्राम में भी जा रहा है, इसलिए चार बार।

मुझे याद है कि जब मैंने पहली बार लिनक्स का उपयोग करना शुरू किया था, तो आश्चर्यचकित था कि "सब कुछ एक फ़ाइल है" दावे के बावजूद, कोई नहीं है /dev/eth0(जो बाद में समझ में आया, क्योंकि यह एक चार या ब्लॉक डिवाइस नहीं है - हालांकि "पैकेट" डिवाइस प्रकार दिलचस्प होगा ...)। यह देखते हुए, क्यों प्रोग्राम है कि चार और ब्लॉक डिवाइस फ़ाइल पेड़ संभालती भी नेटवर्क उपकरणों के लिए जिम्मेदार है? मैंने "लचीलेपन" के लिए अस्पष्ट संदर्भ देखे हैं, लेकिन यह क्या कहता है, क्या कहता है, ifconfig (8) सिर्फ देखने से है /proc/net/dev? मुझे पता है, उदाहरण के लिए, NetworkManager किसी भी समय जल्द ही नेट या ओपनबीएसडी में नहीं होगा क्योंकि यह निर्भर करता है udev, जिसे न तो टीम लिखना चाहती है; मैं क्या दान करता हूं '/devकि कर्नेल (और उनमें से कोई नहीं /dev!) द्वारा पहले से ही कई तरीके उजागर किए गए हैं

क्या यह सिर्फ हॉटप्लगिंग की वजह से है? क्या केवल शारीरिक बसों को सुनने और "डिवाइस जोड़ा" संदेश पर उपयुक्त मॉड्यूल लोड करने में कर्नेल के साथ समस्याएं थीं? या, भगवान ना करे, ऐसा करने वाला वास्तविक प्रशासक? मुझे याद है कि 2000 के शुरुआती दिनों में मेरे सर्वर कभी-कभी अप्रत्याशित क्रम में अपने नेटवर्क कार्ड को इनिशियलाइज़ कर देते थे, और मुझे लगता है कि इसका यह अर्थ है कि यूज़रलैंड में नामकरण का निर्णय लिया जाना चाहिए (हालांकि तब इसे ठीक करना बहुत कठिन नहीं था), लेकिन यह एक तिलचट्टा के लिए एक स्लेजहैमर की तरह लगता है। (या हो सकता है कि समस्या हिट मामलों का उपयोग कर रही हो, मैं बहुत अधिक कठोर सर्वर या पीसी के बारे में नहीं सोच रहा हूं, जो मेरा अनुभव है।)

इसलिए, मेरे प्रश्न का स्पष्ट रूप से उल्लेख करने के लिए: udv वास्तव में क्या समस्याओं का समाधान करता है, और कैसे devfs, HAL और / या एक सादे पुरानी फ़ाइल उन्हें हल करने में विफल रही है? क्या एक विशेष कारण है कि सभी के लिए कई अलग-अलग चीजें (हॉटप्लगिंग, सामान्य उपकरण प्रबंधन, नेटवर्क डिवाइस प्रबंधन, डिवाइस नामकरण, ड्राइवर प्राथमिकता, आदि) एक कार्यक्रम हो सकती हैं?


5
सिस्टम एडमिनिस्ट्रेटर हैंडलिंग सर्वर के लिए आपकी विचार-प्रक्रिया अच्छी है, लेकिन लैपटॉप, विशिष्ट आधुनिक डेस्कटॉप, या मोबाइल उपयोगकर्ताओं की आवश्यकताओं को पूरा नहीं करता है। /dev(या आसानी से या आसानी से) स्टैटिक फाइलें एक व्यक्ति को संबोधित करती हैं जैसे कि एक व्यक्ति जो USB नेटवर्क एडॉप्टर या वर्चुअल नेटवर्क एडेप्टर में प्लगिंग करता है या जोड़ा जा रहा है या सिस्टम के चलने के दौरान नीचे ले जाता है। हालाँकि आपको अनइंस्टॉल करने udevऔर सादे पुराने स्थैतिक /devनिर्देशिका मार्ग पर वापस जाने से कुछ भी नहीं हो रहा है ।
LawrenceC

मूल रूप से प्रतिस्पर्धा वाले डीएफ़एफ़ कार्यान्वयन थे। तो यह तीन से भी अधिक है ... (हालांकि मुझे नहीं लगता कि आप एक के रूप में + एचएएल udev भरोसा कर सकते हैं।)
derobert

जवाबों:


33

दो और बातें: उद्यम और अन्य बड़े सर्वरों में लिनक्स की चाल स्थिर /devहोने के कारण टूटी हुई थी। उपभोक्ता और उद्यम दोनों में प्रौद्योगिकी को आगे बढ़ाना, एक मज़ाक के रूप में स्थिर / देव को उजागर कर रहा था। [यह उत्तर बैकस्टोरी के अधिक में भरता है, विशेष रूप से इसलिए नहीं कि देवदास को udv से बदल दिया गया था]।

मेजर और माइनर नंबर की थकावट

/devफ़ाइलों को उनकी प्रमुख और छोटी संख्याओं द्वारा कर्नेल के अंदर पहचाना जाता है। कर्नेल ने वास्तव में कभी भी नाम के बारे में परवाह नहीं की है (और आप उदाहरण के लिए, mv /dev/sda /dev/disk-1और यह काम करना जारी रखेगा - हालांकि निश्चित रूप से कार्यक्रमों को यह नहीं पता होगा कि इसे कहां खोजना है)।

एक स्थैतिक के साथ /dev, आपको हर संभावित डिवाइस के लिए एक प्रमुख / मामूली संख्या आवंटित करने की आवश्यकता होती है जो मौजूद हो सकती है। इन नंबरों को विश्व स्तर पर अद्वितीय होने की आवश्यकता है, क्योंकि वे डिस्ट्रोस के हिस्से के रूप में भेजे जाते हैं, मांग पर नहीं बनाए जाते हैं। समस्या यह है कि वे प्रत्येक 8-बिट संख्या हैं - सीमा 0–255 है।

मूल रूप से, उदाहरण के लिए, लिनक्स की शुरुआत 8,0 sda, 8,1 sda1, 8,16 sdb इत्यादि से हुई थी, लेकिन लोग मशीनों में अधिक से अधिक डिस्क जोड़ते रहे, खासकर जब आप फाइबर चैनल जैसी चीजों पर विचार करते हैं। तो कुछ बिंदुओं पर, अधिक डिस्क के लिए प्रमुख संख्या 65-71 जोड़ी गई। बाद में, प्रमुख संख्या 128-135। और फिर भी लोग अधिक डिस्क चाहते रहे ...

और जीपीटी जैसे विभाजन तालिका प्रारूप चारों ओर आए, प्रति डिस्क अधिक विभाजन का समर्थन करते हैं। और निश्चित रूप से अन्य डिवाइस संख्या स्थान के माध्यम से खा रहे थे: विभिन्न RAID नियंत्रक, तार्किक मात्रा प्रबंधन, आदि।

अंतिम परिणाम LANANA लिनक्स डिवाइस सूची में देखा जा सकता है । यदि आप 2.6 सूची (केवल एक ही अभी भी) को देखते हैं, तो 200 (अधिकतम: 255) के माध्यम से ब्लॉक प्रमुख संख्याओं का एक बहुत उपयोग किया जाता है। जाहिर है, संख्या बाहर चला गया होगा।

बड़ी संख्या में परिवर्तन करना आसान नहीं था। यह कर्नेल एबीआई को बदलता है। फाइलसिस्टम के आधार पर, यह ऑन-डिस्क लेआउट को बदलता है। लेकिन, निश्चित रूप से, उन उपकरणों में से अधिकांश किसी एक प्रणाली पर मौजूद नहीं थे, यहां तक ​​कि एक भी (उदाहरण के लिए) एससीएसआई डिस्क से बाहर चलने पर शायद बहुत सारी मुफ्त चीजें थीं - शायद इसे आईबीएम एक्सटी हार्ड डिस्क की आवश्यकता नहीं थी उदाहरण के लिए।

डायनेमिक के साथ /dev, डिस्ट्रो को डिवाइस नंबरों को शिप नहीं करना पड़ता है। उन्हें अब विश्व स्तर पर अद्वितीय होना नहीं है। वे बूट भर में अद्वितीय होना भी नहीं है।

उपकरणों के नाम अप्रत्याशित थे

यह सब कुछ के लिए एक नंबर आवंटित करने के लिए वास्तविक आसान हुआ करता था। एक बोर्ड में दो आईडीई चैनल थे; प्रत्येक IDE चैनल ने एक मास्टर और एक दास का समर्थन किया। आप चैनल ऑर्डर, और मास्टर-तब-गुलाम ऑर्डर में असाइन कर सकते हैं। तो hdaपहला चैनल बन जाता है, मास्टर; hdbपहला चैनल, गुलाम; hdcदूसरा चैनल, मास्टर; आदि वे पूर्वानुमान और स्थिर थे। यदि आप एक नई ड्राइव जोड़ते हैं या एक को हटाते हैं, तो वे बदल सकते हैं, लेकिन अनुपस्थित हार्डवेयर परिवर्तन, वे स्थिर थे।

आप /dev/hda1अपने में रख सकते हैं /etc/fstabऔर विश्वास रख सकते हैं कि यह कम से कम अनुपस्थित हार्डवेयर परिवर्तनों पर काम करता रहेगा।

आईडीई ने उस तरह काम किया। इसके बाद कुछ नहीं करता।

SATA सरल प्रतीत होती है: एक पोर्ट, एक डिस्क। लेकिन ऐसा नहीं है; यह पोर्ट मल्टीप्लायरों की अनुमति देता है। और यह गर्म-स्वैप की अनुमति देता है। फिर भी, अनुपस्थित हार्डवेयर परिवर्तन, आप वास्तव में अभी भी मैपिंग कार्य कर सकते हैं।

USB ज्यादा खराब है। न केवल यह गर्म स्वैप की अनुमति देता है, यह विशिष्ट है। लोग USB फ्लैश ड्राइव में हर समय प्लग लगाते हैं। इसके अलावा, उपकरणों को जांच में थोड़ा समय लग सकता है - और जब भी वे ऐसा महसूस कर सकते हैं तब बदल सकते हैं (जैसे, जब आपके फोन पर यूएसबी स्टोरेज मोड चालू या बंद हो)। जुगनू समान है। न तो आप वास्तव में एक स्थिर मानचित्रण के साथ आ सकते हैं।

नेटवर्क संलग्न डिस्क में कोई अंतर्निहित पोर्ट ऑर्डर नहीं है। कर्नेल का उपयोग करने का एकमात्र क्रम वह क्रम है जिसमें वे दिखाई देते हैं। तार्किक संस्करणों के साथ भी।

बूट गति की खोज ने भी चीजों को बदतर बना दिया। मूल रूप से, कर्नेल ख़ुशी से इधर-उधर बैठ जाता है और काफी समय तक प्रतीक्षा करता है, उदाहरण के लिए, सभी USB उपकरणों को आरंभ करने के लिए। सभी SCSI बसों आदि की पूरी जाँच करने के लिए, उन जांचों को पृष्ठभूमि के कार्यों में बनाया गया था; बूट अब उन पर इंतजार नहीं करेगा। उपकरणों को जांच के रूप में पूरा किया जाता है।

तो कर्नेल को कम या ज्यादा छोड़ दिया गया, "जो भी आदेश वे दिखाते हैं"। इसका मतलब यह था कि कई प्रकार के उपकरण हर बूट को ऑर्डर बदल सकते हैं और कर सकते हैं-जो एक बूट /dev/sdbपर था, दूसरे बूट पर था /dev/sdc। यह स्टैटिक के विचार को /devमजाक बनाता है ।

सारांश

जब आप /devअप्रत्याशित डिवाइस जांच के आदेशों के कारण स्थिर होने के संयोजन को निरर्थक होते जा रहे हैं, और स्थैतिक प्रमुख / मामूली संख्याओं को आवंटित करने के लिए निरंतर काम करने के लिए अग्रणी है, तो यह स्पष्ट नहीं हो जाता है कि लिनक्स के डेवलपर्स ने एक गतिशील पर स्विच करने का विकल्प क्यों चुना /dev


2
USB प्रिंटर सेटअप करने के लिए एक प्रमुख दर्द हुआ करता था, lsusb -vvजहाँ मेरे प्रिंटर बूट से बूट में छिपे हुए थे, इसकी तलाश का सहारा लिया जा रहा था। मुझे इस तरह से बिट्स की तलाश करनी होगी: "बस 001 डिवाइस 003: आईडी 04f9: 0217"
slm

24

अच्छा प्रश्न।

एक तरह से, इस तर्क को चारों ओर घुमाया जा सकता है: चूंकि कर्नेल 2.6.13 ने एक नया संस्करण पेश किया uevent, यह ऐसा होने के लिए बाध्य था devfsजिसे इंटरफ़ेस की नई सुविधाओं का लाभ लेने के लिए फिर से लिखना होगा। तो, एक तरह से, यह सवाल होना चाहिए कि कर्नेल में बदलाव क्यों हुआ।

हालाँकि, इसे अंकित मूल्य पर लेते हुए, इस विकिपीडिया के लेख में आपके प्रश्न का उत्तर दिया गया है :

पारंपरिक यूनिक्स प्रणालियों के विपरीत, जहां डिवाइस / नोड्स में देव नोड्स फाइलों का एक स्थिर सेट होता है, लिनक्स udv डिवाइस मैनेजर गतिशील रूप से केवल एक सिस्टम पर मौजूद उपकरणों के लिए नोड्स प्रदान करता है। यद्यपि डैफ़स इसी तरह की कार्यक्षमता प्रदान करते थे, ग्रेग क्रोहा-हार्टमैन ने डेफ़्स पर इसके कार्यान्वयन को प्राथमिकता देने के कई कारणों का हवाला दिया:

1) udev लगातार डिवाइस के नामकरण का समर्थन करता है, जो कि निर्भर नहीं करता है, उदाहरण के लिए, जिस क्रम में उपकरणों को सिस्टम में प्लग किया जाता है। डिफ़ॉल्ट udv सेटअप संग्रहण उपकरणों के लिए लगातार नाम प्रदान करता है। किसी भी हार्ड डिस्क को उसकी यूनीक फाइल सिस्टम आईडी, डिस्क का नाम और हार्डवेयर से जुड़े भौतिक स्थान से पहचाना जाता है।

2) udev पूरी तरह से यूजर स्पेस में निष्पादित होता है, जैसा कि devfs 'कर्नेल स्पेस के विपरीत है। एक परिणाम यह है कि udev ने कर्नेल से नामकरण नीति को स्थानांतरित कर दिया है और नोड के निर्माण से पहले डिवाइस के गुणों से डिवाइस के लिए नाम बनाने के लिए मनमाने ढंग से प्रोग्राम चला सकता है; वहां, पूरी प्रक्रिया भी बाधित होती है और यह कम प्राथमिकता के साथ चलती है।

मुझे शायद यह जोड़ना चाहिए कि udv के साथ race condition, जो मूल रूप से devfs और हॉटप्लग में उपकरणों के नामकरण से बचने की संभावना है , से बचा जाता है। दूसरे शब्दों में: devfs के साथ यह सुनिश्चित करने का कोई तरीका नहीं था कि आपके सबसे बाएं ईथरनेट पोर्ट को बुलाया जाएगा eth0और इसका सबसे दाहिना एक eth1, (एक शुद्ध उदाहरण के रूप में) राउटर की स्थापना (एक पोर्ट WAN, LAN के लिए एक पोर्ट) के लिए मुश्किल है लागू।

GUID पर आधारित डिस्क के नामकरण योजना को अपनाने का एक और प्लस है, और पूरी प्रक्रिया को उपयोगकर्ता-अंतरिक्ष में ले जाना और भी बड़ा है: क्या आपने इस साइट के माध्यम से यह देखने के लिए खोज की है कि कितने लोग अपने udev नियम लिखते हैं?

यूजरस्पेस में udev होने में निहित लाभों के एक सरल उदाहरण के रूप में, इस प्रश्न या दोनों इस बहुत ही साइट पर, इस प्रश्न को देखें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.