क्या प्रतीकात्मक लिंक के विकल्प के रूप में माउंट-बिंद का उपयोग करने से कोई कमियां हैं?


55

सिमलिंक की तरह कैसे काम करता है में सीमाएं हैं ls, mvऔर cpविपरीत कवच की तरह आदेशों की पहल की वजह से उन पर काम कर सकते हैं cd, इन कार्यों के बारे में कैसे उपयोगकर्ता तार्किक पथ के संबंध में निर्देशिका पहुँचा जानकारी नहीं है (संबंधित देखने के बाद )। ऐसा लगता है कि mount --bindविकल्प का उपयोग करने के बजाय इसके चारों ओर प्राप्त कर सकते हैं, सांबा और अन्य फ़ाइल सर्वरों के साथ बढ़ी हुई कार्यक्षमता और संगतता की पेशकश करते हैं क्योंकि घुड़सवार निर्देशिका में एक लिंक के बजाय दो स्वतंत्र भौतिक पथ होंगे।

मैं mount --bindविकल्प का उपयोग करके अपने सभी प्रतीकात्मक लिंक को संदर्भों के साथ बदलना चाहूंगा लेकिन इसका मतलब होगा कि fstab में 150 से अधिक अंक बढ़ते हैं। क्या कोई प्रदर्शन मुद्दे हैं जो संभावित रूप से इस या किसी अन्य कमियों से उत्पन्न हो सकते हैं जिन पर मुझे विचार करना चाहिए?


क्या आपने हार्ड लिंक का उपयोग करने पर विचार किया है ?
ire_and_curses

1
@ire_and_curses अधिकांश यूनिक्स जैसी प्रणालियाँ अच्छे कारणों के लिए, (और उन्हीं कारणों के लिए, जहाँ आप कर सकते हैं, वहाँ पर भी आपको उनका उपयोग कभी नहीं करना चाहिए)।
एलिया कगन

3
@ire_and_curses: एलियाह के कथन को स्पष्ट करने के लिए, आप एक निर्देशिका के लिए एक कड़ी नहीं बना सकते (हालाँकि HFS + इसका समर्थन करता है, एक तरह से)। और हार्ड लिंक के एक पुनरावर्ती पेड़ बनाने से दोनों निर्देशिका पथ सिंक में नहीं रहते हैं।
bahamat

जवाबों:


62

के साथ mount --bind, एक निर्देशिका ट्री निर्देशिका पदानुक्रम में दो (या अधिक) स्थानों में मौजूद है। यह कई समस्याओं का कारण बन सकता है। बैकअप और अन्य फ़ाइल प्रतियाँ सभी प्रतियाँ चुनेंगी। यह निर्दिष्ट करना मुश्किल हो जाता है कि आप किसी फ़ाइल सिस्टम की प्रतिलिपि बनाना चाहते हैं: आप दो बार बाइंड-माउंटेड फ़ाइलों की प्रतिलिपि बना लेंगे। साथ खोजों find, grep -r, locate, आदि, सभी प्रतियों को पार करेगा, और इतने पर।

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

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

केवल रूट बाइंड माउंट्स में हेरफेर कर सकता है। उन्हें साधारण साधनों द्वारा नहीं ले जाया जा सकता है; वे अपने स्थान और पूर्वजों की निर्देशिकाओं को बंद कर देते हैं।

सामान्यतया, यदि आप किसी कमांड का प्रतीकात्मक लिंक पास करते हैं, तो कमांड लिंक पर ही कार्य करता है यदि यह फाइलों पर काम करता है, और लिंक के लक्ष्य पर अगर यह फाइल कंटेंट पर काम करता है। यह निर्देशिका के लिए भी जाता है। यह आमतौर पर सही बात है। कुछ आदेशों विकल्पों उदाहरण के लिए, अलग तरह से सांकेतिक लिंक का इलाज करने के लिए है ls -L, cp -d, rsync -l। आप जो कुछ भी करने की कोशिश कर रहे हैं, यह अधिक संभावना है कि बाइंडिंग माउंट सही उपकरण होने की तुलना में सीमलिंक सही उपकरण हैं।


धन्यवाद। मुझे लगता है कि मैं बैकअप, प्रतियां और फ़ाइल खोजों पर प्रभाव पर विचार नहीं कर रहा था। मैं Samba को smb.conf में 'follow symlinks = yes' जोड़कर सिम्बलिंक का पालन करने में सक्षम था, लेकिन इससे सुरक्षा में कोई समझौता नहीं होता है कि कोई सांबा उपयोगकर्ता राइट-फोल्डर और लाभ में 'ln -s / etc' कह सकता है। सिस्टम फ़ाइलों तक पहुँच। मैं इसके चारों ओर एक रास्ता खोजने की कोशिश कर रहा हूं। कृपया मुझे पता है अगर तुम एक का पता है।
मर्तुआरजियो

2
@mrtrujiyo उस आवश्यकता के लिए, मुझे लगता है कि यह एक सांबो सर्वर को चेरोट में चलाने के लिए समझ में आता है, और उस चिरोट के अंदर उन निर्देशिकाओं को बांधना है जिन्हें आप निर्यात करना चाहते हैं। चेरोट की जड़ को बैकअप से वगैरह से बाहर करना सुनिश्चित करें (इस संगठन के साथ, आपको केवल एक टॉपलेवल निर्देशिका को बाहर करने की आवश्यकता है, इसलिए यह रखरखाव में सिरदर्द नहीं है)।
गिल्स एसओ- बुराई को रोकें '21

14

@Gilles ने पहले जो लिखा था, इसके अलावा , यह ध्यान देने योग्य है कि कुछ उपयोगिताओं एक बाइंड-माउंटेड डायरेक्टरी को एक अलग फाइल सिस्टम मान सकती हैं । इसका प्रदर्शन या कार्यक्षमता निहितार्थ हो सकती है यदि प्रोग्राम अब यह नहीं मान सकता है कि एक ही इनोड नंबर एक ही फाइल को संदर्भित करता है (जो ऐसा नहीं करता है, यदि वे अलग-अलग फाइल सिस्टम पर हैं), एक लिंक को लिंक-एट के रूप में अनुकूलित नहीं किया जा सकता है- लक्ष्य-तब-अनलिंक-स्रोत, आदि


धन्यवाद। मैं सोच रहा था कि df और du जैसी सरल उपयोगिताओं बाइंड माउंट के साथ फाइलसिस्टम पर निर्देशिका आकार की गणना कैसे संभालती हैं।
मर्तुर्जियो

1
dfमेरे सिस्टम पर कम से कम GNU डिफ़ॉल्ट रूप से बाइंड-माउंटेड निर्देशिकाओं पर विचार नहीं करता है, लेकिन यदि विशेष रूप से पूछा जाए, तो इसे उसी फाइल सिस्टम के दूसरे माउंट के रूप में माना जाता है। (जो, अगर आप मुझसे पूछें, df के उद्देश्य के साथ एक उपकरण के लिए अपेक्षित व्यवहार है।)
एक CVn

6

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

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


1

मैं बाँध की कोशिश की है कुछ संकुल के साथ स्थापित करने के लिए एक समस्या वैकल्पिक हल के लिए माउंट pacman(archlinux, के बारे में है कि यहाँ और अधिक एक प्रणाली है जहाँ पर) /var(और साथ ही /homeऔर /usr/local) थे सिमलिंक (फ़ाइल सिस्टम के पार: एसएसडी SATA के लिए)।

यह पहली बार में बहुत अच्छा लग रहा था, लेकिन जैसा कि गिल्स ने बताया, लाइन में locateहोने के बावजूद हमेशा एक ही फाइल के लिए कई परिणाम दिए ।PRUNE_BIND_MOUNTS = "yes"/etc/updatedb.conf

$ locate \*/findutils-4.4.2 | xargs ls -ldiog
33816600 drwxr-xr-x 12 4096 Dec  3 00:05 /SHARED/LOCALS/Manjaro/src/findutils-4.4.2
33816600 drwxr-xr-x 12 4096 Dec  3 00:05 /usr/local/src/findutils-4.4.2

थोड़ा और खोदने पर, मैंने पाया कि अधिक जटिल बाँध माप सही ढंग से काटे जा सकते हैं:

$ sudo mount --bind /SHARED/LOCALS/common/ /usr/local/common
$ findmnt | fgrep -n sdb
34:├─/SHARED/LOCALS                  /dev/sdb5           ext4           rw,relatime,data=ordered
35:│ └─/SHARED/LOCALS/Manjaro/common /dev/sdb5[/common]  ext4            rw,relatime,data=ordered
36:├─/usr/local                      /dev/sdb5[/Manjaro] ext4            rw,relatime,data=ordered
37:│ └─/usr/local/common             /dev/sdb5[/common]  ext4            rw,relatime,data=ordered
38:├─/SHARED/HOMES                   /dev/sdb4           ext4            rw,relatime,data=ordered
39:├─/home                           /dev/sdb4[/Manjaro] ext4            rw,relatime,data=ordered
40:├─/SHARED/VARS                    /dev/sdb3           ext4            rw,relatime,data=ordered
41:├─/var                            /dev/sdb3[/Manjaro] ext4            rw,relatime,data=ordered
42:└─/opt                            /dev/sdb5[/opt]     ext4            rw,relatime,data=ordered

$ sudo updatedb --debug-pruning 2>&1 >/dev/null | grep bind
prune_bind_mounts\000
Rebuilding bind_mount_paths:
Matching bind_mount_paths:
Skipping `/SHARED/LOCALS/Manjaro/common': bind mount
Skipping `/usr/local/common': bind mount

$ locate \*/mmedia
/SHARED/LOCALS/common/mmedia

PRUNE_BIND_MOUNT विकल्प के बिना, मुझे 3 परिणाम मिले:

$ sudo sed -i '1 s/yes/no/' /etc/updatedb.conf 
$ sudo updatedb --debug-pruning 2>&1 >/dev/null | grep bind
prune_bind_mounts\000
$ locate \*/mmedia
/SHARED/LOCALS/Manjaro/common/mmedia
/SHARED/LOCALS/common/mmedia
/usr/local/common/mmedia
$ sudo sed -i '1 s/no/yes/' /etc/updatedb.conf 

बाइंड माउंट के साथ एक और मुद्दा:

बेशक, कोई मैन्युअल रूप से बाइंड माउंट्स (मॉनपॉइंट या लक्ष्य) को इसमें जोड़ सकता PRUNEPATHSहै /etc/updatedb.conf

इसके अलावा, mountpointऔर विभिन्न statकमांड या फ़ंक्शंस का उपयोग टूलसिस्टम ट्रैवर्सल को बेहतर बनाने के लिए किया जा सकता है जैसा कि यहां प्रस्तावित है

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