ファイルシステムの容量には、少なくともデータブロックと、inode などのメタデータオブジェクトという 2 種類の上限があります。df はファイルシステム側の割り当てを報告し、du は到達可能なパス名をたどって、それらに帰属する使用量を合計します。両者が答える問いは異なるため、値が一致するとは限りません。
ファイルシステム · レッスン 9
ディスク使用量
`df` と `du` が、ファイルシステムのブロック消費量と inode 消費量を異なる視点から測る仕組みを学びます。
`df` でファイルシステム容量を確認する
マウント済みファイルシステムの種類と、人が読みやすいブロック容量を表示します。
$ df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda1 ext4 6.2G 2.3G 3.6G 40% /
Size、Used、Avail はファイルシステムの使用量管理から得られます。予約ブロック、メタデータ、割り当て方針、クォータ、丸め処理により、使用可能容量は合計容量から使用済み容量を引いた値より少ないことがあります。パスを指定して df を実行すると、そのパスを含むファイルシステムを報告します。
$ df -hT /var/log
df が主に報告するものは何ですか?
inode の容量
inode に似たオブジェクトを割り当てるファイルシステムでは、ブロックが残っていても inode を使い切ることがあります。
$ df -i /var
大量の小さなファイルは、利用可能な inode を消費します。1 つの大きなファイルを削除すると多数のブロックが解放されますが、通常は inode 1 つしか解放されません。不要な小さなファイルを多数削除すれば、inode の圧力を緩和できます。ファイルシステムによってはメタデータを動的に割り当て、これらの概念を異なる形で報告します。
空きブロックはあるものの、空き inode がないファイルシステムでは何が起こり得ますか?
`du` でパスの使用量を確認する
1 つのディレクトリ以下で到達可能な、割り当て済み容量を要約します。
$ du -sh /var/log
1 つのファイルシステム内に限定して、直下の項目を比較します。
$ sudo du -xhd1 /var | sort -h
ここで示した GNU オプションは、人が読みやすい表示、最大深度 1、1 つのファイルシステムを意味します。パーミッションによって一部のツリーが見えず、合計が不完全になる場合があります。また du は、既定ではハードリンクされたファイルを 1 回だけ数え、見かけのサイズと割り当て済みブロックを区別でき、オプションによってスパースファイルの扱いも変わります。
/var/log 以下の割り当て済み使用量を要約するコマンドはどれですか?
`df` と `du` の値が異なる理由
一般的な原因には次のものがあります。
- プロセスが削除済みファイルを開いたままにしており、ブロックは割り当て済みだが
duがたどれるパス名がない - ファイルシステムのメタデータ、予約領域、ジャーナル、reflink、スナップショット、圧縮が使用量管理に影響する
- 走査するツリー内に別のファイルシステムがマウントされている
- パーミッションによって
duが一部のディレクトリを読み取れない - スパースファイルの見かけのサイズと割り当て済みサイズが異なる
削除されたまま開いているファイルは、権限のあるプロセスを lsof +L1 などで調べます。未知のファイル記述子を切り詰めず、通常の手順で原因となるサービスを再起動するかシグナルを送ってください。
df が使用中と示す容量を、パス名に基づく du で見つけられないことがあるのはなぜですか?
状況を悪化させずに調査する
df が満杯と報告したファイルシステムから始め、findmnt でマウント対象を特定し、その同じファイルシステム内へ du の検索範囲を絞ります。スナップショット、コンテナ層、ログ、パッケージキャッシュ、アプリケーションの保持方針も考慮してください。大きいという理由だけでファイルを削除せず、先に所有者、バックアップ、コンプライアンス、サービスの動作を確認します。
大きなファイルを見つけたとき、最も安全な対応はどれですか?
レッスン完了
ディスク使用量 を完了しました
これで、ファイルシステム単位とパス名単位の容量レポートを照合できるようになりました。
マウント済みファイルシステムのブロック容量には
dfを使う。対応している場合、inode の圧力には
df -iを使う。範囲を絞った
duの走査で、到達可能なパスの使用量を割り当てる。削除後も開いているファイルと、ファイルシステム固有の使用量差を調べる。
データを削除する前に、所有権と保持方針を適用する。