我有一个C ++应用程序测试,该测试在NFS挂载的目录中创建10,000个文件,但是我的测试最近一次失败,因为一个文件在同一目录中两次出现相同的名称,而其他所有10,000个文件却出现了两次。这可以在Linux Centos v4或v5(目录已安装NFS)上看到,而在磁盘所在的主机上看不到。
甚至怎么可能在同一目录中有两个具有相同名称的文件?
[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*
建议在以下答案之一中运行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*
使用inode(-i)值打印将显示两个副本具有相同的inode条目(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。我还要补充一点,该文件是在托管磁盘的Centos 5机器上创建的,因此它是在本地创建的,并在本地显示正确,但是NFS挂载它的所有其他机器都看到该条目增加了一倍。
更新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
,就会出现重复条目,但这仅在在两个目录中已看到此双重条目。