Linux運用で必ずと言っていいほど遭遇するのが、df と du の結果が合わない問題です。
df -h
du -sh /
「dfでは空きがないのに、duではそんなに使っていない」 この状態、実は障害の前兆であることも少なくありません。
本記事では、
- df と du の本質的な違い
- 結果がズレる典型パターン
- 即使える調査コマンド
- 正しい解消方法
を現場で迷わないレベルまで解説します。
目次
まず結論:dfとduは「見ているもの」が違う
dfが見ているもの
df はファイルシステム全体の使用状況を見ています。
- ブロック単位
- マウントポイント単位
- 削除済みでも解放されていない領域も含む
duが見ているもの
du はディレクトリ配下に存在するファイルの合計を見ています。
- 実体のあるファイルのみ
- 既に削除されたファイルは見えない
dfとduが一致しない典型パターン
① 削除されたがプロセスが掴んでいるファイル
最も多い原因です。
ログファイルを削除しても、プロセスがファイルを open したままだと、
- df:使用中としてカウント
- du:存在しないのでカウントしない
→ 結果がズレます。
確認コマンド
lsof | grep deleted
または:
lsof +L1
deleted と表示されているファイルが犯人です。
② /proc や仮想ファイルシステムを du している
以下のようなコマンドを実行していませんか?
du -sh /
/proc や /sys は実体のない仮想FSです。
df と du の対象がズレるため、正確な比較になりません。
正しいduの使い方
du -sh /* --exclude=/proc --exclude=/sys
③ マウントポイント配下の別ファイルシステム
/var や /home が別パーティションの場合、
- df:個別に表示
- du:まとめて計算
→ 意図せずズレます。
④ inode 枯渇が絡んでいるケース
容量は空いているが inode が尽きている場合、
- df -h:余裕あり
- df -i:100%
df -i
この場合、du の数字だけ見ても原因は分かりません。
⑤ ファイルシステムの予約領域
ext4 などでは root 用に予約ブロックがあります。
- df:予約領域を含めて表示
- du:通常ファイルのみ
実務での調査フロー(迷わない手順)
① dfで異常を検知
df -h
② inode も同時に確認
df -i
③ duで大きなディレクトリを特定
du -sh /var/* | sort -h
④ deleted ファイルを確認
lsof +L1
⑤ 該当プロセスを特定
ps -fp <PID>
正しい解消方法
方法① 該当サービスを再起動
systemctl restart httpd
最も安全で確実な方法です。
方法② プロセスを停止
kill <PID>
※業務影響を必ず確認してください。
やってはいけない対処
- ディスクが苦しいから rm -rf
- 原因不明のまま再起動
再発します。
再発防止のための設計ポイント
- logrotate の適切な設計
- truncate の正しい理解
- /var の分離
- 使用率・inode の監視
まとめ
df と du の不一致は、
- Linuxを理解しているか
- 障害対応の引き出しがあるか
が一瞬で試されるポイントです。
「削除したのに空かない」と感じたら、
- df
- du
- lsof
この順で確認すれば、必ず原因に辿り着けます。
ぜひ障害対応時の即戦力記事として活用してください。
あわせて読みたい


df で空き容量があるのに書き込みエラーになる原因(inode不足など)
Linux でファイルを書き込もうとした際に、 No space left on device というエラーが出ることがあります。 しかし df -h を実行すると、空き容量がまだ十分にあるように…
あわせて読みたい


/var/logが肥大化する原因と正しいlogrotate設計
Linuxサーバー運用で頻発するトラブルの一つが、/var/log の肥大化です。 気付いた時にはディスク逼迫、サービス停止、最悪の場合 inode 枯渇に発展します。 本記事では…
あわせて読みたい


inode枯渇による障害の見抜き方と解消手順
Linuxサーバーで「ディスク容量は空いているのにファイルが作れない」 という障害が発生した場合、真っ先に疑うべきなのがinode枯渇です。 本記事では、inode枯渇障害を…
