起こったこと
http://qiita.com/Hi-king/items/fe5ac34170c7cdf12cc0 で書いたように肥大化したdockerのログを削除するのには/dev/nullを流し込むのが効果的だが、それをせずにログファイルを直接削除してた。するとディスク容量不足に陥った上に、duコマンドでは消すべきファイルが見つからなくなった。
原因と解決策
http://www.cyberciti.biz/tips/freebsd-why-command-df-and-du-reports-different-output.html に有るように、ファイルディスクリプタが開きっぱなしになっていることが問題だった。この場合ディスク容量は使っているがduコマンドでは見つけられなくなる。
sudo lsof -s | awk '$5 == "REG"' | sort -n -r -k 7,7 | less
で、でかいfdを持っているプロセスを探して、1) そのプロセスをkillする、あるいは 2)gdbでそのプロセスにアタッチして(gdb)call close(FDの番号)
をする。
今回のケース
ログファイルへのアクセスはdockerデーモンが仲介しているようで、先述のログファイルへのfdはデーモンのプロセスが持っていた。gdbでデーモンにアタッチしてcloseすることでディスクが開放されるのは確認したが、今回は運用中のサーバーだったため安全策としてデーモンごと再起動した。