ディスク・ファイル系

【Linuxの基礎知識】df / duコマンドによる容量解析とncdu・iotopでの応用監視

Linuxを使っていて「ディスク容量が足りない」と突然言われた経験はありませんか。

サーバーの運用では、気がつかないうちにログやファイルが溜まり続け、ある日いきなり容量不足でシステムが動かなくなることがあります。

そのときに役立つのが「dfコマンド」と「duコマンド」です。では、この2つのコマンドはどう違うのでしょうか。

dfはシステム全体のディスクの空き容量を確認するのに便利ですが、どのディレクトリが大きな容量を使っているのかまでは分かりません。一方でduはディレクトリやファイル単位での容量を確認でき、どこに容量の偏りがあるのかを掘り下げて調べられます。

つまり、dfとduは「全体を俯瞰する」「詳細を掘り下げる」という役割を補い合う関係なのです。

これらを上手に使い分けることで、容量不足の原因を素早く特定し、システムを安定稼働させることができます。

dfコマンドとは

dfコマンドは、Linux環境でディスク全体の使用状況を確認するために利用される基本的なコマンドです。サーバー運用やシステム監視の現場では、容量不足による障害を未然に防ぐために必須のツールとして使われています。

dfコマンドの基本概要

dfコマンドは「disk free」の略で、現在マウントされているファイルシステムの容量や使用率、残りの空き容量などを一覧で表示します。

特定のオプションを付けることで、より見やすく実用的な形式に整形できます。

df

【出力例】

Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 41151872 8048520 30903352 21% /
tmpfs 2048576 0 2048576 0% /dev/shm

dfコマンドで取得できる情報の種類

dfコマンドを使うことで、次のような情報を確認できます。これらの情報を定期的にチェックすることで、容量不足や障害の兆候をいち早く把握することが可能です。

項目説明
Filesystem対象となるデバイス名やパーティション
1K-blocks総ディスク容量(1KB単位)
Used使用中の容量
Available残りの空き容量
Use%使用率(パーセンテージ)
Mounted onマウントポイント(利用されているディレクトリ)

dfコマンドを使うメリット

dfコマンドを利用する最大のメリットは、システム全体のディスク容量を即座に把握できる点です。特にサーバー運用においては、使用率が高まる前に容量不足を検知することが障害予防につながります。また、オプションを指定することで見やすい単位に変換でき、管理者が直感的に容量を把握できるのも利点です。

df -h

【出力例】

Filesystem Size Used Avail Use% Mounted on
/dev/sda1 40G 7.7G 29G 21% /
tmpfs 2.0G 0 2.0G 0% /dev/shm

duコマンドとは

duコマンドは、Linux環境でディレクトリやファイルごとのディスク使用量を確認するための基本的なコマンドです。

dfコマンドがシステム全体の空き容量を確認するのに対し、duコマンドはどのディレクトリが容量を消費しているのかを詳細に調べるのに適しています。

サーバー運用やトラブルシュートの場面で、容量不足の原因を特定するために欠かせないツールです。

duコマンドの基本概要

duは「disk usage」の略で、指定したディレクトリやファイルがどれだけの容量を使用しているかを表示します。オプションを組み合わせることで、階層ごとの使用量を分かりやすく表示でき、管理者が問題箇所を見つけやすくなります。

du

【出力例】

8 ./bin
24 ./lib
120 ./log
152 .

duコマンドで取得できる情報の種類

duコマンドでは、ファイルやディレクトリ単位での容量を確認できます。特にオプションを付与することで、結果を人間が読みやすい単位に変換したり、階層ごとの合計を確認したりすることが可能です。

項目説明
ディレクトリ容量各ディレクトリの使用量を表示
ファイル容量指定したファイルの使用量を表示
階層別集計サブディレクトリごとの容量を個別に表示
合計容量指定ディレクトリ全体の容量を合算して表示

duコマンドを使うメリット

duコマンドを利用することで、容量不足の原因を迅速に特定できる点が最大の利点です。

例えばログディレクトリだけが肥大化している場合や、一部のユーザーが大きなファイルを配置している場合などを容易に発見できます。

また、オプションを指定することで見やすい単位に変換でき、容量の大きな順に並べ替えることで効率的に問題箇所を洗い出せます。

du -h --max-depth=1

【出力例】

4.0K ./bin
12K ./lib
200M ./log
210M .

df / duコマンドの導入手順

dfコマンドとduコマンドは、多くのLinuxディストリビューションで標準的に利用できます。

しかし最小構成でインストールした環境やカスタム環境では含まれていない場合があります。そのため、確実に利用可能にするには coreutils パッケージを導入・確認することが必要です。

ここでは RHEL系LinuxとDebian系Linuxの両方について、インストール手順と出力例を統一した形で示します。

パッケージのインストール方法

RHEL系Linux(AlmaLinux / Rocky / RHEL)の場合は以下のコマンドを実行します。

sudo dnf install coreutils -y

Debian系Linux(Ubuntuなど)の場合は以下のコマンドを実行します。

sudo apt-get install coreutils -y

【出力例】

パッケージ coreutils はすでにインストール済みです。
依存関係はすべて解決済みです。
追加のインストール作業は不要です。
完了しました。

この出力は「すでに coreutils が導入されているため、新たなインストール処理は実行されなかった」という意味です。実際の環境によって細かなメッセージは異なりますが、どちらのディストリビューションでも「df と du を含む coreutils が利用可能」という点は同じです。

もし強制的に再インストールしたい場合は以下のコマンドを実行します。

sudo dnf reinstall coreutils -y

sudo apt-get install --reinstall coreutils -y

dfコマンドの基本的な使い方

dfコマンドはディスク容量の全体像を把握するのに非常に有効です。オプションを組み合わせることで、読みやすく整理された情報を取得できます。ここでは基本的な使い方を解説します。

dfコマンドには多くのオプションがありますが、よく使うものは限られています。以下の表は日常的によく利用されるオプションの一覧です。

オプション説明
-h容量を人間が読みやすい単位(KB/MB/GB)で表示
-Tファイルシステムの種類を表示
-iinode使用状況を表示
-aマウントされていないものも含めて全て表示

基本表示(オプションなし)

オプションを付けずに実行すると、マウントされているファイルシステムごとの容量が表示されます。

df

【出力例】

ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
devtmpfs 4096 0 4096 0% /dev
tmpfs 390628 0 390628 0% /dev/shm
tmpfs 156252 16540 139712 11% /run
/dev/vda2 103015932 11086316 87509668 12% /
tmpfs 78124 0 78124 0% /run/user/1000

詳細表示(拡張オプション)

より詳細に確認したい場合はオプションを組み合わせます。特に -h や -T は容量とファイルシステムの種類を把握するのに便利です。

df -hT

【出力例】

ファイルシス タイプ サイズ 使用 残り 使用% マウント位置
devtmpfs devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs tmpfs 382M 0 382M 0% /dev/shm
tmpfs tmpfs 153M 17M 137M 11% /run
/dev/vda2 ext4 99G 11G 84G 12% /
tmpfs tmpfs 77M 0 77M 0% /run/user/1000

全体表示(システム全体の容量)

システム全体を俯瞰する際には -h オプションを使うことで容量の確認が容易になります。全体の空き容量や使用率を直感的に把握できます。

df -h

【出力例】

ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 382M 0 382M 0% /dev/shm
tmpfs 153M 17M 137M 11% /run
/dev/vda2 99G 11G 84G 12% /
tmpfs 77M 0 77M 0% /run/user/1000

このように、dfコマンドはオプションの使い分けによって全体像の確認から詳細な情報の把握まで柔軟に対応できます。

duコマンドの基本的な使い方

duコマンドはディレクトリやファイルごとの容量を調べるのに便利なコマンドです。特定のディレクトリや階層構造を詳細に把握できるため、容量不足の原因を特定する場面で役立ちます。ここでは基本的な使い方と代表的なオプションについて解説します。

duコマンドはオプションを組み合わせることで、容量の表示形式や対象範囲を柔軟に指定できます。以下に代表的なオプションをまとめます。

オプション説明
-h人間が読みやすい単位(KB/MB/GB)で表示
-s指定したディレクトリやファイルの合計のみを表示
--max-depth=NN階層までのディレクトリ容量を表示
-aディレクトリだけでなくファイル単位の容量も表示

基本表示(オプションなし)

オプションを付けずに実行すると、ディレクトリやファイルの容量をブロック単位で表示します。

du

【出力例】

8 ./bin
24 ./lib
120 ./log
152 .

条件付き表示(特定ディレクトリ指定)

特定のディレクトリを指定すれば、そのディレクトリ配下の容量だけを確認できます。よく利用するのはログディレクトリなどの容量確認です。

du -h /var/log

【出力例】

4.0K /var/log/httpd
120M /var/log/audit
200M /var/log

階層表示(ディレクトリごとの容量確認)

ディレクトリごとの容量を階層的に確認する場合は --max-depth オプションを使います。数値を指定することで階層の深さを制御できます。

du -h --max-depth=1 /home

【出力例】

2.0G /home/user1
5.5G /home/user2
7.5G /home

このように duコマンドを利用することで、どのディレクトリがどれだけ容量を消費しているかを簡単に確認できます。

df / duコマンドによる応用・拡張

dfコマンドとduコマンドは単発で実行するだけでなく、運用に組み込むことでより大きな効果を発揮します。長期的な監視やログ管理、保存先の工夫を行うことで、容量不足によるトラブルを未然に防ぐことが可能になります。ここでは代表的な応用例を紹介します。

長期監視(cronによる定期収集)

ディスク容量の変化を長期的に追跡するには、cronを使って定期的にdfやduを実行し、結果をファイルに保存します。これにより容量の推移を比較でき、異常な増加を早期に検知できます。

crontab -e

以下のように設定すると、毎日0時にdfの結果を保存します。

0 0 * * * df -h >> /var/log/disk_usage.log

【出力例(保存されるログイメージ)】

ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 382M 0 382M 0% /dev/shm
tmpfs 153M 17M 137M 11% /run
/dev/vda2 99G 11G 84G 12% /
tmpfs 77M 0 77M 0% /run/user/1000

ログ管理と保存期間

収集したdfやduの結果は、ログとして一定期間保管するのが望ましいです。保存期間を無制限にすると逆にディスクを圧迫するため、logrotateなどを活用して古いログを自動的に削除・圧縮すると効率的です。

/etc/logrotate.d/disk_usage

【設定例】

/var/log/disk_usage.log {
weekly
rotate 8
compress
missingok
notifempty
}

この設定ではログを毎週ローテーションし、8世代分を圧縮保存するため、2か月分の記録を残せます。

ディレクトリ構成と保存場所の工夫

容量監視を効果的に行うには、ログや出力ファイルの保存場所を適切に設計することが重要です。特に監視用ログが大量に溜まってシステム領域を圧迫するのは本末転倒です。監視専用のディレクトリを切り分けて管理する方法が有効です。

mkdir -p /var/monitor/logs

dfやduの結果を以下のように指定して保存することで、監視ログを一か所に集約できます。

df -h >> /var/monitor/logs/disk_usage.log

このように保存場所を分離して管理することで、ログ肥大化によるシステム障害を防ぎ、運用を安定させることができます。

df / duコマンドの実践的な活用例

dfコマンドとduコマンドは日常的な容量確認だけでなく、障害対応や監査、さらには他ツールと組み合わせることでより実用的に活用できます。ここでは具体的なシーンを想定した活用例を紹介します。

トラブルシュートや切り分け手順

システムが容量不足に陥ったときは、まず df コマンドで全体のディスク使用率を確認します。

df -h

【出力例】

ファイルシス サイズ 使用 使用可 使用% マウント位置
/dev/vda2 40G 38G 2.0G 95% /
tmpfs 2.0G 0 2.0G 0% /dev/shm

この結果から、ルートパーティション(/)が 95% 使用されていることがわかります。次の調査対象は「ルート直下のどのディレクトリが容量を消費しているか」です。Linux サーバーではログやキャッシュが集中する /var が肥大化の原因になりやすいため、最初に /var を調べます。

du -h --max-depth=1 /var

【出力例】

4.0K /var/tmp
200M /var/lib
15G /var/log
15G /var

この結果から、/var/log が 15GB を消費しており、容量不足の主因であることが特定できます。

特定の利用シーン(大容量検知や監査)

定期的に大容量ファイルを検知したり、監査の一環として記録を残す場合にも有効です。特にログディレクトリやユーザーホームディレクトリの監査に使われます。

du -ah /home | sort -hr | head -n 10

【出力例】

2.5G /home/user1/backup.tar
1.2G /home/user1/videos/movie.mp4
800M /home/user2/dbdump.sql
...

このように並べ替えて上位のファイルを確認することで、大容量ファイルの存在を容易に把握できます。

他ツールとの組み合わせ(ncdu, iotopなど)

df や du コマンドだけでは十分に容量管理ができない場合もあります。

その際は補助的なツールを組み合わせることで、より直感的かつ効率的に解析できます。ここでは代表的な ncdu と iotop を紹介します。

ncduによる容量解析

ncdu は du コマンドを対話的に操作できる補助ツールです。ディレクトリごとの容量を棒グラフで視覚的に表示し、問題箇所を直感的に把握できるのが特徴です。

ncduのインストール手順

ncdu は du コマンドを対話的に利用できる補助ツールです。導入されているかどうかを確認するには、バージョン表示を行います。

ncdu -v

【出力例】

ncdu 1.15.1

上記のようにバージョンが表示されれば導入済みです。導入されていない場合は、以下のコマンドでインストールしてください。

RHEL系Linux(AlmaLinux / Rocky / RHEL)の場合:

sudo dnf install ncdu -y

Debian系Linux(Ubuntuなど)の場合:

sudo apt-get install ncdu -y

【出力例】

パッケージ ncdu は新規にインストールされました。
依存関係はすべて解決済みです。
完了しました。

ncduの利用例

インストールが完了したら、du コマンドの代わりに ncdu を使ってディレクトリ容量を確認できます。

例として /var ディレクトリを解析します。

ncdu /var

【出力例】

ncdu を実行すると、ディレクトリごとの容量が対話的に表示されます。矢印キーで移動でき、 ? を押すと操作ヘルプが表示されます。出力には棒グラフや記号が付与され、どのディレクトリが大容量を消費しているかを直感的に把握できる点が du よりも優れています。

ncdu 1.22 ~ Use the arrow keys to navigate, press ? for help
--- /var -----------------------------------------------------------------------------------------------------------
2.0 GiB [################] /spool
305.9 MiB [## ] /log
177.2 MiB [# ] /cache
166.1 MiB [# ] /lib
44.0 KiB [ ] /tmp

このように、ncdu を利用すると数値だけの du コマンドと違い、容量の大小が視覚的に表現されるため、問題箇所の切り分けが非常に早く行えます。特にログ肥大や一部ディレクトリの異常増加を調査する際に効果的です。

iotopによるI/O監視

iotop はディスクの読み書き状況をリアルタイムに監視できるツールです。容量不足の調査だけでなく、「どのプロセスがディスクを酷使しているのか」を特定できるため、性能劣化や障害の切り分けにも役立ちます。

iotopのインストール手順

iotop が導入済みかどうかを確認するには、バージョンを表示します。

iotop --version

【出力例】

iotop version 0.6

バージョンが表示されれば導入済みです。導入されていない場合は以下のコマンドでインストールしてください。

RHEL系Linux(AlmaLinux / Rocky / RHEL)の場合:

sudo dnf install iotop -y

Debian系Linux(Ubuntuなど)の場合:

sudo apt-get install iotop -y

【出力例】

パッケージ iotop は新規にインストールされました。
依存関係はすべて解決済みです。
完了しました。

iotopの利用例

インストールが完了したら、root 権限で実行することでディスク I/O の使用状況をリアルタイムに確認できます。

sudo iotop

【出力例】

以下は iotop を実行した際の出力例です。サマリー行でシステム全体の読み書き量を把握し、その下で各プロセスのディスク使用状況を確認できます。

Total DISK READ : 50.00 M/s | Total DISK WRITE : 10.00 M/s
Actual DISK READ: 48.00 M/s | Actual DISK WRITE: 9.50 M/s

TID PRIO USER DISK READ DISK WRITE> COMMAND
2456 be/4 mysql 45.00 M/s 8.00 M/s mysqld
3102 be/4 root 3.00 M/s 1.20 M/s rsync
1254 be/4 apache 1.20 M/s 0.00 B/s httpd

見方のポイント

  • サマリー行 を見れば、システム全体で「大量の読み込み 50MB/s」が発生していることが一目でわかる

  • プロセス一覧 を見ると、mysqld がその大半を占めており、ボトルネックの原因であることが明確

  • 他に rsync や httpd が動いているが、影響度は小さい

iotop の各列が何を意味するのかを表にまとめると、以下のようになります。

列名内容
Total DISK READ / WRITEシステム全体のディスク読み込み/書き込みの合計速度
Actual DISK READ / WRITEキャッシュを考慮した実際の物理デバイスへの I/O 速度
TIDスレッドID。プロセス単位ではなくスレッド単位で表示される
PRIOI/O 優先度(be/4 は Best Effort レベル4 など)
USERそのスレッドを実行しているユーザー名
DISK READ / WRITEそのスレッドが発生させている読み込み/書き込み速度
COMMAND該当スレッドのコマンド名またはカーネルスレッド名

このように iotop を利用すれば、ディスク使用率の数値だけではわからない「I/O 負荷の発生源」を特定できます。df や du と組み合わせることで、トラブルシュートや性能監視をより効率的に行うことができます。

df / duコマンド利用時の注意点

df や du コマンドはディスク容量の確認に欠かせない基本コマンドですが、利用する際にはいくつかの注意点があります。

特に運用環境では、不必要なトラブルを避けるためにも事前に理解しておくことが大切です。

ここではログ容量、性能面の影響、運用上の落とし穴について解説します。

ログ容量の管理ポイント

システムの容量不足の原因で最も多いのはログの肥大化です。特に /var/log ディレクトリにはアプリケーションやサービスのログが集中し、放置すると急激にディスクを圧迫することがあります。

定期的にログをローテーションし、不要な古いログを削除する仕組みを整えておくことが重要です。

du -h --max-depth=1 /var/log

【出力例】

4.0K /var/log/httpd
200M /var/log/audit
15G /var/log

このように du コマンドで確認すれば、どのログが肥大化しているかを即座に特定できます。

性能への影響と実行時の負荷

df コマンドは比較的軽量ですが、du コマンドは対象ディレクトリ全体を走査するため、大規模なファイルシステムでは負荷がかかります。

特にディレクトリ数やファイル数が膨大な場合、処理が完了するまでに時間がかかり、I/O 負荷を引き起こすこともあります。

そのため、本番環境で大規模なパスに対して実行する際は注意が必要です。

du -sh /

【出力例】

du: '/proc/1234/task/1234/fd/4' にアクセスできません: 許可がありません
du: '/proc/5678/fdinfo/3' にアクセスできません: 許可がありません
20G /

このようにアクセス権限の制約や負荷が伴うことがあるため、実行対象を限定するのが望ましいです。

運用上の落とし穴と回避策

df と du の結果が一致しないケースがあります。これは、削除済みファイルがプロセスによって開かれたままになっている場合などに発生します。このとき df では使用量にカウントされますが、du では表示されません。

lsof | grep deleted

【出力例】

mysqld 1234 root 4u REG 253,0 104857600 /var/log/mysql.log (deleted)

この状態では、該当プロセスがファイルを掴み続けているため、ディスク容量が解放されません。

【回避策】

  • 該当プロセスを特定し、再起動してファイルハンドルを解放する
  • サービス再起動が困難な場合は、ログの出力先を一時的に切り替え、新しいファイルに書き込みを移す
  • 根本的には logrotate などを利用して定期的にログをローテーションし、削除ではなく安全に切り替える運用を徹底する

このように「なぜ df と du の結果が異なるのか」を理解し、具体的な対処手順を用意しておくことで、容量不足に直面しても迅速にリカバリできます。

まとめ

df と du コマンドは、Linux システムのディスク容量を把握するための基本的なツールです。df では全体の使用率を確認し、du ではディレクトリ単位での詳細な容量を特定できます。さらに、ncdu を使えば視覚的にディレクトリ構成を解析でき、iotop を利用すればどのプロセスがディスク I/O に負荷を与えているかを把握できます。

運用の現場では、df で全体の状態を確認 → du で問題箇所を特定 → ncdu で視覚的に分析 → iotop で負荷の原因プロセスを追跡、という流れを組み合わせることで、効率的なトラブルシュートが可能になります。また、ログの肥大化や削除済みファイルのハンドル保持といった運用上の落とし穴にも注意し、定期的な監視やログローテーションを徹底することが重要です。

これらのコマンドと補助ツールを適切に活用すれば、容量不足や性能劣化といったトラブルを未然に防ぎ、安定したシステム運用につなげることができます。

次のおすすめ記事

実践環境を整える

ここまで学んだ知識を実際に試すには、Linuxを動かす環境が必要です。手軽に始めるならVPSを利用するのがおすすめです。
VPS徹底比較!ConoHa・さくら・Xserverの選び方



VPSを利用してLinux環境を準備したら、実際の設定は下記の記事が参考になります。
VPSに開発環境を自動構築する方法|Apache+Tomcat+PostgreSQL

よく読まれている記事

1

「私たちが日々利用しているスマートフォンやインターネット、そしてスーパーコンピュータやクラウドサービス――これらの多くがLinuxの力で動いていることをご存じですか? 無料で使えるだけでなく、高い柔軟 ...

2

Linux環境でよく目にする「Vim」という名前。サーバーにログインしたら突然Vimが開いてしまい、「どうやって入力するの?」「保存や終了ができない!」と困った経験をした人も多いのではないでしょうか。 ...

3

ネットワーク技術は現代のITインフラにおいて不可欠な要素となっています。しかし、ネットワークを深く理解するためには、その基本となる「プロトコル」と「レイヤ」の概念をしっかり把握することが重要です。 こ ...

4

この記事は、Linuxについて勉強している初心者の方向けに「Shellスクリプト」について解説します。最後まで読んで頂けましたら、Shellスクリプトはどのような役割を担っているのか?を理解出来るよう ...

5

Javaは世界中で広く使われているプログラミング言語であり、特に業務システムやWebアプリケーションの開発において欠かせない存在です。本記事では、初心者向けにJavaの基礎知識を網羅し、環境構築から基 ...

-ディスク・ファイル系