df -l zeigt 100% voll an, die Datei wurde jedoch entfernt

1413
capser

Ich habe eine Meldung erhalten, dass eine lokale Festplatte voll ist.

dm@fooserv:/local/data/plog $ df -l Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/rootvg-datavol 121790564 115659468 0 100% /local/data tmpfs 102400 1028 101372 2% /var/asagent/lib/asagen 

Ich überprüfte das Verzeichnis und sah die Datei.

user@fooserv:/local/data/plog $ ls -ltr total 84926904 lrwxrwxrwx 1 user ers_gsd 37 Aug 15 03:00 bomb.log -> /local/data/plog/bomb.31655.log -rw-rw-rw- 1 user ers_gsd 0 Aug 15 03:00 recovery.log drwxrwxrwt 2 user ers_gsd 4096 Aug 15 03:00 log/ -rw-rw-rw- 1 user ers_gsd 0 Aug 15 03:00 dropping.log -rw-rw-rw- 1 user ers_gsd 10109 Aug 15 09:20 proc_fooserv.log -rw-rw-rw- 1 user ers_gsd 381083 Aug 15 10:25 trip_bomb.rip.1.log -rw-rw-rw- 1 user ers_gsd 60563456 Aug 15 13:35 bomb.31655.log -rw-rw-rw- 1 user ers_gsd 0 Aug 15 13:37 bomb.stats -rw-rw-rw- 1 user ers_gsd 86819237888 Aug 15 13:37 process-one.log 

Ich habe herausgefunden, welcher Prozess die Dateien erstellt hat, und hat sie getötet:

user@fooserv:/local/data/plog $ ps -ef | grep 12077 user 12077 1 0 09:20 ? 00:00:00 /bin/bash /home/user/bin/process_big.sh /local/data/plog/process-one.log user 12085 12077 0 09:20 ? 00:00:35 tail -f /local/data/plog/process-one.log user 12088 12077 0 09:20 ? 00:01:31 grep ERR user 12095 12077 0 09:20 ? 00:02:06 grep -v FIXME user 12098 12077 61 09:20 ? 02:38:56 /bin/bash /home/user/bin/process_big.sh /local/data/plog/process-one.log user 22836 32756 0 13:36 pts/0 00:00:00 grep 12077 user@fooserv:/local/data/plog $ kill 12098 user@fooserv:/local/data/plog $ kill 12100 

Ich habe die Datei entfernt:

Benutzer @ fooserv: / local / data / plog $ rm process-one.log

der df sagt immer noch, dass das verzeichnis voll ist:

dm@fooserv:/local/data/plog $ df -l Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/rootvg-datavol 121790564 115659468 0 100% /local/data tmpfs 102400 1028 101372 2% /var/asagent/lib/asagent user@fooserv:/local/data/plog $  ~ 
0
Ich bin mir nicht sicher, wie ich helfen soll (sorry), aber +1 für die gut dokumentierte Frage. Nate vor 10 Jahren 0

4 Antworten auf die Frage

2
R J

Es wird versucht zu prüfen, ob der Prozess noch läuft, wodurch die Dateiressourcen angehalten werden.

lsof -nP | grep '(deleted)' 

Sollte Ihnen einen Ausgangspunkt geben.

0
hymie

Bist du sicher, dass du den richtigen Prozess erledigt hast? Es sieht so aus, 12077als ob die Datei die betreffende Datei öffnet / erstellt / enthält.

Wenn ich eine Datei entfernt habe, ohne einen Prozess zu beenden - wird die Datei dadurch gesperrt? - Ich sehe nicht und Inodes für die Datei capser vor 10 Jahren 0
Beim "Entfernen einer Datei" wird nur der Link für den zukünftigen Zugriff auf diese Datei entfernt. Solange die Datei von einem oder mehreren aktiven laufenden Programmen "in Verwendung" ist, markiert das zugrunde liegende Dateisystem den Speicherplatz weiterhin als "verwendet". Sie können nicht mit einem neuen Prozess darauf zugreifen, da der Speicherplatz im Dateisystem nicht zugänglich ist. Das Programm, das diesen Dateibereich bereits verwendet, hat es immer noch, und es ist immer noch aktiv und wird immer noch verwendet. hymie vor 10 Jahren 1
0
Ian McGowan

Hymie hat wahrscheinlich Recht - entweder haben Sie den falschen Prozess beendet oder die Datei ist bei mehr als einem Prozess geöffnet. Beim Löschen der Datei wurde der Inode aus der Verzeichnistabelle entfernt. Der Speicherplatz wird jedoch erst freigegeben, wenn er von jedem Prozess, der die Datei verwendet, geschlossen wird. Es ist an sich nicht gesperrt, aber es gibt einen Zähler, der Null sein muss, bevor der Speicherplatz freigegeben wird.

Versuchen Sie es mit lsof. Und da Sie die Datei bereits entfernt haben, sehen Sie, was im Verzeichnis geöffnet ist:

$ lsof + D / local / data / plog

Oder eine der anderen Beschwerden von lsof: http://www.thegeekstuff.com/2012/08/lsof-command-examples/

0
Mircea

Ich habe diese nette Erklärung hier gefunden:

https://access.redhat.com/solutions/2316

Wie in der Antwort lsof | grep deletedvon RJ ist dies eine große Hilfe. Nachdem ich die Hauptstraftäter (dh mehrere Dutzend GB-Dateien) echo > /proc/pid/fd/fd_numberidentifiziert habe, habe ich verwendet, wobei PID und FD wie im obigen Link angegeben sind.

Es wird Sudo erfordern. Auch ein Neustart hilft.

Der verknüpfte Hinweis war besonders nützlich, da wir die Maschine nicht neu starten mussten.