Linuxで空き容量を確認する方法|df・duコマンドで簡単チェック

Linux

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回の詳細分析
  • 四半期ごとの清掃作業

予防的な対策:

  • ログローテーションの設定
  • 自動清掃スクリプトの運用
  • 容量アラートの設定

緊急時の対応:

  1. df -h で全体状況を把握
  2. du -h --max-depth=1 で問題個所を特定
  3. 不要ファイルの削除
  4. 必要に応じてサービス再起動

実用的なワンライナー集

容量監視:

# 使用率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 -hdu -h --max-depth=1 は毎日使える基本コマンドなので、ぜひ覚えて活用してください!

コメント

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