web-dev-qa-db-ja.com

dfとduが報告するディスク使用量に違いがあるのはなぜですか?

Linux CentOSサーバーがあり、OS +パッケージは5GBで使用されています。次に、WindowsサーバーからこのLinuxサーバー上の2つのフォルダーに97GBデータを転送しました。ディスク使用量を計算した後、2つのフォルダーの合計サイズがディスク使用サイズよりも大きいことがわかります。

各フォルダーでdu -shを実行します。1つは50GBを使用し、もう1つは47GBを使用します

ただし、df -hを実行すると、使用されるスペースは96GBになります。 (50GB + 47GB + 5GB)> 96GB

何か問題ある?これら2つのフォルダーには、多数のファイル(100万以上)が含まれています。ありがとう。

13
garconcn

これ ページは、なぜ値が異なるのかについていくつかの洞察を提供しますが、duサイズは2つのうち小さいほうがよいと示唆されているようです。

dfは割り当てられたブロックの合計を使用しますが、duはファイル自体のみを参照し、ディスク上のブロックを必要とするiノードなどのメタデータは除外します。さらに、アプリケーションがファイルを開いている間にファイルが削除された場合、duはそれを空き領域として報告しますが、dfはアプリケーションが終了するまで報告しません。

12
ceyko

dudfより大きい場合、通常の理由は「スパースブロック」です。プログラムが実際にディスクブロックに書き込みを行わず、その先をシークすると、ゼロポインターが取得されます。 iノードのブロック割り当てマップ。実際のディスク領域は予約されていません。後でそれに書き込むと、実際のディスクブロックが割り当てられ、マップは新しいブロックを指すように変更されます。

5
geekosaur