Ich habe diese Frage beim Stackoverflow gesehen, aber ich mochte keine der Antworten, und es ist wirklich eine Frage, die auf jeden Fall hier bei U & L sein sollte.
Grundsätzlich wird für jede Datei im Dateisystem ein Inode verwendet. Wenn Ihnen die Inodes ausgehen, liegen im Allgemeinen viele kleine Dateien herum. Es stellt sich also die Frage, in welchem Verzeichnis sich eine große Anzahl von Dateien befindet.
In diesem Fall ist das Dateisystem, um das es uns geht, das Root-Dateisystem. Daher /
können wir den folgenden Befehl verwenden:
find / -xdev -printf '%h\n' | sort | uniq -c | sort -k 1 -n
Dadurch wird eine Liste aller Verzeichnisse im Dateisystem erstellt, denen die Anzahl der Dateien (und Unterverzeichnisse) in diesem Verzeichnis vorangestellt ist. Somit befindet sich das Verzeichnis mit der größten Anzahl von Dateien am unteren Rand.
In meinem Fall ergibt sich Folgendes:
1202 /usr/share/man/man1
2714 /usr/share/man/man3
2826 /var/lib/dpkg/info
306588 /var/spool/postfix/maildrop
Also /var/spool/postfix/maildrop
verbraucht im Grunde alle Inodes.
Beachten Sie, dass diese Antwort drei Vorbehalte enthält, die ich mir vorstellen kann. Mit Zeilenumbrüchen im Pfad wird nicht richtig umgegangen. Ich weiß, dass mein Dateisystem keine Dateien mit Zeilenumbrüchen enthält, und da dies nur für den menschlichen Verzehr verwendet wird, ist das potenzielle Problem keine Lösung wert (und man kann das \n
mit \0
und die Verwendung sort -z
oben immer ersetzen ). Es wird auch nicht behandelt, wenn die Dateien auf eine große Anzahl von Verzeichnissen verteilt sind. Dies ist jedoch unwahrscheinlich, daher halte ich das Risiko für akzeptabel. Es werden auch mehrere Male Hardlinks zu derselben Datei gezählt (also nur ein Inode verwendet). Auch hier ist es unwahrscheinlich, dass falsch positive Ergebnisse erzielt werden
Der Hauptgrund, warum ich keine der Antworten auf die Stapelüberlaufantwort mochte, ist, dass alle Dateisystemgrenzen überschreiten. Da sich mein Problem im Root-Dateisystem befand, bedeutet dies, dass es jedes einzelne gemountete Dateisystem durchquert. Werfen -xdev
auf den Fund Befehle würden nicht einmal richtig funktionieren.
Die am häufigsten gewählte Antwort lautet beispielsweise:
for i in `find . -type d `; do echo `ls -a $i | wc -l` $i; done | sort -n
Wenn wir dies stattdessen auf ändern
for i in `find . -xdev -type d `; do echo `ls -a $i | wc -l` $i; done | sort -n
Obwohl /mnt/foo
es sich um ein Mount handelt, handelt es sich auch um ein Verzeichnis im Root-Dateisystem, so dass es auftaucht find . -mount -type d
und dann an das weitergeleitet wird ls -a $i
, das in das Mount eintaucht.
In find
meiner Antwort wird stattdessen das Verzeichnis jeder einzelnen Datei auf dem Mount aufgelistet. Also im Grunde mit einer Dateistruktur wie:
/foo/bar
/foo/baz
/pop/tart
wir landen mit
/foo
/foo
/pop
Wir müssen also nur die Anzahl der doppelten Zeilen zählen.
/tmp
und später wird das System so konfiguriert, dass es ein tmpfs anhängt/tmp
. Dann können Sie die Dateien nichtfind
alleine finden. Unwahrscheinlich senario, aber erwähnenswert.-printf
anscheinend eine GNU-Erweiterung zu finden ist, da die in OS X verfügbare BSD-Version diese nicht unterstützt.Dies wird von hier aus auf Geheiß des Fragestellers neu gepostet:
Und wenn Sie im selben Dateisystem bleiben möchten, tun Sie Folgendes:
Hier ist ein Beispiel für die Ausgabe:
JETZT MIT LS:
Einige Personen gaben an, dass sie keine aktuellen coreutils haben und die Option --inodes für sie nicht verfügbar ist. Also, hier ist ls:
Wenn Sie neugierig sind, die Herz-und-Seele dieser langweilig bisschen
regex
es ersetzt diefilename
in jedem derls's
rekursiven Suchergebnisse mit dem Verzeichnisnamen , in dem es gefunden wurde. Von da an müssen Sie nur nochmalige Inode-Nummern auspressen, dann nochmalige Verzeichnisnamen zählen und entsprechend sortieren.Die
-U
Option ist besonders hilfreich bei der Sortierung, da sie die Verzeichnisliste nicht speziell sortiert, sondern in der ursprünglichen Reihenfolge - oder mit anderen Worten nachinode
Nummer - anzeigt.Und das ist natürlich
-1
unglaublich hilfreich, da es ein einziges Ergebnis pro Zeile sicherstellt, unabhängig davon, ob möglicherweise neue Zeilen in den Dateinamen enthalten sind oder andere auffallend unglückliche Probleme, die auftreten können, wenn Sie versuchen, eine Liste zu analysieren.Und natürlich
-A
für alle und-i
für inode und-R
für rekursiv und das ist das lange und kurze.Die zugrunde liegende Methode besteht darin, dass ich jeden Dateinamen von ls durch den darin enthaltenen Verzeichnisnamen in sed ersetze. Daran anknüpfen ... Nun, ich bin selbst ein bisschen verschwommen. Ich bin mir ziemlich sicher, dass die Dateien genau gezählt werden, wie Sie hier sehen können:
Dies liefert mir ziemlich identische Ergebnisse wie der
du
Befehl:DU:
LS:
Ich denke, die
include
Sache hängt nur davon ab, auf welches Verzeichnis das Programm zuerst schaut - weil sie die gleichen Dateien und fest verbunden sind. Irgendwie gefällt mir das Ding oben. Daran könnte ich mich jedoch irren - und ich begrüße die Korrektur ...DU DEMO
Erstellen Sie ein Testverzeichnis:
Einige Kinderverzeichnisse:
Machen Sie einige Dateien:
Einige Hardlinks:
Schauen Sie sich die Hardlinks an:
Sie werden alleine gezählt, gehen aber ein Verzeichnis hoch ...
Dann habe ich mein Skript von unten ausgeführt und:
Und Graemes:
Ich denke, das zeigt, dass der einzige Weg, Inodes zu zählen, der Inode ist. Und weil das Zählen von Dateien das Zählen von Inodes bedeutet, können Sie Inodes nicht doppelt zählen - um Dateien genau zu zählen, können Inodes nicht mehr als einmal gezählt werden.
quelle
--inodes
? welche "varianten" / "aromen" / "posix-wannabes" / "implementierungen" / was haben sie?Ich habe diese Antwort von SO Q & A mit dem Titel: Wo werden alle meine Inodes verwendet? als unser NAS vor ca. 2 Jahren ausgegangen ist:
Beispiel
Überprüfen der Inodes des Geräts
Abhängig von Ihrem NAS wird möglicherweise kein voll funktionsfähiger
df
Befehl angeboten. In diesen Fällen können Sietune2fs
stattdessen auf Folgendes zurückgreifen :Dateisystemgrenzen überschreiten
Mit dem
-xdev
Schalter könnenfind
Sie die Suche auf das Gerät beschränken, auf dem Sie die Suche starten.Beispiel
Angenommen, ich habe mein
/home
Verzeichnis automatisch über NFS-Freigaben von meinem NAS bereitgestellt, dessen Name mulder ist.Beachten Sie, dass der Einhängepunkt weiterhin als lokal für das System betrachtet wird.
Wenn ich jetzt initiiere
find
:Es wurde
/home
aber keiner der automatisch gemounteten Inhalte gefunden, da diese sich auf einem anderen Gerät befinden!Dateisystemtypen
Sie können den Schalter auf verwenden
find
, um-fstype
zu steuern, in welche Art von Dateisystemen gesuchtfind
wird.Beispiel
Welches Dateisystem habe ich?
So können Sie die Überfahrt steuern:
nur ext3
nur nfs
ext3 & ext4
quelle
/
beispielsweise alles voll ist und Sie Netzwerk-Dateisysteme bereitgestellt haben, möchten Sie nicht in die Netzwerk-Dateisysteme eintauchen.-fstype
to steuernfind
.-xtype
Dateisysteme ausgeschlossen sind, sondern den Dateityp. Ichfind . \( -fstype nfs -prune \)
find
Dateisystemgrenzen überschritten werden. In seiner Ex. Er erwähnt "Wenn / voll ist und Sie Netzwerk-Dateisysteme gemountet haben, möchten Sie nicht in die Netzwerk-Dateisysteme eintauchen".Befehl zum Finden der verwendeten Inode:
quelle
/
Verwenden Sie den folgenden Befehl, um die detaillierte Inode-Verwendung für aufzulisten :quelle
Antworten Sie auf jeden Fall mit maximalen Upvotes, um das Konzept der Inodes unter Linux und Unix zu verstehen. Es hilft jedoch nicht wirklich, wenn es um das eigentliche Problem des Löschens oder Entfernens der Inodes von der Festplatte geht. Eine einfachere Möglichkeit, dies auf Ubuntu-basierten Systemen zu tun, besteht darin, unerwünschte Linux-Kernel-Header und -Images zu entfernen.
Würde das für dich tun. In meinem Fall lag die Inodes-Auslastung bei 78%, weshalb ich benachrichtigt wurde.
Nach dem Ausführen des
sudo apt-get autoremove
Befehls war es auf 29% gesunkenDies war nur meine Beobachtung, die mir Zeit sparte. Die Leute finden vielleicht eine bessere Lösung als diese.
quelle
Ich finde es schneller und einfacher, mit dem folgenden Befehl einen Drilldown durchzuführen:
Sie können dann
var
zum Beispiel nachsehen, wo sich die großen Inodes mit Verzeichnissen befinden.quelle
Bisher wird bei jeder Antwort davon ausgegangen, dass sich das Problem in vielen Dateien in einem einzigen Verzeichnis befindet und nicht in vielen Unterverzeichnissen, die alle zum Problem beitragen. Glücklicherweise besteht die Lösung darin, einfach weniger Flags zu verwenden.
Oder mit kürzeren Optionen:
du --inodes -x | sort -n
. Leider haben nicht alle Versionendu
die Option inodes.quelle