Programme zum Analysieren der Speicherbelegung

Aus LinuxUser 06/2011

Programme zum Analysieren der Speicherbelegung

© Studio Porto Sabbia, 123rf.com

Spürnasen

Allzu schnell geht der Platz auf die Festplatte zur Neige. Aber bevor Sie eine neue kaufen, lohnt es, auf dem Datenträger nach den Speicherfressern zu fahnden. Dazu gibt es mehrere Ansätze.

In Zeiten von bezahlbaren Terabyte-Festplatten und dem Einsatz von Cloud Computing scheint stets genügend freier Speicherplatz vorhanden. Falls nicht, reicht der Gang zum nächsten Computermarkt, um eine größere Festplatte zu erwerben und die bestehende zu ergänzen oder ersetzen. Das nachfolgende Einrichten und Benutzen der neuen Festplatte dauert und wäre vielleicht gar nicht notwendig gewesen: Als Alternative käme eine vorherige Recherche nach den Daten, die am meisten Platz belegen, in Frage.

Oft fehlt jedoch das Wissen darüber, wie das System die Daten auf dem Speichermedium ablegt. Der Fokus in diesem Beitrag liegt zunächst auf den Programmen, die sich auf jedem Linux-System befinden. Das dabei erworbene Grundwissen hilft dabei, komplexere graphische Programme anzuwenden und deren Ausgaben korrekt zu deuten.

Alles normal

Das Kommando ls (“list segments”) zeigt mit der Option -l die Daten in einem langen, ausführlichen Format an. So sehen Sie unter anderem die Größe der Dateien und der Verzeichnisse in Bytes. Die Option -h beziehungsweise die Langform --human-readable stellen die Zahl in Form von KBytes, MBytes beziehungsweise GBytes dar. Mit der Option -S (--sort=size) sortieren Sie das Ergebnis absteigend nach Dateigröße, sodass die größten Dateien am oberen Ende der Liste stehen. Kombiniert mit der Option -r (--reverse) drehen Sie die Reihenfolge der jeweiligen Sortierung um. Um die Größe von Verzeichnissen zu ermitteln, hilft die Option -R, die rekursiv alle Unterverzeichnisse des angegebenen Verzeichnisses mit einbezieht (Listing 1).

Listing 1

$ ls -lhR test
test:
insgesamt 8,0K
drwxr-xr-x 2 frank frank 4,0K 7. Mär 16:03 nochwas
-rw-r--r-- 1 frank frank 1,5K 7. Mär 16:00 datei1
test/nochwas:
insgesamt 4,0K
-rw-r--r-- 1 frank frank 5 7. Mär 19:03 datei2

Für die Größe eines Verzeichnisses ist nicht nur die Summe der Größe der einzelnen Dateien maßgeblich, sondern zusätzlich die Verschachtelungstiefe und die dafür notwendigen Verwaltungsinformationen im Dateisystem (Index-Nodes oder kurz Inodes). In Listing 1 belegt das Verzeichnis test 12 KByte im Dateisystem – 4 KByte für datei1, 4 KByte für den Verzeichniseintrag des Unterverzeichnisses nochwas und weitere 4 KByte für datei2, die in nochwas liegt. Die feste Größe erklärt sich dadurch, dass das Dateisystem jeden Eintrag in einer festen Anzahl von Blöcken speichert.

Das Unix-Kommando du (“disk usage”) zeigt ebenfalls die Informationen an. Es bezieht bei einem Aufruf automatisch alle Unterverzeichnisse mit ein. Dabei ermittelt die Option -s (“summarize”) den belegten Platz für jedes angegebene Verzeichnis. Wie bei ls sorgt die Option -h für mehr Lesbarkeit durch Angabe der passenden Größenordnung. Interessiert Sie die Ausgabe der einzelnen Teilsummen, dass heißt, die Größen der Unterverzeichnisse, dann verzichten Sie beim Aufruf von du auf die Option -s.

Im Untergrund

Das Betriebssystem legt die Daten auf einem Datenträger in einem oder mehreren Speicherstücken mit fester Größe ab, sogenannte Disk-Blöcke. Bisher waren diese stets 512 Byte groß, manche Hersteller liefern neue größere Festplatten mit einer Blockgröße von 4096 Byte aus. Wieviel Speicherplatz eine Datei tatsächlich belegt, ermitteln Sie mit dem Kommando ls und der Option -s (--size). In der Ausgabe erscheint am Anfang jeder Zeile eine Spalte mit einem Wert für die Dateigröße. Deren Wert ist das Produkt aus der Größe des Disk-Blocks und der Anzahl belegter Disk-Blöcke. Das erklärt, warum in Zeile 2 von Abbildung 1 die Größenangabe von 476K auftaucht, obwohl die Summe der Dateiengrößen 10 KByte weniger ausmacht: Es handelt sich um die Gesamtsumme des tatsächlich belegten Platzes, bezogen auf die zugeordneten Disk-Blöcke der einzelnen Einträge in den Inodes.

Abbildung 1: Listing mit der Anzahl der belegten Disk-Blöcke.

Abbildung 1: Listing mit der Anzahl der belegten Disk-Blöcke.

Das System verwendet den Platz auf dem Speichermedium also nicht nur für Daten in den Files, sondern für auch die Strukturen zum Verwalten von Dateien. In solchen Strukturen stehen zum Beispiel die Namen der Dateien, die Zugriffsrechte und statistischen Werte wie das Datum des Erstellens, der letzten Modifikation und des letzten Zugriffs in einem Eintrag. Das Kommando stat zeigt die Informationen sehr detailliert (Abbildung 2).

Abbildung 2: Das Kommando <code srcset=

stat zeigt ausführliche Informationen zu einer Datei.” width=”300″ height=”98″ /> Abbildung 2: Das Kommando stat zeigt ausführliche Informationen zu einer Datei.

Neben dem Namen des Eintrags (File:) erfahren Sie, wo und wie die Datei liegt. Das File aus dem Beispiel hat eine Dateigröße von 22791 Byte (Size:) und verteilt sich auf 48 Disk-Blöcke (Blocks:) von jeweils 4096 Byte Umfang (IO Block:). Es handelt sich hier um eine reguläre Datei, möglich wären aber beispielsweise Verzeichnisse, Links (Soft- oder Hardlink), Sockets für Netzwerkverbindungen und Named Pipes zur Interprozesskommunikation.

Freier Speicherplatz

Die am häufigsten gestellte Frage ist die nach dem noch verfügbaren Speicherplatz. Zur Anzeige dieser Informationen gibt es eine ganze Reihe von Werkzeugen. Den noch verfügbaren Speicherplatz auf einem Datenträger ermitteln Sie mit dem Werkzeug df (“diskfree”). Hilfreich ist der Parameter -h (Langform --human-readable) für die Anzeige in menschenlesbarer Form (Listing 2).

Listing 2

$ df -h /dev/sda6
Dateisystem          Größe Benut  Verf Ben% Eingehängt auf
/dev/sda6              37G   33G  2,2G  94% /home

Die Ausgabe zeigt das entsprechende Dateisystem, dessen Größe sowie den benutzten und der noch freien Speicherplatz. Am Schluss stehen der Füllstand in Prozent und das Verzeichnis, dem das Dateisystem im Verzeichnisbaum zugeordnet ist. Geben Sie beim Aufruf von df keinen weiteren Parameter an, fasst das Tool alle Dateisysteme zusammen, die in dem Verzeichnisbaum eingehängt sind.

Nur mit ausgewählten grafischen Elementen präsentieren sich Ncdu [1] und Gt5 [2]. Ncdu ist eine Ncurses-basierte Benutzeroberfläche für das Werkzeug du. Nachdem dem Durchstöbern der Verzeichnishierarchie sortiert es die Einträge absteigend nach der Größe und stellt sie in einer Liste dar. Es zeigt für jeden Eintrag den Anteil des belegten Speichers im Verhältnis zu den anderen Einträgen in der Liste an und nutzt dazu entsprechend viele Hash-Zeichen (Abbildung 3). Mit den Pfeiltasten blättern Sie in der Liste, mittels [Eingabe] wechseln Sie in ein Verzeichnis, und mit [I] öffnet sich ein Informationsfenster. Für den ausgewählten Eintrag zeigt es neben dem Namen auch den Pfad, den Dateityp sowie die Dateigröße an. Apparent size nennt die Dateigröße in Byte, Disk size berechnet den Wert auf der Anzahl der belegten Disk-Blöcke.

Abbildung 3: Dank eines einfachen Interfaces zeigt Ncdu alle Informationen sehr kompakt an.

Abbildung 3: Dank eines einfachen Interfaces zeigt Ncdu alle Informationen sehr kompakt an.

Ähnlich schlicht wirkt Gt5. Es durchforstet die Verzeichnisstruktur und erzeugt daraus eine HTML-Seite mit den einzelnen Einträgen. Die Datei liegt im Home-Verzeichnis und heißt .gt5.html. Nach dem Generieren ruft Gt5 automatisch einen Textbrowser auf, wie etwa Elinks. Abbildung 4 zeigt die erzeugte Datei im Webbrowser Iceweasel.

Abbildung 4: Gt5 liefert eine Übersicht der Dateien hübsch sortiert nach Größe.

Abbildung 4: Gt5 liefert eine Übersicht der Dateien hübsch sortiert nach Größe.

Der Midnight Commander [3] verhilft über den Eintrag Links | Info beziehungsweise Rechts | Info ebenfalls zu den Details für das jeweilige Verzeichnisfenster. Die Informationen zum ausgewählten Eintrag enthalten dessen Namen, Benutzer und Zugriffsrechte, Erstellungs-, Zugriffs- und Modifikationsdatum sowie die Anzahl Disk-Blöcke, die der Eintrag belegt. Weiterhin finden sich die Partition mit dem Namen im Verzeichnisbaum, das verwendete Dateisystem sowie der freie Speicherplatz und die verfügbaren Inodes (Freie Knoten) (Abbildung 5).

Abbildung 5: Der Midnight Commander liefert detaillierte Angaben über viele Dateiattribute.

Abbildung 5: Der Midnight Commander liefert detaillierte Angaben über viele Dateiattribute.

Als mögliche Alternativen zu Midnight Commander bieten sich Vfu [4], Vifm [5] und Tdu [6] an. Vfu ist ein Ncurses-basierter Dateimanager (Abbildung 6), Vifm erlaubt das Bedienen mit Tastenkombinationen analog zu Vi und Elinks. Tdu stellt die Verzeichnisstruktur mit dem belegten Speicherplatz als Baumstruktur dar.

Abbildung 6: Über zahlreiche Parameter steuern Sie die Anzeige von Verzeichnissen, die Vfu zusammen mit einer Größenangabe auflistet.

Abbildung 6: Über zahlreiche Parameter steuern Sie die Anzeige von Verzeichnissen, die Vfu zusammen mit einer Größenangabe auflistet.

X-Tools

KDE-Benutzern steht mit Kdiskfree ([7],[8]) ein Framework-eigenes Tool zur Verfügung. Sie finden es im Debian-Paket kdf und rufen es mit dem gleichen Namen über die Kommandozeile auf. Es zeigt den Füllstand der Datenträger und Partitionen als Zahlenwert, in Prozent sowie als Balken an (Abbildung 9). Die Köpfe der Spalten fungieren als Schaltflächen und ermöglichen damit das Sortieren nach der gewünschten Eigenschaft. Analog existiert für Gnome das Programm Treesize [9]. Es arbeitet ähnlich wie Kdiskfree, stellt aber auch die einzelnen Verzeichnisse und deren Größe dar. Beide ähneln JDiskReport ([10],[11]).

Abbildung 7: Kdiskfree zeigt den jeweiligen Füllstand des Dateisystems als Balken an.

Abbildung 7: Kdiskfree zeigt den jeweiligen Füllstand des Dateisystems als Balken an.

Die beiden Tools Filelight [12] und Baobab [13] funktionieren anders: Hier zeigen mehrfarbige Ringe und Schichten den Füllstand des Dateisystems. Der Kreis in der Mitte entspricht dem Wurzelverzeichnis. Jede weitere Schicht repräsentiert eine weitere Ebene im Verzeichnisbaum. Die Größe visualisiert das Verhältnis zum gesamten Datenbestand. Je mehr Einträge ein Verzeichnis hat, umso mehr wächst das Segment zum Kreisring. Die Farbe eines Segmentes weist über die Grundfarbe den Bezug zum Wurzelverzeichnis. So erkennen Sie auf einen Blick die einzelnen Verzeichniszweige.

Grau gefärbte äußere Segmente stehen für Dateien. Nach einem Klick auf ein Segment stellt die Software die gewählte Verzeichnisebene detaillierter dar. Über die Schaltflächen mit den Pfeilen oben links gelangen Sie zur vorhergehenden beziehungsweise übergeordneten Verzeichnisebene zurück.

Abbildung 8 zeigt ein Home-Verzeichnis, in dem beispielhaft der Ordner für die Virtualisierungsumgebung Virtualbox markiert ist. Die darin abgelegten Images mit den drei virtuellen Maschinen sind hervorgehoben, der Platzbedarf der einzelnen Images springt sofort ins Auge. Das Image für Debian 5 mit XFCE belegt am wenigsten Ressourcen, Windows XP hingegen beansprucht im Vergleich dazu mehr als das Doppelte.

Abbildung 8: Filelight zeigt die Dateien und Verzeichnisse im Home-Verzeichnis als Ringsegmenten.

Abbildung 8: Filelight zeigt die Dateien und Verzeichnisse im Home-Verzeichnis als Ringsegmenten.

Während Filelight auf die KDE-Bibliotheken aufsetzt, bildet Baobab das entsprechende Pendant für Gnome (Abbildung 9). Es bietet neben der Grafik mit den Segmenten eine Balkendarstellung. Nach dem Namen des Verzeichnisses (Ordner) folgen als weitere Spalte der Verbrauch als Balken und Prozentangabe, die Größe und die Anzahl der weiteren Einträge in diesem Verzeichnis (Objekte). Der prozentuale Wert des Platzverbrauchs bezieht sich hierbei nicht auf den gesamten belegten Speicherplatz, sondern auf den Anteil im jeweiligen Verzeichnis. Die Balkenfarbe wechselt von Grün über Gelb nach Rot, je höher der Prozentwert ausfällt.

Abbildung 9: Baobab zeigt Ordner und Segmente kombiniert in einer Ansicht.

Abbildung 9: Baobab zeigt Ordner und Segmente kombiniert in einer Ansicht.

Wer stattdessen eher auf scharfe Kanten und 3D-Effekte steht, nutzt Gdmap [14] und Kdirstat [15]. Beide Werkzeuge betrachten alle Einträge im gesamten Dateisystem. Sie stellen jede Datei als Viereck dar. Je größer die Datei, umso größer das Viereck. Damit lässt sich auf einen Blick erkennen, welche Dateien viel Platz belegen, was die Suche nach den Speicherfressern enorm verkürzt. Die Farbe der Vierecke passen Sie individuell über Einstellungen | Farbschema an. Das Zuordnen erfolgt nicht über den Inhalt, sondern über die Erweiterung einer Datei. In Abbildung 10 zeigt Gdmap alle Bilddateien gelb, Videodaten hingegen rot.

Abbildung 10: Die bunte Klötzchenwelt von Gdmap dient als Orientierungshilfe bei der Suche nach Speicherfressern.

Abbildung 10: Die bunte Klötzchenwelt von Gdmap dient als Orientierungshilfe bei der Suche nach Speicherfressern.

Wer Wert auf besonders ressourcenschonende Programme legt, findet vielleicht Gefallen an Xdu [16] und Xdiskusage [17]. Letzteres basiert auf Xdu und bietet interaktive Funktionen (Abbildung 11). Beide Werkzeuge stellen nur wenig Anforderungen an das Gesamtsystem. In der Darstellung befindet sich das übergeordnete Verzeichnis am linken Rand, Unterverzeichnisse entsprechend weiter rechts. Die Verzeichnisse bilden Rechtecke – je größer das Rechteck, umso mehr Speicherplatz belegt das Verzeichnis. Das aktuell ausgewählte Verzeichnis erhält zusätzlich einen roten Rahmen. Mit den Pfeiltasten wechseln Sie zwischen den Verzeichnisebenen.

Abbildung 11: Xdiskusage bietet einen schnellen Überblick über die Auslastung des Dateisystems.

Abbildung 11: Xdiskusage bietet einen schnellen Überblick über die Auslastung des Dateisystems.

Fazit

Mit den Bordmitteln eines Linux-Systems erheben Sie problemlos alle Informationen zu Dateien und Verzeichnissen – sowohl die Dateigröße und die Zugriffsrechte als auch den Füllstand auf den Dateisystemen. Dabei kommt es aber darauf an, die Ausgabe der Programme richtig zu deuten. Je nach Werkzeug fällt diese recht unterschiedlich aus und verwirrt mitunter.

Wer Zahlen wie Byte-Größe und Größe des Disk-Blocks richtig deutet, kommt den wahren Speicherfressern schnell auf die Spur. Dabei erleichtern die vorgestellten Werkzeuge bereits vielfach die Arbeit im Alltag. Bestimmte Funktionen fehlen jedoch noch, wie etwa das Filtern der Dateinamen anhand regulärer Ausdrücke. Während auf der Kommandozeile die Kombination aus den Kommandos find und grep zum Erfolg führt, unterstützen der Midnight Commander, Vfu und Vifm bisher Muster nur rudimentär.

Ähnliches gilt für das Durchsuchen anhand von Größenspannen. Hier bietet neben Find mit der Option -size und Grep nur noch Gt5 eine Option, mit der Sie kleine Dateien aus einer Ansicht ausblenden (bis maximal 30 Prozent Größenanteil am Volumen des Verzeichnisses).

Für eine Recherche anhand des Zeitstempels der letzten Änderung glänzt ls mit der Option -t, ebenso helfen in diesem Fall der Midnight Commander und JDiskReport weiter. JDiskReport bietet eine Übersicht des Dateizugriffs mit den Kriterien heute, gestern und im letzten Monat. Nichtsdestotrotz gilt weiterhin: Das sichere Beherrschen der Grundlagen hilft bei Situationen, in denen die grafischen Werkzeuge nicht zur Verfügung stehen. 

Glossar

Named Pipes

Benannte Pipes dienen der Kommunikation zwischen Prozessen, bei Bedarf auf verschiedenen Rechnern im Netzwerk. Sie ermöglichen es, in beide Richtungen Daten auszutauschen.

Infos

[] Die Autoren bedanken sich bei Jörg Schilling, Detlef Drewanz, Wolfram Schneider, Wolfram Eifler und Maximilian Techter für deren kritische Anmerkungen und Kommentare im Vorfeld dieses Artikels.

[1] Ncdu: http://dev.yorhel.nl/ncdu

[2] Gt5: http://gt5.sourceforge.net

[3] Midnight Commander: http://www.midnight-commander.org

[4] Vfu, http://cade.datamax.bg/vfu/

[5] Vifm, http://vifm.sourceforge.net

[6] Tdu: http://webonastick.com/tdu/

[7] Kdiskfree: Elisabeth Bauer, “Hinter den Kulissen”, EasyLinux 04/2009, http://www.easylinux.de/Artikel/ausgabe/2004/09/038-kde-tools/

[8] Kdiskfree: http://docs.kde.org/stable/en/kdeutils/kdf/main-window.html

[9] Treesize: http://treesize.sourceforge.net

[10] JDiskReport: http://www.jgoodies.com/freeware/jdiskreport/

[11] JDiskReport: Tim Schürmann, “Platz schaffen”, LinuxUser 04/2011, S. 70, https://www.linux-community.de/22929

[12] Filelight: http://www.methylblue.com/filelight/

[13] Baobab: http://www.marzocca.net/linux/baobab/

[14] Gdmap: http://gdmap.sourceforge.net/

[15] Kdirstat: http://kdirstat.sourceforge.net

[16] Xdu: http://sd.wareonearth.com/~phil/xdu/

[17] Xdiskusage: http://xdiskusage.sourceforge.net

Der Autor

Sven Guckes studierte Mathematik und Informatik an der FU Berlin. Er unterstützt einige Programme, insbesondere Mutt, Slrn, Vim, Zsh). Er hat auf vielen Events und Konferenzen, sowie bei LUGs viele Vorträge und Workshops zu Programmen, freiem Wissen und FLOSS gegeben. Darum betreute er auch seit 2003 einen Kalender zu FLOSS Events. Heute wirkt er beim Projekt GridCalendar mit.

Frank Hofmann hat Informatik an der Technischen Universität Chemnitz studiert. Derzeit arbeitet er in Berlin im Büro 2.0, einem Netzwerk von Open-Source-Experten, als Dienstleister mit Spezialgebiet Druck und Satz. Seit 2008 koordiniert er das Regionaltreffen der Linux User Groups aus der Region Berlin-Brandenburg.

Beide Autoren leben in Berlin und sind in der überregionalen Open-Source-Szene verankert.

LinuxUser 06/2011 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben