मैं उपयोग करने ln -s
और के बीच अंतर को समझने की कोशिश कर रहा हूं mount --bind
। बुनियादी परिदृश्य में मैं दोनों का उपयोग किसी एक निर्देशिका को कहीं और से करने के लिए कर सकता हूं। किन परिदृश्यों में वे दोनों अलग-अलग व्यवहार करेंगे?
मैं उपयोग करने ln -s
और के बीच अंतर को समझने की कोशिश कर रहा हूं mount --bind
। बुनियादी परिदृश्य में मैं दोनों का उपयोग किसी एक निर्देशिका को कहीं और से करने के लिए कर सकता हूं। किन परिदृश्यों में वे दोनों अलग-अलग व्यवहार करेंगे?
जवाबों:
वे कम से कम दो मामलों में अलग व्यवहार करेंगे:
A
) का विस्तार करता है, जो कुछ और ( B
) उन पर आरूढ़ है। लिंक B
मूल के बजाय माउंट लक्ष्य ( ) की सामग्री को दिखाएगा (A
) के ।इसके अलावा, आप किसी निर्देशिका या फ़ाइल को किसी मौजूदा निर्देशिका या फ़ाइल पर माउंट कर सकते हैं, मूल सामग्रियों को मास्किंग कर सकते हैं (मूल सामग्री को तब तक अप्रस्तुत कर सकते हैं जब तक कि मूल को अन्य जगहों पर न लगाया जाए)। एक प्रतीकात्मक लिंक के लिए आवश्यक है कि मूल को स्थानांतरित या हटा दिया जाए।
कुंआ, 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
।
ln -s ../../myfile .
। यदि आप इसे किसी अन्य निर्देशिका में स्थानांतरित करते हैं, तो यह कहीं और इंगित करेगा क्योंकि यह एक रिश्तेदार लिंक है। यह उपयोगी हो सकता है यदि आपको एक उप-वृक्ष का बैकअप लेने की आवश्यकता होती है और अभी भी बैकअप में लिंक काम करते हैं।
इसके अतिरिक्त, ln -s एक रिबूट बच जाएगा; जब तक आप इसे बनाए रखने के लिए / etc / fstab को संपादित नहीं करते, माउंट --bind नहीं होगा।
अन्य उत्तरों के अलावा। सिस्टम निर्देशिका के लिए हार्ड लिंक की अनुमति नहीं देता है:
# 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)
तो, माउंट अभी भी पढ़ा और लिखा है, भले ही मैंने विकल्प आरओ (केवल पढ़ने के लिए) के लिए कहा हो।
rm -r
एक परmount --bind
। ए के साथln
, यह लिंक को हटा देता है, जबकि ए के लिए--bind
,rm -r
लक्ष्य पर चलने के समान प्रभाव पड़ता है । अच्छा नहीं है, जैसा कि मैंने अपने सर्वर में से एक के पुनर्निर्माण से पहले पाया था ...