Não é possível excluir o diretório Linux - recursão infinita

8

Temos uma montagem NFS em uma VM RHEL6 que suporta nosso servidor de controle de versão - recentemente, um dos repositórios ficou um pouco louco e foi o que encontrei no servidor:

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 ..

Quando corro treecontra o dir, ele parece ser infinitamente recursivo - por exemplo:

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

Eu tentei excluir o repositório através de seu inode ref:

[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

Estou um pouco sem saber o que fazer aqui - as informações do inode no ls -latricomando parecem indicar que existem 2 diretórios no diretório 'heads' que são hardlinks para o diretório heads?

Qualquer idéia de como limpar isso seria bem-vinda - acho que resolvi o problema do aplicativo que estava causando, mas o maior problema com o sistema de arquivos precisa ser resolvido.

Obrigado!

Edit: bit de saída adicional:

sem caracteres ocultos:

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

mas aqui está uma saída divertida quando eu estou na cabeça dir:

[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
fonte
Sua ls -latrisaída é ímpar, pois a contagem de links para o inode 5551210 é ímpar se houver esses dois diretórios extras. Você poderia tentar ls -latrib? Qual é o tipo de sistema de arquivos subjacente?
Paul Haldane
Hey, tipo de sistema de arquivos é NFS4 - a saída com a bandeira -b é exatamente o mesmo como sem - ter acrescentado que informações que pude acima
oldNoakes
Você examinou o diretório problemático no servidor NFS (o servidor em que sua VM de controle de versão está montando o sistema de arquivos)? Eu acho que você precisa ver o que ele pensa que está acontecendo (e era o tipo de sistema de arquivos no servidor NFS que eu estava perguntando).
Paul Haldane
2
O sistema de arquivos está intacto? Esses pontos de interrogação na lssaída são suspeitos para mim. Você já executou o fsck no servidor NFS?
Lacek
3
Eu recomendo fortemente fazer um fsck ... em particular, antes que você veja mais corrupção.
QuIT - Anony-Mousse 3/17/17

Respostas:

3

Primeiro: o Git não pode ser a causa nem a solução de um problema que se manifesta como saída sem sentido ls. Pare de usar o Git ou outras ferramentas no sistema de arquivos e desmonte-o para evitar danos.

Parece um sistema de arquivos quebrado ou uma montagem quebrada. Tente desmontar e remontar o sistema de arquivos no cliente. Tente reiniciar completamente o cliente. Tente fazer a mesma montagem em outro cliente. Cada vez, verifique essa lssaída para ver se ela se torna normal. Isso ajudará você a diagnosticar se o problema está no lado do servidor NFS. Se a lssaída continuar com a mesma aparência, a investigação e o reparo do sistema de arquivos ( fsckou o que for) e / ou o serviço NFS (reiniciando daemonons relacionados ao NFS; reinicie se o nfsd estiver no kernel) precisa ocorrer no lado do servidor.

ruief
fonte