du -h は 512 を返しますが、これはどういう意味ですか?

du -h は 512 を返しますが、これはどういう意味ですか?

du -hを返すファイルがいくつかありますが512、これは単位付きの数値を返すものと理解しています。これはどういう意味ですか? 実際に使用されているディスク容量はどれくらいですか?

良いファイル

(base) -bash-4.2$ du -h 2020.110/drr0/X1.0060_0958
36K 2020.110/drr0/X1.0060_0958
(base) -bash-4.2$ ls -l 2020.110/drr0/X1.0060_0958
-rw-rw-rw- 1 user11 users 36628 Jul 29 18:43 2020.110/drr0/X1.0060_0958

不正なファイル

(base) -bash-4.2$ du -h 2020.110/drr0/X1.0060_0957
512 2020.110/drr0/X1.0060_0957
(base) -bash-4.2$ ls -l 2020.110/drr0/X1.0060_0957
-rw-rw-rw- 1 user11 users 0 Jul 29 18:51 2020.110/drr0/X1.0060_0957

答え1

duは単位を表示しません。両方の場合において出力には「B」(バイト)は表示されません。「人間が読める」モードでは、乗数接頭辞(K、M、G) ですが、単位自体は表示されません。また、1024 未満の数値には接頭辞がないため、何も表示されません。

通常、「du」はファイルをブロック単位で測定します (マニュアル ページを参照) が、「-h」オプションを使用すると、単位は常に 1 バイトになります。したがって、du -hが表示される場合512、それは 512 バイトです。

なぜ0ではなく512なのでしょうか?phuclvの回答を参照してください

答え2

ファイルは必ずしもディスク上のスペースを消費するわけではありません。実際のサイズよりもデータブロックが少ないファイルは、より少ないブロック数で報告されます。

  • スパースファイルディスクには非ゼロブロックのみが格納されます。したがって、5MBの非ゼロデータのみを含む50TBのスパースファイルは、ディスク上で約5MBしか消費しません。
  • インラインファイルメタデータ自体に保存されるため、データ領域も0バイト消費します。NTFSでは、常駐ファイルその後、ext4やBtrfs同様の機能もサポートしています
  • 圧縮ファイル圧縮後のブロック数も少なくなる

おそらく、ファイルはインライン化されています。割り当てられたブロックがないため、 によって報告される数lsは 0 になります。 で簡単に確認できますstat。 ext4 では、inode サイズ (256 バイト以上) に比べて非常に小さいファイルのみがインライン化できるため、おそらく NTFS や Btrfs などの別のファイル システムを使用しているのでしょう。

実際のサイズを確認するには、--apparent-sizeオプションをご利用くださいdu

--apparent-size

ディスク使用量ではなく、見かけのサイズを出力します。見かけのサイズは通常は小さくなりますが、(「スパース」) ファイルの穴、内部の断片化、間接ブロックなどにより大きくなる場合があります。

参考:

関連情報