Wie kann ich feststellen, wie viele Inodes ein Verzeichnis verwendet?

2411
Ross Rogers

Wir haben ein Inode-Limit auf unserem Fileserver und ich mache ein Experiment, um die Anzahl der Inodes zu reduzieren. Wie kann ich herausfinden, wie viele Inodes ein Verzeichnis verwendet? Ich habe gelesen, dass der Linux-Kernel keinen Inode für Softlinks unter 60 Bytes erstellt, sondern diesen symbolischen Link im Verzeichnis Inode selbst speichert. Daher versuche ich, die Länge der symbolischen Links auf unter 60 Bytes zu verkürzen und dann zu sehen, ob dies die Inode-Anzahl verringert.

BEARBEITEN: (Keine Zeilenumbrüche in Kommentaren einfügen ...) @caliban Was ich vorschlage, ist, einen symbolischen Link zum übergeordneten Verzeichnis zu erstellen und dann alle anderen symbolischen Links durch dieses übergeordnete Verzeichnis zu richten, z. B. ursprüngliche Links:

a -> /LONG_PATH/a b -> /LONG_PATH/b c -> /LONG_PATH/c 

mit Verzeichnis symbolischer Link

__parent_dir -> /LONG_PATH a -> parent_dir/a b -> parent_dir/b c -> parent_dir/c 
0
Wenn Sie nicht viele symbolische Links im Dateisystem haben, wird das Ändern auf lange Sicht keinen großen Unterschied machen. Ich würde die Kugel beißen und einige oder alle Daten in ein anderes Dateisystem verschieben, sobald Sie etwas Wartungszeit buchen können. David Spillett vor 15 Jahren 0
Wir brauchen ein Tool, das bei jeder Hardwaresimulation eine Menge symbolischer Links generiert. Wenn wir die Inode-Nutzung dieses einen Tools reduzieren können, könnte dies möglicherweise die Leistung des Inode-Caches erhöhen und die Anzahl der Inodes verringern. Ross Rogers vor 15 Jahren 0

1 Antwort auf die Frage

1
caliban

Ein Inode für jede Datei und jedes Verzeichnis, das ist die Regel. Und zu dem Teil, bei dem symbolische Links mit weniger als 60 Bytes im Verzeichnis inode selbst gespeichert sind ... Ich glaube, das ist auch falsch.

Wenn ein Symlink weniger als 60 Byte lang ist, wird er tatsächlich in seinem eigenen Inode (der vom Verzeichnis Inode getrennt ist) gespeichert, und es wird kein Datenblock erstellt. Somit beschleunigt das Lesen von Symlinks weniger als 60 Byte, da ein Datenblock nicht gelesen werden muss, was zu schnelleren Operationen führt.

Schade ... Danke für die Erklärung Ross Rogers vor 15 Jahren 0
Keine Schande - es bringt Leistungsverbesserungen mit sich, wenn Sie Ihre Symlinks auf weniger als 60 Byte halten können, da der Datenblock um einen (möglicherweise langsamen) Schritt abgeschnitten wird. Tun Sie es, bringen Sie alles auf <60 Bytes! :) caliban vor 15 Jahren 1
Da sich alle Symlinks tatsächlich im selben Verzeichnis befinden, habe ich 1 Symlink erstellt, der auf dieses Verzeichnis verweist, und dann müssen alle anderen Symlinks relativ zu diesem einen Verzeichnis sein. Glaubst du, das würde auch die Dinge verbessern? zB Originallinks (ab 100 Links) a -> / LONG_PATH / ab -> / LONG_PATH / bc -> / LONG_PATH / c [...] modifizierte Links: _parent -> / LONG_PATH a -> _parent / ab -> _parent / bc -> _parent / c [...] Ross Rogers vor 15 Jahren 0
yarrr ... scheinbar keine Newlines in Kommentaren .. Ross Rogers vor 15 Jahren 0
Zu Ihrem obigen Vorschlag: Nein. Ich denke, die Leistung wird sich verschlechtern, wenn Sie einen Symlink zu einem Verzeichnis herstellen, in dem die anderen Symlinks gespeichert sind (was ich von Ihrem obigen Kommentar verstehen kann). Am besten ändern Sie LONG_PATH so kurz wie möglich. caliban vor 15 Jahren 1
Das liegt daran, dass der Symlink zu diesem LONG_PATH-Verzeichnis bereits jetzt mit dem Verzeichnis inode gelesen wird, und zwar für jeden Zugriff auf jeden einzelnen Symlink dort. caliban vor 15 Jahren 1
Das LONG_PATH-Verzeichnis wird jedoch im Inode / Directory-Cache im Hauptspeicher zwischengespeichert, was keinen Plattenzugriff erfordert. Siehe meine Erklärung meiner Idee in meiner ursprünglichen "Frage". Danke, dass Sie mit mir darüber gesprochen haben. Ross Rogers vor 15 Jahren 0
Oh keine Sorgen! Ich liebe es trotzdem zu chatten (SU bekommt manchmal eine Art methodischer Fragen und Antworten). Ja, es wird im Arbeitsspeicher zwischengespeichert, es ist jedoch noch EIN zusätzlicher Schritt zu Symlink> Verzeichnis> Symlink. Und das System muss diesen Verzeichnis-Symlink immer analysieren, falls er sich ändert. Ohne diesen Symlink zu diesem Verzeichnis geht es einfach zu Directory> Symlink. Sie könnten einige Performance-Analyse-Tools ausführen - aber ich habe das Gefühl, dass es langsamer wird. caliban vor 15 Jahren 1