मेरे माउंट नाम स्थान के बाहर मेरा बाइंड माउंट क्यों दिखाई देता है?


12

इसलिए मैं यह जानने की कोशिश कर रहा हूं कि लिनक्स का माउंट नेमस्पेस कैसे काम करता है। इसलिए, मैंने थोड़ा प्रयोग किया और दो टर्मिनल खोले और निम्नलिखित भाग गया:

टर्मिनल 1

root@goliath:~# mkdir a b
root@goliath:~# touch a/foo.txt
root@goliath:~# unshare --mount -- /bin/bash
root@goliath:~# mount --bind a b
root@goliath:~# ls b
foo.txt

टर्मिनल 2

root@goliath:~# ls b
foo.txt

टर्मिनल 2 में माउंट कैसे दिखाई देता है? चूंकि यह माउंट नेमस्पेस का हिस्सा नहीं है इसलिए मुझे उम्मीद थी कि निर्देशिका यहां खाली दिखाई देगी। मैंने इसके साथ विकल्पों को पारित करने -o shared=noऔर उपयोग करने की भी कोशिश की , लेकिन मुझे वही परिणाम मिला।--make-privatemount

मुझे क्या याद आ रहा है और मैं इसे वास्तव में निजी कैसे बना सकता हूं?


माउंट सिस्टम-वाइड हैं, शेल वातावरण के लिए विशिष्ट नहीं हैं। साझा, गुलाम, निजी, और unbindable वे नहीं हैं जो आपको लगता है कि वे हैं। पढ़ो man mount
कैस

3
@ कैस: सहमत --make-privateहूं कि वह नहीं है जो मैं चाहता हूं। लेकिन, क्या यह नहीं कि माउंट नेमस्पेस की बात (कि वे सिस्टम वाइड नहीं हैं)?
फैटलएर्रर

जवाबों:


11

यदि आप util-linux2.27 से कम संस्करण वाले सिस्टम आधारित वितरण पर हैं , तो आपको यह अनपेक्षित व्यवहार दिखाई देगा। ऐसा इसलिए है क्योंकि कर्नेल में एक सेटिंग के आधार पर CLONE_NEWNSझंडे का प्रचार sharedकरता है। यह सेटिंग सामान्य रूप से है private, लेकिन systemd इसे बदलता है shared। के रूप में util-linux2.27, एक पैच बनाया गया था कि के डिफ़ॉल्ट व्यवहार में परिवर्तन unshareआदेश का उपयोग करने के लिए privateडिफ़ॉल्ट प्रचार व्यवहार के रूप में के रूप में अधिक सहज ज्ञान युक्त किया जाना है।

उपाय

यदि आप <2.27 के साथ एक सिस्टमड सिस्टम पर हैं util-linux, तो कमांड चलाने के बाद आपको रूट फाइल सिस्टम को रिमूव करना होगा unshare:

# unshare --mount -- /bin/bash
# mount --make-private -o remount /

यदि आप> = 2.27 के साथ एक सिस्टमड सिस्टम पर हैं util-linux, तो यह आपके उदाहरण में दिए गए उदाहरण के अनुसार, आपके प्रश्न, शब्दशः में, रिमाउंट की आवश्यकता के बिना काम करना चाहिए। यदि नहीं: माउंट नेमस्पेस के प्रचार को निजी बनाने के लिए मजबूर --propagation privateकरने के लिए unshareकमांड को पास करें ।


0

यह ubuntu में काम नहीं किया, (15.04 और 14.04)। इसने फ़ेडोरा पर काम किया। और फेडोरा के लिए। आप की जरूरत है - निजी या नहीं, आप भी देख सकते हैं

cat / proc / self / mountinfo | grep साझा किया गया

यदि साझा किया जाता है, तो इसका मतलब है कि कुछ अन्य नामस्थान अभी भी उस आरोह को देख सकते हैं। फिर यह सिस्टम से संबंधित मुद्दा है। इसे काम करने के लिए आप उपयोग कर सकते हैं - नकली-निजी

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