विशेष डिवाइस फ़ाइलों में इनोड क्यों होते हैं?


11

डिवाइस फ़ाइलें प्रति फ़ाइल नहीं हैं। वे यूनिक्स-जैसे ऑपरेटिंग सिस्टम में उपकरणों का उपयोग करने के लिए एक I / O इंटरफ़ेस हैं। वे डिस्क पर कोई स्थान का उपयोग नहीं करते हैं, हालांकि, वे अभी भी एक इनोड का उपयोग करते हैं जैसा कि statकमांड द्वारा रिपोर्ट किया गया है :

$ stat /dev/sda
      File: /dev/sda
      Size: 0               Blocks: 0          IO Block: 4096   block special file
Device: 6h/6d   Inode: 14628       Links: 1     Device type: 8,0

क्या डिवाइस फाइलें फाइलसिस्टम में भौतिक इनोड का उपयोग करती हैं और उन्हें इनकी आवश्यकता क्यों है?


2
Inode और डेटा कर रहे हैं फ़ाइल। इनकोड के बिना, आपके पास कोई फ़ाइल नहीं है। (डिवाइस फ़ाइलों में हालांकि कोई डेटा नहीं है)
user253751

जवाबों:


16

संक्षिप्त उत्तर यह है कि यह केवल तभी होता है जब आपके पास एक भौतिक फाइल सिस्टम बैकिंग हो /dev(और यदि आप आधुनिक लिनक्स डिस्ट्रो का उपयोग कर रहे हैं, तो आप शायद नहीं करते हैं)।

लंबे उत्तर इस प्रकार है:

यह सब मूल UNIX दर्शन पर वापस जाता है कि सब कुछ एक फ़ाइल है। यह दर्शन UNIX को इतना बहुमुखी बनाने का एक हिस्सा है, क्योंकि आप सीधे भौतिक हार्डवेयर से बात करने के लिए अपने आवेदन में विशेष कोड की आवश्यकता के बिना उपयोगकर्ताओं से उपकरणों के साथ सीधे बातचीत कर सकते हैं।

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

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

हालांकि, दोनों ही मामलों में, डिवाइस नोड्स को नियमित VFS परत के माध्यम से एक्सेस किया जाता है, जिसका अर्थ है कि उनके पास एक इनोड होना चाहिए (भले ही यह एक आभासी हो जो बस मौजूद है ताकि सामान जैसा stat()काम करता है, वह व्यावहारिक दृष्टिकोण से हो। इसका सिस्टम पर शून्य प्रभाव है जो एक डायनामिक का उपयोग करता है /devक्योंकि वे सिर्फ इनोड्स को मेमोरी में स्टोर करते हैं या आवश्यकतानुसार उन्हें उत्पन्न करते हैं, और शून्य प्रभाव के पास जहां /devस्थिर होता है क्योंकि इनोडेस डिस्क पर शून्य स्थान के करीब ले जाते हैं और अधिकांश फाइल सिस्टम में या तो कोई ऊपरी सीमा नहीं होती है उन्हें या किसी भी तरह से प्रावधान करने की आवश्यकता कभी भी होने की संभावना है।


3
सावधानी से हाथ उठाता है। मैं एक ऐसी परियोजना पर रहा हूं जिसमें एक सर्वर इनोड से बाहर चला गया था। यह आखिरकार संकट था कि हमारी टीम को उस बैक-एंड सिस्टम को बदलने के लिए प्रबंधन को समझाने की जरूरत थी, जिसे डिजाइन किया गया था (खराब, जैसा कि आप कल्पना कर सकते हैं!) इससे पहले कि हम में से कोई भी वहां गया था।
केरान

@KRyan यह हो सकता है, लेकिन इन दिनों यह दुर्लभ है जब तक कि व्यवस्थापक ने फ़ाइल सिस्टम निर्माण में संख्या को स्पष्ट रूप से कम नहीं किया। कई आधुनिक फाइल सिस्टम (कम से कम NTFS, BTRFS, और ZFS, मुझे लगता है कि XFS भी हो सकता है) वास्तव में गतिशील रूप से इनकोड आवंटित करते हैं, इसलिए बहुत सारे नए सिस्टम पर, वास्तव में इसे चलाना असंभव है।
ऑस्टिन हेमेलर्गरन

@KRyan मैं भी उस समस्या है। और यह वास्तव में एक अच्छी तरह से डिज़ाइन किया गया सिस्टम था, अगर थोड़ा सा दिनांक और एक्स्ट्रीम पर ले जाया जाता है (प्रत्येक लेनदेन के लिए एक स्वतंत्र लॉग की आवश्यकता होती है, जिसे डिस्क पर रखा गया था, अंततः यह केवल छोटे छोटे
इनोड्स

1
ओड और डॉकटर इस तरह की इनोड समस्या के कारण फेमस हैं।
coteyr

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

15

डिवाइस फ़ाइलों में अनुमतियाँ भी हैं, और वे एक इनोड में संग्रहीत हैं।


उत्कृष्ट बिंदु जो मैं उल्लेख करना भूल गया।
ऑस्टिन हेमेलर्गरन

5
न केवल अनुमतियाँ, बल्कि फ़ाइल प्रकार और अन्य मेटाडेटा भी। शास्त्रीय रूप से, निर्देशिका में केवल नाम और इनोड नंबर होते हैं - यह इंगित करने के लिए कुछ भी नहीं है कि फ़ाइल एक उपकरण है जब तक आप इनोड को नहीं पढ़ते हैं।
गिल्स एसओ- बुराई को रोकना '

12

निर्देशिकाएँ केवल फ़ाइल नाम से इनोड्स में मैपिंग होती है, इसलिए इस चीज़ के बारे में सब कुछ जो नाम को संदर्भित करता है (एक फ़ाइल, एक सिमलिंक, एक उपकरण, एक फीफो, एक सॉकेट) इनोड में होना चाहिए, इसे डालने के लिए कहीं और नहीं है।

डिवाइस के बारे में जानकारी इनोड में संग्रहीत है। प्रमुख और मामूली डिवाइस नंबर वहाँ हैं, इसलिए अनुमति, टाइमस्टैम्प आदि हैं। प्रकार फ़ील्ड जो कहता है कि यह एक नियमित फ़ाइल के बजाय एक ब्लॉक या चरित्र डिवाइस है, वहां संग्रहीत है।

उपकरणों के लिए इनकोड केवल उन फ़ील्ड्स का उपयोग नहीं करता है जिनमें फ़ाइल का ब्लॉक मैप होता है।


0

इनकोड के बिना आपके पास केवल फ़ाइल नाम होगा जिसमें डिवाइस के बारे में सारी जानकारी होगी। इसका अर्थ है "अच्छा" डिवाइस नाम जैसे /dev/sdaप्रश्न से बाहर होगा: आपको एक ऐसे नाम की आवश्यकता होगी जिसे किसी विशेष ड्राइवर से जोड़ा जा सकता है, जैसे /dev/ohci/sda

इससे भी महत्वपूर्ण बात, सभी उपकरण जो इनोड्स (जैसे और इतने पर) पर भरोसा करते हैं stat, को एक विशेष तरीके से lsपथ के उपचार के लिए संशोधित करना होगा /dev। यह एक निषेधात्मक रूप से बड़ी मात्रा में काम होगा जिसमें वर्तमान स्थिति की तुलना में कोई स्पष्ट लाभ नहीं होगा।

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