Linuxで容量を調べる「dfコマンド」と「duコマンド」の使い分け、違いとは?

df_du_アイキャッチ

サーバーや開発環境を長く運用していると、知らぬ間にディスクが満杯に近づき、アプリケーションやデータベースが突然停止……なんてトラブルに遭遇したことはありませんか?

そんなときに手軽に使えるのが、Linuxで標準的に用意されているコマンドです。

  • df:ファイルシステム(パーティション)単位での空き容量・使用量を確認
  • du:ディレクトリやファイル単位での使用量を確認

これらを使いこなせば、どのディレクトリがどれだけ容量を食っているか、ファイルシステム全体でどれくらい空きがあるかを瞬時に把握できます。

本記事では両者の違いをしっかり押さえ、「いつ」「どちら」を使うべきかを解説します。

目次

dfコマンドの基本

1. コマンド概要

df(disk freeの略)は、マウント中のすべてのファイルシステムについて、次のような情報を表示します。

$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda1       20480000 1024000  19456000   5% /
tmpfs            1024000       0   1024000   0% /dev/shm
  • Filesystem:パーティション名やデバイス名
  • 1K-blocks:全体容量(1KB単位)
  • Used:使用済み容量
  • Available:空き容量
  • Use%:使用率(%)
  • Mounted on:マウントポイント

2. 主なオプション

  • h:人間に読みやすい単位(KB, MB, GB)で表示
  • T:ファイルシステムの種類(ext4, xfs, tmpfsなど)を表示
  • t <type>/-x <type>:表示する・除外するファイルシステム種類を指定
  • -total:最後に合計を表示

例:ユーザー向けの見やすい表示

$ df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/sda1      ext4       20G  1.0G   19G   5% /
tmpfs          tmpfs     100M     0  100M   0% /dev/shm

Sizeが分かりやすくGB表記になるので、大まかな空き状況のチェックに最適です。

duコマンドの基本

1. コマンド概要

du(disk usageの略)は、指定したディレクトリ以下のファイル・ディレクトリごとのサイズを合計して表示します。

たとえば、ホームディレクトリの容量を調べるときは:

$ du -sh /home/username
1.2G    /home/username
  • s: 合計値のみ表示(summary)
  • h: 人間に読みやすい単位
  • 引数にディレクトリやファイルを指定しなければ、カレントディレクトリ以下を走査

2. 主なオプション

  • a:ファイル単位でも表示
  • -max-depth=<N>:深さNまでのサブディレクトリを表示
  • -exclude=<パターン>:指定パターンを無視
  • c:最後に合計を表示

例:サブディレクトリごとの容量を一覧

$ du -h --max-depth=1 /var/log
4.0K    /var/log/anaconda
1.1M    /var/log/httpd
8.5M    /var/log/mysql
12M     /var/log

/var/logの直下にある各フォルダ容量がわかり、どこにログが溜まっているかが一目瞭然です。

dfとduの違い

観点dfdu
対象範囲ファイルシステム(パーティション)全体指定ディレクトリ以下のファイル・ディレクトリ
単位ブロック単位(-hで人間向け)バイト単位(-hで人間向け)
表示内容使用量・空き量・使用率各ファイル/ディレクトリの使用量
調査用途システム全体の空き容量チェックどのファイル/フォルダが容量を食っているか確認
マウント・バインドマウントされていない領域は対象外マウントポイント以下は全て計測
  • df は「このディスクにあとどれだけ空きがあるか?」
  • du は「何がどれだけ容量を食っているか?」

両者は見かけ上の数値が乖離することもあります。たとえば、大きなファイルを削除しても、プロセスが開きっぱなしだと空きが戻らず df は変化しない一方、du は削除後のディレクトリ内サイズを反映します。

使い分け・活用シーン

システム監視やアラート設定

  • df -h を定期実行し、使用率が80%を超えたら通知
  • cron+メールや、Zabbix/Prometheusなどに組み込む

容量食い潰し原因の突き止め

  • du -h --max-depth=2 / で大きなフォルダを絞り込み
  • sort -hr と組み合わせ
du -h /home | sort -hr | head -n 20

上位20件の大きいディレクトリを抽出

一時ファイルやログのメンテ

  • 古いログだけ抜き出して削除:
find /var/log -type f -mtime +30 -exec du -h {} \;
find /var/log -type f -mtime +30 -delete

バックアップ容量の見積

  • du -sh /data/project でバックアップ先サイズを算出

実践的な使い方の例

マウント別の使用率をグラフィカルに表示

df -hT | column -t

特定の種類(tmpfsなど)を除外

df -h -x tmpfs -x devtmpfs

大きなファイルのみ抽出

find . -type f -size +100M -exec ls -lh {} \;

定期実行スクリプト例

#!/bin/bash
THRESHOLD=90
USAGE=$(df / | tail -1 | awk '{print $5}' | sed 's/%//')
if [ "$USAGE" -gt "$THRESHOLD" ]; then
  mail -s "Disk Alert" admin@example.com <<< "Root partition usage is ${USAGE}%"
fi

注意点

削除と開放のタイミング

  • プロセスが開いたままのファイル削除は du には反映されても df には反映されない。再起動やプロセスの再起動が必要。

ハードリンク/シンボリックリンク

  • du はハードリンクを重複計上せず、シンボリックリンクはデフォルトでリンク先を計測しない。オプションによる挙動変更に注意。

NFSやリモートマウント

  • df はNFS上の使用率も表示するが、信頼性はサーバ依存。du はローカルキャッシュを含めて計測される場合がある。

Reserved Blocks

  • ext系ではルートユーザー以外に数%(通常5%程度)の予約領域があるため、df の空き容量に差分が生じる。

まとめ

  • df:ファイルシステム全体の空き容量把握に最適
  • du:個別ディレクトリ/ファイルの詳細な使用量解析に最適
  • 両コマンドを組み合わせることで、「どのファイルシステムで」「どのディレクトリが」ディスクを圧迫しているかを迅速に特定可能

日々の運用やトラブルシューティング、バックアップ容量見積もりなど、さまざまなシーンで活躍するツールです。ぜひこの記事を参考に、Linuxサーバーのディスク容量管理を快適に行ってくださいね!

df_du_アイキャッチ

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次