अगर एक एनएफएस रिमोट एक निर्देशिका निर्यात कर रहा है तो मैं कैसे निर्धारित कर सकता हूं?


11

मेरी स्क्रिप्ट में, मेरे पास स्टेटस की कई परतें हैं:

  1. रिमोट उपलब्ध है (पिंग)
  2. दूरस्थ NFS सेवा सक्रिय है
  3. दूरस्थ NFS एक निश्चित निर्देशिका का निर्यात कर रहा है
  4. दूरस्थ NFS आरोहित है (माउंट)

(2) और (3) के लिए, मेरा मानना rcpinfoहै कि सबसे अच्छी शर्त है। (2) के लिए, हालांकि, मैं यह पता नहीं लगा सकता कि बिना सबस्क्रिप्शन (जो कि इस एप्लिकेशन के लिए स्वीकार्य नहीं है) को शुरू किए बिना अपनी क्वेरी को एनएफएस सेवा में कैसे संकीर्ण किया जाए। (3) के लिए, मुझे यकीन नहीं है कि यह जानकारी दूरस्थ रूप से भी उपलब्ध है (बिना sshआईएनजी के, निश्चित रूप से)।

मैं आरएचईएल 6 पर काम कर रहा हूं और उन कार्यक्रमों तक पहुंच नहीं है जो मानक वितरण में शामिल नहीं हैं।

जवाबों:


16

3 के लिए) आप शायद उपयोग करना चाहते हैं showmount -e remote_nfs_serverजो दिखाता है कि Remote_nfs_server ने कुछ भी निर्यात किया है।

और 2 के लिए) यदि आप एक shubshell का उपयोग नहीं करना चाहते हैं और जानते हैं कि दूरस्थ सर्वर NFSv3 या NFSv4 चलाता है और यदि TCP या UDP, तो आप इसके लिए विशेष रूप से rpcinfo के साथ क्वेरी कर सकते हैं:
rpcinfo -u remote_nfs_server nfs 3 UFSv3 के लिए UDP के माध्यम से और
rpcinfo -t remote_nfs_server nfs 4NFSv4 के लिए TCP के माध्यम से

4 के लिए) आप देख सकते हैं कि क्या फ़ोल्डर एक दूरस्थ दूरस्थ फाइल सिस्टम है


अग्रिम जानकारी:


showmount -r remoteमुझे बताएगा कि क्या कुछ भीremote निर्यात हो रहा है , लेकिन क्या मेरे लिए यह निर्धारित करने का कोई तरीका है कि क्या remote:/mnt/dirबिना सबस्क्रिप्शन (यानी एक पाइपलाइन) शुरू किए बिना निर्यात किया जा रहा है?
सीन एलाड

showmount -e remoteआपको बताएगा कि क्या remoteकुछ निर्यात किया गया है। showmount -rकेवल आपको एक त्रुटि संदेश देगा क्योंकि वह विकल्प मौजूद नहीं है। आप मूल रूप से showmount आउटपुट में एक नियमित अभिव्यक्ति के लिए grep से मेल करने वाले शेल सबस्ट्रिंग का उपयोग करने का प्रयास कर सकते हैं। शायद एक नज़र है जैसे stackoverflow.com/questions/12619720/…
doktor5000

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

-rविकल्प के साथ मेरी गलती बनाम -e- यही मेरा मतलब है :) पहले 'प्रयास दृष्टिकोण' का सुझाव दिया गया है। मुझे यह विशेष रूप से पसंद नहीं है, लेकिन यह एक वास्तविक विकल्प की तरह लग रहा है।
शॉन एलाड

5

आप showmount -e <server># 3 के कुछ पहलुओं के लिए उपयोग कर सकते हैं । जब निर्यात सरल होते हैं, तो यह कम से कम यह सुझाव देता है कि एक निर्देशिका (या शायद ऐसी निर्देशिका का एक माता-पिता) निर्यात किया जाता है।

# showmount -e server
/export                               (everyone)

# 2 के लिए, मुझे यकीन नहीं है कि आप क्या देख रहे हैं। यदि आप NFSv3 का उपयोग कर रहे हैं, तो आप कम से कम आरोही और nfs की तलाश में होंगे (और कुछ मामलों में लॉक मैनेजरों की पुष्टि करना चाहते हैं)। आप किसी भी स्पष्ट रूप से rpcinfo के साथ जांच कर सकते हैं जैसा कि आप कहते हैं।

# rpcinfo -t server mountd 3
program 100005 version 3 ready and waiting

showmount -r remoteमुझे बताएगा कि क्या कुछ भीremote निर्यात हो रहा है , लेकिन क्या मेरे लिए यह निर्धारित करने का कोई तरीका है कि क्या remote:/mnt/dirबिना सबस्क्रिप्शन (यानी एक पाइपलाइन) शुरू किए बिना निर्यात किया जा रहा है?
सीन एलाड

यह आपके निपटान में सुविधाओं पर निर्भर करता है। आपकी स्क्रिप्ट किसमें लिखी गई है? एक अलग शेल को शुरू करने की तुलना में एक अलग निष्पादन योग्य (शोमाउंट) समस्या क्यों शुरू हो रही है?
बाउलऑफर्ड

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

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

मैं आपसे वादा कर सकता हूं कि यह उतना आसान नहीं है जितना आप तुरंत सोचेंगे - जब यह बंद हो जाता है, तो rpcinfoकुछ भी जवाब नहीं देता है , लेकिन SIGKILL (जो एक गलतफहमी है - ओएस जाहिर तौर पर इस प्रक्रिया को मारता है)। किसी भी दर पर, यह अभी भी शुरू करने के लिए एक खोल शुरू करेगा rpcinfo- अंतर्निहित समस्या बनी हुई है।
सीन एलाड

0

सभी छद्म रूट NFS-V4 निर्यात निर्देशिकाओं को सूचीबद्ध करें

ls /net/ip-addr-nfs-server

एक अन्य सूत्र में मेरे उत्तर की जाँच करें


एक के लिए /netकाम करने के लिए माउंट, /etc/auto.netस्क्रिप्ट स्थापित करना होगा कि सर्वर एक इसी निर्यात है। यह showmountकमांड का उपयोग करता है । यदि सर्वर में केवल NFSv4 है, तो यह काम नहीं करेगा (शो-टाइम प्रदर्शित करता है RPC: Program not registered, और /net/serverबस रिपोर्ट करेगा File not found)
Ale
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.