बाइंड माउंट क्या है?


325

"बाइंड माउंट" क्या है? मैं एक कैसे बनाऊं? ये किस काम के लिए अच्छा है?

मुझे किसी चीज़ के लिए बाइंड माउंट का उपयोग करने के लिए कहा गया है, लेकिन मुझे समझ नहीं आ रहा है कि यह क्या है या इसका उपयोग कैसे किया जाए।


2
mounts और symlinks के बीच उपयोगी वैकल्पिक स्पष्टीकरण: quora.com/…
चार्ली पार्कर

जवाबों:


564

बाइंड माउंट क्या है?

एक बांध माउंट एक निर्देशिका पेड़ का एक वैकल्पिक दृश्य है। शास्त्रीय रूप से, बढ़ते निर्देशिका ट्री के रूप में संग्रहण डिवाइस का दृश्य बनाता है। इसके बजाय एक बांध माउंट एक मौजूदा निर्देशिका ट्री लेता है और इसे एक अलग बिंदु के तहत प्रतिकृति करता है। बाइंड माउंट में निर्देशिका और फाइलें मूल के समान हैं। एक तरफ किसी भी संशोधन को तुरंत दूसरी तरफ परिलक्षित किया जाता है, क्योंकि दोनों दृश्य समान डेटा दिखाते हैं।

उदाहरण के लिए, लिनक्स कमांड जारी करने के बाद

mount --bind /some/where /else/where

निर्देशिकाओं /some/whereऔर /else/whereएक ही सामग्री है।

एक हार्ड लिंक या प्रतीकात्मक लिंक के विपरीत, एक बाइंड माउंट फाइलसिस्टम पर संग्रहीत को प्रभावित नहीं करता है। यह लाइव सिस्टम की एक संपत्ति है।

मैं बाइंड माउंट कैसे बनाऊं?

bindfs

bindfsफाइल सिस्टम एक है फ्यूज फाइल सिस्टम है जो एक निर्देशिका वृक्ष के एक दृश्य पैदा करता है। उदाहरण के लिए, कमांड

bindfs /some/where /else/where

/else/whereएक माउंट बिंदु बनाता है जिसके तहत सामग्री /some/whereदिखाई देती है।

चूँकि bindfs एक अलग फाइल सिस्टम है, फाइलें /some/where/fooऔर /else/where/fooअनुप्रयोगों के लिए अलग-अलग फाइलों के रूप में दिखाई देती हैं (bindfs filesystem का अपना st_devमूल्य है)। एक तरफ कोई परिवर्तन "जादुई" है दूसरी तरफ परिलक्षित होता है, लेकिन तथ्य यह है कि फाइलें एक ही हैं केवल स्पष्ट है जब कोई जानता है कि कैसे bindfs संचालित होता है।

Bindfs को माउंट पॉइंट्स का कोई ज्ञान नहीं है, इसलिए यदि कोई माउंट पॉइंट अंडर है /some/where, तो यह केवल एक अन्य डायरेक्ट्री के रूप में दिखाई देता है /else/where। किसी फ़ाइल सिस्टम के नीचे माउंट या अनमाउंट करना संगत निर्देशिका के परिवर्तन के रूप में /some/whereप्रकट होता है /else/where

Bindfs कुछ फ़ाइल मेटाडेटा को बदल सकते हैं: यह फ़ाइलों के लिए नकली अनुमतियाँ और स्वामित्व दिखा सकता है। देखें मैनुअल जानकारी के लिए, और उदाहरण के लिए नीचे देखें।

एक bindfs फाइल सिस्टम को एक गैर-रूट उपयोगकर्ता के रूप में माउंट किया जा सकता है, आपको केवल FUSE फाइल सिस्टम को माउंट करने के लिए विशेषाधिकार की आवश्यकता होती है। आपके वितरण के आधार पर, इस fuseसमूह में होने की आवश्यकता हो सकती है या सभी उपयोगकर्ताओं को अनुमति दी जा सकती है। FUSE फ़ाइल सिस्टम को अनमाउंट fusermount -uकरने के लिए umount, उदाहरण के लिए, का उपयोग करें

fusermount -u /else/where

nullfs

FreeBSD nullfsफाइलसिस्टम प्रदान करता है जो एक फाइलसिस्टम का एक वैकल्पिक दृश्य बनाता है। निम्नलिखित दो आदेश समतुल्य हैं:

mount -t nullfs /some/where /else/where
mount_nullfs /some/where /else/where

या तो आदेश जारी करने के बाद, /else/whereएक माउंट बिंदु बन जाता है जिस पर सामग्री /some/whereदिखाई देती है।

चूँकि nullfs एक अलग फाइल सिस्टम है, फाइलें /some/where/fooऔर /else/where/fooअनुप्रयोगों के लिए अलग-अलग फाइलों के रूप में दिखाई देती हैं (nullfs filesystem का अपना st_devमूल्य है)। एक तरफ कोई भी परिवर्तन "जादुई रूप से" दूसरी तरफ परिलक्षित होता है, लेकिन तथ्य यह है कि फाइलें समान हैं केवल स्पष्ट है जब कोई जानता है कि कैसे नल संचालित होता है।

FUSE बाइंडफ़ेट्स के विपरीत, जो डायरेक्टरी ट्री के स्तर पर कार्य करता है, फ़्रीबीएसडी के नुल्फ़्स कर्नेल में गहराई से कार्य करता है, इसलिए अंडर माउंट पॉइंट्स /else/whereदिखाई नहीं देते हैं: केवल उसी माउंट पॉइंट का हिस्सा है, /some/whereजैसा कि नीचे दर्शाया गया है /else/where

Nullfs फाइल सिस्टम अन्य BSD वेरिएंट (OS X, OpenBSD, NetBSD) के तहत उपयोग करने योग्य हो सकता है, लेकिन इसे डिफ़ॉल्ट सिस्टम के भाग के रूप में संकलित नहीं किया गया है।

लिनक्स बाँध माउंट

लिनक्स के तहत, बाइंड माउंट एक कर्नेल सुविधा के रूप में उपलब्ध हैं। आप कमांड लाइन विकल्प या आरोह विकल्प में mountसे किसी एक को कमांड के साथ बना सकते हैं । निम्नलिखित दो आदेश समतुल्य हैं:--bindbind

mount --bind /some/where /else/where
mount -o bind /some/where /else/where

यहां, "डिवाइस" /some/whereएक डिस्क विभाजन नहीं है, जैसे ऑन-डिस्क फाइल सिस्टम के मामले में, लेकिन मौजूदा निर्देशिका। माउंट पॉइंट /else/whereहमेशा की तरह एक मौजूदा डायरेक्टरी होना चाहिए। ध्यान दें कि कोई फ़ाइल सिस्टम प्रकार या तो निर्दिष्ट नहीं किया गया है: बाइंड माउंट बनाने से फाइल सिस्टम ड्राइवर शामिल नहीं होता है, यह कर्नेल डेटा संरचनाओं को मूल माउंट से कॉपी करता है।

mount --bindगैर-निर्देशिका पर एक गैर-निर्देशिका बढ़ते का भी समर्थन करें: /some/whereएक नियमित फ़ाइल हो सकती है (जिस स्थिति में /else/whereएक नियमित फ़ाइल भी होने की आवश्यकता है)।

एक लिनक्स बाइंड माउंट ज्यादातर मूल से अप्रभेद्य है। कमांड df -T /else/whereएक ही डिवाइस और उसी फाइलसिस्टम के प्रकार को दिखाता है df -T /some/where। फाइलें /some/where/fooऔर /else/where/fooअप्रभेद्य हैं, जैसे कि वे कड़ी थीं। यह अनमाउंट करना संभव है /some/where, जिस स्थिति में /else/whereमाउंटेड रहता है।

पुरानी गुठली के साथ (मुझे ठीक से पता नहीं है कि कब, मुझे कुछ 3.x तक लगता है), बाइंड माउंट्स वास्तव में मूल से अप्रभेद्य थे। हाल की कर्नेल बाइंड माउंट्स को ट्रैक करते हैं और पीआईडी ​​/ माउंटिनफो के माध्यम से जानकारी को उजागर करते हैं, जो findmntबाइंड माउंट को इंगित करने की अनुमति देता है

आप बाइंड माउंट प्रविष्टियां डाल सकते हैं /etc/fstab। विकल्पों में बस bind(या rbindआदि) शामिल हैं, साथ में कोई अन्य विकल्प जो आप चाहते हैं। "डिवाइस" मौजूदा पेड़ है। फाइलसिस्टम कॉलम में समाहित हो सकता है ( noneया bindइसे अनदेखा किया गया है, लेकिन फाइलसिस्टम नाम का उपयोग करना भ्रामक होगा)। उदाहरण के लिए:

/some/where /readonly/view none bind,ro

यदि अंडर माउंट पॉइंट्स हैं /some/where, तो उनकी सामग्री अंडर नहीं दिखाई देती है /else/where। इसके बजाय bind, आप उपयोग कर सकते हैं rbind, नीचे दिए गए आरोह बिंदु को भी दोहरा सकते हैं /some/where। उदाहरण के लिए, यदि /some/where/mntमाउंट बिंदु है तो

mount --rbind /some/where /else/where

के बराबर है

mount --bind /some/where /else/where
mount --bind /some/where/mnt /else/where/mnt

इसके अलावा, लिनक्स mounts को साझा , गुलाम , निजी या अविश्वसनीय के रूप में घोषित करने की अनुमति देता है । यह प्रभावित करता है कि क्या माउंट ऑपरेशन एक बाइंड माउंट के तहत परिलक्षित होता है जो माउंट बिंदु को दोहराता है। अधिक जानकारी के लिए, कर्नेल प्रलेखन देखें ।

लिनक्स mounts को स्थानांतरित करने का एक तरीका भी प्रदान करता है: जहां --bindप्रतियां, --moveएक माउंट बिंदु को स्थानांतरित करता है ।

दो बाइंड-माउंटेड निर्देशिकाओं में विभिन्न माउंट विकल्प होना संभव है। हालांकि, एक विचित्रता है: बाइंड माउंट करना और माउंट विकल्प सेट करना परमाणु रूप से नहीं किया जा सकता है, उन्हें दो सफल संचालन होना चाहिए। (पुराने कर्नेल ने इसकी अनुमति नहीं दी।) उदाहरण के लिए, निम्नलिखित कमांड केवल-पढ़ने के लिए दृश्य बनाते हैं, लेकिन समय की एक छोटी खिड़की होती /else/whereहै, जिसके दौरान रीड-राइट होता है:

mount --bind /some/where /else/where
mount -o remount,ro,bind /else/where

मैं काम करने के लिए बाध्य नहीं मिल सकता है!

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

बक्सों का इस्तेमाल करें

पढ़ें- केवल दृश्य

यह एक फाइलसिस्टम का केवल-पढ़ने का दृश्य बनाने के लिए उपयोगी हो सकता है, सुरक्षा कारणों से या सुरक्षा की एक परत के रूप में यह सुनिश्चित करने के लिए कि आप गलती से इसे संशोधित नहीं करेंगे।

बाइंडफ़्स के साथ:

bindfs -r /some/where /mnt/readonly

लिनक्स के साथ, सरल तरीका:

mount --bind /some/where /mnt/readonly
mount -o remount,ro,bind /mnt/readonly

यह समय के एक छोटे से अंतराल को छोड़ देता है जिसके दौरान /mnt/readonlyपढ़ा-लिखा होता है। यदि यह एक सुरक्षा चिंता है, तो पहले एक निर्देशिका में बाइंड माउंट बनाएं जिसे केवल रूट एक्सेस कर सकता है, इसे केवल पढ़ने के लिए बना सकता है, फिर इसे सार्वजनिक माउंट बिंदु पर ले जा सकता है। नीचे दिए गए स्निपेट में, ध्यान दें कि यह महत्वपूर्ण है कि /root/private(आरोह बिंदु के ऊपर की निर्देशिका) निजी है; मूल अनुमतियाँ /root/private/mntअप्रासंगिक हैं क्योंकि वे माउंट पॉइंट के पीछे छिपे हुए हैं।

mkdir -p /root/private/mnt
chmod 700 /root/private
mount --bind /some/where /root/private/mnt
mount -o remount,ro,bind /root/private/mnt
mount --move /root/private/mnt /mnt/readonly

उपयोगकर्ताओं और समूहों को फिर से भरना

फाइलसिस्टम उपयोगकर्ताओं और समूहों को उनकी संख्यात्मक आईडी द्वारा रिकॉर्ड करते हैं। कभी-कभी आप कई प्रणालियों के साथ समाप्त होते हैं जो एक ही व्यक्ति को अलग-अलग उपयोगकर्ता आईडी प्रदान करते हैं। यह नेटवर्क एक्सेस की समस्या नहीं है, लेकिन यह उपयोगकर्ता आईडी को तब बेकार कर देता है जब आप डिस्क पर एक सिस्टम से दूसरे सिस्टम पर डेटा ले जाते हैं। मान लीजिए कि आपके पास एक मल्टी-यूजर फाइल सिस्टम (जैसे ext4, btrfs, zfs, UFS,…) के साथ बनाई गई एक डिस्क है, जहां ऐलिस के पास यूजर आईडी 1000 है और बॉब के पास यूजर आईडी 1001 है, और आप उस डिस्क को सुलभ बनाना चाहते हैं ऐसी प्रणाली जहां एलिस की यूजर आईडी 1001 है और बॉब के पास यूजर आईडी 1000 है। यदि आप डिस्क को सीधे माउंट करते हैं, तो एलिस की फाइलें बॉब के स्वामित्व में दिखाई देंगी (क्योंकि उपयोगकर्ता आईडी 1001 है) और बॉब की फाइलें एलिस के स्वामित्व में दिखाई देंगी (क्योंकि यूजर आईडी 1000) है।

आप उपयोगकर्ता आईडी को रीमैप करने के लिए bindfs का उपयोग कर सकते हैं। पहले एक निजी निर्देशिका में डिस्क विभाजन को माउंट करें, जहां केवल रूट इसे एक्सेस कर सकता है। फिर एक सार्वजनिक क्षेत्र में एक बिंदास दृश्य बनाएं, जिसमें यूजर आईडी और ग्रुप आईडी रीमैपिंग हो जो कि ऐलिस और बॉब की यूजर आईडी और ग्रुप आईडी स्वैप करती है।

mkdir -p /root/private/alice_disk /media/alice_disk
chmod 700 /root/private
mount /dev/sdb1 /root/private/alice_disk
bindfs --map=1000/1001:1001/1000:@1000/1001:@1001/1000 /root/private/alice_disk /media/alice_disk

देखें कि गैर-बूट किए गए सिस्टम के उपयोगकर्ता के होम फोल्डर पर कोई अनुमन्य रूप से कैसे फाइल एक्सेस करता है? और माउंट - अन्य उपयोगकर्ता को अपने आप में एक और उदाहरण के रूप में माउंट करें

जेल या कंटेनर में चढ़ना

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

उदाहरण के लिए, मान लीजिए कि एक मशीन एक सेवा चलाती है /usr/sbin/somethingdजिसके तहत केवल डेटा तक पहुंच होनी चाहिए /var/lib/something। सबसे छोटी डायरेक्टरी ट्री जिसमें ये दोनों फाइलें होती हैं, वह रूट है। सेवा को कैसे सीमित किया जा सकता है? एक संभावना यह है कि उन सभी फाइलों के लिए कड़ी कड़ी बनाई जाए जिनके तहत सेवा की जरूरत है (कम से कम /usr/sbin/somethingdऔर कई साझा लाइब्रेरी) /var/lib/something। लेकिन इस (हार्ड लिंक जब भी एक फ़ाइल उन्नत बनाया है अद्यतन करने की आवश्यकता) बोझिल है, और अगर काम नहीं करता है /var/lib/somethingऔर /usrविभिन्न फ़ाइल सिस्टम पर हैं। एक बेहतर समाधान एक तदर्थ रूट बनाने और mounts का उपयोग करने के साथ इसे आबाद करने के लिए है:

mkdir /run/something
cd /run/something
mkdir -p etc/something lib usr/lib usr/sbin var/lib/something
mount --bind /etc/something etc/something
mount --bind /lib lib
mount --bind /usr/lib usr/lib
mount --bind /usr/sbin usr/sbin
mount --bind /var/lib/something var/lib/something
mount -o remount,ro,bind etc/something
mount -o remount,ro,bind lib
mount -o remount,ro,bind usr/lib
mount -o remount,ro,bind usr/sbin
chroot . /usr/sbin/somethingd &

लिनक्स का माउंट नेमस्पेस चौराहों को सामान्य करता है। बाइंड माउंट्स हैं कि कैसे नामस्थानों को लचीले तरीकों से आबाद किया जा सकता है। देखें बनाना एक प्रक्रिया उसी फ़ाइल नाम के लिए एक अलग फ़ाइल को पढ़ने के लिए एक उदाहरण के लिए।

एक अलग वितरण चल रहा है

चेरोट्स का एक और उपयोग एक निर्देशिका में एक अलग वितरण को स्थापित करने और इससे प्रोग्राम चलाने के लिए होता है, तब भी जब उन्हें हार्ड-कोडेड पथों पर फ़ाइलों की आवश्यकता होती है जो मौजूद नहीं हैं या आधार प्रणाली पर अलग-अलग सामग्री है। यह उपयोगी हो सकता है, उदाहरण के लिए, 64-बिट सिस्टम पर 32-बिट वितरण स्थापित करने के लिए, जो मिश्रित पैकेजों का समर्थन नहीं करता है, संगतता का परीक्षण करने के लिए वितरण या अन्य वितरणों के पुराने रिलीज को स्थापित करने के लिए, परीक्षण के लिए एक नया रिलीज स्थापित करने के लिए। एक स्थिर आधार प्रणाली आदि को बनाए रखते हुए नवीनतम सुविधाएँ, देखें कि मैं 64-बिट डेबियन / उबंटू पर 32-बिट प्रोग्राम कैसे चलाऊं? डेबियन / उबंटू पर एक उदाहरण के लिए।

मान लीजिए कि आपके पास निर्देशिका के अंतर्गत आपके वितरण के नवीनतम पैकेजों की स्थापना है /f/unstable, जहां आप उस निर्देशिका पर स्विच करके प्रोग्राम चलाते हैं chroot /f/unstable। इस संस्थापन से होम डाइरेक्टरी उपलब्ध करने के लिए, उन्हें चुरोट में बांधें:

mount --bind /home /f/unstable/home

कार्यक्रम schroot यह स्वचालित रूप से करता है।

माउंट बिंदु के पीछे छिपी फाइलों तक पहुंचना

जब आप किसी डायरेक्टरी पर फाइलसिस्टम माउंट करते हैं, तो यह इस बात को छिपा देता है कि डायरेक्टरी के पीछे क्या है। जब तक डायरेक्टरी अनमाउंट नहीं होती तब तक उस डायरेक्टरी की फाइलें दुर्गम हो जाती हैं। क्योंकि BSD nullfs और Linux बाइंड माउंट माउंट इन्फ्रास्ट्रक्चर की तुलना में निचले स्तर पर काम करते हैं, इसलिए nullfs माउंट या फाइलसिस्टम का बाइंड माउंट उन डायरेक्ट्रीज़ को उजागर करता है जो मूल में सबमोट्स के पीछे छिपे थे।

उदाहरण के लिए, मान लीजिए कि आपके पास एक tmpfs फाइल सिस्टम है, जो माउंट किया गया है /tmp। अगर /tmptmpfs फाइल सिस्टम बनाये जाने के दौरान फाइलें थीं , तो ये फाइलें अभी भी प्रभावी रूप से दुर्गम हैं, लेकिन डिस्क स्थान तक ले जा सकती हैं। Daud

mount --bind / /mnt

(लिनक्स) या

mount -t nullfs / /mnt

(FreeBSD) पर रूट फाइल सिस्टम का एक दृश्य बनाने के लिए /mnt। निर्देशिका /mnt/tmpरूट फ़ाइल सिस्टम से एक है।

NFS विभिन्न रास्तों पर निर्यात करता है

कुछ NFS सर्वर (जैसे NFSv4 से पहले लिनक्स कर्नेल NFS सर्वर) हमेशा एक निर्देशिका निर्यात करते समय वास्तविक निर्देशिका स्थान का विज्ञापन करते हैं। अर्थात्, जब कोई ग्राहक अनुरोध करता है server:/requested/location, तो सर्वर स्थान पर पेड़ की सेवा करता है /requested/location। यह कभी-कभी ग्राहकों को अनुरोध करने की अनुमति देने के लिए वांछनीय होता है, /request/locationलेकिन वास्तव में इसके तहत फाइलों की सेवा करता है /actual/location। यदि आपका NFS सर्वर वैकल्पिक स्थान की सेवा का समर्थन नहीं करता है, तो आप अपेक्षित अनुरोध के लिए बाइंड माउंट बना सकते हैं, जैसे

/requested/location *.localdomain(rw,async)

में /etc/exportsऔर निम्नलिखित में /etc/fstab:

/actual/location /requested/location bind bind

प्रतीकात्मक लिंक के लिए एक विकल्प

कभी-कभी आप एक फ़ाइल बनाने के लिए सांकेतिक लिंक करना चाहते हैं /some/where/is/my/fileके तहत दिखाई /else/where, लेकिन आवेदन का उपयोग करता है fileसांकेतिक लिंक का विस्तार और खारिज कर दिया /some/where/is/my/file। एक बाँध माउंट इस को हल करने के कर सकते हैं: बाँध माउंट /some/where/is/myकरने के लिए /else/where/is/my, और उसके बाद realpathरिपोर्ट करेंगे /else/where/is/my/fileके नीचे होने की /else/where, के तहत नहीं /some/where

बाइंड माउंट्स के साइड इफेक्ट्स

पुनरावर्ती निर्देशिका ट्रैवर्सल्स

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

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

Traversals कि फाइल सिस्टम सीमा पर रोक (जैसे find -xdev, rsync -x, du -x, ...) स्वचालित रूप से, जब वे एक bindfs मुठभेड़ या nullfs माउंट बिंदु रोक क्योंकि कि माउंट बिंदु एक अलग फाइल सिस्टम है जाएगा। लिनक्स बाइंड माउंट्स के साथ, स्थिति थोड़ी अधिक जटिल है: एक फाइलसिस्टम सीमा केवल तभी होती है जब बाइंड माउंट एक अलग फाइल सिस्टम को ग्राफ्ट कर रहा है, न कि यदि यह एक ही फाइल सिस्टम के दूसरे हिस्से को ग्राफ्ट कर रहा है।

बाँध mounts से परे जा रहे हैं

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

दृश्यमान फ़ाइलों को फ़िल्टर करें

  • क्लैम्फ़्स - जब वे पढ़े जाते हैं तो वायरस स्कैनर के माध्यम से फाइलें चलाते हैं
  • Filterfs - एक फाइल सिस्टम के कुछ हिस्सों को छिपाते हैं
  • rofs - केवल पढ़ने के लिए दृश्य। इसी तरह bindfs -r, बस थोड़ा और हल्का।
  • संघ आरोह - एक निर्देशिका के तहत कई फाइल सिस्टम ( शाखाओं को कहा जाता है ) प्रस्तुत करें: यदि tree1इसमें शामिल हैं fooऔर tree2शामिल हैं, barतो उनके संघ दृश्य में fooऔर दोनों शामिल हैं bar। नई फाइलें एक विशिष्ट शाखा, या अधिक जटिल नियमों के अनुसार चुनी गई शाखा को लिखी जाती हैं। इस अवधारणा के कई कार्यान्वयन हैं, जिनमें शामिल हैं:

फ़ाइल नाम और मेटाडेटा संशोधित करें

  • ciopfs - केस-असंवेदनशील फ़ाइलनाम (विंडोज फाइल सिस्टम को माउंट करने के लिए उपयोगी हो सकता है)
  • convmvfs - वर्ण सेट ( उदाहरण ) के बीच फ़ाइल नाम बदलें
  • posixovl - VFAT ( उदाहरण ) जैसे अधिक प्रतिबंधित फाइल सिस्टम पर यूनिक्स फाइलनाम और अन्य मेटाडेटा (अनुमति, स्वामित्व, ...) स्टोर करें।

परिवर्तित फ़ाइल सामग्री देखें

सामग्री संग्रहीत करने के तरीके को संशोधित करें

  • चिरौंफ़्स - कई अंतर्निहित भंडारण पर फ़ाइलों की नकल करें ( डायरेक्टरी ट्री स्तर पर RAID -1 )
  • copyfs - फाइलों के सभी संस्करणों की प्रतियां रखें
  • encfs - एन्क्रिप्ट फ़ाइलें
  • pcachefs - धीमी रिमोट फाइल सिस्टम के लिए डिस्क कैश लेयर
  • simplecowfs - मेमोरी में दिए गए दृश्य के माध्यम से स्टोर परिवर्तन, मूल फाइलों को बरकरार रखना
  • Wayback - फ़ाइलों के सभी संस्करणों की प्रतियां रखें

1
कोई इसे सिस्टमड के
dothebart

1
क्या करता mount --bind /dir1 /dir1है? यह उस मामले से कैसे अलग है जहां स्रोत और बढ़ते का लक्ष्य अलग हैं?
मार्क

मैंने linux 5.0 का उपयोग करके / proc / self / mountinfo में कोई रिकॉर्ड नहीं देखा। कर्नेल मुझे नहीं बताता कि यह बाइंड माउंट है या नहीं। और एक प्रक्रिया आसानी से चुरोट को तोड़ सकती है, माउंट नेमस्पेस द्वारा अलगाव किया जाना है।
炸鱼

@ @ Ix 德里克 मुझे लगता है कि जुड़े हुए सवाल unix.stackexchange.com/questions/295525/… पते हैं /proc/self/mountinfo। चुरोट के रूप में, इसे अलगाव के लिए इस्तेमाल किया जा सकता है, लेकिन अपने दम पर नहीं। आपको नामस्थानों को माउंट करने की आवश्यकता नहीं है : चेरोट फाइलसिस्टम नामस्थान भाग के लिए पर्याप्त है। आपको यह सुनिश्चित करने की आवश्यकता है कि चेरोट में कोई भी प्रक्रिया चेरोट के बाहर की प्रक्रिया के समान उपयोगकर्ता के रूप में नहीं चलती है।
गिल्स

@Mark Bind- अपने आप में एक निर्देशिका बढ़ते बहुत उपयोगी नहीं है। मुझे लगता है कि आप इसका उपयोग एक निश्चित निर्देशिका के तहत फाइल किए गए सिस्टम को छिपाने के लिए कर सकते हैं, लेकिन मैं उस समय के बारे में नहीं सोच सकता जब मैं विशेष रूप से ऐसा करना चाहता था।
गिल्स

-1

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


यह एक बाँध माउंट का उपयोग करने के तरीकों में से एक है, लेकिन स्वयं में बाँध माउंट का कंटेनर से कोई लेना-देना नहीं है। मैं अपने उत्तर में इसका उल्लेख करता हूं, लेकिन "कंटेनर" के बजाय "जेल" नाम के तहत; "कंटेनर" जोड़ना एक मूल्यवान संपादन होगा (मैं इसे करूँगा)। यह भी एक खराब विवरण है: क्यों उल्लेख किया है कि बाहर किए गए परिवर्तन भी दूसरे तरीके के दौर का उल्लेख किए बिना अंदर उपलब्ध हैं?
गिल्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.