Linux-Verzeichnis kann nicht gelöscht werden - unendliche Rekursion

8

Wir haben einen NFS-Mount auf einer RHEL6-VM, der unseren Versionskontrollserver unterstützt. Vor kurzem ist eines der Repositorys etwas verrückt geworden, und Folgendes habe ich auf dem Server gefunden:

ls -latri repo.git/refs/heads/

total 28
5551210 drwxr-xr-x. 2 git git 8192 Jun  1 21:21 .
5551210 drwxr-xr-x. 2 git git 8192 Jun  1 21:21
5551210 drwxr-xr-x. 2 git git 8192 Jun  1 21:21
5551209 drwxr-xr-x. 3 git git 4096 Jun  1 22:09 ..

Wenn ich treegegen das Verzeichnis renne, scheint es unendlich rekursiv zu sein - zB:

repo.git/refs/heads/
├──
│   ├──
│   │   ├──
│   │   │   ├──
│   │   │   │   ├──
│   │   │   │   │   ├──
│   │   │   │   │   │   ├──
│   │   │   │   │   │   │   ├──
│   │   │   │   │   │   │   │   ├──
│   │   │   │   │   │   │   │   │   ├──
│   │   │   │   │   │   │   │   │   │   ├──
│   │   │   │   │   │   │   │   │   │   │   ├──
│   │   │   │   │   │   │   │   │   │   │   │   ├──
│   │   │   │   │   │   │   │   │   │   │   │   │   ├──
│   │   │   │   │   │   │   │   │   │   │   │   │   │   ├──
│   │   │   │   │   │   │   │   │   │   │   │   │   │   │   ├──
│   │   │   │   │   │   │   │   │   │   │   │   │   │   │   │   ├──

Ich habe versucht, das Repository über seine Inode-Referenz zu löschen:

[root@node repo.git/refs]# ls -latri
total 16
5551210 drwxr-xr-x. 2 git git 8192 Jun  1 21:21 heads

[root@node repo.git/refs]# find . -inum 5551210 -exec rm -rf {} \;
rm: cannot remove `./refs/heads': Directory not empty
find: `./refs/heads/': No such file or directory
find: `./refs/heads/': No such file or directory

Ich bin etwas ratlos, was ich hier tun soll - die Inode-Informationen im ls -latriBefehl scheinen darauf hinzudeuten, dass sich im Verzeichnis 'Heads' 2 Verzeichnisse befinden, die Hardlinks zum Heads-Verzeichnis sind.

Alle Ideen zur Bereinigung wären sehr willkommen - ich glaube, ich habe das Anwendungsproblem gelöst, das es verursacht hat, aber das größere Problem mit dem Dateisystem muss behoben werden.

Vielen Dank!

Bearbeiten: Bit der zusätzlichen Ausgabe:

keine versteckten Zeichen:

[root@node repo.git/refs]# ls -latrib heads/
total 28
5551210 drwxr-xr-x. 2 git git 8192 Jun  1 21:21 .
5551210 drwxr-xr-x. 2 git git 8192 Jun  1 21:21
5551210 drwxr-xr-x. 2 git git 8192 Jun  1 21:21
5551209 drwxr-xr-x. 3 git git 4096 Jun  1 22:09 ..

aber hier ist eine lustige Ausgabe, wenn ich tatsächlich in den Köpfen bin :

[root@node repo.git/refs/heads]# ls -latrib
ls: cannot access : No such file or directory
ls: cannot access : No such file or directory
total 12
      ? -?????????? ? ?   ?      ?            ?
      ? -?????????? ? ?   ?      ?            ?
5551210 drwxr-xr-x. 2 git git 8192 Jun  1 21:21 .
5551209 drwxr-xr-x. 3 git git 4096 Jun  1 22:09 ..
oldNoakes
quelle
Ihre ls -latriAusgabe ist ungerade, da die Verbindungsanzahl für Inode 5551210 ungerade ist, wenn diese zwei zusätzlichen Verzeichnisse vorhanden sind. Könnten Sie es versuchen ls -latrib? Was ist der zugrunde liegende Dateisystemtyp?
Paul Haldane
Hey, Dateisystemtyp ist nfs4 - die Ausgabe mit dem Flag -b ist genau die gleiche wie ohne - habe hinzugefügt, welche Informationen ich oben haben könnte
oldNoakes
Haben Sie sich das problematische Verzeichnis auf dem NFS-Server angesehen (der Server, von dem aus Ihre Versionskontroll-VM das Dateisystem bereitstellt)? Ich denke, Sie müssen sehen, was passiert (und es war der Dateisystemtyp auf dem NFS-Server, nach dem ich gefragt habe).
Paul Haldane
2
Ist das Dateisystem intakt? Diese Fragezeichen in der lsAusgabe sind mir verdächtig. Haben Sie fsck auf dem NFS-Server ausgeführt?
Lacek
3
Ich empfehle dringend, ein fsck zu machen ... insbesondere, bevor Sie weitere Korruption sehen.
Hat aufgehört - Anony-Mousse

Antworten:

3

Erstens: Git kann weder die Ursache noch die Lösung eines Problems sein, das sich als unsinnige Ausgabe von manifestiert ls. Beenden Sie die Verwendung von Git oder anderen Tools im Dateisystem und entfernen Sie die Bereitstellung, um Schäden zu vermeiden.

Dies sieht entweder nach einem defekten Dateisystem oder nach einem defekten Mount aus. Versuchen Sie, das Dateisystem auf dem Client zu deaktivieren und erneut bereitzustellen. Versuchen Sie, den Client vollständig neu zu starten. Versuchen Sie, dasselbe Mount auf einem anderen Client durchzuführen. Überprüfen Sie diese lsAusgabe jedes Mal, um festzustellen, ob sie normal wird. Auf diese Weise können Sie feststellen, ob das Problem auf der NFS-Serverseite liegt. Wenn die lsAusgabe weiterhin gleich aussieht, muss die Untersuchung und Reparatur des Dateisystems ( fsckoder was auch immer) und / oder des NFS-Dienstes (Neustarten von NFS-bezogenen Daemoons; Neustart, wenn nfsd im Kernel ist) auf der Serverseite erfolgen.

Ruief
quelle