df -l は 100% いっぱいと表示されていますが、ファイルは削除されています

df -l は 100% いっぱいと表示されていますが、ファイルは削除されています

ローカル ディスクがいっぱいであるという警告が表示されました。

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

ディレクトリを確認すると、ファイルが見つかりました。

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

どのプロセスがファイルを作成しているかを調べて、それらを強制終了しました。

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

ファイルを削除しました:

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

df では、ディレクトリがいっぱいであると表示されます。

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 $

~

答え1

ファイル リソースが保持される原因となっているプロセスがまだ実行中かどうかを確認しようとしています。

lsof -nP | grep '(deleted)'

出発点となるはずです。

答え2

正しいプロセスを終了しましたか?12077問題のファイルを開いたり、作成したり、保持したりするプロセスのようです。

答え3

Hymie はおそらく正しいでしょう。間違ったプロセスを終了したか、複数のプロセスがファイルを開いているかのどちらかです。ファイルを削除すると、ディレクトリ テーブルから inode が削除されますが、ファイルを使用しているすべてのプロセスがファイルを閉じるまで、スペースは解放されません。厳密にはロックされていませんが、スペースが再利用される前にゼロになる必要があるカウンターがあります。

lsof を試してください。すでにファイルを削除しているので、ディレクトリで何が開いているかを確認します。

$lsof +D /local/data/plog

あるいは、lsof の他の呪文の 1 つ:http://www.thegeekstuff.com/2012/08/lsof-command-examples/

答え4

ここで素晴らしい説明を見つけました:

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

R J の回答にあるように、lsof | grep deletedは非常に役立ちます。主な違反者 (つまり、数十 GB のファイル) を特定したら、 を使用しましたecho > /proc/pid/fd/fd_number。ここで、pid と fd は上記のリンクのように識別されます。

sudo が必要になります。また、再起動も役立ちます。

マシンを再起動しないという制約があったため、リンクされたアドバイスは特に役に立ちました。

関連情報