結論
削除対象ファイルを開いているプロセスがあるから
詳細
今回起きたこと
ログファイルが肥大し、ディスク使用量を圧迫していたので
$ rm log.text
でログファイルを削除した。
しかしその後ディスク使用量を確認しても、
$ df -h
Filesystem Size Used Avail Use% マウント位置
/dev/sda1 20G 20G 0G 100% /
となり、ディスク使用量が減らない。
rmの挙動について
Man page of RM
の通り、rmはFILEを削除(unlink)する。
unlinkは
Man page of UNLINK
の通り、
名前を削除し、場合によってはそれが参照しているファイルも削除する
という挙動になっている。この「場合によっては」の「場合」とは、
もしその名前がファイルへの最後のリンク (link) であり、 どのプロセスもそのファイルをオープン (open) していなければ
ということである。つまり、rmしたファイルのリンクが別に存在しているか、プロセスがファイルをオープンしている場合はrmしてもファイルが削除されない。
今回は、プロセスを確認したところ
$ lsof | grep log.txt
hoge 1234 fuga 8w REG 202,1 270048415 9765625 /home/fuga/log.txt (deleted)
とプロセスが削除したファイルを掴んでいることを確認できたので、
該当プロセスをkillしたところ
$ df -h
Filesystem Size Used Avail Use% マウント位置
/dev/sda1 10G 10G 10G 50% /
とディスク使用量が減った。