Kürzlich war auf meiner Linux-Serverbox eine der Festplattenpartitionen voll und musste Hunderte von MB an großen Dateien löschen, um den Speicherplatz freizugeben. Nach dem Löschen des Speicherplatzes zeigte die Partition immer noch voll und keinen freien Speicherplatz zum Speichern meiner Dateien. Später bemerkte ich zu meiner Überraschung den folgenden Unterschied:
Der Festplattennutzungsbefehl (du) zeigte den verbrauchten Speicherplatz als nur 11 GB an!
-bash-3.2# du -chs /myhome/ 11G /myhome/ 11G total -bash-3.2#
Der obige Befehl enthält keine versteckten Punktdateien und -verzeichnisse. Verwenden Sie den folgenden Befehl, um die Festplattennutzung auch durch versteckte Punktdateien und -verzeichnisse zu finden.
-bash-3.2#du -sch .[!.]* /myhome/*
Wenn Sie die genauen Dateien und ihre absoluten Pfade noch weiter auflisten möchten, verwenden Sie den folgenden Befehl:
-bash-3.2# du -h -x /myhome/*
Aber der df-Befehl zeigte, dass die Festplattenpartition /myhome/ voll ist!!!
-bash-3.2$ df -h Filesystem Size Used Avail Use% Mounted on /dev/cciss/c0d0p8 20G 14G 4.7G 75% / /dev/cciss/c0d0p9 9.7G 1.3G 8.0G 14% /tmp /dev/cciss/c0d0p3 30G 4.3G 24G 16% /usr /dev/cciss/c0d0p10 44G 41G 0G 100% /myhome /dev/cciss/c0d0p6 30G 27G 670M 98% /var /dev/cciss/c0d0p5 30G 20G 8.0G 72% /opt /dev/cciss/c0d0p2 78G 21G 54G 28% /export /dev/cciss/c0d0p1 4.9G 173M 4.5G 4% /boot tmpfs 7.9G 0 7 .9G 0% /dev/shm tmpfs 491M 61M 431M 13% /var/lib/ganglia/rrds
Die Herausforderung besteht nun darin, herauszufinden, wo der verbleibende Platz ist. Ist es irgendwo versteckt?
Verwenden Sie den LSOF-Befehl, um die offen gehaltenen Dateien zu finden
Möglicherweise haben Sie einige der Dateien gelöscht, aber der Prozess wäre noch offen geblieben. Bis Sie diese Dateien schließen, wird der Speicherplatz nicht freigegeben. Unter dem Befehl „lsof“ erfahren Sie, welche gelöschten Dateien noch offen gehalten werden!
-bash-3.2# /usr/sbin/lsof | grep deleted |grep /myhome java 10249 ramya 1u REG 104,10 45866276291 4645619 /myhome/var/container.log (deleted) java 10249 ramya 2u REG 104,10 45866276291 4645619 /myhome/var/container.log (deleted)
Jetzt hätten Sie eine Ahnung, nicht wahr? Ja, die gelöschte Datei /myhome/var/container.log ist noch offen mit der Prozess-ID:10249. Wechseln Sie nun in das entsprechende Prozess-ID-Verzeichnis in /proc, wie unten gezeigt:
-bash-3.2# cd /proc/10249/fd/
Listen Sie die Dateien auf, um den Dateihandler anzuzeigen, der mit der gelöschten Datei verknüpft ist.
-bash-3.2# ls -lrt | grep /myhome/ lrwx------ 1 ramya ramya 64 Feb 13 14:04 2 -> /myhome/var/container.log (deleted) lrwx------ 1 ramya ramya 64 Feb 13 14:04 1 -> /myhome/var/container.log (deleted)
Löschen Sie nun den entsprechenden Dateihandler, um den Speicherplatz mit dem folgenden Befehl freizugeben:
-bash-3.2# cat /dev/null > /proc/10249/fd/1 -bash-3.2# cat /dev/null > /proc/10249/fd/2
Beachten Sie, dass der Inode immer noch offen wäre, aber jetzt die Länge 0 hat.
-bash-3.2# /usr/sbin/lsof | grep deleted |grep /myhome java 10249 ramya 1u REG 104,10 0 4645619 /myhome/var/container.log (deleted) java 10249 ramya 2u REG 104,10 0 4645619 /myhome/var/container.log (deleted)
Überprüfen Sie jetzt die Festplattenpartition, um ein Lächeln im Gesicht zu haben.
-bash-3.2# df -h |grep /myhome /dev/cciss/c0d0p10 44G 12G 30G 28% /myhome