LoginSignup
7

More than 3 years have passed since last update.

duとdfで出てくるディスク使用量が異なる原因の一つ

Last updated at Posted at 2015-12-08

起こったこと

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することでディスクが開放されるのは確認したが、今回は運用中のサーバーだったため安全策としてデーモンごと再起動した。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7