Ubuntuでのディスク容量確認:df
コマンド徹底解説
はじめに
Linuxシステム、特に広く普及しているUbuntuにおいて、ディスクの空き容量を把握することは、システムの安定稼働、パフォーマンス維持、そして将来的な計画を立てる上で非常に重要です。ディスク容量が不足すると、新しいソフトウェアのインストールができなくなるだけでなく、一時ファイルやログファイルの書き込みができなくなり、システムの動作が不安定になったり、予期せぬエラーが発生したりする可能性があります。最悪の場合、システムが起動できなくなることもあります。
ディスク容量を確認するためのコマンドはいくつか存在しますが、中でも最も基本的で広く使われているのが df
コマンドです。df
は “disk free” の略であり、ファイルシステムごとのディスクの使用状況、特に空き容量を表示するために設計されています。この記事では、Ubuntu環境を例に、df
コマンドの基本的な使い方から、様々なオプション、応用方法、そしてその出力結果をどのように解釈すべきかについて、詳細かつ網羅的に解説します。約5000語というボリュームで、df
コマンドに関するあなたの疑問を解消し、Linuxシステム管理の一助となることを目指します。
第1章: df
コマンドの基本
まずは、df
コマンドの最も基本的な使い方と、その出力が何を意味するのかを見ていきましょう。
1.1 df
コマンドとは
df
コマンドは、Linuxやその他のUnixライクなシステムにおいて、マウントされているファイルシステムごとに、総容量、使用量、空き容量、そして使用率を報告するコマンドです。ディスクデバイスそのものの容量ではなく、ファイルシステムという論理的な区切りごとの情報を表示するのが特徴です。
1.2 基本的な使い方 (df
)
ターミナルを開き、単に df
と入力してEnterキーを押すと、現在システムにマウントされている全てのファイルシステムの容量情報が表示されます。
bash
df
実行例:
ファイルシステム 1K-ブロック 使用 利用可能 使用率% マウント地点
udev 4042288 0 4042288 0% /dev
tmpfs 818088 2260 815828 1% /run
/dev/sda1 61188000 25487644 32568680 44% /
tmpfs 4090432 8360 4082072 1% /dev/shm
tmpfs 5120 4 5116 1% /run/lock
tmpfs 4090432 0 4090432 0% /sys/fs/cgroup
/dev/loop0 99840 99840 0 100% /snap/core/8039
/dev/loop1 54528 54528 0 100% /snap/kde-frameworks-5-core18/32
/dev/loop2 163840 163840 0 100% /snap/gnome-3-28-1804/116
/dev/loop3 99840 99840 0 100% /snap/core/8268
/dev/sdb1 975645000 123456789 800000000 14% /mnt/data
この出力は、システムの実際の状況によって異なります。各行が1つのファイルシステムの情報を示しています。
1.3 出力情報の詳細(各列の意味)
df
コマンドの基本的な出力には、通常以下の6つの列が表示されます。
- ファイルシステム (Filesystem):
- 対象となっているファイルシステムの名前またはデバイスファイル名です。物理的なディスクパーティション(例:
/dev/sda1
,/dev/sdb1
)、論理ボリューム(LVMを使用している場合など)、ネットワークストレージ(NFS、SMB/CIFSなど)、またはカーネルが提供する疑似ファイルシステム(例:udev
,tmpfs
,proc
,sysfs
)などが表示されます。 /dev/sda1
のような名前は、システムのストレージデバイス(sda
は最初のSATA/SCSIデバイス、sdb
は2番目など)上のパーティション(1
は1番目のパーティション)を示します。
- 対象となっているファイルシステムの名前またはデバイスファイル名です。物理的なディスクパーティション(例:
- 1K-ブロック (1K-blocks):
- そのファイルシステムの合計容量を、1024バイト(1KB)単位で示したものです。この列名は古いシステムでは
Blocks
となっている場合もありますが、ほとんどの場合1KB単位で表示されます。 - この値は、ファイルシステムが使用できる全体容量です。
- そのファイルシステムの合計容量を、1024バイト(1KB)単位で示したものです。この列名は古いシステムでは
- 使用 (Used):
- ファイルシステム上で現在使用されているディスク容量を、1KB単位で示したものです。ファイル、ディレクトリ、メタデータなどが含まれます。
- 利用可能 (Available):
- ファイルシステム上でユーザーが新規にデータを書き込むために利用可能なディスク容量を、1KB単位で示したものです。
- この値は、「1K-ブロック」から「使用」を単純に引いた値とは異なる場合があります。その主な理由は、ファイルシステムが通常、システム管理者(rootユーザー)のために一定量の領域を予約しているからです(これについては後述します)。
- 使用率% (Use%):
- ファイルシステムの全容量のうち、「使用」されている容量の割合をパーセントで示したものです。計算式は
(使用 / (使用 + 利用可能)) * 100
です。 - この値が100%に近づくと、ディスク容量不足が深刻になり、様々な問題が発生しやすくなります。
- ファイルシステムの全容量のうち、「使用」されている容量の割合をパーセントで示したものです。計算式は
- マウント地点 (Mounted on):
- そのファイルシステムがLinuxのファイルシステムツリー上のどこに接続されているか(マウントされているか)を示します。例えば、
/
はルートファイルシステム、/home
はユーザーのホームディレクトリが置かれるファイルシステム、/mnt/data
は手動でマウントしたデータ用パーティションなどが表示されます。 - この列は、どのファイルシステムがシステムのどの部分に対応しているかを理解するために最も重要です。
- そのファイルシステムがLinuxのファイルシステムツリー上のどこに接続されているか(マウントされているか)を示します。例えば、
1.4 疑似ファイルシステムについて
上記の出力例には、/dev/sda1
や /dev/sdb1
といった実際のディスクデバイスに対応するファイルシステムの他に、udev
, tmpfs
, proc
, sysfs
, cgroup
といった項目が含まれています。これらは「疑似ファイルシステム」または「仮想ファイルシステム」と呼ばれるもので、ディスク上に物理的な領域を占めているわけではありません。
- udev:
/dev
ディレクトリに対応し、接続されているデバイスに関する情報を提供します。 - tmpfs: メモリ上に作成される一時的なファイルシステムです。
/run
,/dev/shm
などで使われます。RAMの一部を使用するため、容量の表示はありますが、実際のディスク容量を消費するわけではありません(ただし、RAMを消費します)。システム再起動で内容は失われます。 - proc:
/proc
ディレクトリに対応し、プロセス情報やカーネルに関する情報を提供します。 - sysfs:
/sys
ディレクトリに対応し、デバイスドライバやハードウェアに関する情報を提供します。 - cgroup:
/sys/fs/cgroup
ディレクトリに対応し、コントロールグループに関する情報を提供します。
これらの疑似ファイルシステムは、システムの動作に必要な情報を提供するためのものであり、通常、ディスク容量不足の直接的な原因とはなりません(tmpfs
が巨大なファイルを扱うとRAMを圧迫することはありますが)。ディスク容量の空き状況を確認する際は、これらの項目を無視して、/
, /home
, /var
など、実際のディスクデバイスに対応するマウントポイントの情報に注目することが多いです。
第2章: df
コマンドの主要オプション
df
コマンドには、表示形式を変更したり、特定のファイルシステムのみを対象にしたりするための便利なオプションが多数用意されています。ここでは、特によく使われるオプションを詳しく見ていきましょう。
2.1 人間に分かりやすい表示 (-h
, --human-readable
)
デフォルトのdf
コマンドの出力は1KB単位の大きな数値で表示されるため、直感的に容量を把握しにくいことがあります。-h
オプションを付けると、容量をKB、MB、GB、TBといった適切な単位に変換して表示してくれます。これは最もよく使われるオプションの一つです。
bash
df -h
実行例:
ファイルシステム サイズ 使用 利用可能 使用率% マウント地点
udev 3.9G 0 3.9G 0% /dev
tmpfs 799M 2.3M 797M 1% /run
/dev/sda1 59G 25G 31G 44% /
tmpfs 3.9G 8.2M 3.9G 1% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/loop0 98M 98M 0 100% /snap/core/8039
/dev/loop1 54M 54M 0 100% /snap/kde-frameworks-5-core18/32
/dev/loop2 160M 160M 0 100% /snap/gnome-3-28-1804/116
/dev/loop3 98M 98M 0 100% /snap/core/8268
/dev/sdb1 931G 118G 763G 14% /mnt/data
「1K-ブロック」が「サイズ」、「使用」が「使用」、「利用可能」が「利用可能」といった列名に変わり、値もKB, MB, GBといった単位付きで表示されています。これによって、一目でディスク容量の状況を把握しやすくなります。例えば /dev/sda1
は合計59GBで、25GB使用、31GB利用可能、使用率44%であることがすぐに分かります。
2.2 全てのファイルシステムを表示 (-a
, --all
)
デフォルトでは、df
コマンドは一部の疑似ファイルシステム(例: proc
, sysfs
)を表示しません。-a
オプションを使用すると、これらを含む全てのファイルシステムが表示されます。
bash
df -a
出力例(一部抜粋):
ファイルシステム 1K-ブロック 使用 利用可能 使用率% マウント地点
...
proc 0 0 0 -% /proc
sysfs 0 0 0 -% /sys
...
proc
やsysfs
のようなファイルシステムはサイズが0や表示されないことが多く、容量管理の観点からはあまり意味がありません。-a
オプションは、デバッグや特定の状況で全てのファイルシステムを確認したい場合に役立ちます。
2.3 ファイルシステムタイプを表示 (-T
, --print-type
)
-T
オプションは、各ファイルシステムのタイプ(種類)を表示する列を追加します。これは、どのファイルシステムがどのようなタイプ(ext4, xfs, tmpfs, nfsなど)でフォーマットされているかを確認するのに便利です。
bash
df -hT
実行例:
ファイルシステム タイプ サイズ 使用 利用可能 使用率% マウント地点
udev devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs tmpfs 799M 2.3M 797M 1% /run
/dev/sda1 ext4 59G 25G 31G 44% /
tmpfs tmpfs 3.9G 8.2M 3.9G 1% /dev/shm
tmpfs tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/loop0 squashfs 98M 98M 0 100% /snap/core/8039
/dev/loop1 squashfs 54M 54M 0 100% /snap/kde-frameworks-5-core18/32
/dev/loop2 squashfs 160M 160M 0 100% /snap/gnome-3-28-1804/116
/dev/loop3 squashfs 98M 98M 0 100% /snap/core/8268
/dev/sdb1 xfs 931G 118G 763G 14% /mnt/data
新しい「タイプ」列が追加されました。これにより、/dev/sda1
が ext4
、/dev/sdb1
が xfs
、snapパッケージが squashfs
、そして疑似ファイルシステムが devtmpfs
や tmpfs
であることが分かります。
2.4 特定のタイプを表示/除外 (-t
, -x
)
ファイルシステムタイプを指定して、表示を絞り込むことができます。
* -t <タイプ>
(–type=<タイプ>): 指定したタイプのみを表示します。
* -x <タイプ>
(–exclude-type=<タイプ>): 指定したタイプを除外して表示します。
例えば、ext4
ファイルシステムの情報だけを表示したい場合は、-t ext4
を使用します。
bash
df -hT -t ext4
実行例:
ファイルシステム タイプ サイズ 使用 利用可能 使用率% マウント地点
/dev/sda1 ext4 59G 25G 31G 44% /
複数のタイプを指定する場合は、カンマ区切りで指定できます(例: -t ext4,xfs
)。
逆に、疑似ファイルシステムである tmpfs
と squashfs
を除外して表示したい場合は、-x
オプションを複数使用します。
bash
df -hT -x tmpfs -x squashfs
実行例:
ファイルシステム タイプ サイズ 使用 利用可能 使用率% マウント地点
udev devtmpfs 3.9G 0 3.9G 0% /dev
/dev/sda1 ext4 59G 25G 31G 44% /
/dev/sdb1 xfs 931G 118G 763G 14% /mnt/data
このように、-t
や -x
オプションを使うことで、必要な情報だけを効率的に取得できます。特に、システム管理者にとっては、実際のディスクパーティションに関連するファイルシステムの情報だけを見たい場合に非常に便利です。
2.5 iノード情報を表示 (-i
, --inodes
)
ディスク容量だけでなく、ファイルシステムが管理できるファイルの数(iノード数)も重要なリソースです。-i
オプションを使用すると、ファイルシステムのiノードの使用状況が表示されます。
bash
df -i
実行例:
ファイルシステム Iinodes IUsed IFree IUse% マウント地点
udev 1010572 420 1010152 1% /dev
tmpfs 1022554 681 1021873 1% /run
/dev/sda1 3906560 364876 3541684 10% /
tmpfs 1022554 39 1022515 1% /dev/shm
tmpfs 1022554 3 1022551 1% /run/lock
tmpfs 1022554 1 1022553 1% /sys/fs/cgroup
/dev/loop0 127636 127636 0 100% /snap/core/8039
/dev/loop1 17077 17077 0 100% /snap/kde-frameworks-5-core18/32
/dev/loop2 146625 146625 0 100% /snap/gnome-3-28-1804/116
/dev/loop3 127636 127636 0 100% /snap/core/8268
/dev/sdb1 62502400 12345 62490055 1% /mnt/data
出力列の意味は以下の通りです。
- Iinodes: ファイルシステムが持つiノードの総数。
- IUsed: 使用されているiノードの数。
- IFree: 利用可能なiノードの数。
- IUse%: 使用されているiノードの割合。
iノードは、ファイルやディレクトリといったオブジェクトごとに割り当てられる情報構造体です。ファイルシステム上に作成できるファイルやディレクトリの最大数は、iノードの数によって制限されます。ディスク容量が十分に空いていても、iノードが枯渇すると新しいファイルやディレクトリを作成できなくなります。これは、特に非常に多くの小さなファイルを扱う場合に発生しやすい問題です。-i
オプションは、このようなiノード枯渇の問題を早期に発見するために役立ちます。
2.6 特定の単位で表示 (-k
, -m
, -g
, --block-size
)
-h
オプションは便利な一方、出力単位がファイルシステムごとに異なり、機械的な処理には向きません。特定の固定された単位で表示したい場合は、以下のオプションを使用します。
-k
: 1KB単位で表示(デフォルトと同じ)。-m
: 1MB(1048576バイト)単位で表示。-g
: 1GB(1073741824バイト)単位で表示。--block-size=<サイズ>
: 指定したバイト単位で表示します。<サイズ>
には、バイト数(例:1024
)や、単位付きのサイズ(例:K
,M
,G
,T
,P
,E
,Z
,Y
、またはKB
,MB
,GB
など)を指定できます。例えば--block-size=1M
は-m
と同じです。
例:MB単位で表示
bash
df -m
実行例(一部抜粋):
ファイルシステム 1M-ブロック 使用 利用可能 使用率% マウント地点
udev 3947 0 3947 0% /dev
tmpfs 800 3 797 1% /run
/dev/sda1 59754 24891 31806 44% /
...
/dev/sdb1 952734 120563 781160 14% /mnt/data
例:GB単位で表示(小数点以下は表示されないため、小さなファイルシステムでは0になることに注意)
bash
df -g
実行例(一部抜粋):
ファイルシステム 1G-ブロック 使用 利用可能 使用率% マウント地点
udev 4 0 4 0% /dev
tmpfs 1 0 1 1% /run
/dev/sda1 59 25 31 44% /
...
/dev/sdb1 931 118 763 14% /mnt/data
これらのオプションは、スクリプトでディスク容量を監視する場合など、決まった単位でデータを取得したい場合に役立ちます。
2.7 その他のオプション
-P
,--portability
: POSIX標準形式で出力します。通常と似ていますが、出力形式が厳密に定義されているため、他のUnix系システムとの互換性が高く、スクリプトで処理する際に予期せぬフォーマット変更の影響を受けにくくなります。--sync
: 容量情報を表示する前に、全てのファイルシステムバッファを同期します。これにより、より正確なリアルタイムの容量情報を得られますが、実行に時間がかかる場合があります。通常は不要です。--output=[フィールドリスト]
: 表示する列を指定し、順序をカスタマイズできます。例えば--output=filesystem,size,used,avail,use%,mounted
とすると、デフォルトと同じ順序で列が表示されます。--output=mounted,use%
とすると、マウントポイントと使用率だけを表示できます。利用可能なフィールドはfilesystem
,size
,used
,avail
,use%
,target
,source
,fstype
,itotal
,iused
,ifree
,iuse%
などです。
第3章: df
コマンドの応用テクニック
df
コマンドは、それ単体でも強力ですが、他のLinuxコマンドと組み合わせることで、さらに柔軟で高度な使い方が可能になります。
3.1 特定のマウント地点の確認 (df /path
)
df
コマンドの引数にディレクトリのパスを指定すると、そのディレクトリが含まれるファイルシステムの情報のみが表示されます。
bash
df -h /home
df -h /var/log
df -h /mnt/data
これは、特定のディレクトリがマウントされているファイルシステムの使用状況を知りたい場合に便利です。例えば、ユーザーのホームディレクトリ (/home
) やログファイルが大量に生成される /var/log
の容量を確認したい場合などに使います。
注意すべき点として、df /path/to/directory
は、あくまで そのパスが属するファイルシステム全体 の容量を表示するのであって、そのディレクトリ以下のファイルやディレクトリの合計サイズ を表示するわけではありません。後者を知りたい場合は、du
コマンドを使用します (du
については後述します)。
3.2 grep
を使ったフィルタリング
grep
コマンドと組み合わせることで、df
の出力から特定のキーワードを含む行だけを抽出できます。例えば、ext4
ファイルシステムの情報だけを取得したい場合や、特定のディスクデバイス(例: /dev/sda
)に関連するファイルシステムだけを表示したい場合に役立ちます。
特定のファイルシステムタイプ(例: ext4
)を抽出:
bash
df -hT | grep ext4
実行例:
/dev/sda1 ext4 59G 25G 31G 44% /
特定のデバイスに関連する行を抽出:
bash
df -h | grep /dev/sda
実行例:
/dev/sda1 59G 25G 31G 44% /
ヘッダー行を含めて抽出したい場合は、grep -E 'Filesystem|ext4'
のように正規表現を使うか、grep -A 1
オプションで一致した行とその次の行を表示するなどの方法があります。ただし、パイプで渡すと通常ヘッダー行は失われるため、ヘッダーを含めたい場合は -t
, -x
オプションを使う方がシンプルです。grep
は、特定の文字列を含む行を抽出するのに向いています。
3.3 sort
を使ったソート
sort
コマンドと組み合わせることで、df
の出力を特定の列の値で並べ替えることができます。例えば、ファイルシステムの使用率が高い順に並べ替えたい場合に便利です。
使用率が高い順に並べ替える(-h
オプション使用時はソートが難しい場合があるため、ここでは -P
か単位指定オプションを使用します):
bash
df -P | sort -k 5 -r
-P
: POSIX形式で出力(機械処理向き)。sort -k 5
: 5列目(使用率%)をソートキーとする。-r
: 降順(高い値から低い値へ)でソートする。
実行例(一部抜粋):
/dev/loop3 99840 99840 0 100% /snap/core/8268
/dev/loop2 163840 163840 0 100% /snap/gnome-3-28-1804/116
/dev/loop1 54528 54528 0 100% /snap/kde-frameworks-5-core18/32
/dev/loop0 99840 99840 0 100% /snap/core/8039
/dev/sda1 61188000 25487644 32568680 44% /
/dev/sdb1 975645000 123456789 800000000 14% /mnt/data
tmpfs 4090432 8360 4082072 1% /dev/shm
tmpfs 5120 4 5116 1% /run/lock
tmpfs 818088 2260 815828 1% /run
tmpfs 4090432 0 4090432 0% /sys/fs/cgroup
udev 4042288 0 4042288 0% /dev
ファイルシステム 1K-ブロック 使用 利用可能 使用率% マウント地点
-h
オプションと組み合わせたい場合は、使用率の%
を取り除くなどの前処理が必要になることがありますが、多くの場合は -P
や固定単位オプションを使用するのが簡単です。
3.4 awk
を使った整形
awk
コマンドは、テキストを行と列に分解し、特定の列を抽出したり計算したりするのに非常に強力です。df
の出力を自由な形式に整形したい場合に利用できます。
例えば、マウント地点と使用率だけを表示し、「ファイルシステム」と「使用率%」というヘッダーを付けたい場合:
bash
df -h --output=mounted,use% | awk 'NR==1 {print "マウント地点 使用率%"} NR>1 {print $1, $2}'
df -h --output=mounted,use%
:df
の出力をマウント地点と使用率の2列に絞る。-h
で分かりやすい単位にする。awk '...'
: awkスクリプト。NR==1 {print "マウント地点 使用率%"}
: 行番号が1(ヘッダー行)の場合、「マウント地点 使用率%」と出力する。NR>1 {print $1, $2}
: 行番号が1より大きい場合(データ行)は、1列目(マウント地点)と2列目(使用率%)を出力する。
実行例:
マウント地点 使用率%
/dev 0%
/run 1%
/ 44%
/dev/shm 1%
/run/lock 1%
/sys/fs/cgroup 0%
/snap/core/8039 100%
/snap/kde-frameworks-5-core18/32 100%
/snap/gnome-3-28-1804/116 100%
/snap/core/8268 100%
/mnt/data 14%
このように awk
を使うと、レポート作成や監視スクリプトのために、必要な情報だけを特定の形式で抽出・整形できます。
3.5 watch
を使った定期監視
watch
コマンドは、指定したコマンドを一定間隔で繰り返し実行し、その出力を表示するコマンドです。df -h
と組み合わせると、ディスク容量の変動をリアルタイム(に近い形)で監視できます。
bash
watch df -h
デフォルトでは2秒おきに df -h
が実行され、ターミナルの画面が更新されます。これにより、容量が急速に減少しているファイルシステムがないかなどを目視で監視できます。監視間隔を変更したい場合は -n <秒数>
オプションを使用します(例: watch -n 5 df -h
)。
3.6 シェルスクリプトとの連携例
df
コマンドは、シェルスクリプトの中でディスク容量のチェックを行うためによく利用されます。例えば、特定のファイルシステムの使用率が閾値を超えた場合に警告を表示するスクリプトを作成できます。
“`bash
!/bin/bash
THRESHOLD=80 # 閾値 (パーセント)
MOUNT_POINT=”/” # チェック対象のマウントポイント
dfコマンドで対象のマウントポイントの使用率を取得
–output=use% オプションで「使用率%」の列だけを取得し、ヘッダー行を除外
USE_PERCENT=$(df -P –output=use% “$MOUNT_POINT” | tail -n 1 | sed ‘s/%//’)
取得した使用率が数値であることを確認(エラー処理)
if ! [[ “$USE_PERCENT” =~ ^[0-9]+$ ]]; then
echo “エラー: $MOUNT_POINT の使用率を取得できませんでした。”
exit 1
fi
echo “$MOUNT_POINT の使用率は ${USE_PERCENT}% です。”
閾値と比較
if [ “$USE_PERCENT” -ge “$THRESHOLD” ]; then
echo “警告: $MOUNT_POINT の使用率が ${THRESHOLD}% を超えています!”
# ここにメール通知やログ記録などの処理を追加できる
fi
exit 0
“`
このスクリプトは、/
マウントポイントの使用率を取得し、それが80%以上であれば警告メッセージを表示します。df -P --output=use% "$MOUNT_POINT"
で指定したマウントポイントの使用率(%付き)を取得し、tail -n 1
で最後のデータ行を選択、sed 's/%//'
で末尾の %
を削除して数値として取得しています。
このようなスクリプトをcronを使って定期的に実行することで、ディスク容量不足の発生を自動的に検知し、システム管理者に通知するシステムを構築できます。
第4章: df
コマンドの出力解釈と注意点
df
コマンドの出力を正しく理解することは、適切なシステム管理を行う上で非常に重要です。特に、「利用可能」容量の意味や、使用率が100%に近づいた場合に何が起こるか、そしてdf
とdu
コマンドの違いについては、多くのユーザーが疑問を持つ点です。
4.1 「利用可能」容量の詳細(root予約領域)
前述したように、df
の出力における「利用可能 (Available)」容量は、「1K-ブロック (Total)」から「使用 (Used)」を単純に引いた値と一致しない場合があります。これは、多くのファイルシステム(特に ext2, ext3, ext4)が、システム管理者(rootユーザー)のために一定量のディスク領域を予約しているためです。
この予約領域の目的はいくつかあります。
* システム復旧: ディスクが完全に満杯になると、rootユーザーであっても新しいファイルを書き込めなくなり、システムが正常に動作しなくなったり、ログファイルを書き込めなくなったりすることがあります。予約領域があることで、rootユーザーは緊急時にシステムをクリーンアップしたり、重要なログを書き込んだりする余裕を持つことができます。
* ファイルシステムの断片化の軽減: ある程度の空き領域を確保しておくことで、ファイルの書き込みが効率的に行われ、ファイルシステムの断片化(フラグメンテーション)を軽減する効果も期待できます。
デフォルトでは、 ext4 などのファイルシステムでは通常、全容量の約5%がrootのために予約されています。この割合は tune2fs
コマンドを使って変更したり、予約領域を完全に無効にしたりすることも可能ですが、通常はデフォルトのままにしておくことが推奨されます。
df
コマンドの「利用可能」列は、非rootユーザーが新規にデータを書き込むために利用できる容量を示します。rootユーザーは予約領域も利用できるため、rootユーザーから見た利用可能容量は「利用可能」列の値よりも大きくなります。
補足: ext4ファイルシステムにおける予約領域の確認と変更
予約領域の設定を確認するには、tune2fs -l <デバイスファイル>
コマンドを使用します。
bash
sudo tune2fs -l /dev/sda1 | grep 'Reserved block count'
sudo tune2fs -l /dev/sda1 | grep 'Reserved GDT blocks' # こちらも予約領域の一部
予約領域の割合を変更するには、tune2fs -r <ブロック数> <デバイスファイル>
または tune2fs -m <割合> <デバイスファイル>
を使用します。例えば、予約領域を3%に減らしたい場合は sudo tune2fs -m 3 /dev/sda1
のように実行します。予約領域を完全に無効にする場合は sudo tune2fs -m 0 /dev/sda1
とします(非推奨)。これらの操作は慎重に行う必要があり、ファイルシステムがマウントされていない状態で行うのが安全です。
4.2 使用率が100%になったら
ファイルシステムの使用率が100%に達すると、以下のような様々な問題が発生します。
- 新しいファイルの作成が不可能: ユーザーもアプリケーションも、そのファイルシステム上に新しいファイルを書き込めなくなります。
- 既存ファイルの一部変更も困難: ファイルを編集して保存しようとすると、一時ファイルの作成などができずに失敗することがあります。
- アプリケーションのクラッシュ: ログファイルやキャッシュファイルなど、ディスクへの書き込みが必要なアプリケーションは、書き込みエラーによって異常終了したり、誤動作したりします。
- システムの不安定化: システムログ(
/var/log
)が書き込めなくなったり、一時ファイル(/tmp
)が作成できなくなったりすると、システムの根幹部分の動作に支障をきたし、応答が遅くなったり、フリーズしたりすることがあります。 - システム起動の失敗: 重要なシステムファイルが置かれているパーティション(特に
/
)が100%になると、再起動後にシステムが正常に起動しなくなる可能性があります。
したがって、df -h
の出力で重要なファイルシステム(/
, /home
, /var
, /opt
など)の使用率が90%を超えるようなら、早急に容量を確保するための対策を講じる必要があります。
4.3 df
とdu
の違いを理解する
df
コマンドと混同されやすいのが du
(disk usage) コマンドです。これらはどちらもディスク容量に関連する情報を表示しますが、目的と表示する対象が根本的に異なります。
-
df
:- 対象: ファイルシステム全体
- 表示: ファイルシステムの総容量、使用量、空き容量
- 単位: ファイルシステム上のブロック単位(
df -h
では人間可読単位) - 用途: ファイルシステム全体の空き状況を確認する
-
du
:- 対象: 指定したファイルやディレクトリ、またはカレントディレクトリ以下
- 表示: ファイルやディレクトリが占めているディスク上の合計サイズ
- 単位: ブロック単位またはバイト単位(
-h
オプションで人間可読単位) - 用途: どのファイルやディレクトリがディスク容量を消費しているかを特定する
例として、/var
ディレクトリの容量を確認する場合を考えます。
bash
df -h /var
このコマンドは、/var
ディレクトリがマウントされているファイルシステム(多くの場合、/
または独立した /var
パーティション)全体の容量情報(合計、使用、空き)を表示します。
一方、
bash
du -sh /var
このコマンドは、/var
ディレクトリとそのサブディレクトリに含まれる全てのファイルやディレクトリの合計サイズを計算して表示します。
df
とdu
の合計値が一致しない場合
df
で表示されるファイルシステムの使用量と、そのファイルシステム上の全ディレクトリに対して du
を実行して得られる合計サイズが一致しないことがあります。これにはいくつか理由が考えられます。
- root予約領域:
df
の「使用」にはroot予約領域も含まれますが、du
はその領域内にファイルが存在しない限りカウントしません。 - 削除されたが開いたままのファイル: あるファイルが削除されたとしても、そのファイルをいずれかのプロセスが開いたままでいる場合、ファイルシステム上ではそのファイルが使用していた領域は解放されません。しかし、
du
はそのファイルを見つけられないため、カウントしません。df
はこの使用中の領域を「使用」としてカウントします。これはlsof
コマンドなどを使って特定できます。 - ハードリンク:
du
はハードリンクされたファイルを複数回カウントすることがあります(オプションによる)。df
はファイルシステム上のブロック使用量を正確に反映します。 - ファイルシステムの内部構造: ファイルシステムのメタデータなども
df
の使用量に含まれますが、du
が直接カウントしない場合があります。
ディスク容量不足の原因を特定するには、まず df -h
でどのファイルシステムの使用率が高いかを確認し、次に du -sh <path>
や du -h <path>
で、そのファイルシステム上の主要なディレクトリがどれだけ容量を使っているかを調べていく、という手順が一般的です。
4.4 ネットワークファイルシステム(NFS, CIFSなど)
df
コマンドは、ローカルにマウントされたファイルシステムだけでなく、NFS (Network File System) や CIFS/SMB (Common Internet File System / Server Message Block) といったネットワークファイルシステムに対しても使用できます。これらのファイルシステムの情報も、ローカルのディスクと同様に表示されます。
bash
df -h /mnt/nfs_share
ネットワークファイルシステムの場合、df
が表示する容量は、サーバー側のファイルシステム全体の情報です。クライアント側のキャッシュなどによって、表示される値が一時的に実際のサーバー側の状況とずれることもあります。
第5章: ディスク容量が不足した場合の対応
df -h
で使用率が高いファイルシステムが見つかった場合、速やかに容量を解放するための対応が必要です。
5.1 原因特定 (du
コマンドの活用)
まず、どのディレクトリが容量を大きく消費しているかを特定します。これには du
コマンドが不可欠です。
使用率が高いファイルシステムのマウントポイント(例: /
)で、トップレベルのディレクトリの使用容量を調べます。
bash
sudo du -h --max-depth=1 /
sudo du -h
: 人間可読な形式で容量を表示。ルートファイルシステム全体を調べるためsudo
が必要。--max-depth=1
: 現在のディレクトリの直下にあるディレクトリやファイルの合計サイズのみを表示。これにより、容量を多く消費している「親」ディレクトリを特定できます。
出力例:
4.0K /srv
24M /boot
8.0K /media
...
25G /
...
この例では、/
自体(つまりルートファイルシステム全体)が25GB使用していることが分かります(--max-depth=1
で調べると、指定したディレクトリ自体の合計サイズも最後に表示されます)。
次に、容量を多く使っていると特定されたディレクトリについて、さらに深く調べていきます。例えば、/var
ディレクトリの使用率が高いと分かったら、/var
の直下を du
で調べます。
bash
sudo du -h --max-depth=1 /var
出力例:
1.1G /var/log
5.2G /var/cache
1.5G /var/lib
...
8.0G /var
この例では、/var/log
や /var/cache
, /var/lib
が多くの容量を使っていることが分かります。特にログファイルが肥大化する /var/log
や、パッケージキャッシュなどが溜まる /var/cache
は容量不足の原因になりやすい場所です。
5.2 容量解放の手順
容量を多く消費している場所が特定できたら、不要なファイルを削除して容量を解放します。
- パッケージマネージャーのキャッシュをクリア:
- APT (Ubuntu/Debian系):
bash
sudo apt autoremove # 不要になった依存関係パッケージを削除
sudo apt clean # ダウンロードしたパッケージファイルのキャッシュを削除
sudo apt autoclean # 古くなったパッケージファイルのキャッシュを削除 - Snap:
Snapパッケージはバージョンごとにディスク容量を消費します。古いバージョンを削除するには、手動で行うか、スクリプトを利用します。
bash
# 例: core snap の古いバージョンを削除 (カレントバージョン以外を1つだけ残す)
snap list --all core
# 出力例:
# Name Version Rev Tracking Publisher Notes
# core 16-2.42.5 8039 stable canonical✓ installed,disabled
# core 16-2.43.3 8268 stable canonical✓ installed
# 上の例で 8039 が古いバージョンなので削除
# sudo snap remove core --revision=8039
または、古いバージョンのsnapを自動的に削除するスクリプトを利用する方法もあります。
- APT (Ubuntu/Debian系):
- ログファイルのクリーンアップ:
/var/log
ディレクトリのログファイルを確認します。特に肥大化しやすいのは、syslog, kern.log, auth.log, そして各種アプリケーションのログファイルです。- 不要な古いログファイルは削除できますが、
sudo rm
で直接削除する際は注意が必要です。使用中のログファイルを削除しても、それを開いているプロセスがファイルを解放しない限り、容量は解放されないことがあります。Syslogデーモンなどを再起動するか、ログローテーション設定を見直す方が安全な場合が多いです。journalctl --disk-usage
でSystemdジャーナルの容量を確認し、journalctl --vacuum-size=500M
などで上限サイズを設定することもできます。
- ユーザーファイルの整理:
- ホームディレクトリ (
/home/username
) 内の不要なファイル(ダウンロードしたファイル、古いドキュメント、動画、音楽、巨大なISOファイルなど)を削除します。 - ゴミ箱 (
~/.local/share/Trash
または/root/.local/share/Trash
) を空にします。
- ホームディレクトリ (
- 一時ファイルの削除:
/tmp
ディレクトリはシステム起動時にクリーンアップされることが多いですが、長期間稼働しているサーバーなどでは溜まることがあります。ただし、他のユーザーやプロセスが使用しているファイルを削除しないように注意が必要です。
- アプリケーションのキャッシュや設定ファイルの整理:
- Webブラウザのキャッシュ、各種アプリケーションの一時ファイルやキャッシュファイルなどが容量を消費している場合があります。各アプリケーションの設定を確認してください。
- 開発関連ファイル:
- 開発環境では、ビルドによって生成された一時ファイルや、パッケージ/ライブラリのキャッシュ(npm, composer, pipなどのキャッシュディレクトリ)が大量になることがあります。それぞれのツールに応じたクリーンアップコマンドを実行したり、キャッシュディレクトリの内容を確認したりしてください。
- 古いカーネルの削除:
- Ubuntuでは、新しいカーネルがインストールされても古いカーネルが残されることがあります。これはシステム復旧のために役立ちますが、多数残っていると容量を消費します。
sudo apt autoremove
が古いカーネルの一部を削除してくれますが、手動で確認・削除することも可能です。dpkg --list 'linux-image-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'
のようなコマンドで削除候補の古いカーネルを確認できます(実行には注意)。
- Ubuntuでは、新しいカーネルがインストールされても古いカーネルが残されることがあります。これはシステム復旧のために役立ちますが、多数残っていると容量を消費します。
これらの手順を実行する際は、誤って重要なファイルを削除しないように十分に注意してください。特に sudo rm
を使う場合は、対象パスが正しいか、本当に削除して良いファイルか、十分に確認してから実行してください。不安な場合は、まずファイルを別の場所に移動させてみて、問題がないことを確認してから削除するという方法も安全です。
5.3 ディスク拡張の検討
ファイルシステムの使用率が慢性的に高く、定期的なクリーンアップだけでは対応しきれない場合は、根本的な解決策としてディスク容量の拡張を検討する必要があります。
- パーティションサイズの変更: 同じディスク内に未割り当て領域がある場合や、隣接するパーティションを縮小できる場合は、パーティションツール(
parted
,gparted
など)を使って対象のパーティションサイズを拡張します。ただし、ファイルシステムの種類によってはオンラインでの拡張が難しかったり、データ損失のリスクが伴ったりするため、事前のバックアップと慎重な作業が必要です。 - 新しいディスクの追加: 新しい物理ディスクや論理ボリュームを追加し、それを新しいマウントポイント(例:
/data
,/opt
など)としてシステムに組み込みます。既存のファイルシステムから一部のデータ(ユーザーデータ、アプリケーションデータなど)を新しいディスクに移動させることで、元のファイルシステムの容量を解放します。 - LVM (Logical Volume Management) の活用: LVMを使用しているシステムでは、新しい物理ボリュームをVG (Volume Group) に追加し、既存のLV (Logical Volume) をオンラインで拡張することが比較的容易に可能です。
- ネットワークストレージの利用: NFSやSMB共有、クラウドストレージなどを利用して、一部のデータを外部に移すことも検討できます。
ディスク拡張は、システム構成の変更を伴うため、計画的に行うことが重要です。
第6章: 関連コマンド
df
コマンドと合わせて知っておくと便利な関連コマンドを紹介します。
6.1 du
コマンド
前述したように、du
コマンドはファイルやディレクトリごとの容量を計算します。df
でファイルシステム全体の使用状況を確認し、du
で容量を消費している原因を特定するという使い分けが一般的です。
- カレントディレクトリ以下の合計サイズを表示:
du -sh
- 特定のディレクトリの合計サイズを表示:
du -sh /path/to/directory
- カレントディレクトリの直下にあるディレクトリごとのサイズを表示:
du -h --max-depth=1 .
- 容量が大きい順にソートして表示:
du -h /path/to/directory | sort -h
(GNU sortの場合)
6.2 lsblk
コマンド
lsblk
コマンドは、ブロックデバイス(ディスク、パーティション、LVMなど)の情報をツリー形式で表示します。どのデバイスがどのパーティションに分かれているか、それらがどこにマウントされているかなどを確認するのに役立ちます。df
の出力に出てくる /dev/sda1
などが、どの物理ディスクのどのパーティションに対応しているかを知りたい場合に便利です。
bash
lsblk
実行例(一部抜粋):
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 59G 0 part /
└─sda2 8:2 0 1G 0 part [SWAP]
sdb 8:16 0 931G 0 disk
└─sdb1 8:17 0 931G 0 part /mnt/data
sr0 11:0 1 1024M 0 rom
loop0 7:0 0 98M 1 loop /snap/core/8039
loop1 7:1 0 54M 1 loop /snap/kde-frameworks-5-core18/32
...
lsblk
の出力は、デバイス名、サイズ、タイプ、マウントポイントなどを含んでおり、ディスク構成の全体像を把握するのに役立ちます。
6.3 mount
コマンド
mount
コマンドを引数なしで実行すると、現在システムにマウントされている全てのファイルシステムの一覧が表示されます。これは df
コマンドの「ファイルシステム」列と「マウント地点」列の対応関係を確認するのに役立ちます。
bash
mount
実行例(一部抜粋):
/dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,nosuid,relatime,size=4042288k,nr_inodes=1010572,mode=755)
tmpfs on /run type tmpfs (rw,nosuid,nodev,noexec,relatime,size=818088k,mode=755)
/dev/sdb1 on /mnt/data type xfs (rw,relatime,attr2,inode64,noquota)
...
各行は「デバイス on マウント地点 type ファイルシステムタイプ (オプション)」という形式で表示されます。
6.4 baobab
などのGUIツール
Ubuntuのデスクトップ環境には、ディスク使用状況を視覚的に分かりやすく表示してくれるGUIツールが用意されています。「ディスク使用状況アナライザー」(多くの場合 baobab
という名称)などが代表的です。これらのツールは、ディレクトリごとの容量をグラフ(円グラフやツリーマップなど)で表示してくれるため、直感的に容量を消費している場所を特定できます。
コマンドラインでの df
や du
はスクリプトでの自動化やリモートサーバーでの作業に便利ですが、ローカルのデスクトップで容量の大きいディレクトリを探す際には、GUIツールが非常に役立ちます。
第7章: よくある質問とトラブルシューティング
7.1 df
とdu
の容量が違う
前述の通り、df
はファイルシステム全体のブロック使用量、du
は指定パス以下のファイルやディレクトリの合計サイズをカウントするため、表示される値が一致しないのは正常な場合が多いです。主な原因は、root予約領域、削除されたが開いたままのファイル、ファイルシステムの内部構造などです。特に「削除されたが開いたままのファイル」は、df
の使用量は高いのに du
で調べても原因が特定できない場合に疑うべき原因の一つです。lsof | grep deleted
などで確認できます。
7.2 特定のパーティションが表示されない
df
コマンドは、システムに「マウントされている」ファイルシステムの情報のみを表示します。したがって、パーティションがフォーマットされていても、システムにマウントされていない場合は df
の出力には表示されません。lsblk
コマンドでデバイス一覧を確認し、マウントポイントがないパーティションがないか確認してください。パーティションをマウントするには、mount
コマンドを使用します(例: sudo mount /dev/sdc1 /mnt/mydata
)。自動的にマウントさせたい場合は /etc/fstab
ファイルに設定を追加します。
7.3 コマンドが遅い
df
コマンドの実行が非常に遅い場合、原因としてネットワークファイルシステム(NFSなど)の接続問題や、ディスクI/Oの極端な低下などが考えられます。ネットワークファイルシステムがハングアップしている場合、df
はそのファイルシステムへの問い合わせで待機してしまい、全体の出力が遅延することがあります。-t nfs
や -x nfs
オプションを使って、問題がネットワークファイルシステムにあるかどうかを切り分けてみてください。また、ディスク自体にハードウェア的な問題が発生している可能性も考慮する必要があります。
結論
df
コマンドは、Ubuntuを含むLinuxシステムにおいて、ディスクの空き容量と使用状況を把握するための最も基本的かつ重要なツールです。ファイルシステム全体の状況を一目で確認でき、様々なオプションを活用することで、人間にとって分かりやすい表示にしたり、必要な情報だけを抽出したり、iノードの使用状況を確認したりすることができます。
また、df
コマンドの出力を正しく解釈すること(特に「利用可能」容量の意味やroot予約領域、疑似ファイルシステムについて)は、システムの状態を正確に理解する上で不可欠です。さらに、df
とdu
コマンドの違いを理解し、両者を組み合わせて使用することで、ディスク容量不足の原因を効率的に特定できます。
システム管理においては、ディスク容量を定期的にチェックし、使用率が危険なレベルに達する前に適切な対策を講じることが非常に重要です。この記事で解説したdf
コマンドの使い方や応用テクニックが、あなたのUbuntuシステム管理に役立つことを願っています。
さらに詳細な情報や全てのオプションについて知りたい場合は、いつでもターミナルで man df
と入力して、公式のマニュアルページを参照してください。
df
コマンドをマスターし、快適なLinuxライフを送りましょう!