रिबूट के बाद "बासी एनएफएस फ़ाइल हैंडल"


16

सर्वर नोड पर, निर्यात किए गए फ़ोल्डर तक पहुंच संभव है। हालाँकि, रिबूट (सर्वर और क्लाइंट दोनों) के बाद, फ़ोल्डर अब क्लाइंट से एक्सेस नहीं किया जा सकता है।

सर्वर पर

# ls /data
Folder1
Forlder2

और / etc / निर्यात फ़ाइल समाहित है

/data 192.168.1.0/24(rw,no_subtree_check,async,no_root_squash)

ग्राहक पर

# ls /data
ls: cannot access /data: Stale NFS file handle

मेरा कहना है कि रिबूट (सर्वर और क्लाइंट) के बाद क्लाइंट की ओर से साझा किए गए फ़ोल्डर के साथ कोई समस्या नहीं थी, मुझे यह संदेश दिखाई दे रहा है।

इसे ठीक करने का कोई तरीका?

जवाबों:


22

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

पहले NFS को सर्वर पर और फिर क्लाइंट पर रीस्टार्ट करने का प्रयास करें। यह फ़ाइल हैंडल को साफ़ कर सकता है।

अन्य सर्वर से खोली गई फ़ाइलों के साथ एनएफएस सर्वरों को रिबूट करना अनुशंसित नहीं है। यह विशेष रूप से समस्याग्रस्त है अगर खुली फाइल को सर्वर पर हटा दिया गया है। सर्वर रिबूट होने तक फ़ाइल को खुला रख सकता है, लेकिन रिबूट सर्वर साइड पर इन-मेमोरी फ़ाइल हैंडल को हटा देगा। फिर क्लाइंट फ़ाइल को खोलने में सक्षम नहीं होगा।

यह निर्धारित करना कि सर्वर से कौन सा आरोह का उपयोग किया गया है, कठिन और अविश्वसनीय है। showmount -aविकल्प कुछ सक्रिय माउंट दिखा सकते हैं, लेकिन उन सभी को रिपोर्ट नहीं कर सकते हैं। लॉक की गई फ़ाइलों की पहचान करना आसान है, लेकिन लॉकिंग को सक्षम करने की आवश्यकता होती है और फ़ाइलों को लॉक करने के लिए क्लाइंट सॉफ़्टवेयर पर निर्भर करता है।

आप lsofक्लाइंट पर उन प्रक्रियाओं की पहचान करने के लिए उपयोग कर सकते हैं जिनके पास माउंट पर खुली हुई फाइलें हैं।

मैं अपने NFS माउंट पर विकल्पों का उपयोग करता हूं hardऔर intrमाउंट करता हूं। hardविकल्प आईओ अनिश्चित काल के लिए पुनः प्रयास किया जाना कारण बनता है। intrविकल्प अगर वे पूरा करने के लिए एनएफएस आईओ पर इंतजार कर रहे हैं प्रक्रियाओं मारे जाने के लिए अनुमति देता है।


उपयोग करना hard, intrअच्छी सलाह है। हालाँकि, ध्यान दें कि NFS प्रत्येक प्रयास के साथ समय समाप्त करता है। तो आप सबसे अच्छा सेट timeo=1और retrans=5या तो। ध्यान दें कि यह होगा एनएफएस पुनः आरंभ करने के बाद अपने एनएफएस सर्वर पर अत्यधिक भार डालते। अपनी NFS सेवा को इतनी बार पुनः आरंभ नहीं करने का प्रयास करें;)
bjanssen

आपका उत्तर सही है। मुझे एक और सरल उपाय भी मिला। नोड पर जो बासी NFS हैंडलर कहता है, बस umount और फिर से फ़ोल्डर को रिमाउंट करें।
महमूद

4

इस स्क्रिप्ट की कोशिश करो जो मैंने लिखा था:

#!/bin/bash
# Purpose:
# Detect Stale File handle and remove it
# Script created: July 29, 2015 by Birgit Ducarroz
# Last modification: --
#

# Detect Stale file handle and write output into a variable and then into a file
mounts=`df 2>&1 | grep 'Stale file handle' |awk '{print ""$2"" }' > NFS_stales.txt`
# Remove : ‘ and ’ characters from the output
sed -r -i 's/://' NFS_stales.txt && sed -r -i 's/‘//' NFS_stales.txt && sed -r -i 's/’//' NFS_stales.txt

# Not used: replace space by a new line
# stales=`cat NFS_stales.txt && sed -r -i ':a;N;$!ba;s/ /\n /g' NFS_stales.txt`

# read NFS_stales.txt output file line by line then unmount stale by stale.
#    IFS='' (or IFS=) prevents leading/trailing whitespace from being trimmed.
#    -r prevents backslash escapes from being interpreted.
#    || [[ -n $line ]] prevents the last line from being ignored if it doesn't end with a \n (since read returns a non-zero exit code when it encounters EOF).

while IFS='' read -r line || [[ -n "$line" ]]; do
    echo "Unmounting due to NFS Stale file handle: $line"
    umount -fl $line
done < "NFS_stales.txt"
#EOF

2

NFS सर्वर पर UN- एक्सपोर्ट और फाइल सिस्टम को री-एक्सपोर्ट:

Exportfs -u nfs-server: / file_system Exportfs nfs-server: / file_system

क्लाइंट पर फ़ाइल सिस्टम को माउंट करें

माउंट -t nfs nfs-server: / filesystem / Mount_point


0

विशिष्ट पथ के lsof की जाँच करें और संबंधित पीआईडी ​​को मारें। फिर विभाजन को अनमाउंट करें और इसे वापस माउंट करें।


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