So entfernen Sie ein Verzeichnis mit "Zu viele Ebenen von Symlinks"

8

Ich habe ein seltsames Problem mit einem RHEL-System.

Auf unseren Systemen haben wir unser Home-Verzeichnis unter automatisch gemountet /export/home. Es gibt einige Ausnahmen, da ich mit der Verwendung von Gluster für unsere Heimverzeichnisse experimentiere. Diese werden unter automatisch bereitgestellt/gluster/home

Dies funktioniert auf allen unseren (30+) Servern. Heute hat dies bei einem von ihnen aufgehört zu arbeiten. Ich bekomme den Fehler:

Too many levels of symlinks

beim Versuch cdin /gluster/home/$HOME...

Ich landete temporäre Bewegungs /glusterzu /gluster_brokenund machte eine neue /gluster/home, neu gestartet autofs und die Dinge wieder funktionieren.

Jetzt möchte ich entfernen /gluster_broken.

Das Problem ist, dass offensichtlich eine Symlink-Schleife vorhanden ist /gluster_broken/home. Ich weiß nicht, woher es kam. Meine Versuche, es loszuwerden, waren bisher erfolglos.

[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

Wie Sie sehen können, geben die meisten Befehle alle dieselbe Fehlermeldung aus. Ich würde dieses Problem wirklich gerne loswerden. Aber ich bin hier etwas ratlos. Irgendwelche Vorschläge?

Ausgabe der vorgeschlagenen Befehle:

[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
Krist van Besien
quelle
Ein bisschen raten / hacken, aber was ist, wenn Sie etwas auf gluster_broken / home montieren und es dann versuchen rm -rf gluster_broken?
virtualxtc
Eine offensichtliche Frage, aber was enthält gluster_broken? Können Sie eine Auflistung geben?
Faheem Mitha
2
Wie wird /gluster_broken/homegemountet (wie in / proc / mounts zu sehen)?
Stéphane Chazelas
Können Sie die Ausgabe vonls -hblF /gluster_broken /gluster_broken/home
RSFalcon7
Was namei /gluster_broken/homesagt das?
Gilles 'SO - hör auf böse zu sein'

Antworten:

4

Versuchen Sie zu finden.

find -L /gluster_broken -mindepth 10

um die Linkschleifen zu finden

dann eine nicht rekursive rmauf die fehlerhafte (n) Datei (en)

find folgt Links und findet den gleichen Fehler "zu viele Ebenen". Ich benutze -mindepth, um weniger als 10 tief herauszufiltern, um die ok-Dateien / Verzeichnisse zu vermeiden. Ja, dies setzt voraus, dass Sie nicht mehr als 10 tief in Ihrem normalen Baum haben. Dieser Befehl versucht lediglich, die fehlerhafte Datei zu finden.

- bearbeiten

Ich denke, Befehl zu befolgen ist besser,

find -L /gluster_broken >/dev/null

Hier ist mein Test

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

--- bearbeiten 2

Ich denke, mein Vorschlag (Kommentar), das Dateisystem zu überprüfen, könnte am besten sein. Ich habe gerade diese Antwort gesehen und mich gefragt, ob Sie ein ähnliches Problem haben.

X Tian
quelle
Warum funktioniert das?
Anko
Ups, es gibt einen Tippfehler, der -maxdepth 10nicht da sein sollte. Ich werde bearbeiten.
X Tian
1
Mein Problem ist, dass bei allem, was irgendwie versucht, etwas mit / gluster_broken / home zu tun, dieser Fehler "auf viele Ebenen symbolischer Links" ausgelöst wird. Der oben vorgeschlagene Befehl "find" löst auch diesen Fehler aus, sodass ich keine nützlichen Informationen daraus erhalte.
Krist van Besien
Ich denke, dass / gluster_broken / home sich selbst schleift. Ich würde jedoch gerne wissen, wie dies passiert ist und was ich tun kann, um es zu beheben.
Krist van Besien
1
Wäre so interessant, die Ausgabe von zu sehen ls -l /gluster_broken.
X Tian
4

Vielleicht irre ich mich, aber anscheinend hat niemand die Frage beantwortet.

Das Problem ist, dass Sie das /am Ende Ihres Befehls haben.

Anstatt

rm gluster/

Renn einfach

rm gluster

Wenn Sie das /am Ende einfügen, versuchen Sie, in das Verzeichnis zu gelangen, das ein zirkulärer Link ist, sodass es nie den unteren Rand findet. Ohne das /entfernen Sie einfach den symbolischen Link.

Nivekmai
quelle
1

Ich bin kürzlich auf dasselbe Problem gestoßen, als ich einen Symlink erstellt habe, ohne ihm ein absolutes Verzeichnis zu geben.

Dies gab den gleichen Fehler beim Versuch, die Datei zu lesen ("Zu viele Ebenen von Symlinks"):

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

Scheinbar, weil der Symlink versucht, auf sich selbst zurückzukehren:

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

Aber das hat funktioniert:

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

Hoffentlich hilft dies jemandem in der gleichen Situation.

Zane Hooper
quelle
Ja, aber hier sehen wir das Symlink-Objekt.
Kaz
0

Sie können / gluster_broken / home nicht entfernen, da / gluster_broken selbst ein defekter Link ist.

ls -l  /gluster_broken

Sie werden sehen, dass es sich um einen Link handelt. Also entferne es:

rm /gluster_broken
xoid
quelle