NFS 마운트 디렉토리에 10,000 개의 파일을 작성하는 C ++ 응용 프로그램 테스트가 있지만, 한 디렉토리에 다른 10,000 개의 파일이 모두 같은 이름으로 두 개의 파일이 표시되어 최근에 한 번 테스트에 실패했습니다. 이는 디렉토리가 NFS 마운트 된 Linux Centos 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*
아래 답변 중 하나에서 제안 된 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
에서 발생했지만 두 배의 파일에 대해서는 이번에는 다른 inode가 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
이중 항목이 나타납니다. 이 이중 항목이 표시된 두 개의 디렉토리