LinuxサーバやPCを使っていて、 「ディスクの空き容量ってどれくらいあるんだろう?」 「どのディレクトリが容量を食ってるんだろう?」 と思うことはありませんか?
容量不足はシステムトラブルの原因No.1ともいわれる重要ポイントです。
この記事では、Linuxでディスクの空き容量や、どのファイル・ディレクトリが容量を使っているかを簡単に確認する方法を紹介します。
ディスク容量管理の重要性

なぜ空き容量の確認が重要?
システムの安定性
- ディスク容量不足はシステム停止の原因
- ログファイルが書き込めなくなる
- 一時ファイルが作成できなくなる
パフォーマンスへの影響
- 空き容量が少ないとディスクI/Oが遅くなる
- スワップファイルが作成できない
- データベースの動作が不安定になる
予防保守の重要性
- 問題が起きる前に対策を取る
- 計画的な容量拡張ができる
- 不要ファイルの定期削除
よくある容量不足の原因
ログファイルの肥大化
- アプリケーションログの蓄積
- システムログの増大
- エラーログの異常増加
一時ファイルの蓄積
/tmp
ディレクトリの未削除ファイル- キャッシュファイルの蓄積
- ダウンロードファイルの放置
データベースの成長
- データベースファイルの拡大
- インデックスファイルの増加
- バックアップファイルの蓄積
ディスク全体の空き容量を確認する

df コマンドの基本
df の役割 df
(Disk Free) コマンドは、マウントされたファイルシステムの使用状況を表示します。
基本的な使い方:
df -h
出力例:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 20G 28G 42% /
/dev/sda2 100G 75G 20G 79% /home
tmpfs 2.0G 0 2.0G 0% /dev/shm
/dev/sdb1 500G 350G 125G 74% /var/data
出力の読み方
各列の意味:
- Filesystem:デバイス名(ディスクの識別子)
- Size:総容量
- Used:使用済み容量
- Avail:利用可能な空き容量
- Use%:使用率(パーセンテージ)
- Mounted on:マウントポイント(ディスクがマウントされている場所)
注意すべき使用率:
- 80%以上:注意が必要
- 90%以上:危険レベル
- 95%以上:緊急対応が必要
df の便利なオプション
人間が読みやすい形式(-h):
df -h
特定のファイルシステムタイプのみ表示:
df -h -t ext4 # ext4ファイルシステムのみ
inode 使用状況も表示(-i):
df -hi
出力例:
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda1 3276800 156432 3120368 5% /
特定のディレクトリが属するディスクを確認:
df -h /var/log
df -h /home/user/documents
実用的な df の活用
システム監視での定期チェック:
# 使用率が90%以上のディスクを警告表示
df -h | awk 'NR>1 && $5+0 >= 90 {print "WARNING: " $0}'
スクリプトでの容量チェック:
#!/bin/bash
# 容量チェックスクリプト
threshold=90
df -h | awk -v limit=$threshold '
NR>1 {
gsub(/%/, "", $5)
if ($5 >= limit) {
print "容量警告: " $6 " が " $5 "% 使用中"
}
}'
ディレクトリごとの容量を確認する
du コマンドの基本
du の役割 du
(Disk Usage) コマンドは、ディレクトリやファイルが使用している容量を表示します。
基本的な使い方:
du -h --max-depth=1 /var
出力例:
4.0K /var/tmp
1.2G /var/log
200M /var/cache
500M /var/lib
50M /var/spool
1.9G /var
du の重要なオプション
階層の深さを制限(–max-depth):
du -h --max-depth=1 /home # 1階層のみ
du -h --max-depth=2 /usr # 2階層まで
すべてのファイルとディレクトリを表示(-a):
du -ah /var/log | head -20
サイズでソート:
du -h /var | sort -rh | head -10 # 大きい順トップ10
特定サイズ以上のみ表示:
du -h /home | awk '$1 ~ /G/ || $1+0 >= 100' # 100MB以上またはGB単位
実用的な du の活用例
ホームディレクトリの容量分析:
cd ~
du -h --max-depth=1 . | sort -rh
システムディレクトリの分析:
# 主要ディレクトリの容量確認
for dir in /var /usr /opt /home; do
echo "=== $dir ==="
du -sh $dir/* 2>/dev/null | sort -rh | head -5
echo
done
ログディレクトリの詳細分析:
du -ah /var/log | sort -rh | head -20
大容量ファイルの特定

find コマンドによるサイズ検索
大きなファイルの検索:
# 100MB以上のファイル
find / -type f -size +100M 2>/dev/null
# 1GB以上のファイル
find /home -type f -size +1G 2>/dev/null
# 特定の期間内に作成された大きなファイル
find /var -type f -size +50M -mtime -7 2>/dev/null
ファイルサイズ別の検索:
# 10MB〜100MBのファイル
find /var -type f -size +10M -size -100M
# 正確に100MBのファイル
find /tmp -type f -size 100M
より詳細なファイル分析
ファイルサイズと詳細情報の表示:
find /var -type f -size +100M -exec ls -lh {} \; 2>/dev/null
拡張子別の容量分析:
# ログファイルの容量合計
find /var/log -name "*.log" -exec du -ch {} + | tail -1
# 画像ファイルの容量合計
find /home -name "*.jpg" -o -name "*.png" -o -name "*.gif" | xargs du -ch | tail -1
組み合わせた分析コマンド
最大容量ファイルのトップ10:
find / -type f -exec du -h {} + 2>/dev/null | sort -rh | head -10
ディレクトリ別の最大ファイル:
for dir in /var/log /tmp /home; do
echo "=== $dir の最大ファイル ==="
find $dir -type f -exec du -h {} + 2>/dev/null | sort -rh | head -3
echo
done
高度な容量分析ツール
ncdu – 対話的なディスク使用量アナライザー
ncdu の特徴
- 対話的なインターフェース
- ディレクトリ階層をナビゲート可能
- リアルタイムでの容量確認
インストール:
# Ubuntu/Debian
sudo apt install ncdu
# CentOS/RHEL
sudo yum install ncdu
基本的な使用:
ncdu /var # /var 以下を分析
ncdu ~ # ホームディレクトリを分析
操作方法:
- 矢印キー:ナビゲート
- Enter:ディレクトリに入る
- ‘q’:終了
- ‘d’:削除(要注意)
tree コマンドとの組み合わせ
ディレクトリ構造と容量の同時表示:
tree -h /var/log # サイズ付きでディレクトリ構造表示
lsof – 開いているファイルの確認
削除されたが開かれているファイルの確認:
lsof +L1 # 削除されたが開かれているファイル
これらのファイルは容量を消費し続けるため、プロセスの再起動で解放できます。
容量監視とアラート

自動監視スクリプト
disk_monitor.sh:
#!/bin/bash
# ディスク容量監視スクリプト
THRESHOLD=90
LOG_FILE="/var/log/disk_monitor.log"
EMAIL="admin@example.com"
check_disk_usage() {
df -h | awk -v threshold=$THRESHOLD '
NR>1 {
gsub(/%/, "", $5)
if ($5 >= threshold) {
print strftime("%Y-%m-%d %H:%M:%S") " WARNING: " $6 " is " $5 "% full"
}
}' >> $LOG_FILE
}
# 詳細分析
analyze_large_dirs() {
echo "$(date): Large directories analysis" >> $LOG_FILE
df -h | awk 'NR>1 && $5+0 >= 80 {print $6}' | while read mountpoint; do
echo "Top 5 directories in $mountpoint:" >> $LOG_FILE
du -h --max-depth=1 $mountpoint 2>/dev/null | sort -rh | head -5 >> $LOG_FILE
echo "" >> $LOG_FILE
done
}
# メイン処理
check_disk_usage
analyze_large_dirs
# 警告がある場合はメール送信
if grep "$(date +%Y-%m-%d)" $LOG_FILE | grep -q "WARNING"; then
tail -20 $LOG_FILE | mail -s "Disk Space Alert" $EMAIL
fi
cronでの定期実行
crontab設定例:
# 毎時間実行
0 * * * * /path/to/disk_monitor.sh
# 毎日朝9時に詳細レポート
0 9 * * * df -h && du -h --max-depth=1 /var /home /opt
容量削減の実践的手法
ログファイルの管理
古いログファイルの検索と削除:
# 30日以上古いログファイル
find /var/log -name "*.log*" -mtime +30 -exec ls -lh {} \;
# 圧縮されたログファイルの削除
find /var/log -name "*.gz" -mtime +90 -delete
ログローテーションの確認:
ls -la /etc/logrotate.d/
cat /etc/logrotate.conf
一時ファイルのクリーンアップ
一時ディレクトリの清掃:
# /tmp の古いファイル削除
find /tmp -type f -atime +7 -delete
# キャッシュディレクトリの清掃
rm -rf ~/.cache/thumbnails/*
rm -rf /var/cache/apt/archives/*.deb
パッケージキャッシュの清掃
システム別のキャッシュ清掃:
# Ubuntu/Debian
sudo apt autoremove
sudo apt autoclean
# CentOS/RHEL
sudo yum clean all
# Arch Linux
sudo pacman -Sc
トラブルシューティング
よくある問題と対処法
df と du の結果が一致しない:
# 削除されたが開かれているファイルを確認
lsof +L1
# プロセス再起動で解決することが多い
sudo systemctl restart service_name
権限エラーで確認できない:
# sudo で実行
sudo du -h --max-depth=1 /root
# エラーを無視して実行
du -h /var 2>/dev/null
シンボリックリンクの扱い:
# シンボリックリンクを辿らない
du -h --max-depth=1 /var
# シンボリックリンクを辿る
du -hL --max-depth=1 /var
パフォーマンス最適化
大きなディレクトリの効率的な分析:
# 並列処理で高速化
find /large/directory -maxdepth 1 -type d | xargs -P 4 -I {} du -sh {}
I/O負荷を抑えた分析:
# nice とionice で優先度を下げる
nice -n 19 ionice -c 3 du -h /large/directory
まとめ
基本コマンドの使い分け
コマンド | 用途 | 基本例 |
---|---|---|
df -h | ディスク全体の空き容量確認 | システム全体の容量状況把握 |
du -h --max-depth=1 /path | ディレクトリごとの容量確認 | 容量を食っている場所の特定 |
find / -type f -size +100M | 大容量ファイルの検索 | 不要な大ファイルの発見 |
効率的な容量管理のコツ
定期的な監視:
- 週1回の容量チェック
- 月1回の詳細分析
- 四半期ごとの清掃作業
予防的な対策:
- ログローテーションの設定
- 自動清掃スクリプトの運用
- 容量アラートの設定
緊急時の対応:
df -h
で全体状況を把握du -h --max-depth=1
で問題個所を特定- 不要ファイルの削除
- 必要に応じてサービス再起動
実用的なワンライナー集
容量監視:
# 使用率90%以上の警告
df -h | awk 'NR>1 && $5+0 >= 90 {print "WARNING: " $0}'
# 最大容量ディレクトリトップ5
du -h /var | sort -rh | head -5
# 今日作成された大きなファイル
find /tmp -type f -size +10M -newerct today
これらのコマンドと手法を使いこなせば、Linuxでの容量管理が格段に楽になります。
特に df -h
と du -h --max-depth=1
は毎日使える基本コマンドなので、ぜひ覚えて活用してください!
コメント