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.
[stextbox id=“note“ caption=“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.[/stextbox]
Quellen
http://www.jfranken.de/homepages/johannes/vortraege/lsof_inhalt.de.html