Ln -s और Mount --bind में क्या अंतर है?


36

मैं उपयोग करने ln -sऔर के बीच अंतर को समझने की कोशिश कर रहा हूं mount --bind। बुनियादी परिदृश्य में मैं दोनों का उपयोग किसी एक निर्देशिका को कहीं और से करने के लिए कर सकता हूं। किन परिदृश्यों में वे दोनों अलग-अलग व्यवहार करेंगे?


7
मैं के खिलाफ चेतावनी दी है चाहिए rm -rएक पर mount --bind। ए के साथ ln, यह लिंक को हटा देता है, जबकि ए के लिए --bind, rm -rलक्ष्य पर चलने के समान प्रभाव पड़ता है । अच्छा नहीं है, जैसा कि मैंने अपने सर्वर में से एक के पुनर्निर्माण से पहले पाया था ...
मार्क के कोवान

@MarkKCowan यह सच है जब तक कि आपने कड़ी कड़ी नहीं बनाई ।
जॉनी क्यू जूल

@ जॉनी क्यू हार्डलिंक निर्देशिका नहीं कर सकते
मार्क के कोवान

जवाबों:


33

वे कम से कम दो मामलों में अलग व्यवहार करेंगे:

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

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


16

कुंआ, ln -s एक प्रतीकात्मक लिंक mount --bindबनाता है , जबकि एक माउंट बनाता है।

एक प्रतीकात्मक लिंक एक विशेष प्रकार की फ़ाइल है। यदि आप करते हैं ln -s /var/target /var/link, तो इसमें /var/linkएक फ़ाइल होगी जिसमें पथ " /var/target" होगा। एक प्रतीकात्मक लिंक और एक साधारण फ़ाइल के बीच एकमात्र अंतर यह है कि जब कोई प्रोग्राम प्रतीकात्मक लिंक पर एक ऑपरेशन करने की कोशिश करता है, तो ऑपरेशन आमतौर पर फ़ाइल के बजाय लक्ष्य पर किया जाता है। तो अब अगर आप करते हैं ls /var/link, तो lsप्रोग्राम निर्देशिका निर्देशिका प्राप्त करने का प्रयास करेगा /var/link, लेकिन वास्तव में /var/targetइसके लिए निर्देशिका लिस्टिंग प्राप्त करेगा ।

प्रतीकात्मक लिंक अभी भी सिर्फ फाइलें हैं, हालांकि। उनका नाम बदला जा सकता है और हटाया जा सकता है। ध्यान दें कि आप एक प्रतीकात्मक लिंक (या उस मामले के लिए एक साधारण फ़ाइल) नहीं बना सकते हैं, जिसे कॉल किया जाता है /var/linkयदि पहले से ही एक फ़ाइल है /var/link; आपको पहले इससे छुटकारा पाना होगा।

एक माउंट एक फ़ाइल नहीं है; यह एक रिकॉर्ड है कि कर्नेल स्मृति में रहता है। यदि आप करते हैं mount --bind /var/target /var/mount, तो कर्नेल इस तथ्य को दर्ज करेगा जो /var/mountअब एक नया नाम है /var/target। (मुझे विवरण नहीं पता है; विशेष रूप से, मुझे नहीं पता कि किसी उपनिर्देशिका में कुछ बढ़ने से /var/targetयह या तो दिखाई देगा /var/mountया क्यों या क्यों नहीं। इस उत्तर के लिए संपादन की सराहना की जाएगी।) तो अब यदि आप करते हैं ls /var/mount, तो वही होगा जैसे आपने किया था ls /var/target, क्योंकि /var/mountऔर /var/targetवही निर्देशिका हैं।

Mounts फ़ाइलें नहीं हैं। मुझे नहीं पता कि अगर आपने नाम बदलने या हटाने की कोशिश की तो क्या होगा /var/mount। ध्यान दें कि आप /var/mount तब तक कुछ भी माउंट नहीं कर सकते जब तक कि वहां पहले से ही कोई निर्देशिका न हो /var/mount


1
मैंने माउंट-बिंद का उपयोग नहीं किया है, लेकिन मुझे संदेह है कि यह एक सिमलिंक जैसे व्यवहार को दोहरा सकता है ln -s ../../myfile .। यदि आप इसे किसी अन्य निर्देशिका में स्थानांतरित करते हैं, तो यह कहीं और इंगित करेगा क्योंकि यह एक रिश्तेदार लिंक है। यह उपयोगी हो सकता है यदि आपको एक उप-वृक्ष का बैकअप लेने की आवश्यकता होती है और अभी भी बैकअप में लिंक काम करते हैं।
जो

10

इसके अतिरिक्त, ln -s एक रिबूट बच जाएगा; जब तक आप इसे बनाए रखने के लिए / etc / fstab को संपादित नहीं करते, माउंट --bind नहीं होगा।


2

अन्य उत्तरों के अलावा। सिस्टम निर्देशिका के लिए हार्ड लिंक की अनुमति नहीं देता है:

# ln mydir mpoint
ln: `mydir': hard link not allowed for directory

माउंट आपको हार्ड लिंक की तरह बनाते हैं यानी समान के लिए दो या अधिक नाम एक इनोड के :

# mount -B mydir/ mpoint/
# ls -d -i *
807175  mpoint/  807175  mydir/

(एक यह rsync के पुराने संस्करण के साथ स्नैपशॉट-बैकअप के लिए मदद कर सकता है।)

यह भी ध्यान दें कि यह माउंट पूरा नहीं है:

# mount -B -oro mydir/ mpoint/
mount: warning: mpoint/ seems to be mounted read-write.
# mount | grep mpoint
/root/learn/mydir on /root/learn/mpoint type none (rw,bind)

तो, माउंट अभी भी पढ़ा और लिखा है, भले ही मैंने विकल्प आरओ (केवल पढ़ने के लिए) के लिए कहा हो।

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