web-dev-qa-db-ja.com

ディスク使用量がその上のすべてのファイルのサイズよりも大きいのはなぜですか?

3TBのHDDがあります。 HDDのプロパティ画面では、471.4GBを使用したと表示されますが、nautilusのすべてのファイルを選択すると、321.0GBが選択されたと表示されます。 HDDに321.0GBのファイルしかない場合、なぜ471.4GBを使用するのですか?

HDDのパーティションはGUIDとEXT4で使用されているファイルシステムを使用しています。ディスクユーティリティアプリを使用してHDDを選択すると、次のような警告が表示されます。

WARNING: The partition is misaligned by 3072 bytes.
This may result in very poor performance.  Repartitioning is suggested.

不足している150.4GBと関係がありますか?

6
oshirowanen

ディスク上のファイルには、「見かけのサイズ」と「ディスク上のサイズ」の2つのサイズがあります。いくつかの理由によりlargeの不一致が生じる可能性があります。

  • 多数のファイルは、内部の断片化のために大量のオーバーヘッドをもたらします。例えば。 Ext4には4KiBのデフォルトブロックサイズがあります。それより小さいファイルは常に4KiBを消費し、上記のサイズはこのブロック配置に「丸め」られます。
  • ディレクトリもファイルであり、同じ規則がそれらにも適用されます。さらに、ディレクトリに大量のファイルを作成し、後でそれらを再度削除する場合、ディレクトリファイルの使用量を回収することはできません(ディレクトリの再作成が役立ちます)。
  • スパースファイルは特別なファイルであり、サイズが大きく見えますが、スペースを「消費」していません。これは、仮想ディスクイメージの仮想化では一般的です。それらは大きく表示されますが、「実際の」サイズははるかに小さくなります。多くのユーティリティ(およびファイルマネージャ)は、実際のディスク使用量を表示できません。
  • ハードリンクの使用。ファイルの内容は、複数の参照がそのファイルを指している間、ディスク上に存在できます。一部のファイルマネージャーは、すべての参照のサイズを考慮する場合があります。

両方のサイズを一覧表示できることがわかっているディスク使用ツールを使用して、これが問題かどうかを確認することをお勧めします。ターミナルでncduを試して使用します a 実際の使用量とディスクの使用量を切り替えます。


duを使用した4KiBブロックサイズのファイルシステムによる内部断片化の短いデモ:

$ Sudo tune2fs -l /dev/path-to-device | grep "Block size"
Block size:               4096

$ echo blaataaap > myfile                      # creates a 10-byte file

$ du --block-size=1 myfile                     # prints the usage on disk (filesystem)
4096   myfile

$ du --apparent-size --block-size=1 myfile     # prints the apparent size, i.e.
10     myfile                                  # content length when seeking

$ ls -al
-rw-rw-r-- 1 gert gert 10 Jan 1 23:24 myfile   # ls uses apparent sizes

これは、この10バイトのファイルは、リストに表示されるよりもディスク上で4086バイト大きく、内部断片化の影響を受けていることを意味します。


ファイルを一覧表示するときに、ハードリンクとディスクの使用法に関する短いデモが間違って表示されます(この場合はls):

$ dd if=/dev/zero of=1MBfile bs=1M count=1 # create a 1MB file
$ ln 1MBfile a_hard_link                   # create a hard link to it

$ ls -alht                                 # ls will report 2MB
total 2.1M
drwxrwxr-x  2 gert gert 4.0K Jan  2 11:21 .
-rw-rw-r--  2 gert gert 1.0M Jan  2 11:21 1MBfile
-rw-rw-r--  2 gert gert 1.0M Jan  2 11:21 a_hard_link

$ du -B 1024 .                             # du reports 1028K total for directory
1028    .

$ du -B 1024 a_hard_link                   # and 1024K for each file individually
1024    a_hard_link
$ du -B 1024 1MBfile
1024    1MBfile
13
gertvdijk

これは、ディスクの合計使用量がそこにあるすべてのファイルの合計と等しくならないためです(すべてのファイルを選択するとNautiliusに表示されます)。

その理由は、ファイルシステム自体がパーティション上のスペースを占有する傾向があるためです。ほとんどの場合、そのHDDに保存したすべてのデータを消去すると、ディスク使用量は約150GBになります。そのスペースはファイルシステム用に予約されています-ファイルシステムはファイルに関するデータをどこかに保存する必要があるため、必要です。 ext4はこのオーバーヘッドスペースを事前に割り当てます。たとえば、パーティションにファイルが追加されるとそのスペースが大きくなるext3とは対照的に、beforeのファイルが作成されます。

これらの150GBを問題と見なす場合は、HDDの合計サイズのわずか5%であることに注意してください。ハードドライブの95%以上が必要な場合は、手の届かない150GBを心配する代わりに、より大きなドライブを購入する必要があります。

また、ext4の場合、このスペースは無駄にならないことに注意してください。ここではデータの断片化は問題ではありませんが、この利点のコストは、余分な占有スペースです。これを減らしてext4にこのスペースの使用量をはるかに少なくする方法がありますが、断片化の可能性や起こり得ない他の最適化のために、これはお勧めできません。データアクセスがこれほどスムーズではないため、はるかに遅くなります。

2
Rafał Cieślak