পুনরায় বুটের পরে "বাসি এনএফএস ফাইল হ্যান্ডেল"


16

সার্ভার নোডে, রফতানি করা ফোল্ডারটি অ্যাক্সেস করা সম্ভব। তবে, রিবুটগুলি (সার্ভার এবং ক্লায়েন্ট উভয়) পরে ফোল্ডারটি আর ক্লায়েন্টদের থেকে অ্যাক্সেসযোগ্য নয়।

সার্ভারে

# ls /data
Folder1
Forlder2

এবং / ইত্যাদি / এক্সপোর্ট ফাইল থাকে

/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

রিবুট ক্রম গুরুত্বপূর্ণ। ক্লায়েন্টদের পরে সার্ভারটি পুনরায় বুট করা এই পরিস্থিতিতে তৈরি হতে পারে। বাসি এনএফএস হ্যান্ডেল ইঙ্গিত দেয় যে ক্লায়েন্টের একটি ফাইল খোলা আছে, তবে সার্ভারটি আর ফাইল হ্যান্ডেলকে স্বীকৃতি দেয় না। কিছু ক্ষেত্রে, এনএফএস একটি সময়সীমা শেষ হওয়ার পরে তার ডেটা স্ট্রাকচারগুলি পরিষ্কার করবে। অন্যান্য ক্ষেত্রে, আপনাকে নিজেরাই এনএফএস ডেটা স্ট্রাকচার পরিষ্কার করতে হবে এবং পরে এনএফএস পুনরায় চালু করতে হবে। এই কাঠামোগুলি যেখানে অবস্থিত সেখানে কিছুটা O / S নির্ভরশীল।

সার্ভারে এবং তারপরে ক্লায়েন্টগুলিতে প্রথমে এনএফএস পুনরায় চালু করার চেষ্টা করুন। এটি ফাইল হ্যান্ডলগুলি সাফ করতে পারে।

অন্যান্য সার্ভার থেকে খোলা ফাইলগুলির সাথে এনএফএস সার্ভারগুলি পুনরায় বুট করার পরামর্শ দেওয়া হয় না। এটি বিশেষত সমস্যাযুক্ত যদি ওপেন ফাইলটি সার্ভারে মুছে ফেলা হয়। সার্ভারটি পুনরায় বুট না করা পর্যন্ত ফাইলটি খোলা রাখতে পারে, তবে রিবুটটি সার্ভারের পাশের ইন-মেমরি ফাইল হ্যান্ডেলটিকে সরিয়ে ফেলবে। তারপরে ক্লায়েন্ট আর ফাইল খুলতে পারবে না।

সার্ভার থেকে কোন মাউন্টগুলি ব্যবহৃত হয়েছে তা নির্ধারণ করা কঠিন এবং বিশ্বাসযোগ্য নয়। showmount -aবিকল্প কিছু সক্রিয় মাউন্ট দেখা যেতে পারে, কিন্তু তাদের সব রিপোর্ট করতে পারেন না। লক করা ফাইলগুলি সনাক্ত করা সহজ, তবে লকটি সক্ষম করা দরকার এবং ফাইলগুলি লক করার জন্য ক্লায়েন্ট সফ্টওয়্যারটির উপর নির্ভর করে।

lsofমাউন্টগুলিতে ফাইলগুলি খোলা রয়েছে এমন প্রক্রিয়াগুলি সনাক্ত করতে আপনি ক্লায়েন্টগুলিতে ব্যবহার করতে পারেন ।

আমি আমার এনএফএস মাউন্টগুলিতে hardএবং intrমাউন্ট বিকল্পগুলি ব্যবহার করি। hardবিকল্প আই অনির্দিষ্টকালের জন্য পুনরায় চেষ্টা করা হয়। intrবিকল্প যদি তারা সম্পন্ন NFS- র আই উপর অপেক্ষা করছে প্রসেস মেরে ফেলা হবে করতে পারবেন।


ব্যবহার hard, intrকরা ভাল পরামর্শ। তবে নোট করুন যে এনএফএস প্রতিটি চেষ্টা করে সময়সীমা দ্বিগুণ করে। সুতরাং আপনি সেরা সেট timeo=1এবং retrans=5তাই। নোট করুন যে এটি আপনার এনএফএস সার্ভারে এনএফএস পুনঃসূচনা করার পরে ভারী চাপ সৃষ্টি করবে । আপনার এনএফএস পরিষেবাটি প্রায়শই পুনরায় চালু না করার চেষ্টা করুন;)
বায়ানসেন

আপনার উত্তরটি সঠিক। আমি আরও একটি সহজ সমাধান খুঁজে পেয়েছি। বাসি এনএফএস হ্যান্ডলার বলছে এমন নোডে, কেবল ফোল্ডারটিকে অমাউন্ট করুন এবং পুনরায় মাউন্ট করুন।
মাহমুদ 4'14

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

এনএফএস সার্ভারে ইউএন-রফতানি এবং ফাইল সিস্টেমটি পুনরায় এক্সপোর্ট করুন:

এক্সপোর্টফ-ইউ এনএফএস-সার্ভার: / ফাইল_সিস্টেম এক্সপোর্টফেস এনএফএস-সার্ভার: / ফাইল_সিস্টেম

ক্লায়েন্টে ফাইল সিস্টেম মাউন্ট করুন

মাউন্ট -t এনএফএস এনফএস-সার্ভার: / ফাইল সিস্টেম / মাউন্ট_পয়েন্ট


0

নির্দিষ্ট পাথের lsof পরীক্ষা করুন এবং সংশ্লিষ্ট পিডকে হত্যা করুন। তারপরে পার্টিশনটি আনমাউন্ট করুন এবং এটি আবার মাউন্ট করুন।


প্রশ্নটিতে বর্ণিত সমস্যার সমাধানের চেয়ে এটি অনেকটা কার্যকরী মত।
এসডাসমিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.