あるいは「パッケージをインストールしようとしたら、
No space left on device と表示された」——こうしたディスク起因のトラブルは、Linux初心者がサーバー運用で最初にぶつかる壁の一つです。Windowsならエクスプローラーで一目でわかる空き容量も、Linuxではコマンドで確認します。
覚えるコマンドはたった2つ。df(ディスク全体の空き容量)とdu(特定ディレクトリの使用量)です。
この記事では、dfとduの基本的な使い方から、「どのディレクトリが容量を食っているか」を特定する実践的な手順まで、完全初心者でも迷わないよう解説します。
実行環境: Ubuntu 24.04 LTS(WSL2)・Rocky Linux 9.4 で動作確認済み
この記事のポイント
・dfコマンドでディスク全体の空き容量を一覧で確認できる
・duコマンドで「どのディレクトリが容量を使っているか」を特定できる
・df -hとdu -sh */の組み合わせが現場で最もよく使われる
・du -ah --max-depth=1 | sort -rh でサイズ大のディレクトリを大きい順に一覧できる
・lsblkでディスク構成(パーティション・マウント先)を一目で把握できる
・ディスク満杯(100%)になる前に定期的に確認する習慣が重要
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
dfコマンドとduコマンドの違い
ディスク管理で使う主なコマンドの役割を最初に整理しておきましょう。| コマンド | 何を調べるか | 主な用途 |
|---|---|---|
df |
ファイルシステム(マウントポイント)ごとの空き容量 | 「どのディスクが何%使われているか」を確認する |
du |
指定したディレクトリ・ファイルの使用量 | 「どのディレクトリが容量を食っているか」を特定する |
lsblk |
接続されているブロックデバイスの一覧とマウント先 | 「このサーバーにディスクが何台あり、どこにマウントされているか」を把握する |
Windowsのエクスプローラーに例えると、dfは「Cドライブ全体の空き容量バー」、duは「フォルダのプロパティで見るフォルダサイズ」、lsblkは「ディスクの管理」画面に相当します。
ディスクが逼迫(ひっぱく)してきたら、まずdfで全体を把握し、次にduで原因のディレクトリを特定する、という流れが現場での定番手順です。
dfコマンドの使い方|ディスクの空き容量を確認する
1. lsblkでディスク構成を事前に把握する
dfを実行する前に、lsblk(list block devices)でサーバーに接続されているディスクの全体像を把握しておくと、dfの出力が読みやすくなります。# ディスク構成を一覧で確認 $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS xvda 202:0 0 20G 0 disk └─xvda1 202:1 0 20G 0 part / xvdb 202:16 0 10G 0 disk └─xvdb1 202:17 0 10G 0 part /var/log
xvda1(20GB)がルート(/)に、xvdb1(10GB)が /var/log にマウントされていることがわかります。ファイルシステムの種別も確認したい場合は lsblk -f を使います。# ファイルシステム種別も含めて表示 $ lsblk -f NAME FSTYPE LABEL UUID MOUNTPOINTS xvda └─xvda1 xfs a1b2c3d4-xxxx-xxxx-xxxx-xxxxxxxxxxxx / xvdb └─xvdb1 ext4 e5f6g7h8-xxxx-xxxx-xxxx-xxxxxxxxxxxx /var/log
2. 基本的なdfコマンドの実行
オプションなしで実行すると、1KB単位(デフォルト)で表示されます。# dfコマンド(基本) $ df Filesystem 1K-blocks Used Available Use% Mounted on devtmpfs 1024576 0 1024576 0% /dev tmpfs 1032148 0 1032148 0% /dev/shm tmpfs 1032148 9256 1022892 1% /run /dev/xvda1 20971008 4523016 16447992 22% / tmpfs 1032148 0 1032148 0% /sys/fs/cgroup /dev/xvdb 10485760 987392 9498368 10% /var/log tmpfs 206428 0 206428 0% /run/user/1000
| 列名 | 意味 |
|---|---|
| Filesystem | デバイス名(/dev/xvda1 など) |
| 1K-blocks | ディスクの合計容量(1KBブロック単位) |
| Used | 使用済み容量 |
| Available | 空き容量 |
| Use% | 使用率(100%に近いほど危険) |
| Mounted on | マウントポイント(/ は「ルート」全体) |
3. 人間が読みやすい単位で表示する(-h オプション)
現場ではほぼ必ず-h(human-readable)オプションを付けます。GB・MB単位で表示されるため、一目で容量を把握できます。# -h オプションで人間が読みやすい単位に変換 $ df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 1001M 0 1001M 0% /dev tmpfs 1008M 0 1008M 0% /dev/shm tmpfs 1008M 9.1M 999M 1% /run /dev/xvda1 20G 4.4G 16G 22% / tmpfs 1008M 0 1008M 0% /sys/fs/cgroup /dev/xvdb 10G 965M 9.1G 10% /var/log
現場では Use% が 80% を超えたら要注意、90% を超えたら緊急対応が目安です。
4. 特定のマウントポイントだけ確認する
# ルートパーティション(/)だけを確認 $ df -h / Filesystem Size Used Avail Use% Mounted on /dev/xvda1 20G 4.4G 16G 22% / # /var/log だけを確認 $ df -h /var/log Filesystem Size Used Avail Use% Mounted on /dev/xvdb 10G 965M 9.1G 10% /var/log
5. ファイルタイプ(ファイルシステム種別)も表示する(-T オプション)
# -T でファイルシステムの種別も表示 $ df -hT Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 1001M 0 1001M 0% /dev /dev/xvda1 xfs 20G 4.4G 16G 22% / /dev/xvdb ext4 10G 965M 9.1G 10% /var/log
duコマンドの使い方|どのディレクトリが容量を使っているか特定する
dfで「ディスクが80%埋まっている」ことはわかりましたが、どのディレクトリが原因かはわかりません。その特定に使うのがduコマンドです。1. 基本的なduコマンドの実行
# カレントディレクトリの使用量を表示 $ du 4 ./bash_history 8 ./.ssh 12 ./logs/access 156 ./logs 180 .
2. 合計のみを人間が読みやすい単位で表示する(-sh オプション)
# -s(サマリー)+ -h(人間向け単位)で合計のみ表示 $ du -sh /var/log 2.8G /var/log # 複数のディレクトリをまとめて確認 $ du -sh /var /tmp /home 2.8G /var 124M /tmp 456M /home
3. 直下のディレクトリごとに使用量を確認する(-sh */)
「/var/log の中で、どのサブディレクトリが大きいか」を確認するときの実践的な使い方です。# /var/log 直下の各ディレクトリの使用量を確認 $ du -sh /var/log/* 4.0K /var/log/audit 1.2G /var/log/httpd 156M /var/log/messages 48M /var/log/nginx 324K /var/log/secure 512M /var/log/yum.log
4. 使用量の大きい順に並び替えて表示する
ディレクトリが多い場合、sortと組み合わせると一番大きなディレクトリを上位に表示できます。# 使用量の大きい順(降順)に並び替え $ du -sh /var/log/* | sort -rh 1.2G /var/log/httpd 512M /var/log/yum.log 156M /var/log/messages 48M /var/log/nginx 324K /var/log/secure 4.0K /var/log/audit
sort -rh の -r は逆順(大きい順)、-h は人間向け単位(G・M・K)を正しく比較するオプションです。これを使わないと「9G」が「22G」より大きいと判定されてしまうので注意してください。5. 特定の深さまでのみ表示する(--max-depth オプション)
# /var の1階層下まで(直下のみ)表示 $ du -h --max-depth=1 /var 8.0K /var/db 52K /var/empty 2.8G /var/log 124K /var/run 488M /var/spool 3.3G /var
--max-depth=1 は -d 1 と短く書くこともできます(どちらも同じ動作)。スクリプトの中では短い -d 1 がよく使われます。# --max-depth=1 と -d 1 は同じ意味 $ du -h -d 1 /var
6. ファイルも含めてサイズ大順に確認する(-ah --max-depth=1 | sort -rh)
-a(all)オプションを加えると、サブディレクトリだけでなくファイル単体のサイズも一覧に含まれます。特定ディレクトリの中で「どのファイルが一番大きいか」を調べたいときに便利です。# /var/log の中身をファイル込みでサイズ大順に上位10件表示 $ du -ah --max-depth=1 /var/log | sort -rh | head -10 2.8G /var/log 1.2G /var/log/httpd 512M /var/log/yum.log 156M /var/log/messages 48M /var/log/nginx 1.5M /var/log/kern.log 324K /var/log/secure 4.0K /var/log/audit
head -10 で上位10件に絞ることで、大量のエントリがあっても画面が埋まらずに済みます。WSL2環境でdf・duを使う際の注意点
WSL2(Windows Subsystem for Linux 2)でdfコマンドを実行すると、WindowsのドライブがLinux側にマウントされているため、一覧に一緒に表示されます。# WSL2(Windows 11 + Ubuntu 24.04)でのdf -h実行例 user@DESKTOP-AB1C23:~$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sdb 251G 4.5G 234G 2% / tmpfs 7.8G 0 7.8G 0% /dev/shm /dev/sdc 251G 150G 88G 64% /mnt/c
/dev/sdb の「/」がWSL2のLinuxディスク領域・
/mnt/c がWindows側のCドライブLinux側のディスク使用量だけを確認したい場合は、引数に
/ を指定して絞り込みます。# Linux側だけを確認 user@DESKTOP-AB1C23:~$ df -h / Filesystem Size Used Avail Use% Mounted on /dev/sdb 251G 4.5G 234G 2% /
ディスク容量が逼迫した時の調査手順
実際に「ディスクが90%を超えた!」という場面での現場対応手順を整理します。1. どのファイルシステムが逼迫しているか確認
$ df -h Filesystem Size Used Avail Use% Mounted on /dev/xvda1 20G 19G 180M 99% / # ← ここが問題! /dev/xvdb 10G 965M 9.1G 10% /var/log
2. 原因ディレクトリを絞り込む
# ルート直下のディレクトリを大きい順に確認 $ du -ah --max-depth=1 / 2>/dev/null | sort -rh | head -10 20G / 12G /usr 4.2G /opt 1.8G /home ... # /opt の中をさらに掘り下げる $ du -ah --max-depth=1 /opt | sort -rh 4.2G /opt 3.5G /opt/app_logs 400M /opt/wordpress
3. 大きなファイルを直接探す
# 100MB以上のファイルを検索 $ find / -size +100M -type f 2>/dev/null /opt/app_logs/debug.log /var/core/core.12345
4. systemdのジャーナルログを確認する
Rocky Linux / Ubuntu などsystemdを使う環境では、ジャーナルログ(/run/log/journal/配下)が知らない間に大量のディスクを消費することがあります。# journaldが使用しているディスク容量を確認 $ journalctl --disk-usage Archived and active journals take up 2.3G in the file system. # 古いログを削除して容量を解放する(2週間より古いものを削除) $ sudo journalctl --vacuum-time=2weeks Vacuuming done, freed 1.8G of archived journals from /run/log/journal/. # サイズで上限を設ける場合は --vacuum-size を使う $ sudo journalctl --vacuum-size=100M
5. よくある原因と対処コマンド
実務でよく遭遇する原因ごとの対処コマンドをまとめておきます。| 原因 | 対処コマンド |
|---|---|
| Dockerの不要イメージ・コンテナ | docker system prune -f |
| journaldログの肥大化 | sudo journalctl --vacuum-size=100M |
| 古いカーネルファイル(Ubuntu) | sudo apt autoremove |
| /tmp の古い一時ファイル | find /tmp -mtime +7 -delete |
| 大きなログファイル(手動) | find / -size +100M -type f 2>/dev/null |
dfとduのオプションまとめ
| やりたいこと | コマンド |
|---|---|
| ディスク構成(パーティション・マウント先)を確認 | lsblk |
| ディスク全体の空き容量を確認(人間向け単位) | df -h |
| ファイルシステム種別も含めて確認 | df -hT |
| inodeの使用状況を確認 | df -i |
| 特定ディレクトリの合計使用量を確認 | du -sh /path/to/dir |
| 直下のディレクトリごとに使用量を確認 | du -sh /path/to/dir/* |
| 使用量の大きい順に並び替えて表示 | du -sh /path/to/dir/* | sort -rh |
| ファイルも含めてサイズ大順に1階層表示 | du -ah --max-depth=1 /path | sort -rh | head -10 |
| 特定の深さまでのみ表示 | du -h --max-depth=1 /path |
| 100MB以上のファイルを検索 | find / -size +100M -type f 2>/dev/null |
| journaldのログ使用量を確認 | journalctl --disk-usage |
トラブルシュート|よくあるエラーと対処法
「df: /run/user/1000/gvfs: Permission denied」が出る
一般ユーザーで実行すると、アクセス権のないマウントポイントでこのエラーが表示されることがあります。表示は出ますが、他のファイルシステムの結果は正しく表示されるため、問題ありません。完全にエラーをなくしたい場合は sudo で実行します。「du: cannot access 'xxx': No such file or directory」が出る
指定したディレクトリが存在しない場合のエラーです。パスのスペルを確認してください。dfでは容量に余裕があるのにファイルを書き込めない
inode(アイノード)が枯渇している可能性があります。inodeはファイルの管理情報を記録する領域で、小さなファイルを大量に作ると使い切ることがあります。以下のコマンドで確認できます。# inode の使用状況を確認 $ df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/xvda1 1310720 1310720 0 100% / # ← inode が 100%!
Dockerを使うと急にディスクが逼迫する
Dockerを運用しているサーバーでは、使われなくなったイメージ・コンテナ・ボリュームが知らないうちに大量のディスクを消費します。df -h で / が逼迫しているのに原因ディレクトリが見つからない場合は、Dockerのクリーンアップを試みてください。# Dockerが使用しているディスク容量を確認 $ docker system df TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 12 3 8.2GB 6.8GB (82%) Containers 2 2 0B 0B Local Volumes 5 3 1.3GB 400MB (30%) Build Cache 0 0 0B 0B # 使われていないリソースを一括削除 $ docker system prune -f
docker system prune は停止中のコンテナ・タグなしイメージ・未使用ネットワークをすべて削除します。重要なコンテナが停止状態になっていないか、実行前に必ず docker ps -a で確認してください。duの実行に時間がかかる
大量のファイルがあるディレクトリではduの処理に時間がかかることがあります。--max-depth(または -d)で調べる階層を絞り込むのが有効です。# 深い階層まで再帰しないように制限して高速化 $ sudo du -ah --max-depth=2 /var | sort -rh | head -20
本記事のまとめ
dfとduは、Linuxを使い始めたら最初に覚えるべきコマンドの一つです。・lsblk:ディスク構成(パーティション・マウント先)を一覧で把握する
・df -h:ディスク全体の空き容量を人間が読みやすい単位で確認する
・du -sh /path/*:どのディレクトリが容量を消費しているかを特定する
・du -ah --max-depth=1 /path | sort -rh:ファイルも含めてサイズ大順に確認する
・du -sh /* | sort -rh:使用量の大きいディレクトリを上位から確認する
・df -i:inodeの使用状況を確認する(容量に余裕があるのに書けない時に使う)
セミナーで3,100名以上の受講生を指導してきた経験から言うと、「ディスク管理をきちんとできる人」と「なんとなく使っている人」の差は、このdfとduを使いこなせるかどうかにかかっています。障害が起きてから慌てるのではなく、定期的に確認する習慣をつけることが、現場で信頼されるエンジニアへの第一歩です。
Linuxのディスク管理をさらに深めたい方は、次のステップとして「tarコマンドで圧縮・解凍(展開)する方法」でファイルアーカイブを学ぶと、容量削減の実践力が身につきます。
関連する実務スキル記事
Linux入門として基礎を固めたら、以下の実務スキル記事でさらにステップアップしましょう。7つのテーマを体系的に学べます。・シェルスクリプト:crontabコマンドの設定と書き方|動かない時のログ確認まで ~ 定期的なディスク確認を自動化する
・セキュリティ:chmodコマンドで権限を変更する方法|755と644の違いや一括変更も ~ ファイルのアクセス権を正しく設定する
・サーバー構築:systemctlコマンドの使い方|サービスの起動・停止・自動起動設定 ~ サービス管理をマスターする
・トラブルシューティング:psコマンドでプロセスを確認する方法|auxと-efの違いやgrep検索も ~ ディスクを使い切るプロセスを特定する
・ネットワーク:ssコマンドでソケット情報を確認する方法|LISTEN・ESTABの見方やポート確認も ~ ネットワーク接続状態を把握する
・ファイルシステム:tarコマンドで圧縮・解凍(展開)する方法|必須のzxvfやディレクトリ指定も ~ ファイルを圧縮して容量を節約する
・現場コラム:grepコマンドで文字列を検索する方法|複数ファイルやディレクトリ除外も ~ ログファイルから問題箇所を素早く見つける
無料の「Linuxサーバー構築入門マニュアル(図解60ページ)」をプレゼントしています。
dfとduによるディスク管理をさらに深め、実務で使えるLinuxスキルを身につけたい方は、ぜひ受け取ってみてください。
無料マニュアルを受け取る >>
<PR>手元に置いて学びを深める1冊
本気で学ぶ Linux実践入門 サーバ運用のための業務レベル管理術
まずは無料メルマガでdfコマンドやディスク管理の基礎を身につけるのが第一歩、さらに業務レベルまで体系的に固めたい方はこの1冊を手元に置いておくと学習の加速が違います。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 次のページへ:Linuxのログファイル入門|tailとlessでサーバーの状態を読む方法
- 前のページへ:Linuxのネットワーク確認入門|ipコマンドとpingで接続状態を調べる方法
- この記事の属するカテゴリ:【Linux入門】初心者のための基礎知識・講座へ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます