Saya memiliki tes aplikasi C ++ yang membuat 10.000 file dalam direktori yang dipasang NFS, tetapi pengujian saya baru-baru ini gagal satu kali karena satu file muncul dua kali dengan nama yang sama di direktori itu dengan semua 10.000 file lainnya. Ini dapat dilihat pada Linux Centos v4 atau v5 di mana direktori tersebut dipasang NFS, tetapi tidak pada mesin host di mana disk berada.
Bagaimana mungkin memiliki dua file dengan nama yang sama di direktori yang sama?
[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*
Menjalankan skrip Perl yang disarankan dalam salah satu jawaban di bawah:
ls -la *03373* | perl -e 'while(<>){chomp();while(/(.)/g){$c=$1;if($c=~/[!-~]/){print("$c");}else{printf("\\x%.2x",ord($c));}}print("\n");}'
memberi:
-rwx------\x20\x201\x20user\x20root\x203373\x20Sep\x20\x203\x2003:23\x20testfile03373*
-rwx------\x20\x201\x20user\x20root\x203373\x20Sep\x20\x203\x2003:23\x20testfile03373*
Mencetak dengan nilai inode (-i) menunjukkan dua salinan memiliki entri inode yang sama (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*
Tampaknya entri direktori rusak entah bagaimana.
Bisakah aplikasi saya secara sah membuat situasi ini atau ini bug di sistem operasi? Apakah ada yang bisa saya lakukan untuk melindungi ini dalam program saya yang membuat file?
Saya berpikir ada beberapa jenis bug dalam perangkat lunak pemasangan NFS. Juga 'umount' dan kemudian 'mount' dari drive NFS yang memiliki masalah tidak menyelesaikannya, entri berulang tetap setelah remount.
Pembaruan 1: Saya sekarang mendapatkan masalah ini untuk kedua kalinya, beberapa jam kemudian, dan hal yang sangat aneh terjadi pada file yang sama persis testfile03373
, walaupun kali ini mendapat inode yang berbeda, 213352984, untuk file yang berlipat ganda. Saya juga akan menambahkan bahwa file sedang dibuat pada mesin Centos 5 di mana disk di-host, jadi sedang dibuat secara lokal, dan menunjukkan yang benar secara lokal, tetapi semua mesin lain yang NFS me-mountnya melihat entri yang berlipat ganda.
Pembaruan 2: Saya memasang drive pada mesin Centos v6 dan menemukan yang berikut /var/log/messages
setelah mendaftar dan melihat entri ganda di sana:
[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
Selain itu, saya menemukan bahwa mengubah nama file menyebabkan entri ganda menghilang, tetapi mengubah nama kembali menyebabkannya muncul kembali dua kali lipat, atau sebagai alternatif, hanya menyentuh file baru dengan nama testfile03373
, menyebabkan entri ganda muncul, tetapi ini hanya terjadi di dua direktori tempat entri ganda ini terlihat.