標準の GNU coreutils には、ディスク容量使用量を確認するために使用される df コマンドと du コマンドが含まれています。ほとんどの場合、コマンドによって報告されるディスク容量使用量は似ていますが、コマンドの出力が大きく異なるという問題が発生する場合があります。このトピックでは、前述の問題の原因と解決策について説明します。
df コマンドと du コマンド
df コマンドと du コマンドの統計ロジックは若干異なります。
df コマンドは、ファイルシステムのディスク容量使用量を表示します。 df コマンドは、statfs() システムコールからファイルシステムの容量統計を取得します。 statfs() システムコールは、ファイルシステムの superblocks からデータを読み取ります。デフォルトでは、df コマンドは出力を 1 KB ブロック単位で表示します。 -B または --block-size=SIZE オプションを使用して、コマンド出力に異なる ブロックサイズを指定できます。
特性: df コマンドは、ファイルによって参照されていないがまだ解放されていない容量(ファイル記述子がプロセスによってまだ保持されている削除済みファイルなど)を含む、ファイルシステムレベルの容量使用量を表示します。
du コマンドは、ファイルとディレクトリのディスク容量使用量を表示します。 du コマンドは、ファイルシステムディレクトリ内のすべてのファイルとディレクトリを深さ優先でトラバースし、stat() システムコールから容量使用量の統計を取得します。 stat() システムコールは、各ファイルのサイズを KB 単位で読み取ります。
特性: du コマンドは、ファイルによって参照されていない容量を除外した、ファイルとディレクトリの実際の容量使用量を表示します。
2 つのコマンドの統計ロジックは異なります。ただし、この違いによってコマンド出力間に大きな不一致が生じることはありません。