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

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

Ich erhielt eine Warnung, dass eine lokale Festplatte voll sei.

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 habe das Verzeichnis überprüft und die Datei gesehen.

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 sie beendet:

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 $

~

Antwort1

Versuchen Sie zu überprüfen, ob der Prozess, der dazu führt, dass die Dateiressourcen blockiert werden, noch ausgeführt wird.

lsof -nP | grep '(deleted)'

Sollte Ihnen einen Ausgangspunkt geben.

Antwort2

Sind Sie sicher, dass Sie den richtigen Prozess beendet haben? Es sieht so aus, als 12077wäre es der Prozess, der die betreffende Datei öffnet/erstellt/speichert.

Antwort3

Hymie hat wahrscheinlich recht – entweder haben Sie den falschen Prozess beendet oder mehr als ein Prozess hat die Datei geöffnet. Durch das Löschen der Datei wurde der Inode aus der Verzeichnistabelle entfernt, aber der Speicherplatz wird erst freigegeben, wenn jeder Prozess, der die Datei verwendet, sie schließt. Sie ist nicht per se gesperrt, aber es gibt einen Zähler, der Null sein muss, bevor Speicherplatz freigegeben wird.

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

$lsof +D /lokal/Daten/plog

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

Antwort4

Ich habe hier diese nette Erklärung gefunden:

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

Wie in R Js Antwort, lsof | grep deletedist eine große Hilfe. Nachdem ich die Hauptverursacher (d. h. Dateien im Umfang von mehreren zehn GB) identifiziert hatte, verwendete ich echo > /proc/pid/fd/fd_number, wobei pid und fd wie im obigen Link identifiziert werden.

Dazu ist sudo erforderlich. Ein Neustart hilft ebenfalls.

Der verlinkte Ratschlag war besonders hilfreich, da wir die Maschine nicht neu starten durften.

verwandte Informationen