Bind mounts को कैसे सूचीबद्ध किया जा सकता है?


11

बहुत से लोग यह कहते रहते हैं कि लिनक्स बाइंड माउंट के बारे में जानकारी नहीं रखता है, इसलिए उनके और उनके स्रोतों की सूची प्राप्त करने का कोई तरीका नहीं है। यहाँ कुछ उदाहरण हैं:

  • यहाँ टिप्पणियों में से एक से :

    IIRC यह जानकारी कहीं भी नहीं रखी गई है: बाद में mount --bind, दो प्रतियां बराबर हैं, एक ऐसा नहीं है जो दूसरे की तुलना में अधिक "मूल" है। यदि आप पहले से ही अनमाउंट हैं, तो कोई मूल नहीं हो सकता है /mnt

  • इस साइट पर एक उत्तर से :

    तो याद करने का एकमात्र तरीका यह है कि जो माउंट्स बाँध रहे थे, माउंट माउंट कमांड का लॉग इन शेष है /etc/mtab। बाइंड माउंट ऑपरेशन को बाइंड माउंट विकल्प द्वारा इंगित किया जाता है (जिसके कारण फ़ाइल सिस्टम प्रकार को अनदेखा किया जाता है)। लेकिन माउंट के पास कोई विकल्प नहीं है केवल विकल्प के विशेष सेट के साथ घुड़सवार फाइलसिस्टम को सूचीबद्ध करने के लिए।

  • से एक डेबियन बग रिपोर्ट :

    यह जानबूझकर किया गया है। दोनों माउंट पॉइंट पूरी तरह से सभी तरह से समान हैं इसलिए कर्नेल उन्हें अलग करने के लिए कोई झंडे नहीं रखता है।

हालांकि यह बकवास है। उपकरण findmntबाइंड माउंट्स के स्रोत रास्तों को सूचीबद्ध करने में सक्षम है (के रूप में device[source-path]; मैं इसे केवल स्रोत पथ और उपकरण नहीं सूचीबद्ध करने के लिए प्राप्त करने का प्रयास कर रहा हूं )। यदि लिनक्स कर्नेल को बाइंड माउंट बनाए रखने के लिए है, तो उस जानकारी को कहीं संग्रहीत किया जाना चाहिए , अन्यथा यह नहीं जान सकता कि /homeयह बाध्य है /users। तो यह डेटा कहां है? क्या यह रैम में कुछ अस्पष्ट क्षेत्र में संग्रहीत है? करता है findmntमें देखो /procकहीं?


आप किस संस्करण को findmntचला रहे हैं और आप इसे क्या विकल्प दे रहे हैं? मेरा यह उस तरह से प्रिंट नहीं करता है और स्रोत कोड को देखकर ऐसा लगता है कि वह ऐसा उपयोग करता _PATH_PROC_MOUNTINFOहै /proc/self/mountinfoजो ऐसा लगता है जिसमें यह जानकारी नहीं है।
ब्राचली

ठीक है, मुझे लगता है कि /proc/self/mountinfoहाल ही में पुनर्गठन किया गया था। मैं अपने आरएचईएल 6 मशीन पर था, जिसके पहले पथ की जानकारी नहीं थी, लेकिन मेरी आरएचईएल 7 मशीन करती है और जैसा कि आपके लिंक में उल्लिखित है जैसा कि व्हीजेआई करता है।
ब्राचली

यह बकवास नहीं है: यह पुरानी गुठली के साथ सच था, लेकिन नई गुठली जानकारी को ट्रैक करती है।
गिल्स एसओ- बुराई को रोकें '

@ गिल्स तब एक बाँध माउंट कैसे बना रह सकता है अगर जानकारी है कि एक निर्देशिका दूसरे पर मुहिम की जाती है पर नज़र नहीं रखी जाती है?
मेलब

@Melab वास्तव में, यदि आप ट्रैक नहीं करते हैं कि यह एक बाइंड माउंट है, तो इसे बांधना माउंट के लिए आसान है। जब आप /dev/Aपर चढ़ा जाता है /Bऔर आप करते हैं mount --bind /B /C, तो पुरानी गुठली केवल याद आती है /B → /dev/Aऔर /C → /dev/A, उन्हें /Bऔर के बीच कोई संबंध याद नहीं रहता है /C। इसलिए /Bस्वाभाविक रूप से अनमाउंटिंग का कोई प्रभाव नहीं पड़ता है /C। नई गुठली याद है कि /Cएक बाँध के माउंट था /B, लेकिन एक तरह से है जो /Cकाम करने से रोकने के लिए नहीं है अगर /Bunmounted है, मैं वास्तव में कैसे पता नहीं है।
गाइल्स का SO- बुराई पर रोक '20:

जवाबों:


12

तुम थोड़ा गलत समझे हो; दो माउंट पॉइंट अनुमतियाँ, झंडे, आदि के मामले में समान हैं क्योंकि बाइंड प्रभावी रूप से एक पथ से दूसरे तक पहुंच को पुनर्निर्देशित करता है। लेकिन वे अभी भी अलग हैं

यदि आप /proc/self/mountinfoइस प्रक्रिया के लिए माउंट वर्ल्ड का कर्नेल दृश्य देखेंगे (नाम स्थान चीजों को और अधिक जटिल बनाते हैं, तो माउंट टेबल का सिर्फ एक दृश्य नहीं है )।

man 5 procइस फ़ाइल के प्रारूप की व्याख्या करेगा, लेकिन आप पेड़ के पदानुक्रम को देख सकते हैं और जहाँ बाँध के मोतियों का "अभिभावक" होता है। यह वह फ़ाइल है जो findmntपार्स करती है।


9

लिनक्स यह जानकारी नहीं रखता है कि कौन सा माउंट बाइंड माउंट था । यह बाइंड माउंट सहित सभी आरोह के बारे में जानकारी रखता है ।

यह कड़ी से कड़ी के समान है। फाइलसिस्टम की लिंक को फाइलनेम की तरह लिंक करता है। अंतर केवल इतना है कि माउंट में प्रति-माउंट झंडे भी होते हैं और फाइलसिस्टम रूट के बजाय लक्ष्य फाइल सिस्टम के एक उपनिर्देशिका का उल्लेख कर सकते हैं।

जब आप एक हार्ड लिंक बनाते हैं तो फ़ाइल सिस्टम सहेजता नहीं है कि कौन सा फ़ाइल नाम मूल एक था और कौन सा हार्ड लिंक था। दोनों बस एक ही इनकोड को संदर्भित करते हैं। यदि आप मूल फ़ाइल को अनलिंक करते हैं, तो स्थिति से अप्रभेद्य है यदि आपने फ़ाइल को सीधे दूसरे फ़ाइल नाम से बनाया है।

वापस mounts बाँधने के लिए: कर्नेल एक टेबल रखता है जिसमें फाइलसिस्टम शामिल होता है (एक प्रमुख: मामूली संख्या जोड़ी), माउंटपॉइंट, फाइलसिस्टम रूट के सापेक्ष पथ और कुछ झंडे। आप इस सूची को देख सकते हैं /proc/self/mountinfo। (यह अधिक जटिल हो जाता है जब नामस्थान शामिल होते हैं, जैसा कि @ स्टीफन-हैरिस ने उल्लेख किया है)। findmntइस सूची को पार्स करता है।

यदि आपकी जड़ /dev/sda1प्रमुख के साथ है: नाबालिग 8:1और आप चलाते हैं तो mount --bind /a /b /proc/self/mountinfoइसके समान रेखाएँ होंगी:

1 0 8:1 / / rw - ext4 /dev/sda1 rw,errors=remount-ro
2 1 8:1 /a /b rw - ext4 /dev/sda1 rw,errors=remount-ro

यदि आपका /homeहै /dev/sda2साथ प्रमुख: नाबालिग 8:2और आप चलाने mount --bind /home /usersयह इस तरह दिखेगा:

1 0 8:1 / / rw - ext4 /dev/sda1 rw,errors=remount-ro
2 1 8:2 / /home rw - ext4 /dev/sda2 rw
3 1 8:2 / /users rw - ext4 /dev/sda2 rw

आपके प्रश्न के प्रासंगिक कॉलम तीसरे, चौथे और पांचवें हैं। ये फाइलसिस्टम आईडी हैं ( वास्तविक फाइल सिस्टम के लिए यह डिवाइस प्रमुख के समान है: मामूली, वर्चुअल फाइल सिस्टम जैसे कि tmpfs के लिए यह [0: काउंटर ]) है, फाइलसिस्टम रूट के सापेक्ष पथ जो कि माउंटपॉइंट (आमतौर पर / सामान्य) से जुड़ा होता है माउंट, बाँध माउंट के लिए कुछ भी हो सकता है) और माउंटपॉइंट।
शेष स्तंभों के अर्थ के लिए लिनक्स कर्नेल प्रलेखन देखें

findmntफ़ाइल सिस्टम रूट "FSROOT" के सापेक्ष स्रोत पथ को कॉल करता है। आप findmnt -o TARGET,FSROOTइसे पाने के लिए उपयोग कर सकते हैं । यदि आप पूर्ण स्रोत पथ चाहते हैं, तो आपको संभवतः /proc/self/mountinfoअपने आप से पार्स करने की आवश्यकता है और समान फाइल सिस्टम के लिए माउंट के बारे में जानकारी को संयोजित करना है।

अधिक जानकारी के लिए मेरा उत्तर "केवल बिन्दुओं को सूचीबद्ध करें" देखें


तो /proc/self/mountinfoशामिल कर सकते हैं लाइनों की तरह 2 1 8:1 /a /b rw - ext4 /dev/sda1 rw,errors=remount-roहै, तो लिनक्स सबसे निश्चित रूप से करता है बाँध माउंट बारे में कुछ जानकारी रखने के लिए।
20

नहीं। मेरे दूसरे उदाहरण को देखें। यह जानकारी रखता है कि कौन सी फाइलसिस्टम माउंट की गई थी और फाइलसिस्टम रूट के सापेक्ष कौन सा रास्ता माउंट किया गया था । तो के लिए mount --bind /home/melab /mntजिसके परिणामस्वरूप लाइन निम्नलिखित आधार पर की है जिस पर से किसी कैसा लग सकता है /homeऔर /home/melab: एक माउंटप्वाइंट है 3 1 8:1 /home/melab /mnt rw - ext4 /dev/sda1 rw, 3 1 8:2 /melab /mnt rw - ext4 /dev/sda2 rw,3 1 8:3 / /mnt rw - ext4 /dev/sda3 rw
cg909

यह सच है कि /चौथे कॉलम में कुछ अलग होना अक्सर एक बाँध माउंट को इंगित करता है। लेकिन यह एक Btrfs सबवोल्यूम भी हो सकता है।
cg909

है /dev/sda3पर रखा जाना चाहिए /home/melab?
मेलब

हाँ। मेरे उदाहरण में मैं इस्तेमाल किया /dev/sda1के रूप में /, /dev/sda2के रूप में /homeऔर /dev/sda3के रूप में/home/melab
cg909
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.