Schnelle Methode, um die tatsächliche Verzeichnisgröße unter Linux / BSD zu ermitteln

7

Was ist der schnellste Weg, um die tatsächliche Verzeichnisgröße zu berechnen? Ich ertappe mich irgendwie dabei, dass ich das sehr brauche.

Einfach machen:

# du -hs / dir

Ist zu langsam. Gibt es einen Dienst, den ich ausführen könnte, der regelmäßig Verzeichnisgrößen berechnet und zur späteren Bezugnahme zwischenspeichert? (so etwas wie eine Lokalisierungsdatenbank)

Karolis T.
quelle

Antworten:

6

Leider kenne ich keine, aber es sollte nicht zu schwer sein, eine zu schreiben. Einmal in der Nacht rennen

# du -a / > /var/lib/filesizes.txt. 

Dann brauchen Sie nur noch ein kleines Skript, um diese zusammenzufassen. Etwas wie:

# perl -ne 'BEGIN { $total = 0 } if ($_ =~ m/(\d+)\s+\/var\/www\//) { $total+=$1;} END {print "$total\n";}' /var/lib/filesizes.txt

Wenn Sie etwas mehr synchronisieren möchten, müssen Sie etwas schreiben, das inotify verwendet, um herauszufinden, wann das Dateisystem eine Datenbank ändert und aktualisiert, was wahrscheinlich so etwas wie bdb wäre.

David Pashley
quelle
Was ist mit der überflüssigen Verwendung von BEGIN / END?
Artem Russakovskii
Schau dir an, was -n macht.
David Pashley
2

Früher hatte ich einen Cron-Job, der die Ausgabe von 'du -htX --max-depth = 3' ( oder etwas Ähnlichem, es sind einige Jahre her ) in eine Textdatei umleitete . Dann ließ ich munin ein rrdtool-Diagramm mit der Datei als Eingabe erstellen. Es war hackig, aber es gab mir auf einen Blick eine Vorstellung davon, wie viel Speicherplatz unsere Backups beanspruchten und welche Speichertrends für eine etwas granulare Verzeichnishierarchie erforderlich waren.

Wenn Sie eine Desktop-Umgebung auf der betreffenden Box haben, ist FileLight fantastisch. Es ist ziemlich schnell und ermöglicht es Ihnen, einen Drilldown in einem Verzeichnisbaum durchzuführen und diesen Unterbaum nur dann erneut zu scannen, wenn Sie eine aktualisierte Ansicht erhalten möchten. Sie können sehr gut einmal am Tag einen vollständigen Scan durchführen und dann das Programm den ganzen Tag geöffnet lassen, ohne jemals ein Update durchzuführen.

Gazzonyx
quelle
1

Wenn dies eine Nagios-Stilprüfung für eine Verzeichnisgröße verwenden soll, können Sie Folgendes tun

Sie können diesen Cron-Eintrag haben:

* / 5 * * * * root du -s / path / to / some / dir> /tmp/directory_usage.tmp && / bin / mv /tmp/directory_usage.tmp / tmp / directory_usage

Dann können Sie einfach ein Skript verwenden, um den Inhalt von / tmp / directory_usage sofort abzurufen.

Offensichtlich gibt es eine Racebedingung, wenn das Verzeichnis sehr groß wird. (dh du -s beginnt in der Nähe der 5-Minuten-Marke zu dauern.)

Eine andere Möglichkeit besteht darin, mit find eine Liste der Dateigrößen in einem Verzeichnis zu erstellen und diese entweder in einer Flatfile oder einer Dateidatenbank zu speichern (wenn Sie vorhaben, viele Verzeichnisse gleichzeitig zu erstellen).

und eine letzte Möglichkeit besteht darin, find zu verwenden, um regelmäßig eine Liste von Dateien abzurufen, deren Änderungszeit aktueller ist als die letzte Ausführung, und die Dateigrößen im Wesentlichen mit einer Datenbankstruktur zu synchronisieren. Dies hängt natürlich alles davon ab, was Sie erreichen möchten Ihre Frage

Brendan
quelle