Mit lsof Speicherplatz von gelöschten offenen Dateien finden & freigeben

Bei Linux kann es manchmal zum Phänomen kommen, dass viel Speicherplatz verbraucht wird, aber tatsächlich gar nicht so viel auf der Disk vorhanden scheint, wenn man alle Files zusammen zählt:

[root@host ~]# df -h /usr/
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              22G   20G  357M  99% /usr
 
[root@host ~]# du -sh /usr/
<ol>
12G     /usr/
</ol>

In diesem Beispiel wird mit df auf /usr ein Speicherplatzverbrauch von 20GB angezeigt; tatsächlich sind aber nur 12GB mit Dateien belegt, wenn man diese mit du zusammen zählt. – Wo sind also die restlichen 8GB?

Grund dafür ist, wenn man einem Prozess, der gerade eine Datei schreibt, ihm diese Datei löscht. So wird der Prozess nicht benachrichtigt, dass die Datei nicht mehr im Filesystem ist und er schreibt weiterhin auf die Festplatte, resp. in das sog. "File Handle" wie das ein Programmierer ausdrücken würde.

Solche Prozesse, die gelöschte Dateien noch offen haben, findet man mit dem lsof Kommando:

[root@host ~]# lsof -a +L1
COMMAND  PID   USER   FD   TYPE DEVICE       SIZE NLINK    NODE NAME
perl    5844 oracle    5w   REG    8,3    4194360     0 1337313 /usr/local/myapp.log (deleted)

Startet man dann den entsprechenden Prozess neu, wird der Platz wieder frei gegeben.

Hinweis
Grundsätzlich sollte man, wenn man files löscht, sicherstellen, dass diese nicht gerade beschrieben werden (gilt besonders für logfiles).

So sollte man bei "aktiven" Dateien am besten vorher den Prozess beenden, der darauf schreibt, oder nach dem löschen diesen neu starten.

Quellen

http://www.jfranken.de/homepages/johannes/vortraege/lsof_inhalt.de.html

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.