dfとduの結果が異なるときに疑ったこと

df -hを実行してディスク容量がいっぱいになったことを確認し、duを使ってディスク容量を無駄に使っているファイルを探そうとしたが、大きなディスク容量を使用しているファイルがなかった。ルートディレクトリの容量をdu -shx /で確認した結果とdf -hの結果が大きく異なっていた。
du -shx-x, --one-file-systemは、duの引数としてルートディレクトリを指定しているために「違うファイルシステムの物も大量に集計に入ってしまうのを防ぐ」目的で入れているオプション。mountされている追加のディスクがmnt1とmnt2だったら、--excludeオプションを使ってdu -sh --exclude="/mnt*" /でもいいが、-xオプションのほうが短く書ける。

ここで原因として考えられるのは、何らかのプロセスが大きなファイルを掴んでいてファイルを削除しても容量が減らないということ。
そのようなプロセスを見つけるために、lsofでファイルを開いているプロセスを確認した。

lsofで開いているファイルのサイズが7列目のSIZE/OFFでわかる。7列目を数値として降順にsortして、初めのほうを見てみる。

ファイルサイズが11Gのファイルが見つかった。df -hdu -shxの差とほぼ重なるし、ファイル名には「(deleted)」とついている。誰かがファイルを消したがrsyslogdが掴んでいて、ディスク容量を圧迫していたようだ。

rsyslogdを再起動し、df -hdu -shx /の結果が合うようになった。

-Linux
-