久々のエントリーです。今日はサーバ運用ではまったdfとduの違いに困ったときの対処法です。
dfでディスクの容量を確認することがあるかもしれませんが、dfの結果90%使用しているという結果を得て、duコマンドでどこのディレクトリが容量食ってるんだ?
というような流れで調査をすることが多いと思います。僕はこんな感じでいつもディスクの占有している場所を調べています。
ところがduで色々調べてもどう見てもdfの結果とduの結果が違うときがあります。
詳しい違いはここでは書きませんが、そんな状況に出会ったときに以下のことをして解決しました。
ls -al /proc/*/fd/* | grep deleted
この結果何がわかるかというとdfコマンドでは認識しているけど実際には消されているファイルがわかります。
プロセスがまだ使っているのに強引に消された(移動された)ファイルがこれに該当します。
上記コマンドでファイルとプロセスIDが割り出せるのでその消されたファイルを使っているプロセスを再起動してあげるなりkillしてあげることで、この架空のファイルの存在も消えdfコマンドの結果に正しく反映されます。
以上メモでした。