【RHEL】ディスク使用率が高いディレクトリ・ファイルを特定する方法(df・duコマンド)

RHEL

今回は、RHELサーバでディスク使用率が高いディレクトリやファイルを調査する方法について解説します。

サーバ運用において「ディスク容量が逼迫している」というアラートは、誰もが一度は経験するトラブルではないでしょうか。このような状況に直面したとき、どのディレクトリやファイルが原因なのかを素早く特定できるかどうかが、迅速な復旧の鍵となります。

本記事では、ディスク使用率の調査で必須となる df コマンドと du コマンドの基本から応用までを、実行例を交えながら丁寧に解説します。


ディスク使用率調査の基本的な流れ

ディスク使用率が高い原因を特定するには、以下の流れで調査を進めるのが効率的です。

  1. dfコマンドでファイルシステム全体の使用状況を確認する
  2. duコマンドで使用率が高いファイルシステム内のディレクトリを絞り込む
  3. 原因となっているディレクトリ・ファイルを特定する

この流れを意識することで、闇雲にファイルを探し回ることなく、効率的に原因を突き止めることができます。


dfコマンド:ファイルシステム全体の使用状況を確認する

dfコマンドの基本

df(disk free)コマンドは、マウントされているファイルシステムのディスク使用状況を表示するコマンドです。まずはこのコマンドで、どのファイルシステムが逼迫しているかを確認しましょう。

基本的な使い方

$ df -h

-h オプションを付けることで、容量がKB・MB・GBなど人間が読みやすい単位(Human-readable)で表示されます。

実行例

$ df -h
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               3.9G     0  3.9G   0% /dev
tmpfs                  3.9G     0  3.9G   0% /dev/shm
tmpfs                  3.9G  9.5M  3.9G   1% /run
tmpfs                  3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/mapper/rhel-root   50G   45G  5.0G  90% /
/dev/sda1             1014M  255M  760M  26% /boot
/dev/mapper/rhel-var    30G   28G  2.0G  93% /var
tmpfs                  783M     0  783M   0% /run/user/1000

この例では、/(ルート)が90%、/varが93%と高い使用率になっていることが分かります。このように、まずは df -h でどのファイルシステムが問題なのかを把握することが重要です。

よく使うオプション一覧

オプション 説明
-h 容量を人間が読みやすい単位で表示(KB, MB, GB)
-T ファイルシステムの種類(ext4, xfsなど)を表示
-i inode(ファイル数)の使用状況を表示
-x <type> 指定したファイルシステムタイプを除外

inodeの確認も忘れずに

ディスク容量に余裕があっても、inodeが枯渇するとファイルが作成できなくなります。特にログファイルや一時ファイルが大量に生成される環境では、inode不足が原因となることもあります。

$ df -ih
Filesystem            Inodes IUsed IFree IUse% Mounted on
/dev/mapper/rhel-root   3.2M  150K  3.1M    5% /
/dev/mapper/rhel-var    2.0M  1.9M  100K   95% /var

この例では /var のinodeが95%使用されており、小さなファイルが大量に存在している可能性が考えられます。


duコマンド:ディレクトリ・ファイルごとの使用量を確認する

duコマンドの基本

du(disk usage)コマンドは、指定したディレクトリやファイルのディスク使用量を表示するコマンドです。df コマンドで問題のあるファイルシステムを特定したら、次は du コマンドで原因となっているディレクトリやファイルを絞り込みます。

基本的な使い方

$ du -sh /var/*
  • -s:サマリー表示(各ディレクトリの合計のみ表示)
  • -h:人間が読みやすい単位で表示

実行例

$ sudo du -sh /var/*
16K     /var/adm
152M    /var/cache
0       /var/crash
8.0K    /var/db
16K     /var/empty
4.0K    /var/ftp
4.0K    /var/games
4.0K    /var/gopher
4.0K    /var/kerberos
52K     /var/lib
4.0K    /var/local
0       /var/lock
25G     /var/log
0       /var/mail
4.0K    /var/nis
4.0K    /var/opt
4.0K    /var/preserve
0       /var/run
48K     /var/spool
2.5G    /var/tmp
4.0K    /var/yp

この結果から、/var/log が25GBと最も多くの容量を使用していることが分かります。

さらに深掘りして調査する

原因のディレクトリが分かったら、さらにその中を調査します。

$ sudo du -sh /var/log/*
1.2G    /var/log/audit
8.5G    /var/log/messages
12G     /var/log/secure
3.0G    /var/log/httpd
256K    /var/log/cron

このように階層を掘り下げていくことで、具体的にどのログファイルが肥大化しているかを特定できます。

応用:大きいディレクトリを上位から表示する

以下のコマンドを使うと、使用量が大きい順にディレクトリを表示できます。

$ sudo du -h /var --max-depth=1 | sort -hr | head -10
28G     /var
25G     /var/log
2.5G    /var/tmp
152M    /var/cache
52K     /var/lib
48K     /var/spool
16K     /var/empty
16K     /var/adm
8.0K    /var/db
4.0K    /var/yp
  • --max-depth=1:1階層下までの集計
  • sort -hr:人間が読みやすい形式の数値を降順でソート
  • head -10:上位10件を表示

よく使うオプション一覧

オプション 説明
-s 指定ディレクトリの合計のみ表示(サマリー)
-h 容量を人間が読みやすい単位で表示
-a ファイル単位でも表示
--max-depth=N 集計する階層の深さを指定
-c 最後に総合計を表示
--exclude=PATTERN 指定パターンのファイル・ディレクトリを除外

よく肥大化するディレクトリとその対応方法

運用現場でディスク逼迫の原因となりやすいディレクトリと、その対応方法を紹介します。

/var/log(ログファイル)

最も肥大化しやすいディレクトリです。特に messagessecureaudit/audit.log、アプリケーションログ(httpd、mysqlなど)が原因となることが多いです。

対応方法:

  • 古いログファイルの削除またはアーカイブ
  • logrotateの設定を見直し、ローテーション頻度や保持世代数を調整
  • 不要なログ出力の抑制

/var/tmp、/tmp(一時ファイル)

アプリケーションが作成した一時ファイルが残り続けることがあります。

対応方法:

  • 古い一時ファイルの削除(作成日時を確認して慎重に)
  • systemd-tmpfiles-cleanの設定確認

/var/cache(キャッシュファイル)

パッケージマネージャ(yum/dnf)のキャッシュなどが溜まることがあります。

対応方法:

$ sudo dnf clean all

/home(ユーザーディレクトリ)

ユーザーが作成したファイルやアプリケーションのデータが肥大化することがあります。

対応方法:

  • 各ユーザーの使用量を確認し、不要なファイルの削除を依頼
  • クォータの設定を検討

注意点・やってはいけないこと

ディスク容量の調査や対応を行う際には、以下の点に十分注意してください。

1. 安易にファイルを削除しない

原因となっているファイルを見つけても、すぐに削除してはいけません。特に以下のファイルは注意が必要です。

  • 稼働中のプロセスが使用しているファイル:削除しても容量が解放されないことがあります
  • システムやアプリケーションに必要なファイル:誤削除するとシステム障害につながります
  • ログファイル:監査やトラブルシューティングに必要な場合があります

2. ルートディレクトリで再帰的なduを実行しない

# やってはいけない例
$ sudo du -ah / | sort -hr | head -20

ルートディレクトリに対して全ファイルを再帰的に集計すると、処理に非常に時間がかかり、サーバに負荷をかけてしまいます。必ずファイルシステム単位で絞り込んでから実行しましょう。

3. 本番環境での実行時はサーバ負荷に注意

du コマンドはディスクI/Oを発生させるため、大規模なファイルシステムで実行すると負荷がかかります。業務時間帯を避けるか、ionice コマンドと組み合わせて実行することを検討してください。

$ sudo ionice -c 3 du -sh /var/*

ionice -c 3 はI/O優先度を最低(idle)に設定し、他のプロセスへの影響を最小限に抑えます。

4. /proc、/sys、/devなどの疑似ファイルシステムに注意

これらのディレクトリは実際のディスク容量を消費しているわけではありません。du コマンドの結果に含まれていても、削除対象として考えないでください。


まとめ

本記事では、RHELサーバでディスク使用率が高いディレクトリやファイルを調査する方法について解説しました。

調査の基本的な流れ:

  1. df -h でファイルシステム全体の使用状況を確認
  2. du -sh で使用率が高いディレクトリを絞り込み
  3. 階層を掘り下げて原因となるファイルを特定

ポイント:

  • df -ih でinodeの確認も忘れずに
  • dusort の組み合わせで効率的に大きいディレクトリを特定
  • 肥大化しやすい /var/log/tmp/var/cache は重点的にチェック
  • ファイル削除は慎重に、本番環境では負荷にも配慮

これらのコマンドと手順を覚えておくことで、ディスク容量逼迫のトラブルに迅速に対応できるようになります。日常の運用業務にぜひお役立てください。

【注意】

このブログは技術に関する知識や経験を共有することを目的としており、情報の正確性に努めていますが、その内容の正確性や完全性を保証するものではありません。ブログの情報を利用する場合は、自己の責任において行動してください。ブログの内容に基づいて行った行動や決定によって生じた損害や被害について、筆者は一切の責任を負いません。

 

記事の内容の一部は、生成AIで作成しています。

RHELITナレッジ
この記事の作者
StarTeller

30歳で異業種からITエンジニアへ転身し、10年以上にわたりインフラエンジニアとして様々な現場でシステム構築・運用に携わってきました。
得意分野はLinux/Windowsのサーバー構築・運用で、ネットワークやAWSなども実務で活用しています。このブログでは、これまでの業務で培った経験を基に、日々の業務で遭遇した問題の解決方法や、システム構築の具体的な手順を解説。現場のエンジニアが実際に「困ったとき」に参照できる情報を意識して投稿していこうと思っています。
※サーバ運用費がかかっているので、広告を掲載させて頂いてます。

StarTellerをフォローする
シェアする
StarTellerをフォローする

コメント

タイトルとURLをコピーしました