it-swarm.com.de

So geben Sie die Inode-Nutzung frei

Ich habe ein Festplattenlaufwerk mit einer Inode-Auslastung von 100% (mit df -i Befehl). Nach dem Löschen von Dateien bleibt die Nutzung jedoch zu 100% erhalten.

Was ist dann der richtige Weg?

Wie ist es möglich, dass ein Laufwerk mit geringerem Speicherplatzbedarf einen höheren Inode-Verbrauch als ein Laufwerk mit höherem Speicherplatzbedarf aufweist?

Ist es möglich, wenn ich viele Dateien zip würde, die die Anzahl der verwendeten Inodes reduzieren?

240
neversaint

Es ist für eine Festplatte recht einfach, eine große Anzahl von Inodes zu verwenden, selbst wenn die Festplatte nicht sehr voll ist.

Eine Inode ist einer Datei zugeordnet. Wenn Sie also eine Unmenge von Dateien mit jeweils 1 Byte haben, werden Ihnen die Inodes lange vor der Festplattenauslastung ausgehen.

Es ist auch möglich, dass das Löschen von Dateien die Anzahl der Inodes nicht verringert, wenn die Dateien mehrere feste Links haben. Wie gesagt, Inodes gehören zur Datei, nicht der Verzeichniseintrag. Wenn mit einer Datei zwei Verzeichniseinträge verknüpft sind, wird der Inode nicht freigegeben, wenn einer gelöscht wird.

Darüber hinaus können Sie einen Verzeichniseintrag löschen. Wenn die Datei jedoch 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 mehr die Dateien offen halten.

Wenn Sie das 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:

#!/bin/bash
# count_em - count files in all subdirectories under current directory.
echo 'echo $(ls -a "$1" | wc -l) $1' >/tmp/count_em_$$
chmod 700 /tmp/count_em_$$
find . -mount -type d -print0 | xargs -0 -n1 /tmp/count_em_$$ | sort -n
rm -f /tmp/count_em_$$
154
paxdiablo

Wenn Sie sehr unglücklich sind, haben Sie ungefähr 100% aller Inodes verwendet und können das Scipt nicht erstellen. Sie können dies mit df -ih Überprüfen.

Dann kann Ihnen dieser Bash-Befehl helfen:

Sudo find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n

Und ja, das wird einige Zeit dauern, aber Sie können das Verzeichnis mit den meisten Dateien finden.

185
simon

Meine Situation war, dass ich keine Inodes mehr hatte und bereits alles gelöscht hatte, was ich konnte.

$ df -i
Filesystem     Inodes  IUsed  IFree IUse% Mounted on
/dev/sda1      942080 507361     11  100% /

Ich bin auf einem Ubuntu 12.04LTS und konnte den alten Linux-Kernel nicht entfernen, der etwa 400.000 Inodes in Anspruch nahm, weil apt wegen eines fehlenden Pakets defekt war. Und ich konnte das neue Paket nicht installieren, weil mir die Inodes ausgegangen waren und ich feststeckte.

Am Ende habe ich ein paar alte Linux-Kernel von Hand gelöscht, um ungefähr 10.000 Inodes freizugeben

$ Sudo rm -rf /usr/src/linux-headers-3.2.0-2*

Dies war genug, um das fehlende Paket zu installieren und mein Apt zu reparieren

$ Sudo apt-get install linux-headers-3.2.0-76-generic-pae

und dann entferne den Rest des alten Linux-Kernels mit apt

$ Sudo apt-get autoremove

die Dinge sind jetzt viel besser

$ df -i
Filesystem     Inodes  IUsed  IFree IUse% Mounted on
/dev/sda1      942080 507361 434719   54% /
65
LNamba

Meine Lösung:

Versuchen Sie herauszufinden, ob dies ein Inodes-Problem ist mit:

df -ih

Versuchen Sie, Stammordner mit einer großen Anzahl von Inodes zu finden:

for i in /*; do echo $i; find $i |wc -l; done

Versuchen Sie, bestimmte Ordner zu finden:

for i in /src/*; do echo $i; find $i |wc -l; done

Wenn dies Linux-Header sind, versuchen Sie, älteste zu entfernen mit:

Sudo apt-get autoremove linux-headers-3.13.0-24

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:

Sudo apt-get autoremove -f

Das hat mein Problem gelöst.

43
dardarlt

Ich hatte das gleiche Problem, das durch Entfernen der Verzeichnissitzungen von PHP behoben wurde

rm -rf /var/lib/php/sessions/

Es kann unter /var/lib/php5 Sein, wenn Sie eine ältere PHP-Version verwenden.

Erstellen Sie es mit der folgenden Berechtigung neu

mkdir /var/lib/php/sessions/ && chmod 1733 /var/lib/php/sessions/

Die Standardberechtigung für das Verzeichnis unter Debian zeigte drwx-wx-wt (1733)

10
Anyone_ph

Wir haben dies bei einem HostGator-Konto (das allen Hosts Inode-Beschränkungen auferlegt) nach einem Spam-Angriff festgestellt. 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 Shell ausführen:

/usr/local/cpanel/bin/purge_dead_comet_files
2
designgroop

Wir hatten kürzlich ein ähnliches Problem: Wenn ein Prozess auf eine gelöschte Datei verweist, wird der Inode nicht freigegeben. Sie müssen also lsof/überprüfen und töten/neu starten, um die Inodes freizugeben.

Korrigieren Sie mich, wenn ich hier falsch liege.

1
Razal

Wie bereits erwähnt, können dem Dateisystem die Inodes ausgehen, wenn viele kleine Dateien vorhanden sind. Ich habe einige Mittel bereitgestellt, um Verzeichnisse zu finden, die die meisten Dateien enthalten hier .

1
jarno

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 Auslastung. Befreien Sie Inodes, indem Sie den eaccelerator-Cache löschen In/var/cache/eaccelerator, wenn Sie weiterhin Probleme haben.

rm -rf /var/cache/eaccelerator/*

(oder was auch immer dein Cache-Verzeichnis ist)

1
supershwa

Mit RSYNC können Sie die große Anzahl von Dateien löschen

rsync -a --delete blanktest/ test/

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/was-ist-die-schnellste-Methode-zum-Löschen-von-Dateien-in-linux

1
VIGNESH

Wenn Sie Docker verwenden, entfernen Sie alle Bilder. Sie nutzten viel Platz ....

Stoppen Sie alle Container

docker stop $(docker ps -a -q)

Alle Container löschen

docker rm $(docker ps -a -q)

Alle Bilder löschen

docker rmi $(docker images -q)

Funktioniert für mich

0
Pankaj Shinde