আমার কাছে একটি সি ++ অ্যাপ্লিকেশন পরীক্ষা রয়েছে যা একটি এনএফএস মাউন্টড ডিরেক্টরিতে 10,000 টি ফাইল তৈরি করে, তবে অন্য 10,000 ফাইলের সাথে সেই ডিরেক্টরিতে একই নামে দু'বার উপস্থিত হওয়ার কারণে আমার পরীক্ষাটি একবার ব্যর্থ হয়েছিল। ডিরেক্টরিটি এনএফএস মাউন্ট করা লিনাক্স সেন্টোস ভি 4 বা ভি 5 এ দেখা যায় তবে ডিস্কটি যে হোস্ট মেশিনে থাকে সেখানে নয়।
একই ডিরেক্টরিতে একই নামের দুটি ফাইল থাকা কীভাবে সম্ভব?
[centos4x32 destination] ls -al ./testfile03373
-rwx------ 1 user root 3373 Sep 3 03:23 ./testfile03373*
[centos4x32 destination] ls -al ./testfile03373*
-rwx------ 1 user root 3373 Sep 3 03:23 ./testfile03373*
-rwx------ 1 user root 3373 Sep 3 03:23 ./testfile03373*
[centos4x32 destination] ls -al *testfile03373
-rwx------ 1 user root 3373 Sep 3 03:23 testfile03373*
-rwx------ 1 user root 3373 Sep 3 03:23 testfile03373*
[centos4x32 destination] ls -alb test*file03373
-rwx------ 1 user root 3373 Sep 3 03:23 testfile03373*
-rwx------ 1 user root 3373 Sep 3 03:23 testfile03373*
নীচের উত্তরের একটিতে প্রস্তাবিত পার্ল স্ক্রিপ্ট চালানো:
ls -la *03373* | perl -e 'while(<>){chomp();while(/(.)/g){$c=$1;if($c=~/[!-~]/){print("$c");}else{printf("\\x%.2x",ord($c));}}print("\n");}'
দেয়:
-rwx------\x20\x201\x20user\x20root\x203373\x20Sep\x20\x203\x2003:23\x20testfile03373*
-rwx------\x20\x201\x20user\x20root\x203373\x20Sep\x20\x203\x2003:23\x20testfile03373*
ইনোড (-i) মানগুলির সাথে মুদ্রণটি দেখায় যে দুটি অনুলিপি একই ইনড এন্ট্রি (36733444) রয়েছে:
[h3-centos4x32 destination] ls -alib te*stfile03373
36733444 -rwx------ 1 user root 3373 Sep 3 03:23 testfile03373*
36733444 -rwx------ 1 user root 3373 Sep 3 03:23 testfile03373*
মনে হচ্ছে ডিরেক্টরি এন্ট্রিটি কোনওভাবে দূষিত।
আমার অ্যাপ্লিকেশন বৈধভাবে এই পরিস্থিতি তৈরি করতে পারে বা এটি অপারেটিং সিস্টেমের কোনও বাগ? আমার প্রোগ্রামটিতে ফাইলগুলি তৈরি করে এর থেকে রক্ষা করার জন্য আমি কী করতে পারি?
আমি ভাবছি এনএফএস মাউন্টিং সফ্টওয়্যারটিতে কোনও ধরণের বাগ রয়েছে। এছাড়াও 'অমাউন্ট' এবং তারপরে সমস্যা রয়েছে এমন এনএফএস ড্রাইভের 'মাউন্ট' এটি সমাধান করে না, পুনরাবৃত্তির পরে পুনরাবৃত্তি এন্ট্রি থেকে যায়।
আপডেট 1: আমি এখন কয়েক ঘন্টা পরে এই সমস্যাটি দ্বিতীয়বার হিট করেছি এবং সত্যিই আশ্চর্যের বিষয় হ'ল ঠিক একই ফাইলটিতে এটি ঘটেছে testfile03373
, যদিও দ্বিগুণ ফাইলগুলির জন্য এটি এখন 213352984 পেয়েছে। আমি আরও যুক্ত করব যে ফাইলটি সেন্টোস 5 মেশিনে তৈরি করা হচ্ছে যেখানে ডিস্কটি হোস্ট করা হচ্ছে, তাই এটি স্থানীয়ভাবে তৈরি করা হচ্ছে এবং স্থানীয়ভাবে সঠিক প্রদর্শিত হচ্ছে, তবে এনএফএস মাউন্ট করা অন্যান্য সমস্ত মেশিন দ্বিগুণ এন্ট্রি দেখছে।
আপডেট 2: আমি একটি সেন্টোস ভি 6 মেশিনে ড্রাইভটি চাপিয়েছি এবং /var/log/messages
সেখানে ডাবল এন্ট্রি তালিকাভুক্তি এবং দেখার পরে নিম্নলিখিতটি পেয়েছি :
[root@c6x64 double3373file]# ls -laiB testfile03373* ; tail -3 /var/log/messages
36733444 -rwx------. 1 user root 3373 Sep 3 03:23 testfile03373
36733444 -rwx------. 1 user root 3373 Sep 3 03:23 testfile03373
...
Sep 4 14:59:46 c6x64 kernel: NFS: directory user/double3373file contains a readdir loop.Please contact your server vendor. The file: testfile03373 has duplicate cookie 7675190874049154909
Sep 4 14:59:46 c6x64 kernel: NFS: directory user/double3373file contains a readdir loop.Please contact your server vendor. The file: testfile03373 has duplicate cookie 7675190874049154909
অতিরিক্ত হিসাবে, আমি দেখতে পেলাম যে ফাইলটির নাম পরিবর্তন করার ফলে ডাবল এন্ট্রি অদৃশ্য হয়ে যায়, তবে পুনরায় নামকরণের ফলে এটি আবার দ্বিগুণ হয়ে যায় বা বিকল্প হিসাবে কেবল নামের সাথে একটি নতুন ফাইল স্পর্শ করলে testfile03373
ডাবল এন্ট্রি প্রদর্শিত হয়, তবে এটি কেবল এর মধ্যেই ঘটে দুটি ডিরেক্টরি যেখানে এই ডাবল এন্ট্রি দেখা গেছে।