Festplatte voll: Mit diesen 3 Linux-Kommandos ...
Virtual Server Blog
Kategorien
Archiv
Festplatte voll: Mit diesen 3 Linux-Kommandos entlarven Sie die Speicherfresser
Samstag, 23. August 2008 von Steven Zinke
"Hilfe meine Festplatte ist voll? - Wie finde ich heraus, welche Dateien den ganzen Speicher auffressen?" Anfragen dieser Art trudeln fast täglich bei uns ein. Denn immer wieder laufen Server-Festplatten aufgrund von Logfiles, heruntergeladener Software oder stark anwachsenden Datenbanken voll. In der Not müssen Sie die Speicherfresser dann zielgerichtet finden und eliminieren, damit kein Server-Absturz droht. Die besten drei Werkzeuge der Linux-Shell haben wir für Sie zusammengestellt.
Tool 1: Prüfen Sie mit "df" den noch verfügbaren Speicher
Mit dem Kommando df prüfen Sie den noch zur Verfügung stehenden Speicher auf Ihrem Server. Die Standardausgabe ist leider etwas schwer zu lesen, da die Ausgabe in 1k Blöcken erfolgt. Verwenden Sie daher den Befehl wie folgt, um eine lesbare Ausgabe zu erhalten:
df -h -T
In der Ausgabe sehen Sie schließlich, wie viel Speicherplatz noch auf den jeweiligen Partitionen frei ist.
localhost:/# df -h -T Dateisystem Typ Größe Benut Verf Ben% Eingehängt auf tmpfs tmpfs 3,0G 0 3,0G 0% /lib/init/rw tmpfs tmpfs 3,0G 0 3,0G 0% /dev/shm vzfs vzfs 1,5G 1,5G 0,0G 100% /
Tool 2: Lassen Sie sich den Speicherverbrauch pro Verzeichnis anzeigen
Nachdem Sie festgestellt haben, dass der Speicherplatz auf Ihrem Server stark ausgelastet ist, suchen Sie am besten die Ursachen. Dazu nutzen Sie das Kommando du. Das Tool ermittelt für Sie den Speicherplatzverbrauch einzelner Verzeichnisse, indem es den Speicherverbrauch der im Verzeichnis enthaltenen Dateien und Unterverzeichnisse summiert.
Mit folgendem Kommando ermitteln Sie den Speicherplatzverbrauch für alle Verzeichnisse.
du -hs /*
Der Parameter -h sorgt hierbei dafür, dass Sie Speicherplatzangaben in einer lesbaren Anzeige erfolgen. Ein Ergebnis sieht dann z.B. so aus:
localhost:/# du -hs /*
1,0K /opt
648M /root
900M /srv
1,0K /sys
600M /tmp
...
Wenn Sie nun ein großes Verzeichnis identifiziert haben, können Sie es nun genauer untersuchen. Mit folgendem Kommando listen Sie den Speicherverbauch für ein bestimmtes Verzeichnis und aller darin enthaltenen Dateien (Parameter -a) auf. Wir untersuchen hier z.B. das Verzeichnis /root.
du -ah /root
Die Ausgabe dieses Kommandos sieht dann beispielsweise wie folgt aus:
localhost:/# du -ah /root 1,0K /root/.profile 1,0K /root/.bashrc 1,0K /root/.bash_history 1,0K /root/.lesshst 648M /root/debian-40r4a-i386-CD-1.iso 648M /root
In dem Beispiel sehen Sie nun, dass besonders eine große iso-Datei immerhin 648 MB verbraucht. So können Sie zielgerichtet die Speicherfresser eines Verzeichniss finden und eliminieren.
Übrigens: Einige Ausgaben mit du können sehr lang werden. Am besten nutzen Sie dann less, um den Bildschirminhalt komfortabel zu scrollen.
du -ah / | less
Tool 3: Finden Sie gezielt große Einzeldateien
Häufig liegt die Vermutung nahe, dass einige wenige Dateien den Speicher verbrauchen. Beispielsweise hat ein Kunde kürzlich eine Server-Applikation eingesetzt und den Debugging-Modus aktiviert. Dadurch wurde eine 1,5 GB große LOG-Datei generiert, die nicht rotiert wurde. Solche einzelnen Speicherfresser finden Sie gezielt mit folgendem Kommando:
ls -lahS $(find / -type f -size +10000k)
Das Kommando setzt sich aus zwei einzelnen Kommandos zusammen: ls und find. Das Kommandos ls ist für eine formatierte Auflistung der gefundenen Dateien verantwortlich. Die Parameter haben folgende Bedeutung:
- l: Es wird das langen Listenformat genutzt, sodass alle Details der gefundenen Dateien angezeigt werden.
- a: Alle Dateien werden angezeigt, auch versteckte Dateien, die mit einen . beginnen.
- h: Größenangaben erfolgen in einem lesbaren Format
- S: Die Ergebnisliste wird nach der Dateigröße sortiert
An das ls-Kommando wird als Parameter das Ergebnis des find-Kommandos übergeben. Dafür ist das Konstrukt $(...) verantwortlich. Innerhalb der Klammerung wird das find-Kommando ausgeführt, um alle Dateien zu ermitteln, die größer als 10 MB sind. Die Parameter haben hierbei folgende Bedeutung:
- /: Dieser Parameter nennt das Verzeichnis, das durchsucht werden soll. In unserem Beispiel wird die Wurzel samt aller Unterverzeichnisse durchsucht.
- -type f: Hiermit bestimmen Sie, dass nur nach Dateien gesucht werden soll.
- -size 10000k: Schließlich geben Sie mit diesem Parameter die Mindestgröße der zu suchenden Dateien in Kilobyte an.
Das Ergebnis des Kommandos sieht dann beispielsweise so aus:
localhost:/# ls -lahS $(find / -type f -size +10000k) -rw-r--r-- 1 root root 648M 2008-08-23 20:23 /root/debian-40r4a-i386-CD-1.iso -rw-r--r-- 1 root root 19M 2008-08-23 09:12 /tmp/debug.log
Ausblick: Vermeiden Sie Speichermangel und lassen Sie sich automatisch warnen
Die Ihnen vorgestellten Tools helfen Ihnen, schnell und zielgerichtet Speicherfresser zu finden. Die beste Abwehr gegen solche Speicherplatzprobleme sind jedoch vorbeugende Maßnahmen. Sie sollten auf Ihrem Server die Speicherplatznutzung mit Quota einschränken. Am besten richten Sie auch ein Script ein, dass Sie automatisch bei Speichermangel warnt. Wie Sie ein solches Script erstellen, zeige ich Ihnen in einem meiner nächsten Beiträge.


Kommentare
Di, 30.06.2009 19:29
Wenn wir schon beim htop sind, dann sollte auch iftop nicht unerwaehnt bleiben. Ein top fu er den Netzwerkverkehr.
Fr, 26.06.2009 10:08
Hello, Do you have an English version for this article ?
Do, 25.06.2009 19:08
Obwohl Fedora schon interessan t ist, für meinen Web-Server g ilt: "Debian inside". Die Pake tverwaltung ist einfach [...]
Do, 25.06.2009 19:03
Hallo Steven, sehr schöne Akti on. Da unser Unternehmen ohneh in Fedora nutzt, habe ich glei ch mein T-Shirt eingefor [...]
Do, 25.06.2009 14:56
Hallo, in meiner Version vo n Putty (0.60) musste ich als Destination "127.0.0.1:3306" e ingeben, damit es funkti [...]