Como remover um diretório com “Muitos níveis de links simbólicos”

7

Eu tenho um problema estranho em um sistema RHEL.

Em nossos sistemas, temos nosso diretório pessoal montado em /export/home . Existem algumas exceções, já que estou experimentando o uso do gluster para nossos dirs home. Estes são montados automaticamente em /gluster/home

Isso funciona em todos os nossos (30+) servidores. Hoje isso parou de funcionar em um deles. Eu recebo o erro:

Too many levels of symlinks

ao tentar cd em /gluster/home/$HOME ...

Acabei movendo temporariamente /gluster para /gluster_broken e fiz um novo /gluster/home , reinicializei o autofs e as coisas funcionaram novamente.

Agora quero remover /gluster_broken .

O problema é que aparentemente existe algum loop de links simbólicos em /gluster_broken/home . Eu não sei de onde isso veio. Minhas tentativas de se livrar disso foram infrutíferas até agora.

[root@dc1-03 /]# rm -rf gluster_broken/
rm: cannot remove 'gluster_broken/home': Too many levels of symbolic links
[root@dc1-03 /]# rm -rf /gluster_broken/
rm: cannot remove '/gluster_broken/home': Too many levels of symbolic links
[root@dc1-03 /]# rm -rf /gluster_broken/home/
rm: cannot remove '/gluster_broken/home/': Is a directory
[root@dc1-03 /]# rm -rf /gluster_broken/home
rm: cannot remove '/gluster_broken/home': Too many levels of symbolic links
[root@dc1-03 /]# rmdir /gluster_broken/home/
rmdir: failed to remove '/gluster_broken/home/': Device or resource busy
[root@dc1-03 /]# fuser -m /gluster_broken/home/
Cannot stat /gluster_broken/home/: Too many levels of symbolic links
Cannot stat /gluster_broken/home/: Too many levels of symbolic links
Cannot stat /gluster_broken/home/: Too many levels of symbolic links
[root@dc1-03 /]# ls -ld /gluster_broken/home/
ls: cannot access /gluster_broken/home/: Too many levels of symbolic links
[root@dc1-03 /]# ls -ld /gluster_broken/home
drwxr-xr-x. 2 root root 0 Jan 22 10:20 /gluster_broken/home
[root@dc1-03 /]# fuser -m /gluster_broken/home

Como você pode ver a maioria dos comandos, todos produzem a mesma mensagem de erro. Eu realmente gostaria de me livrar desse problema. Mas estou um pouco perdido aqui. Alguma sugestão?

Saída dos comandos sugeridos:

[root@dc1-03 /]# ls /gluster_broken/
home
[root@dc1-03 /]# ls /gluster_broken/home/
ls: cannot access /gluster_broken/home/: Too many levels of symbolic links
[root@dc1-03 /]# ls -hblF /gluster_broken /gluster_broken/home 
/gluster_broken:
total 0
drwxr-xr-x. 2 root root 0 Feb  4 12:00 home/
ls: cannot open directory /gluster_broken/home: Too many levels of symbolic links
    
por Krist van Besien 04.02.2014 / 09:36

3 respostas

4

Tente encontrar.

find -L /gluster_broken -mindepth 10

para encontrar os loops de links

então um rm não recursivo no (s) arquivo (s) incorreto (s)

find seguirá os links e encontrará o mesmo erro "muitos níveis". Eu uso -mindepth para filtrar nada menos do que 10 deep para evitar os arquivos ok / diretórios. Sim, isso supõe que você não tenha mais que 10 no fundo da sua árvore normal. Tudo o que este comando está tentando fazer é encontrar o arquivo com erro.

- editar

Acho que seguir o comando é melhor,

find -L /gluster_broken >/dev/null

Aqui está o meu teste

$ find .
.
./dira
./dira/a
./dira/dirb
./dira/dirb/dirc
./dira/error
./dira/b
./dira/test
./dira/test/ab&<cd.file
./dira/test/magic?newlines
./dira/test/cleanup
$ find -L . >/dev/null
find: ‘./dira/a’: Too many levels of symbolic links
find: ‘./dira/error’: Too many levels of symbolic links
find: ‘./dira/b’: Too many levels of symbolic links
$ 

--- editar 2

Eu acho que minha sugestão (comentário) para verificar o sistema de arquivos pode ser melhor, eu acabei de ver esta resposta e me pergunto se você tem um problema semelhante.

    
por 04.02.2014 / 13:27
3

Talvez eu esteja errado, mas parece que ninguém mais respondeu à pergunta.

O problema é que você tem o / no final do seu comando.

Em vez de

rm gluster/

apenas execute

rm gluster

Colocando o / no final você está tentando entrar no diretório, que é um link circular, para que ele nunca encontre o fundo. Sem o / , você está simplesmente removendo o link simbólico.

    
por 13.10.2016 / 06:13
1

Recentemente encontrei este mesmo problema ao criar um symlink sem fornecer um diretório absoluto.

Isso deu o mesmo erro ao tentar ler o arquivo ("Too many levels of symlinks"):

ln -s ./config ~/.config/terminator

Aparentemente, porque o link simbólico tenta voltar a si mesmo:

ls -l ~/.config/terminator
lrwxrwxrwx 1 zane zane 8 Dec 22 16:14 config -> ./config

Mas isso funcionou:

ln -s /home/zane/config ~/.config/terminator/config

Espero que isso ajude alguém na mesma situação.

    
por 22.12.2014 / 22:16

Tags