Ein Kunde von mir hat heute eine E-Mail von Linode erhalten, in der er mitteilt, dass sein Server Linodes Backup-Service in die Luft gejagt hat. Warum? Zu viele Dateien. Ich lachte und lief dann:
# df -ih
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/xvda 2.5M 2.4M 91K 97% /
Mist. 2,4 Millionen Inodes im Einsatz. Was zum Teufel ist los ?!
Ich habe nach den offensichtlichen Verdächtigen gesucht ( /var/{log,cache}
und nach dem Verzeichnis, in dem alle Websites gehostet werden), aber ich finde nichts wirklich Verdächtiges. Irgendwo auf diesem Biest gibt es bestimmt ein Verzeichnis, das ein paar Millionen Dateien enthält.
Für den ersten Kontext verwenden meine ausgelasteten Server 200.000 Inodes und mein Desktop (eine alte Installation mit mehr als 4 TB verwendetem Speicher) ist nur etwas mehr als eine Million. Es gibt ein Problem.
Meine Frage ist also, wo finde ich das Problem? Gibt es eine du
für Inodes?
quelle
Antworten:
Überprüfen Sie, ob
/lost+found
ein Festplattenproblem aufgetreten ist und viele Junk-E-Mails möglicherweise fälschlicherweise als separate Dateien erkannt wurden.Überprüfen Sie
iostat
, ob in einer Anwendung noch verrückte Dateien erstellt werden.find / -xdev -type d -size +100k
Zeigt an, ob ein Verzeichnis mehr als 100 KB Speicherplatz belegt. Das wäre ein Verzeichnis, das viele Dateien enthält oder in der Vergangenheit viele Dateien enthielt. Möglicherweise möchten Sie die Größe anpassen.Ich glaube nicht, dass es eine Kombination von Optionen gibt, mit denen GNU
du
1 pro Verzeichniseintrag zählt. Sie können dies tun, indem Sie die Dateiliste mit erstellenfind
und ein wenig in awk zählen. Hier ist eindu
für Inodes. Minimal getestet, versucht nicht mit Dateinamen umzugehen, die Zeilenumbrüche enthalten.Verbrauch:
du-inodes /
. Druckt eine Liste nicht leerer Verzeichnisse mit der Gesamtzahl der darin enthaltenen Einträge und deren Unterverzeichnisse rekursiv aus. Leiten Sie die Ausgabe in eine Datei um und prüfen Sie sie nach Belieben.sort -k1nr <root.du-inodes | head
wird Ihnen die größten Straftäter erzählen.quelle
awk: line 2: find: regular expression compile failed (bad class -- [], [^] or [) [^ awk: line 2: syntax error at or near ] `/tmp/tmpw99dhs': Permission denied
Sie können mit diesem Skript überprüfen:
Dies druckt die Top-10-Unterverzeichnisse nach Anzahl der Dateien. Wenn Sie ein Top-x wünschen, ändern Sie
head
mithead -n x
, wobeix
eine natürliche Zahl größer als 0 ist.Führen Sie dieses Skript mit Root-Rechten aus, um 100% sichere Ergebnisse zu erzielen:
quelle
10: read: Illegal option -d
... hat die-d
Flagge von derread
Hoffnung befreit, dass nichts Schlimmes passieren wird. Lass es dich wissen, wenn es zu Ende ist ...Oft schneller als zu finden, wenn Ihre Suchdatenbank auf dem neuesten Stand ist:
Dadurch wird die gesamte Suchdatenbank gesichert, alles nach dem letzten '/' im Pfad entfernt und durch Sortieren und "uniq -c" die Anzahl der Dateien / Verzeichnisse pro Verzeichnis ermittelt. "sort -n" wurde an tail weitergeleitet, um die zehn Verzeichnisse mit den meisten Dingen darin zu erhalten.
quelle
find /path/to/parent -xdev > filelist
sed an, Eingaben aus dieser Liste zu lesen.Ein weiterer Vorschlag:
http://www.iasptk.com/20314-ubuntu-find-large-files-fast-from-command-line
Verwenden Sie diese Suchvorgänge, um die größten Dateien auf Ihrem Server zu finden.
Finden Sie Dateien über 1 GB
Finden Sie Dateien über 100 MB
Finden Sie Dateien über 10 MB
Der erste Teil ist der Befehl find, der das Flag "-size" verwendet, um Dateien mit unterschiedlichen Größen in Kilobyte zu finden.
Das letzte Bit am Ende, das mit "-exec" beginnt, ermöglicht die Angabe eines Befehls, den wir für jede gefundene Datei ausführen möchten. Hier der Befehl "ls -lh", der alle Informationen enthält, die beim Auflisten des Inhalts eines Verzeichnisses angezeigt werden. Das h gegen Ende ist besonders hilfreich, da es die Größe jeder Datei in einem für Menschen lesbaren Format ausgibt.
quelle
Dies funktionierte für mich, als der andere auf Android durch die Shell gescheitert ist:
quelle
Ich nutze gerne so etwas wie
du --inodes -d 1
ein Verzeichnis zu finden, das entweder rekursiv oder direkt viele Dateien enthält.Diese Antwort gefällt mir auch: https://unix.stackexchange.com/a/123052
quelle