NFSマウントされたディレクトリに10,000ファイルを作成するC ++アプリケーションテストがありますが、他のすべての10,000ファイルと同じディレクトリに同じ名前で1つのファイルが2回表示されるため、最近1回失敗しました。これは、ディレクトリがNFSマウントされているLinux Centos v4またはv5で確認できますが、ディスクが存在するホストマシンでは確認できません。
同じディレクトリに同じ名前の2つのファイルを持つことはどうして可能ですか?
[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*
以下の回答の1つで提案されているPerlスクリプトを実行します。
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ノード(-i)値を使用して印刷すると、2つのコピーが同じ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*
どうやらディレクトリエントリが壊れているようです。
アプリケーションがこの状況を合法的に作成した可能性がありますか、それともオペレーティングシステムのバグですか?ファイルを作成するプログラムでこれを防ぐためにできることはありますか?
NFSマウントソフトウェアに何らかのバグがあると思います。また、問題のあるNFSドライブを「umount」してから「mount」しても解決されず、再マウント後も繰り返されるエントリが残ります。
更新1:数時間後、この問題testfile03373
に再度遭遇しました。本当に奇妙なのは、まったく同じファイルで発生したことですが、今回は213352984のように、二重化されたファイルに対して別のiノードが取得されました。また、ファイルがディスクがホストされているCentos 5マシンで作成されているため、ローカルで作成され、ローカルで正しいことが示されていますが、NFSでマウントされている他のすべてのマシンでは、エントリが2重になっています。
更新2:私はドライブをCentos 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
二重エントリが表示されますが、これはこの二重エントリが表示されている2つのディレクトリ。