「dfコマンドを実行したけど、tmpfsが大量に並んで肝心のディスク情報が見づらい」
Linuxサーバーの運用で、こうした場面に遭遇したことはないでしょうか。
この記事では、Linuxの
df コマンドを使ってディスク容量や使用率を確認する実践的な手順を解説します。基本的なオプション(-h・-T・-i)の使い方から、tmpfsを除外して見やすくする方法、dfとduの違い、iノード枯渇への対処、ディスク使用率の自動監視スクリプトまで、現場で必要な知識をまとめました。
dfコマンドとは? ディスク容量を確認する基本コマンド
df(disk free)は、マウントされているファイルシステムごとに、ディスクの総容量・使用量・空き容量・使用率を表示するコマンドです。サーバー運用では「ディスクがいっぱいになっていないか」を日常的に確認する必要があります。ログファイルの肥大化やバックアップデータの蓄積など、気づかないうちに容量を圧迫しているケースは珍しくありません。
df はその確認の第一歩として、最も頻繁に使われるコマンドの一つです。# dfコマンドの実行(オプションなし) $ df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda3 51343840 8234512 40472528 17% / devtmpfs 1998648 0 1998648 0% /dev tmpfs 2015680 0 2015680 0% /dev/shm tmpfs 2015680 9012 2006668 1% /run /dev/sda1 508588 169536 339052 34% /boot
-h オプションを付けるのが一般的です。dfコマンドの基本オプション
1. -h(人間が読みやすい単位で表示)
最もよく使うオプションです。容量をK(キロバイト)・M(メガバイト)・G(ギガバイト)で自動的に表示してくれます。# 人間が読みやすい単位で表示 $ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 49G 7.9G 39G 17% / devtmpfs 2.0G 0 2.0G 0% /dev tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 2.0G 8.9M 2.0G 1% /run /dev/sda1 497M 166M 332M 34% /boot
-h は「human-readable」の略です。現場では df -h をまず実行する、というのが定番の流れです。※
-h は1024を基準にした単位(1G = 1,048,576K)を使います。ディスクメーカーが表記する1000基準の容量と合わせたい場合は、-H(1G = 1,000,000K)を使ってください。2. -T(ファイルシステムの種類を表示)
-T を付けると、各ファイルシステムの種類(xfs・ext4・tmpfs等)が表示されます。# ファイルシステムの種類を表示 $ df -hT Filesystem Type Size Used Avail Use% Mounted on /dev/sda3 xfs 49G 7.9G 39G 17% / devtmpfs devtmpfs 2.0G 0 2.0G 0% /dev tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs tmpfs 2.0G 8.9M 2.0G 1% /run /dev/sda1 xfs 497M 166M 332M 34% /boot
-T で種類を把握しておくと障害対応時にスムーズです。3. -i(iノードの使用状況を表示)
-i は容量ではなく、iノード(ファイルやディレクトリの管理番号)の使用状況を表示します。# iノードの使用状況を表示 $ df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda3 3276800 125340 3151460 4% / /dev/sda1 256000 310 255690 1% /boot
4. -x(特定のファイルシステムを除外)
df -h を実行すると、tmpfsやdevtmpfsなど実ディスクとは関係のない仮想ファイルシステムが大量に表示されることがあります。-x オプションでこれらを除外すると、本当に確認したいディスクだけが残ります。# tmpfsとdevtmpfsを除外して表示 $ df -h -x tmpfs -x devtmpfs Filesystem Size Used Avail Use% Mounted on /dev/sda3 49G 7.9G 39G 17% / /dev/sda1 497M 166M 332M 34% /boot
df -h -x tmpfs -x devtmpfs をエイリアスに登録しておくと便利です。# .bashrcにエイリアスを追加する例 alias dfd='df -h -x tmpfs -x devtmpfs'
5. --total(合計行を追加)
--total を付けると、最終行にすべてのファイルシステムの合計が表示されます。サーバー全体のディスク使用状況をざっくり把握したい場合に便利です。# 合計行を追加して表示 $ df -h --total -x tmpfs -x devtmpfs Filesystem Size Used Avail Use% Mounted on /dev/sda3 49G 7.9G 39G 17% / /dev/sda1 497M 166M 332M 34% /boot total 49G 8.0G 39G 17% -
6. 特定のパスを指定する
df にパスを渡すと、そのパスが属するファイルシステムの情報だけが表示されます。# /var/log が属するファイルシステムを確認 $ df -h /var/log Filesystem Size Used Avail Use% Mounted on /dev/sda3 49G 7.9G 39G 17% /
dfとduの違い ~ ディスク全体 vs ディレクトリ単位 ~
ディスク容量の確認でよく混同されるのがdf と du です。役割が明確に異なるため、使い分けを整理しておきましょう。・df:ファイルシステム全体の空き容量・使用率を表示する。「ディスクがあとどれくらい使えるか」を確認するコマンド
・du:ディレクトリやファイル単位の使用量を表示する。「どのディレクトリが容量を食っているか」を特定するコマンド
実務での使い分けは明確です。まず
df -h でどのパーティションが逼迫しているかを確認し、次に du でそのパーティション内のどのディレクトリが容量を消費しているかを特定する、という流れになります。# まずdfでディスク全体の使用率を確認 $ df -h # 次にduで容量の大きいディレクトリを特定(上位10件) $ du -sh /var/* 2>/dev/null | sort -rh | head -10
df と du の合計値が一致しないことがあります。これは、プロセスが掴んだまま削除されたファイル(deleted but open)がdfには反映されるがduには表示されないためです。この場合、該当プロセスを再起動すると領域が解放されます。実務で使えるdfの応用テクニック
1. LVM環境でのdf出力の読み方
RHEL/CentOS/AlmaLinuxの標準インストールでは、LVM(Logical Volume Manager)が使われます。この場合、dfの出力のFilesystem列が/dev/mapper/rl-root や /dev/mapper/cs-root のような表記になります。# LVM環境でのdf出力例 $ df -hT Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/rl-root xfs 45G 8.2G 37G 19% / /dev/mapper/rl-home xfs 20G 1.5G 19G 8% /home /dev/sda1 xfs 960M 233M 728M 25% /boot
rl-root は「ボリュームグループ名-論理ボリューム名」の形式です。LVM環境では lvs や vgs コマンドで論理ボリュームの詳細を確認できます。# 論理ボリュームの一覧と容量を確認 $ sudo lvs LV VG Attr LSize Pool Origin Data% Meta% home rl -wi-ao---- 20.00g root rl -wi-ao---- 45.00g swap rl -wi-ao---- 4.00g # ボリュームグループの空き容量を確認 $ sudo vgs VG #PV #LV #SN Attr VSize VFree rl 1 3 0 wz--n- <70.00g 1.00g
lvextend で論理ボリュームを拡張し、xfs_growfs(xfsの場合)でファイルシステムを拡張できます。2. ディスク使用率の監視スクリプト
ディスクが90%を超えたら警告メールを送る、という監視はサーバー運用の基本です。Zabbixなどの監視ツールがない環境でも、シェルスクリプトとcronで簡単に実現できます。#!/bin/bash # ディスク使用率が指定値を超えたらアラートを出すスクリプト THRESHOLD=90 MAILTO="admin@example.com" HOSTNAME=$(hostname) df -h -x tmpfs -x devtmpfs | awk 'NR>1 {print $5, $6}' | while read usage mount; do # %記号を除去して数値に変換 percent=${usage%\%} if [ "$percent" -ge "$THRESHOLD" ] 2>/dev/null; then echo "WARNING: ${mount} is ${usage} full on ${HOSTNAME}" | \ mail -s "[DISK ALERT] ${HOSTNAME} ${mount} ${usage}" "$MAILTO" fi done
# cronに登録する例(毎時0分に実行) 0 * * * * /root/scripts/disk_check.sh
3. iノード枯渇の問題と対処
ディスク容量に余裕があるのに「No space left on device」エラーが出る場合、iノードの枯渇を疑ってください。iノードはファイルやディレクトリごとに1つ消費されます。小さなファイルが大量にあるディレクトリ(メールスプールやセッションファイル等)では、容量の前にiノードが不足するケースがあります。
# iノードの使用率を確認 $ df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda3 3276800 3276800 0 100% / # IUse%が100%ならiノードが枯渇している
# ディレクトリごとのファイル数を調査(上位10件) $ find / -xdev -type d -exec sh -c 'echo "$(find "$1" -maxdepth 1 -type f | wc -l) $1"' _ {} \; 2>/dev/null | sort -rn | head -10
トラブルシュート ~ dfでエラーが出る場合 ~
1. 「No such file or directory」「cannot access」が表示される
df 実行時に以下のようなエラーが出ることがあります。df: /mnt/nfs_share: No such file or directory
対処方法:
・マウントポイントが存在しない場合:
mkdir -p /mnt/nfs_share でディレクトリを作成してからマウントする・NFSサーバーが応答しない場合:NFSサーバー側の状態を確認する。dfが長時間止まる場合は
df -l(ローカルファイルシステムのみ表示)で回避できる2. dfの使用率が100%なのにduの合計と合わない
先述のとおり、プロセスが掴んだまま削除されたファイルが原因です。# 削除済みだがプロセスが掴んでいるファイルを確認 $ sudo lsof +L1 | grep deleted httpd 1234 root 4w REG 8,3 2147483648 0 /var/log/httpd/access_log (deleted)
# プロセスを再起動して領域を解放 $ sudo systemctl restart httpd
3. Use%が0%でSizeも0のファイルシステムが表示される
devtmpfsやtmpfsなど、メモリベースの仮想ファイルシステムです。実ディスクではないため、前述の-x オプションで除外して構いません。本記事のまとめ
| やりたいこと | コマンド |
|---|---|
| ディスク使用率を見やすい単位で確認 | df -h |
| ファイルシステムの種類も表示 | df -hT |
| iノードの使用状況を確認 | df -i |
| tmpfs等の仮想FSを除外して表示 | df -h -x tmpfs -x devtmpfs |
| 合計行を追加して表示 | df -h --total |
| 特定パスが属するFSを確認 | df -h /var/log |
| ローカルFSのみ表示(NFS除外) | df -l |
| 容量を食っているディレクトリを特定 | du -sh /var/* | sort -rh | head -10 |
ディスク管理を含むLinuxサーバー運用の基本を、体系的に学びませんか?
dfコマンドによるディスク容量の確認は、サーバー管理の入り口にすぎません。本番環境の運用には、LVM・パーティション設計・ログローテーションなど、知っておくべきことがまだまだあります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
登録10秒/自動返信でDL/合わなければ解除3秒
<<関連記事>>
・pstree
・chsh
・finger
・du
・uname
