[clarified] Beschränkung der Anzahl symbolischer Links auf 8

Welches Modul/Treiber für welche Hardware, Kernel compilieren...
Antworten
dolphin
Beiträge: 362
Registriert: 01.05.2006 11:48:24

[clarified] Beschränkung der Anzahl symbolischer Links auf 8

Beitrag von dolphin » 24.06.2012 13:06:35

Hi!

Ich bin heute in eine fiese Beschraenkung von Linux reingerannt, von der
ich nicht wusste, dass es sie gibt.

Problem ist, dass mehr als 8 Symlinks nacheinander nicht aufgeloest werden.

Hier ist ein Test-Skript:

Code: Alles auswählen

#!/bin/bash

mkdir ebene_0001
ln -s ebene_0001 ebene_0002
ln -s ebene_0002 ebene_0003
ln -s ebene_0003 ebene_0004
ln -s ebene_0004 ebene_0005
ln -s ebene_0005 ebene_0006
ln -s ebene_0006 ebene_0007
ln -s ebene_0007 ebene_0008
ln -s ebene_0008 ebene_0009
ln -s ebene_0009 ebene_0010
ln -s ebene_0010 ebene_0011
ln -s ebene_0011 ebene_0012
ln -s ebene_0012 ebene_0013
ln -s ebene_0013 ebene_0014
ln -s ebene_0014 ebene_0015
Das Resultat ist, dass der Link "ebene_0009" noch aufgeloest wird, der
Link "ebene_0010" aber schon nicht mehr.

Ich fand diesen Google-Treffer hier:
http://lwn.net/Articles/91959/

Da steht, dass frueher die Beschraenkung mal bei 5 lag. Damals gab es
eine Neuerung, die die Beschraenkung von 5 auf 8 anheben sollte. Diese
Neuerung ist heute mittlerweile offenbar im Kernel drin.

Ich finde, der eine Schreiber, der da schreibt,
and saying, "now 8 should probably be OK" is shamelessly
perpetuating the problem.
hat Recht.

Weiss jemand, ob heute, 8 Jahre spaeter, das Problem mittlerweile etwas
sauberer, zufriedenstellender geloest wurde?

Gibt es irgendwo einen Fix, einen Schalter oder einen neueren Kernel,
der das Problem loest?

Kann mir jemand versichern, dass ich mehr als 8 Links haette, wenn ich
einen Linux-Kernel 3.x betreiben wuerde?


Freundliche Gruesse,
dolphin
Zuletzt geändert von dolphin am 24.06.2012 16:32:31, insgesamt 1-mal geändert.

syssi
Beiträge: 2951
Registriert: 24.12.2010 16:50:59
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Rheinland

Re: Beschraenkung der Anzahl symbolischer Links auf 8

Beitrag von syssi » 24.06.2012 13:39:15

Was genau tust du? Ich habe dein Skript mal kopiert und kein Problem feststellen koennen:

Code: Alles auswählen

$ mkdir ebene_0001
$ ln -s ebene_0001 ebene_0002
$ ln -s ebene_0002 ebene_0003
...
$ ln -s ebene_0013 ebene_0014
$ ln -s ebene_0014 ebene_0015
$ 
Gruss syssi

lhfloss
Beiträge: 261
Registriert: 07.10.2007 21:02:15
Lizenz eigener Beiträge: MIT Lizenz

Re: Beschraenkung der Anzahl symbolischer Links auf 8

Beitrag von lhfloss » 24.06.2012 13:55:46

Einen Fehler kann auch ich nicht feststellen. Lege ich in ebene_0001 eine Datei an, dann ist diese auch nach einem Wechsel nach ebene_0015 zu sehen. Der verwendete Kernel ist Linux 3.4.3.

dolphin
Beiträge: 362
Registriert: 01.05.2006 11:48:24

Re: Beschraenkung der Anzahl symbolischer Links auf 8

Beitrag von dolphin » 24.06.2012 14:06:18

Hm. OK. Dann liegt es wohl am Kernel. Ich habe noch "2.6.26-2-686-bigmem".
Ich werd mal schauen, ob die neueren Systeme bei mir das Problem loesen, und wenn ja, ab welcher Kernel-Version.

Danke erstmal ;-)
dolphin

Benutzeravatar
KBDCALLS
Moderator
Beiträge: 22447
Registriert: 24.12.2003 21:26:55
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Re: Beschraenkung der Anzahl symbolischer Links auf 8

Beitrag von KBDCALLS » 24.06.2012 14:44:15

Die Frage ist doch wofür braucht man so eine Konstruktion? Mit kernel 2.6.32 funktioniert da so nicht , ein Text mit Wheeze und Kernel 3.2 war OK. Also es gibt keine eindeutige Antwort. Zumindest dann nicht, wenn die Kernel nicht bekannt ist.
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.

EDV ist die Abkürzung für: Ende der Vernunft

Bevor du einen Beitrag postest:
  • Kennst du unsere Verhaltensregeln
  • Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Beschraenkung der Anzahl symbolischer Links auf 8

Beitrag von Cae » 24.06.2012 15:39:53

Code: Alles auswählen

~/tmp$ mkdir ln-test-; last=; for i in $(seq -w 0 19); do ln -s ln-test-$last ln-test-$i; last=$i; done
~/tmp$ file ln-test*
ln-test-:   directory
ln-test-00: symbolic link to `ln-test-'
ln-test-01: symbolic link to `ln-test-00'
ln-test-02: symbolic link to `ln-test-01'
ln-test-03: symbolic link to `ln-test-02'
ln-test-04: symbolic link to `ln-test-03'
ln-test-05: symbolic link to `ln-test-04'
ln-test-06: symbolic link to `ln-test-05'
ln-test-07: symbolic link to `ln-test-06'
ln-test-08: symbolic link to `ln-test-07'
ln-test-09: symbolic link to `ln-test-08'
ln-test-10: symbolic link to `ln-test-09'
ln-test-11: symbolic link to `ln-test-10'
ln-test-12: symbolic link to `ln-test-11'
ln-test-13: symbolic link to `ln-test-12'
ln-test-14: symbolic link to `ln-test-13'
ln-test-15: symbolic link to `ln-test-14'
ln-test-16: symbolic link to `ln-test-15'
ln-test-17: symbolic link to `ln-test-16'
ln-test-18: symbolic link to `ln-test-17'
ln-test-19: symbolic link to `ln-test-18'
~/tmp$ cd ln-test-16
~/tmp/ln-test-16$ readlink -f . | xargs basename
ln-test-
~/tmp/ln-test-16$ cd ..; rm -r ln-test*
~/tmp$ uname -rv
3.2.0-2-amd64 #1 SMP Mon Jun 11 17:24:18 UTC 2012
Mache ich etwas falsch?

Gruß Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Benutzeravatar
TRex
Moderator
Beiträge: 8336
Registriert: 23.11.2006 12:23:54
Wohnort: KA

Re: Beschraenkung der Anzahl symbolischer Links auf 8

Beitrag von TRex » 24.06.2012 15:47:36

Nö, du hast nur einen neueren Kernel.

Code: Alles auswählen

root@odin:/tmp# mkdir ln-test-; last=; for i in $(seq -w 0 19); do ln -s ln-test-$last ln-test-$i; last=$i; done
root@odin:/tmp# cd ln-test-16
-bash: cd: ln-test-16: Zu viele Ebenen aus symbolischen Links
root@odin:/tmp# ll ln-test-*
lrwxrwxrwx 1 root root  8 24. Jun 15:47 ln-test-00 -> ln-test-
lrwxrwxrwx 1 root root 10 24. Jun 15:47 ln-test-01 -> ln-test-00
lrwxrwxrwx 1 root root 10 24. Jun 15:47 ln-test-02 -> ln-test-01
lrwxrwxrwx 1 root root 10 24. Jun 15:47 ln-test-03 -> ln-test-02
lrwxrwxrwx 1 root root 10 24. Jun 15:47 ln-test-04 -> ln-test-03
lrwxrwxrwx 1 root root 10 24. Jun 15:47 ln-test-05 -> ln-test-04
lrwxrwxrwx 1 root root 10 24. Jun 15:47 ln-test-06 -> ln-test-05
lrwxrwxrwx 1 root root 10 24. Jun 15:47 ln-test-07 -> ln-test-06
lrwxrwxrwx 1 root root 10 24. Jun 15:47 ln-test-08 -> ln-test-07
lrwxrwxrwx 1 root root 10 24. Jun 15:47 ln-test-09 -> ln-test-08
lrwxrwxrwx 1 root root 10 24. Jun 15:47 ln-test-10 -> ln-test-09
lrwxrwxrwx 1 root root 10 24. Jun 15:47 ln-test-11 -> ln-test-10
lrwxrwxrwx 1 root root 10 24. Jun 15:47 ln-test-12 -> ln-test-11
lrwxrwxrwx 1 root root 10 24. Jun 15:47 ln-test-13 -> ln-test-12
lrwxrwxrwx 1 root root 10 24. Jun 15:47 ln-test-14 -> ln-test-13
lrwxrwxrwx 1 root root 10 24. Jun 15:47 ln-test-15 -> ln-test-14
lrwxrwxrwx 1 root root 10 24. Jun 15:47 ln-test-16 -> ln-test-15
lrwxrwxrwx 1 root root 10 24. Jun 15:47 ln-test-17 -> ln-test-16
lrwxrwxrwx 1 root root 10 24. Jun 15:47 ln-test-18 -> ln-test-17
lrwxrwxrwx 1 root root 10 24. Jun 15:47 ln-test-19 -> ln-test-18

ln-test-:
insgesamt 0
root@odin:/tmp# uname -a
Linux odin 2.6.32-5-amd64 #1 SMP Thu Mar 22 17:26:33 UTC 2012 x86_64 GNU/Linux
edit: ohne Farbe ist ll doof. Ab 09 ists broken.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

Benutzeravatar
KBDCALLS
Moderator
Beiträge: 22447
Registriert: 24.12.2003 21:26:55
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Re: Beschraenkung der Anzahl symbolischer Links auf 8

Beitrag von KBDCALLS » 24.06.2012 15:57:07

TRex hat geschrieben:Nö, du hast nur einen neueren Kernel.
Steht in dem Posting darüber, hätte nur gelesen werden müssen :wink: :idea:
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.

EDV ist die Abkürzung für: Ende der Vernunft

Bevor du einen Beitrag postest:
  • Kennst du unsere Verhaltensregeln
  • Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.

dolphin
Beiträge: 362
Registriert: 01.05.2006 11:48:24

Re: Beschraenkung der Anzahl symbolischer Links auf 8

Beitrag von dolphin » 24.06.2012 16:29:05

Also, ich komme so langsam zu dem Schluss, dass das wohl erst ab Kernel 3.0.x funktioniert. Mein Bruder hatte jetzt schneller Systeme mit 3er-Kernel zur Hand als ich, und seine Testergebnisse stuetzen meine Schlussfolgerung.

Wozu ich das brauche? Wer sowas fragt, den bestrafe ich jetzt mit viel Text, um zu erklaeren, wozu man Symlinks im taeglichen Leben braucht. Here we go...



Ich habe seit 1999 ein logisches Sub-System im Einsatz, das ich einfach auf Linux aufsetze. Dieses System stricke ich mal wieder um, damit es flexibler wird. Und wie bekommt man ein logisches System flexibler? Indem man mehr Symlinks nutzt.

Mein System klinkt sich dann schon mal wie folgt ins Dateisystem ein:
/dir1/symlink1/symlink2a...2c/symlink2a3/diry/dirz/symlink4

Der erste Symlink "symlink1" verankert das System ziemlich weit oben im Verzeichnisbaum, ist aber in Wirklichkeit ein Link nach
/dev/shm/symlink2d

Dieser Symlink linkt zurueck nach
/dir1/dir2/symlink3a

welcher relativ nach
/dir1/dir2/symlink4a

oder nach
/dir1/dir2/symlink4b

linkt.

So, die Sache auf "/dev/shm/" ist eine Zwischenloesung, die mich per Shell-Skript zur Passwort-Eingabe zwingt. Ist das Passwort falsch, dann ist "/dir1/symlink1" weg. Also, kein Zugriff auf die Daten. Wenn eine neue Festplatte da ist, wird diese Zwischenloesung durch eine andere Partionierung geloest, und ich kann mit "/dev/shm/symlink2d", "/dir1/dir2/symlink3a" und "/dir1/dir2/symlink4*" bis zu 3 Symlinks einsparen.

Damit waere die Frage schon mal geklaert, wozu man das braucht: Um so zu tun, als waere ein wichtiges System bereits vorhanden, obwohl es erst zwei Jahre spaeter kommt. Symlinks kann man als Provisorium benutzen, um schon mal mit dem Rest weiterarbeiten zu koennen, auch wenn die Idee, auf die der Rest basiert, noch gar nicht umgesetzt sind.

Die Links "symlink4a" und "symlink4b" sind uebrigens Schalter zwischen alt und neu (also zwischen 2012q2 und 2012q3). Ab Quartal 3 werde ich meine neue Kreation in Betrieb nehmen, also hab ich noch ein paar Tage Zeit, um meine neuen Anforderungen umzusetzen. Mit dem Schalter schalte ich dann zwischen Alt und Neu hin- und her, um das neue System testen zu koennen, und um im alten System saemtliche Infrastruktur griffbereit zu haben (bis sie auch im neuen System zur Verfuegung steht).

Das war jetzt die Wurzel meines Verzeichnisbaums, das sich in das Linux-System hineinplanzt. Auf der anderen Seite gibt es aber noch Blaetter.

So habe ich also hier und da ein paar Shortlinks bei "/" oder bei "~" hinterlegt, die auf die Daten verlinken, die tatsaechich im Sub-System liegen. Das hat den Vorteil, dass die Daten dann alle in dem Baum sind, den die Backup-Skripte mit einem Rutsch erfassen koennen.

Beim Umstricken meines Systems ersetze ich nun alte Shortlinks durch neue. Damit aber alte, noch nicht umgestellte Systemteile weiterhin funktionieren koennen, wollte ich die alten Shortlinks auf die neuen Shortlinks biegen, und exakt hier hat es dann geknallt. Sprich, nun waren mehr als 8 Links in der Kette, und die Kompatibilitaetslinks konnten nicht mehr aufgeloest werden.

Dann gibt es in der Kette noch Links dazwischen. Ich dupliziere z.B. seit 1999 meine Arbeitsverzeichnisse alle 3 Monate. In jedem Quartal kann ich dann innerhalb der Arbeitsverzeichnisse etwas umorganisieren, so dass sich die Strukturen meiner Arbeitsverzeichnisse an meine jeweils aktuellen Anforderungen anpassen. Neue Projekte kommen pro Quartal hinzu, alte kann ich rausschmeissen. Was ich rausgeschmissen habe, belastet mich nicht mehr, ist aber nicht weg, weil die frueheren Quartale die Daten ja noch da haben.

Fuer das Quartalsmanagement brauche ich zwei Symlinks in der Kette. Das hat sich jedenfalls seit 1999 bewaehrt.

Dann gibt es noch diverse Verschluesselungssoftware fuer die Verschluesselung von Partitionen. Es muessen aber nur die Sicherheitsklassen verschluesselt werden, die tatsaechlich sensible Daten enthalten. Und wie bringt man die verschiedenen Sicherheitsklassen wieder zusammen in eine einzige Baumstruktur? Symlinks!

Als Power-User braucht man dann doch schon eine ganze Menge an Symlinks. Und Power-User stossen dann eben auch ganz schnell an die Grenzen des verwendeten Betriebssystems.

Uebrigens hat mein System in den 13 Jahren, die es bald sein werden, schon viele Linux-Distributionen ueberlebt. SuSE 5.0, SuSE 6.0, SuSE 6.2, SuSE 9.0, relativ kurz auch SuSE 9.2, Debian Sarge, Debian Etch, Debian Lenny, naja und mein naechster Schritt ist eine Migration nach einem Gemisch aus Debian Squeeze und KVM, damit ich auch dann noch Lenny verwenden kann, wenn Lenny laengst nicht mehr das Host-System ist.

Der Nachteil meiner langen Linux-Karriere ist eben auch, dass ich nicht einfach blind ein Linux sagen wir mal von Lenny nach Squeeze updaten kann, weil die neuen Systeme leider auch viele Inkompatibilitaeten mit sich bringen, die ich erst kennenlernen und umschiffen muss.

Nachtrag (jetzt wird es langsam offtopic):
Falls jemand meint, ich solle fuer mein Versionsmanagement CVS, Subversion oder Git nutzen, dem kann ich auch einiges entgegnen: Erstens gab es sowas damals unter SuSE Linux 5 nicht, zweitens fand ich um die Jahrtausendwende herum CVS schon so schrecklich, dass ich nur mit dessen Linux-Version ueberhaupt arbeiten konnte (unter Windows war das einfach nicht akzeptabel), drittens werden auch Versionsverwaltungssysteme staendig durch neue ersetzt (CVS durch SVN durch Git durch [...]) und viertens war meine Quartalsloesung von Anfang an so ausgelegt, dass ihre Daten moeglichst technologieunabhaengig auch in 100 Jahren noch eingelesen und verwertet werden koennen. Wenn schon das Medium CD-ROM nur mit Ach und Krach dazu taugt, um Daten sicher von einer Linux-Kernel-2.2-Epoche in eine Linux-Kernel-2.4-Epoche zu transportieren (ich sag nur TAO versus DAO), was soll ich dann erst von Versionsverwaltungssoftware a la CVS erwarten?



Ist die Frage, wozu man gelegentlich mehr als 8 Symlinks in einer Kette braucht, nun detailliert genug beantwortet worden? :-)
dolphin


P.S.
Ich werde mir im Moment damit helfen, indem ich die Kompatibilitaetslinks in den Blaettern nicht auf die Blaetter sondern eine Ebene tiefer setze. Falls das nicht reicht, koennte ich an der Wurzel noch aus 2 Links einen Link machen. Schoen ist dieses Herumimprovisieren aber nicht. Das Symlink-Konzept war fuer mich von Anfang an mit ein gewichtiger Grund, auf Linux und nicht auf Windows zu setzen. Naja, ich bin wohl so veranlagt, dass ich frueher oder spaeter JEDES System bis an seine Grenzen ausreize.

Antworten