df・duコマンドでディスク使用量を確認する方法|容量不足の調査手順も解説

  • URLをコピーしました!

Linuxサーバを運用していると、 「ディスク容量が足りない」 という問題に遭遇することがあります。

たとえば、次のような症状です。

ファイルを保存できない。
ログが書き込めない。
アプリケーションが突然エラーになる。

このようなときに重要なのが、 dfduです。

どちらもディスク容量の確認に利用しますが、 役割は異なります。

🐧 LINUX INTERMEDIATE

この記事はLinux中級講座の一部です。 df・duを使ったディスク使用量の確認と、 容量不足の切り分け方法を学習します。

Linux中級講座を見る →
LESSON GOAL この記事のゴール

dfでファイルシステム全体の使用状況を確認し、 duどのディレクトリやファイルが容量を使っているのか を特定できる状態を目指します。

目次

dfとduの違いを最初に理解しよう

dfとduは似ていますが、 確認する対象が異なります。

DF ファイルシステム全体を見る

どのディスク領域が どれくらい使用されているか確認する。

df -h
DU 中身の容量を見る

どのディレクトリやファイルが 容量を使っているか確認する。

du -sh /var
df = 全体を見る du = 中身を掘る

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

dfは、 ファイルシステムごとの ディスク使用量を確認するコマンドです。

df
Linux Terminal
$ df
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sda2       52403200 40203120  12190080  77% /
/dev/sda1        1048576   210000    838576  21% /boot
/dev/sdb1      104806400 30120400  74686000  29% /data

ただし、1K-blocksなどの数字は少し読みにくいので、 実務では -hを付けることが多いです。

df -h:見やすい単位で確認する

df -h
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        50G   46G  4.0G  92% /
/dev/sda1       1.0G  210M  814M  21% /boot
/dev/sdb1       100G   29G   71G  29% /data

-hhuman-readableの意味で、 GB・MBなど人が読みやすい単位で表示します。

df -hの表示項目を理解しよう

FILESYSTEM /dev/sda2 ファイルシステム
SIZE 50G 総容量
USED 46G 使用済み
AVAIL 4.0G 空き容量
USE% 92% 使用率
MOUNT / マウント先

特に重要なのは、 Use%Mounted onです。

「どこが逼迫しているか」をまずdfで確認する

たとえば「/ が92%」なら、 ルートファイルシステムの容量がかなり使用されていることが分かります。

使用率が高ければすぐ異常なのか?

ディスク使用率が高いからといって、 必ずしも即障害というわけではありません。

ただし、 100%近くまで使用されると新しいデータを書き込めなくなる 可能性があります。

50% 余裕あり
80% 要確認
95% 逼迫
IMPORTANT 監視の閾値は環境によって異なる

「80%なら必ず異常」という絶対的な基準ではありません。 ディスクの増加速度や用途、運用ルールを含めて判断します。

df -i:inode使用量も確認できる

ディスク容量に空きがあるのに、 「No space left on device」 になることがあります。

その原因の一つが inode不足です。

df -i
$ df -i
Filesystem      Inodes   IUsed   IFree IUse% Mounted on
/dev/sda2      3276800 3265000   11800   100% /
/dev/sdb1      6553600  150000 6403600     3% /data

この例では、 容量ではなく inodeの使用率が100%になっています。

容量だけでなくinodeも枯渇する

小さなファイルを大量に作成した場合など、 ディスク容量に空きがあってもinodeが不足することがあります。

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

dfで 「/ が92%」 と分かったら、 次は 何が容量を使っているのか を調べます。

そこで使うのが duです。

du /var

ただし、これでは配下の情報が大量に表示されるため、 実務ではオプションを付けて使います。

du -sh:指定したディレクトリの合計容量を確認する

du -sh /var
$ du -sh /var
18G     /var

-sはsummary、 -hはhuman-readableです。

-s = 合計だけ表示 -h = 読みやすい単位

du -h –max-depth=1:1階層ずつ調べる

/varが18GB使っていると分かったら、 次は /varの中のどこが大きいのか を調べます。

du -h --max-depth=1 /var
$ sudo du -h --max-depth=1 /var
1.2G    /var/lib
15G     /var/log
650M    /var/cache
120M    /var/tmp
18G     /var

この結果から、 /var/logが15GBと非常に大きいことが分かります。

LEVEL 1 / dfで逼迫を確認
LEVEL 2 /var 18GB
LEVEL 3 /var/log 15GB

sortと組み合わせて大きい順に並べる

duの結果を 容量の大きい順に並べたい 場合は、 sortと組み合わせると便利です。

du -h --max-depth=1 /var | sort -hr
$ sudo du -h --max-depth=1 /var | sort -hr
18G     /var
15G     /var/log
1.2G    /var/lib
650M    /var/cache
120M    /var/tmp

これなら、 大きなディレクトリをすぐに見つけられます。

du 容量を調べる
→ | →
sort -hr 大きい順に並べる

sort -hrの意味

-h human numeric

1K・1M・1Gなどを容量として比較する

-r reverse

大きい順に並べる

大きなファイルを探したい場合

ディレクトリ単位ではなく、 さらに具体的に どのファイルが大きいのか を確認したい場合もあります。

du -ah /var/log | sort -hr | head
$ sudo du -ah /var/log | sort -hr | head
15G     /var/log
8.2G    /var/log/app.log
4.5G    /var/log/nginx
3.8G    /var/log/nginx/access.log
2.1G    /var/log/messages
1.2G    /var/log/nginx/error.log

この例なら、 /var/log/app.log が8.2GB使っていることが分かります。

実務でのディスク逼迫調査の基本手順

たとえば監視システムから、

ALERT Disk Usage / = 95%

web01のルートファイルシステムが逼迫しています。

というアラートが来たとします。

この場合、 次のように調査できます。

STEP 01 ファイルシステム確認 df -h
STEP 02 大きいディレクトリを探す du -h --max-depth=1 / | sort -hr
STEP 03 さらに掘る du -h --max-depth=1 /var | sort -hr
STEP 04 原因候補を特定 /var/log = 15G
STEP 05 大きなファイルを確認 du -ah /var/log | sort -hr | head

大きなファイルを見つけても、すぐ削除しない

ディスク使用量の大きなファイルを見つけると、 「削除すればよい」と考えてしまいがちです。

しかし、 実際のサーバでは そのファイルが何に使われているのか を確認する必要があります。

IMPORTANT 容量が大きい=不要なファイル、ではない

ログ・データベース・バックアップ・アプリケーションデータなど、 大きくても必要なファイルはあります。 削除前に用途や保管要件、サービスへの影響を確認しましょう。

削除したのにdfの空き容量が増えないこともある

Linuxでは、 プロセスがファイルを開いたままの状態で そのファイルを削除すると、 ファイル名は消えてもディスク領域が解放されない 場合があります。

PROCESS application
→ OPEN →
FILE app.log
DELETE 名前は削除 領域は保持される場合あり

このようなケースでは、 lsofなどで 削除済みファイルを掴んでいるプロセスを確認することがあります。

lsof +L1
dfとduの数字が合わないときの原因候補

削除済みだがプロセスがまだ開いているファイルなどがあると、 dfでは使用中に見える一方、 duでは見つけられないことがあります。

dfとduの値が完全に一致しないことがある理由

dfとduは、 そもそも確認している情報が異なります。

DF ファイルシステム視点

使用されているブロック全体を確認

DU ファイル視点

見えているファイル・ディレクトリの使用量を集計

そのため、 完全に同じ数値にならない場合があります。

duでPermission deniedが出る場合

ルートディレクトリ配下を調べていると、 権限不足で次のような表示が出ることがあります。

$ du -h --max-depth=1 /
du: cannot read directory '/root': Permission denied

必要な権限がある場合は、 sudoを付けて確認することがあります。

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

ここで実際に試してみよう:ディスク逼迫調査シミュレーター

疑似Linuxサーバで、 「/ が95%使用されている」 という障害を調査してみましょう。

dfで全体を確認し、 duを使って原因となっている場所を 徐々に絞り込んでください。

INTERACTIVE LAB

Disk Usage Troubleshooting

ALERT
SERVER web01
FILESYSTEM /
USAGE 95%
user@web01
ALERT: Disk usage on / has reached 95%.
df -h から調査を始めてみましょう。
user@web01:~$
STEP 1

まずdf -hで逼迫しているファイルシステムを確認しましょう

dfは全体、duは中身を調べるために使います。

この演習のゴール

df -h / が95%
du / /varが大きい
du /var /var/logが大きい
du /var/log app.logが原因候補

理解度チェック:次に何を実行する?

SCENARIO df -hを実行すると、/ が95%使用されていました。

次に、ルート配下の 「どのディレクトリが容量を使っているのか」 を調べたい場合、どのコマンドが適切でしょうか?

回答を選択してください

「全体を見るdf」と「中身を見るdu」の違いを思い出しましょう。

初心者が間違えやすいポイント

① dfとduを同じものだと思う

df どのファイルシステムが逼迫?
du 何が容量を使っている?

② duをいきなり/全体に大量表示する

du /だけでは 非常に多くの結果が表示される場合があります。

--max-depth=1-sを使い、 段階的に掘っていくのがおすすめです。

③ 大きいログをその場でrmする

ログファイルは、 サービスが現在利用している可能性があります。

ログローテーション設定や 保持要件などを確認してから対応しましょう。

確認問題:df・duの基本を確認しよう

QUESTION 01

ファイルシステム全体の空き容量を 読みやすい単位で確認するコマンドはどれですか?

正解:B

df -hではファイルシステムごとの Size・Used・Avail・Use%などを確認できます。

QUESTION 02

/varディレクトリ全体の合計使用量だけを 確認したい場合、適切なコマンドはどれですか?

正解:A

-sで合計値、-hで読みやすい単位にして 指定ディレクトリの容量を確認できます。

QUESTION 03

ディスク容量には空きがあるのに 新しいファイルを作成できない場合、 追加で確認したいものはどれですか?

正解:C

inodeが枯渇すると、 ディスク容量に空きがあっても 新しいファイルを作成できない場合があります。 df -iで確認できます。

YOUR SCORE 0 / 3

3問に挑戦してみましょう。

まとめ

01

dfは、 ファイルシステム全体の使用量を確認する

02

duは、 ファイルやディレクトリが使用している容量を確認する

03

df -hで逼迫箇所を確認し、 du原因となるディレクトリを掘っていく

04

df -iinode使用率も確認できる

05

大きなファイルを見つけても、 用途や影響を確認してから対応する ことが重要

次はネットワーク状態を確認できるようになろう

Linuxサーバの障害は、 ディスクだけで発生するわけではありません。

たとえば、

IP IPアドレスは正しい?
ROUTE ルートは存在する?
PORT ポートは待ち受けている?
DNS 名前解決できている?

といったネットワーク確認も、 Linuxサーバ運用では欠かせません。

NEXT LESSON

次は「Linuxのネットワーク確認コマンドを学ぶ」を学びましょう

次の記事では、 Linuxサーバのネットワーク状態を確認するために、 ip・ping・ss・ip route・名前解決確認などを扱います。

「通信できない」というトラブルに対して、 どこから確認すればよいのか を順番に学習していきます。

Linuxのネットワーク確認コマンドを学ぶ
LINUX INTERMEDIATE

Linux中級講座の一覧へ戻る

Linux中級の学習順を確認したい場合は、 講座一覧へ戻りましょう。

← Linux中級講座へ戻る
目次