web-dev-qa-db-fra.com

Comment puis-je avoir deux fichiers avec le même nom dans un répertoire lorsqu'il est monté avec NFS?

J'ai un test d'application C++ qui crée 10 000 fichiers dans un répertoire monté NFS, mais mon test a récemment échoué une fois en raison d'un fichier apparaissant deux fois avec le même nom dans ce répertoire avec tous les 10 000 autres fichiers. Cela peut être vu sur Linux Centos V4 ou V5 où le répertoire est monté NFS, mais pas sur la machine hôte où réside le disque.

Comment est-il même possible d'avoir deux fichiers avec le même nom dans le même répertoire?

[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*

Exécution du script Perl suggéré dans l'une des réponses ci-dessous:

ls -la *03373* | Perl -e 'while(<>){chomp();while(/(.)/g){$c=$1;if($c=~/[!-~]/){print("$c");}else{printf("\\x%.2x",ord($c));}}print("\n");}'

donne:

-rwx------\x20\x201\x20user\x20root\x203373\x20Sep\x20\x203\x2003:23\x20testfile03373*
-rwx------\x20\x201\x20user\x20root\x203373\x20Sep\x20\x203\x2003:23\x20testfile03373*

L'impression avec les valeurs INODE (-I) indique que les deux copies ont la même entrée d'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*

Il semblerait que l'entrée de répertoire soit corrompue d'une manière ou d'une autre.

Ma demande pourrait-elle avoir légitimement créé cette situation ou est-ce qu'un bogue dans le système d'exploitation? Est-ce que je peux faire quelque chose pour protéger contre cela dans mon programme qui crée les fichiers?

Je pense qu'il existe une sorte de bogue dans le logiciel de montage NFS. Également 'utomé' puis "monter" du lecteur NFS qui a le problème ne le résout pas, l'entrée répétée reste après le remontage.


Mise à jour 1 : J'ai maintenant frappé ce problème une seconde fois, quelques heures plus tard, et la chose vraiment étrange est que cela s'est passé sur le même fichier, testfile03373, bien qu'il ait une inode différente cette fois, 213352984, pour les fichiers doubles. J'ajouterai également que le fichier est en cours de création sur la machine Centos 5 où le disque est hébergé, il est donc en cours de création localement et montrant correctement localement, mais toutes les autres machines que la montage NFS correspondent à l'entrée doublée.


Mise à jour 2 : J'ai monté le lecteur sur une machine Centos V6 et trouvé ce qui suit dans /var/log/messages Après avoir inscrit et voyant la double entrée là-bas:

[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

De plus, j'ai trouvé que renommer le fichier provoque la disparition de la double entrée de la double entrée, mais le renommer le dos lui entraîne la réapparition doublé, ou aussi, touchez simplement un nouveau fichier avec le nom testfile03373, provoque une double entrée à apparaître, mais cela ne se produit que dans les deux répertoires où cette double entrée a été vue.

8
WilliamKF

Le disque est un disque monté NFS. Lorsque je vais sur l'ordinateur hôte qui publie le lecteur, le fichier est uniquement répertorié une fois.

Probablement un bug, un problème ou une condition de course avec NFS.

Il est possible d'avoir deux fichiers du même nom si vous modifiez directement les structures de système de fichiers à l'aide d'un éditeur Hex. Cependant, je ne suis pas sûr de ce qui se passerait si vous essayez de supprimer ou d'ouvrir les fichiers. Je ne suis pas sûr de quels outils existent sur Linux pour accéder à un fichier par numéro d'inode (qui ne peut pas être dupliqué) mais cela peut fonctionner.

Les noms de fichier en double sont quelque chose fsck _ captira probablement et essayer de réparer.

Assurez-vous que aucun des fichiers n'a différents espaces de fin.

6
LawrenceC