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 12077
wä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 deleted
ist 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.