मेरे पास एक C ++ एप्लिकेशन परीक्षण है जो NFS माउंटेड डायरेक्टरी में 10,000 फाइलें बनाता है, लेकिन हाल ही में एक बार एक फाइल के कारण उस निर्देशिका में दो बार एक ही नाम के साथ अन्य सभी 10,000 फाइलों के साथ मेरा परीक्षण विफल हो गया। यह या तो लिनक्स सेंटोस v4 या v5 पर देखा जा सकता है जहां निर्देशिका एनएफएस माउंटेड है, लेकिन मेजबान मशीन पर नहीं जहां डिस्क छुपाती है।
एक ही निर्देशिका में एक ही नाम के साथ दो फाइलें होना भी कैसे संभव है?
[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*
ऐसा लगता है कि निर्देशिका प्रविष्टि किसी तरह दूषित है।
क्या मेरा एप्लिकेशन वैध रूप से इस स्थिति को बना सकता है या क्या यह ऑपरेटिंग सिस्टम में बग है? फाइल बनाने वाले मेरे कार्यक्रम में इससे बचाव के लिए क्या कुछ है?
मुझे लगता है कि एनएफएस बढ़ते सॉफ्टवेयर में किसी प्रकार की बग है। इसके अलावा 'umount' और फिर NFS ड्राइव का 'माउंट' जो कि समस्या का समाधान नहीं करता है, रिमूव के बाद दोहराया प्रविष्टि बनी हुई है।
अद्यतन 1: मैंने अब इस मुद्दे को दूसरी बार, कुछ घंटों बाद मारा है, और वास्तव में अजीब बात यह है कि यह ठीक उसी फ़ाइल पर हुआ है testfile03373
, हालांकि इस बार 213352984, दोहरी फ़ाइलों के लिए एक अलग इनोड मिला है। मैं यह भी जोड़ूंगा कि फाइल सेंटोस 5 मशीन पर बनाई जा रही है जहां डिस्क होस्ट की जा रही है, इसलिए इसे स्थानीय रूप से बनाया जा रहा है, और स्थानीय रूप से सही दिखा रहा है, लेकिन एनएफएस माउंट करने वाली अन्य सभी मशीनों को दोगुनी प्रविष्टि दिखाई दे रही है।
अपडेट 2: मैंने सेंटोस v6 मशीन पर ड्राइव को माउंट किया और /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
दोहरी प्रविष्टि दिखाई देती है, लेकिन यह केवल होता है दो निर्देशिकाएं जहां यह दोहरी प्रविष्टि देखी गई है।