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