पुनरारंभ किए बिना NFS क्लाइंट को सुदृढ़ करें


10

मैं अपने सर्वर पर काम कर रहा हूं, जिसमें से मैं एनएफएस का उपयोग करके एक निर्देशिका का निर्यात करता हूं। सप्ताह के अंत में या सर्वर रिबूट के कारण, मैं कई बार umountअपने वर्कस्टेशन (जो /etc/fstabबूट पर आरोहित हो जाता है ) में निर्यात फाइल सिस्टम को भूल गया । बीच में मैं umountतथ्य और रिमाउंट के बाद (मैं उपयोग नहीं कर रहा था) में सक्षम था autofs:

umount -fl /data0
mount /data0

लेकिन यह अब काम नहीं करता है।

मैं सर्वर से एक अलग निर्देशिका (माउंट हैंग) पर निर्यात निर्देशिका को माउंट नहीं कर सकता , लेकिन मैं अपने वर्कस्टेशन पर चलने वाली आभासी मशीन पर निर्यात किए गए डीआईआर को माउंट कर सकता हूं।

मैंने जो प्रयास किया है वह ( rmmod) nfsऔर nfsv3मॉड्यूल (जो काम नहीं करेगा ) को हटा रहा है Resource temporarily unavailablelsofरुक जाता है। mountके माध्यम से घुड़सवार कुछ भी नहीं दिखाता है nfs। यह सब संभवत: कई बार 'यूमाउंट-एल' का उपयोग करने का परिणाम है, लेकिन पहले दो बार यह बिना किसी समस्या के काम करता है।

मैंने उस समय के दौरान सर्वर को फिर से शुरू किया है, बिना किसी अंतर के माउंट न कर पाने के कारण। मैंने भी इस्तेमाल किया service nfs-kernel-server restart। मुझे संदेह है कि अगर मैं क्लाइंट वर्कस्टेशन को पुनः आरंभ करता हूं तो सब कुछ सामान्य हो जाएगा।

क्या इससे उबरने का एक तरीका है और रिबूट के बिना मेरे वर्कस्टेशन पर एनएफ़एस क्लाइंट पक्ष को फिर से संगठित करना है?
अगर मैं इसे रिबूट के बिना ठीक नहीं कर सकता हूं, तो क्या मैं इसका उपयोग करना शुरू नहीं करूंगा autofs?

lsof -b अंतिम पंक्तियों के साथ हैंग हो जाता है:

lsof: avoiding readlink(/run/user/1001/gvfs): -b was specified.
lsof: avoiding stat(/run/user/1001/gvfs): -b was specified.
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1001/gvfs
      Output information may be incomplete.

पूर्व की पंक्तियों में, वहाँ नहीं है /data0

में प्रविष्टि /etc/fstab:

192.168.0.2:/data0 /data0  nfs  defaults,auto,nolock,user 0 2

"लेकिन पहले दो बार यह एक समस्या के बिना काम किया" ... मुझे रूसी रूले की याद दिलाता है। क्या lsof -bलटका?
मुरु

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

आप कौन से डिस्ट्रो का उपयोग कर रहे हैं? प्रक्रिया बहुत भिन्न होती है।
ग्रीम

@Graeme यह Linix टकसाल 17.1 (रेबेका) है
Anthon

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

जवाबों:


5

जैसा कि @PaperMonkey ने टिप्पणियों में सुझाव दिया है, आप खराब हो सकते हैं क्योंकि आपने डिफ़ॉल्ट माउंट विकल्पों का उपयोग किया था, जिसमें हमेशा के लिए पुनः प्रयास करना शामिल है।

intrटूटी हुई NFS माउंट के लिए I / O पर अटकी हुई चीजों को बाधित करना आसान बनाने का एक तरीका हुआ करता था, लेकिन अब यह एक नो-ऑप है। SIGKILLअभी भी NFS पर अटकी प्रक्रियाओं को बाधित कर सकता है, कम से कम इतने nfs(5)दावे। माउंट विकल्पों के लिए वह मैन पेज देखें।

का प्रयोग करें softडिफ़ॉल्ट के बजाय hardआप NFS चाहते हैं, तो हमेशा के लिए पुन: प्रयास करने के लिए नहीं।

मैं ऑटोमोटिव के उपयोग की भी सलाह देता हूं। यदि आप चाहते हैं कि कहीं / / नेट / होस्ट / फू / बार के लिए सहानुभूति बनाएं।

अक्सर यह केवल रिबूट करना आसान होता है, लेकिन मुझे लगता है कि सिद्धांत में आपको एनएफएस पर अटकने वाली किसी भी प्रक्रिया kill -9(यानी kill -KILL) में सक्षम होना चाहिए । Umount -f काम कर सकता है। बस सावधानी बरतें कि टैब को पूरा न होने दें और एनएफएस माउंट पर अधिक प्रक्रियाएं रोक दें।


सिद्धांत रूप में, लेकिन उन प्रक्रियाओं को खोजना कठिन है जब lsof लटका हुआ है।
km

@kmarsh: Dps / top में राज्य (डिस्क-स्लीप) की कोई भी प्रक्रिया शायद NFS पर अटकी हुई है।
पीटर कॉर्ड्स

1
कृपया ध्यान दें कि "हार्ड" के बजाय "सॉफ्ट" का उपयोग करते समय हर बार एनएफएस सर्वर अस्थायी अनुपलब्ध होने पर डेटा हानि की संभावना होती है।
Marki555

4

नीचे RPM आधारित डिस्ट्रो पर इस समस्या को ठीक करने के लिए चलाने के लिए आदेशों की एक सूची है।

service rpcbind stop
service nfslock stop
rm -rf /var/lib/nfs/statd/sm/*
rm -rf /var/lib/nfs/statd/sm.bak/*

उसके बाद:

umount -f /share

1

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

आप को पुन: प्रारंभ बिना समस्या को हल करने सकता है के साथ द्वारा प्राप्त कर सकेंगे umount -a(अनमाउंट सभी में / etc / fstab उल्लेख) mount -a(में / etc / fstab सभी माउंट), लेकिन मैंने जब तक निर्देशिका आप खो दिया है होम निर्देशिका आप 'में शामिल है सेविंग वर्क को कहीं और फिर से रिबूट करना सबसे अच्छा है।


0

Sts फ़ाइल सिस्टम के संदर्भ में क्लाइंट को पकड़ने वाली प्रक्रियाओं को खोजने और उन प्रक्रियाओं को मारने के लिए lsof कमांड के परिणामों का उपयोग करें।

umount -f / data0

आश्वस्त करें कि आप सर्वर को पिंग कर सकते हैं, फिर ड्राइव को रिमाउंट करें। किसी भी वांछित प्रक्रिया को पुनरारंभ करें।

क्लस्टर

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

fsid = num | root | uuid NFS को प्रत्येक फ़ाइल सिस्टम की पहचान करने में सक्षम होने की आवश्यकता है जो वह निर्यात करता है। आम तौर पर यह फाइलसिस्टम के लिए एक यूयूआईडी का उपयोग करेगा (यदि फाइलसिस्टम में ऐसा कुछ है) या फाइलसिस्टम को पकड़े हुए डिवाइस का डिवाइस नंबर (यदि फाइलसिस्टम डिवाइस पर संग्रहीत है)। जैसा कि सभी फाइल सिस्टम उपकरणों पर संग्रहीत नहीं हैं, और सभी फाइल सिस्टमों में यूयूआईडी नहीं हैं, कभी-कभी एनएफएस को स्पष्ट रूप से यह बताना आवश्यक होता है कि फाइलसिस्टम की पहचान कैसे करें। यह fsid = विकल्प के साथ किया जाता है।

NFSv4 के लिए, एक प्रतिष्ठित फाइल सिस्टम है जो सभी एक्सपोर्ट किए गए फाइल सिस्टम का मूल है। इसे fsid = root या fsid = 0 के साथ निर्दिष्ट किया गया है, जिसका दोनों का अर्थ एक ही बात है।

अन्य फाइल सिस्टम को एक छोटे पूर्णांक, या एक यूयूआईडी के साथ पहचाना जा सकता है जिसमें 32 हेक्स अंक और मनमाना विराम चिह्न होना चाहिए।

लिनक्स कर्नेल संस्करण २.६.२० और पहले UUID सेटिंग को नहीं समझता है, इसलिए यदि इस तरह के कर्नेल के लिए fsid विकल्प सेट करने की आवश्यकता होती है, तो एक छोटे पूर्णांक का उपयोग किया जाना चाहिए। एक छोटी संख्या और एक UUID दोनों को सेट करना समर्थित है, इसलिए समान कॉन्फ़िगरेशन को पुराने और नए कर्नेल पर समान रूप से काम करने के लिए बनाया जा सकता है।


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