हार्ड लिंक केवल एक ही फाइल सिस्टम में मान्य क्यों हैं?


22

मैं मार्क बेट्स द्वारा कमांड लाइन के लिए इस परिचय को पढ़ रहा हूं ।

पहले अध्याय में, उन्होंने उल्लेख किया है कि हार्ड लिंक फ़ाइल सिस्टम को नहीं फैला सकते हैं।

हार्ड लिंक के बारे में ध्यान देने वाली एक महत्वपूर्ण बात यह है कि वे केवल वर्तमान फ़ाइल सिस्टम पर काम करते हैं। आप किसी भिन्न फ़ाइल सिस्टम पर फ़ाइल का हार्ड लिंक नहीं बना सकते। ऐसा करने के लिए आपको प्रतीकात्मक लिंक, धारा 1.4.3 का उपयोग करना होगा।

मुझे केवल एक फाइलसिस्टम का पता है। जड़ से शुरू होने वाला ( /)। यह कथन कि हार्ड लिंक फाइल सिस्टम पर नहीं हो सकता है, इससे मुझे कोई मतलब नहीं है।

यूनिक्स फ़ाइल सिस्टम पर विकिपीडिया लेख भी मददगार नहीं है।

जवाबों:


29

उम्मीद है कि मैं इस तरह से जवाब दे सकता हूं जो आपके लिए समझ में आता है। लिनक्स में एक फाइल सिस्टम, आम तौर पर एक विभाजन से बना होता है जिसे विभिन्न तरीकों में से एक में स्वरूपित किया जाता है (प्यार की पसंद!) जो आप अपनी फ़ाइलों को स्टोर करते हैं। हो कि आपके सिस्टम फ़ाइलें, या आपकी व्यक्तिगत फ़ाइलें ... वे सभी एक फ़ाइल सिस्टम पर संग्रहीत हैं। यह हिस्सा आपको समझ में आता है।

लेकिन क्या होगा यदि आप एक से अधिक विभाजन के लिए अपनी हार्ड ड्राइव को विभाजित करते हैं (लगता है कि ऐप्पल पाई टुकड़ों में कट गई), या एक अतिरिक्त हार्ड ड्राइव (शायद एक यूएसबी स्टिक?) जोड़ें। तर्क के लिए, उन सभी के पास फ़ाइल सिस्टम भी है।

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

image.jpg             image2.jpg
          \           /
           [your data]

यहाँ, image.jpg और image2.jpg दोनों सीधे आपके डेटा की ओर इशारा करते हैं। वे दोनों हार्डलिंक हैं। तथापि...

image.jpg    <-----------  image2.jpg
           \ 
             [your data]

इस (क्रूड) उदाहरण में, image2.jpg आपके डेटा को इंगित नहीं करता है, यह image.jpg को इंगित करता है ... जो आपके डेटा की एक कड़ी है।

प्रतीकात्मक लिंक फाइल सिस्टम सीमाओं के पार काम कर सकते हैं (यह मानते हुए कि फाइल सिस्टम संलग्न है और माउंट किया गया है, जैसे कि आपकी यूएसबी स्टिक)। हालांकि एक कड़ी कड़ी नहीं कर सकते। यह आपके अन्य फ़ाइल सिस्टम पर क्या है, या आपका डेटा कहाँ संग्रहीत है, इसके बारे में कुछ भी नहीं जानता है।

उम्मीद है कि यह बेहतर समझ बनाने में मदद करता है।


धन्यवाद। मुझे महसूस नहीं हुआ कि अलग-अलग फ़ाइल-विभाजन को "फ़ाइल सिस्टम" कहा जाता है।
एंटोन पारस

1
एक विभाजन के साथ आप जिन चीजों को कर सकते हैं, उनमें से एक फाइल सिस्टम को उस पर रखा जाता है, अन्य स्थान हैं जहां आप फाइल सिस्टम और अन्य चीजें जो आप विभाजन के साथ कर सकते हैं, लेकिन सबसे आम विकल्प वह है।
जसने

10
एक फाइल पदानुक्रम है जो "/" पर शुरू होती है। यह एक या अधिक होगा फाइल सिस्टम घुड़सवार
mpez0

@ mpez0: नहीं भी, उदाहरण के लिए chroot(2)या असली कंटेनरीकरण के साथ आपके पास कई पदानुक्रम हो सकते हैं, जो एक दूसरे के साथ कुछ भी नहीं कर सकते हैं।
केविन

@ केविन, chrootएक प्रक्रिया और उसके वंश के लिए पदानुक्रम के एक हिस्से को अलग करता है, लेकिन माता-पिता के पास अभी भी एक पूर्ण पदानुक्रम है। कंटेनरीकरण यह कर सकता है, यह निर्भर करता है कि यह वीएम के कितने करीब है। लेकिन एक टिप्पणी में कितना विस्तार हो सकता है? धन्यवाद,
mpez0

23

फाइल सिस्टम एक निर्देशिका निर्देशिका प्रविष्टियों फ़ाइलों को व्यवस्थित करने के लिए बना संरचना द्वारा रचित है। प्रत्येक निर्देशिका प्रविष्टि एक इनोड के साथ एक फ़ाइल-नाम को जोड़ती है ।

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

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

सॉफ्ट-लिंक और हार्ड-लिंक के बीच अंतर

निष्कर्ष:

जैसा कि इनकोड एक डेटा संरचना है, जिसका उपयोग फ़ाइल-सिस्टम ऑब्जेक्ट को दर्शाने के लिए किया जाता है, यह फ़ाइल सिस्टम के लिए आंतरिक है, और आप किसी अन्य फ़ाइल सिस्टम के इनकोड को इंगित नहीं कर सकते ।

इस प्रकार, हार्ड-लिंक केवल एक ही फाइल सिस्टम के भीतर मान्य होते हैं, लेकिन सॉफ्ट-लिंक (सिम्बोलिक लिंक) फाइल सिस्टम को फैला सकते हैं क्योंकि वे बस किसी अन्य निर्देशिका प्रविष्टि (फाइल-सिस्टम का इंटरफ़ेस, और आंतरिक ऑब्जेक्ट नहीं) को इंगित करते हैं।


1
अच्छा संक्षिप्त जवाब।
डबकट

यदि किसी अन्य फ़ाइल सिस्टम (USB को मान लें) में उसी NAME के ​​साथ एक फ़ाइल होगी, जिससे हमारा प्रतीकात्मक लिंक हमारी फ़ाइल प्रणाली से जुड़ा हो?
जोसेफ क्लिमुक

@JosefKlimuk, एक नरम लिंक एक पथ की ओर इशारा करता है, आइए बताते हैं /mnt/myfile। यदि आप किसी अन्य फ़ाइल सिस्टम को माउंट करते हैं /mnt/। नरम लिंक के तहत घुड़सवार फ़ाइल सिस्टम की प्रविष्टि के लिए हल किया जाएगा /mnt/। इस प्रकार, यदि आपने अपने USB डिवाइस से फ़ाइल सिस्टम को माउंट किया है /mnt, तो सॉफ्ट लिंक उस फ़ाइल सिस्टम पर एक प्रविष्टि का समाधान करेगा।
विक्टर

2

रूट फाइलसिस्टम कई फाइल सिस्टम से बना हो सकता है; /usr/localएक अलग विभाजन पर मुहिम शुरू की जा सकती है और /homeकहीं और एक नेटवर्क डिस्क पर दूसरे विभाजन पर हो सकती है। इस मामले में, /usr/local/bin/git(उदाहरण के लिए) के लिए एक हार्ड लिंक बाहर नहीं बनाया जा सकता है /usr/local, क्योंकि यह फाइल सिस्टम को फैलाएगा

इसका कारण यह है कि इनोड्स को अलग-अलग के लिए आवंटित किया जाता है /, /usr/localऔर /home(फिर, इस उदाहरण में), और जब आप एक कठिन लिंक बनाते हैं तो आप वास्तव में सिर्फ एक इनोड के लिए एक अतिरिक्त नाम बनाते हैं।


2

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

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


अच्छी बात है, लेकिन अच्छा जवाब देने के लिए थोड़ा बहुत स्पर्शरेखा भी।
जो

@ जो: फाइल सिस्टम को पार करने के लिए कड़ी से कड़ी जुड़ने से कई तरह की तकनीकी दिक्कतें सामने आती हैं, लेकिन उनमें से ज्यादातर पर काबू पाया जा सकता है, इस तरह यह सवाल उठ रहा है कि क्या कोई मजबूर कारण है कि वे क्यों नहीं होने चाहिए। जीवित रखने का मुद्दा अस्पष्ट लग सकता है, लेकिन अन्य मुद्दों के विपरीत यह केवल मुझे ऐसे लिंक के उपयोग पर गंभीर अर्थ प्रतिबंध लगाकर हल कर सकता है, जो गंभीर रूप से उनके मूल्य को सीमित करेगा।
सुपरकैट

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

1

प्रत्येक फ़ाइल सिस्टम में फ़ाइल का प्रतिनिधित्व करने के लिए एक एकल इनोड संख्या उपयोग। सभी हार्ड लिंक इनोड संख्या के आधार पर। फ़ाइल सिस्टम संदर्भ लिंक यहाँ

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