Ich habe ein Festplattenlaufwerk, auf dem die Inode-Auslastung 100% beträgt (mit df -i
Befehl). Nach dem wesentlichen Löschen von Dateien bleibt die Nutzung jedoch 100%.
Was ist dann der richtige Weg?
Wie ist es möglich, dass ein Festplattenlaufwerk mit weniger Speicherplatznutzung eine höhere Inode-Auslastung aufweist als ein Festplattenlaufwerk mit einer höheren Speicherplatzauslastung?
Ist es möglich, wenn ich viele Dateien komprimiere, würde dies die Anzahl der verwendeten Inodes verringern?
linux
unix
memory-management
inode
neversaint
quelle
quelle
Antworten:
Es ist ziemlich einfach für eine Festplatte, eine große Anzahl von Inodes zu verwenden, selbst wenn die Festplatte nicht sehr voll ist.
Ein Inode wird einer Datei zugewiesen. Wenn Sie also Millionen von Dateien mit jeweils 1 Byte haben, gehen Ihnen die Inodes aus, lange bevor Ihnen die Festplatte ausgeht.
Es ist auch möglich, dass das Löschen von Dateien die Inode-Anzahl nicht verringert, wenn die Dateien mehrere feste Links haben. Wie gesagt, Inodes gehören zur Datei, nicht zum Verzeichniseintrag. Wenn mit einer Datei zwei Verzeichniseinträge verknüpft sind, wird durch Löschen eines Eintrags der Inode nicht freigegeben.
Darüber hinaus können Sie einen Verzeichniseintrag löschen. Wenn jedoch bei einem laufenden Prozess die Datei noch geöffnet ist, wird der Inode nicht freigegeben.
Mein erster Rat wäre, alle Dateien zu löschen, die Sie können, und dann die Box neu zu starten, um sicherzustellen, dass keine Prozesse übrig bleiben, die die Dateien offen halten.
Wenn Sie dies tun und immer noch ein Problem haben, lassen Sie es uns wissen.
Übrigens, wenn Sie nach Verzeichnissen suchen, die viele Dateien enthalten, kann dieses Skript helfen:
quelle
>/tmp/count_em_$$
funktioniert das nur, wenn Sie Platz dafür haben ... wenn dies der Fall ist, lesen Sie die Antwort von @ simon./tmp
nicht auf Ihre anderen Dateisysteme aus.ls -A
stattls -a
. Warum willst du zählen? und ..?Wenn Sie sehr unglücklich sind, haben Sie ungefähr 100% aller Inodes verwendet und können den Scipt nicht erstellen. Sie können dies mit überprüfen
df -ih
.Dann kann Ihnen dieser Bash-Befehl helfen:
Und ja, das wird einige Zeit dauern, aber Sie können das Verzeichnis mit den meisten Dateien finden.
quelle
awk
könnte einen Hash des Verzeichnisses und der Anzahl der Dateien behalten, ohne eine Unmenge von Zeilen zu vereinheitlichen und zu sortieren. Das heißt, vielleicht ist hier eine Verbesserung:find . -maxdepth 1 -type d | grep -v '^\.$' | xargs -n 1 -i{} find {} -xdev -type f | cut -d "/" -f 2 | uniq -c | sort -n
- Dies sortiert nur die letzte Liste.sort
möglicherweise nicht alles im Speicher bleibt und versucht wird, automatisch auf das Schreiben einer temporären Datei zurückzugreifen. Ein Prozess, der offensichtlich scheitern würde ...sort
scheiterte für mich, aber ich konnte geben,--buffer-size=10G
was funktionierte.Meine Situation war, dass ich keine Inodes mehr hatte und bereits alles gelöscht hatte, was ich konnte.
Ich bin auf einem Ubuntu 12.04LTS und konnte die alten Linux-Kernel nicht entfernen, die ungefähr 400.000 Inodes beanspruchten, weil apt wegen eines fehlenden Pakets kaputt war. Und ich konnte das neue Paket nicht installieren, weil ich keine Inodes mehr hatte und feststeckte.
Am Ende habe ich ein paar alte Linux-Kernel von Hand gelöscht, um ungefähr 10.000 Inodes freizugeben
Dies war genug, um mich dann das fehlende Paket installieren und meine Wohnung reparieren zu lassen
und entfernen Sie dann den Rest der alten Linux-Kernel mit apt
Die Dinge sind jetzt viel besser
quelle
sudo rm -rf /usr/src/linux-headers-3.2.0-2*
Wenn ich sicher bin, dass ich diesen Kernel nicht benutze?$ sudo apt-get autoremove
Allein anrufen , hat den Trick für mich getan.Meine Lösung:
Versuchen Sie herauszufinden, ob dies ein Inodes-Problem ist mit:
Versuchen Sie, Stammordner mit einer großen Anzahl von Inodes zu finden:
Versuchen Sie, bestimmte Ordner zu finden:
Wenn dies Linux-Header sind, versuchen Sie, die ältesten zu entfernen mit:
Persönlich habe ich sie in einen bereitgestellten Ordner verschoben (weil für mich der letzte Befehl fehlgeschlagen ist) und die neueste Version installiert mit:
Dies löste mein Problem.
quelle
SpamAssasin-Temp
.find /var/spool/MailScanner/incoming/SpamAssassin-Temp -mtime +1 -print | xargs rm -f
hat den Job gemacht :) Danke!for i in /usr/src/*; do echo -en "$i\t"; find $i 2>/dev/null |wc -l; done
for i in /src/*; do echo "$i, `find $i |wc -l`"; done|sort -nrk 2|head -10
Zeigen Sie die 10 größten VerzeichnisseIch hatte das gleiche Problem, behoben es durch Entfernen der Verzeichnissitzungen von PHP
Es kann unter sein,
/var/lib/php5
wenn Sie eine ältere PHP-Version verwenden.Erstellen Sie es mit der folgenden Berechtigung neu
Standardmäßige Berechtigung für Verzeichnis auf Debian angezeigt
drwx-wx-wt
(1733)quelle
rm -rf /var/lib/php/sessions/*
wäre wahrscheinlich ein besserer Befehl - es wird nicht das Sitzungsverzeichnis entfernen, nur seinen Inhalt ... Dann müssen Sie sich keine Sorgen mehr machen, es neu zu erstellenWir haben dies auf einem HostGator-Konto (das allen Hosting-Inode-Beschränkungen auferlegt) nach einem Spam-Angriff erlebt. Es hat eine große Anzahl von Warteschlangendatensätzen in /root/.cpanel/comet hinterlassen. Wenn dies passiert und Sie feststellen, dass Sie keine freien Inodes haben, können Sie dieses cpanel-Dienstprogramm über die Shell ausführen:
quelle
Sie können RSYNC verwenden, um die große Anzahl von Dateien zu löschen
Erstellen Sie einen blanktest-Ordner mit 0 Dateien, und der Befehl synchronisiert Ihre Testordner mit einer großen Anzahl von Dateien (ich habe fast 5 Millionen Dateien mit dieser Methode gelöscht).
Vielen Dank an http://www.slashroot.in/which-is-the-fastest-method-to-delete-files-in-linux
quelle
rm *
bei vielen Dateien, da der Platzhalter erweitert und jedes Argument übergeben / verarbeitet wird. Es ist jedochrm test/
in Ordnung, einentest/
Ordner mit vielen Dateien zu löschen .eaccelerator könnte das Problem verursachen, da es PHP in Blöcke kompiliert ... Ich hatte dieses Problem mit einem Amazon AWS-Server auf einer Site mit hoher Last. Geben Sie Inodes frei, indem Sie den eaccelerator-Cache in / var / cache / eaccelerator löschen, wenn Sie weiterhin Probleme haben.
(oder was auch immer dein Cache-Verzeichnis ist)
quelle
In letzter Zeit hatten wir ein ähnliches Problem: Wenn sich ein Prozess auf eine gelöschte Datei bezieht, wird der Inode nicht freigegeben. Sie müssen also lsof / überprüfen und kill / restart. Der Prozess gibt die Inodes frei.
Korrigieren Sie mich, wenn ich hier falsch liege.
quelle
Wie bereits erwähnt, gehen dem Dateisystem möglicherweise die Inodes aus, wenn viele kleine Dateien vorhanden sind. Ich habe einige Mittel bereitgestellt, um Verzeichnisse zu finden, die die meisten Dateien hier enthalten .
quelle
Späte Antwort: In meinem Fall waren es meine Sitzungsdateien unter
das waren Inodes.
Ich konnte sogar nicht meine Crontab öffnen oder ein neues Verzeichnis erstellen, geschweige denn den Löschvorgang auslösen. Da ich PHP verwende, haben wir dieses Handbuch, in dem ich den Code aus Beispiel 1 kopiert und einen Cronjob eingerichtet habe, um diesen Teil des Codes auszuführen.
Wenn Sie sich fragen, wie ich es geschafft habe, meine Crontab zu öffnen, habe ich einige Sitzungen manuell über die CLI gelöscht.
Hoffe das hilft!
quelle
Sie konnten diese Informationen sehen
quelle
Bisher gibt es viele Antworten auf diese Frage, und alle oben genannten Fragen scheinen konkret zu sein. Ich denke, Sie werden sicher sein,
stat
wenn Sie im Laufe der Zeit verwenden, aber je nach Betriebssystem können sich einige Inode-Fehler auf Sie einschleichen. Die Implementierung Ihrer eigenenstat
Anruffunktionalität64bit
zur Vermeidung von Überlaufproblemen scheint daher ziemlich kompatibel zu sein.quelle
Wenn Sie Docker verwenden, entfernen Sie alle Bilder. Sie nutzten viel Platz ....
Stoppen Sie alle Container
Löschen Sie alle Container
Löschen Sie alle Bilder
Funktioniert für mich
quelle