古いログイン(削除)状態ですが、申請後
> /proc/'pid'/fd/4
スペースは回収されません。
実際、ファイルサイズは0になっていますが、スペースは使い続けていますか?私は何かを忘れましたか?一種の切断操作を実行する必要がありますか?
lr-x------ 1 root root 64 Mar 10 16:11 4 -> /var/app/logs/app.log (deleted)
appl 'pid' appl 4r REG 253,2 **0** 6193157 /var/app/logs/app.log (deleted)
ベストアンサー1
実際、スペースはファイルシステムによって回収されますが、ファイルサイズは、ファイルが開いているプロセスによって次の書き込みが行われるまで一時的にゼロに縮小されます。この時点で、サイズは古いサイズと新しく作成されたデータで増加しますが、今足りないファイルの先頭が公称ゼロで埋められ、ディスク領域を占有しないファイルです。
簡単なテストでこの効果を確認できます。 10秒ごとにゆっくり更新される大容量ファイルを作成します。
$ { dd count=1k if=/dev/zero; while sleep 10;do echo hi; done; } >/tmp/big &
[2] 1050
$ pid=$!
使用されているサイズとディスク容量を確認してください。
$ ls -ls /tmp/big
516 -rw-r--r-- 1 meuh users 524516 Aug 15 15:58 /tmp/big
$ du -a /tmp/big
516 /tmp/big
$ df /tmp
Filesystem 1K-blocks Used Available Use% Mounted on
tmpfs 1966228 2924 1963304 1% /tmp
ファイルサイズは524516バイト、516ブロックで、ファイルシステムは2924ブロックを使用しました。次に>
、次のコマンドを使用してファイルを切り取り、サイズを即座に確認します。
$ > /proc/$pid/fd/1; ls -ls /tmp/big
0 -rw-r--r-- 1 meuh users 0 Aug 15 15:59 /tmp/big
0です。 10秒後にもう一度確認してください。
$ ls -ls /tmp/big
4 -rw-r--r-- 1 meuh users 524534 Aug 15 15:59 /tmp/big
$ df /tmp
Filesystem 1K-blocks Used Available Use% Mounted on
tmpfs 1966228 2416 1963812 1% /tmp
ディスクからスペースを取り戻したことがわかりますが(2924から2416を使用)、ファイルサイズはまだ同じで少し増えましたが、占めるブロック数(4、最初の数字)は非常に少なくなりますls -ls
。だから、スパース。lsof -p $pid
また、サイズの代わりにオフセットを表示します。