ほとんどの場合、「サイズ」と「ディスク上のサイズ」の値は、フォルダまたはファイルのサイズをチェックするときにほぼ一致しますが、2つの間に大きな不一致がある場合はどうなりますか?今日のスーパーユーザーのQ&A投稿では、この紛らわしい問題に対する答えを見ていきます。
今日の質疑応答セッションは、コミュニティ主導のQ&AWebサイトのグループであるStackExchangeの下位区分であるSuperUserの好意で行われます。
質問
スーパーユーザーリーダーのthelastblackは、スマートフォンのSDカード上のフォルダの「サイズ」と「ディスク上のサイズ」に大きな違いがある理由を知りたがっています。
以下に示すように、このフォルダの[サイズ]フィールドと[ディスク上のサイズ]フィールドには大きな違いがあります。何故ですか?
![]()
Windowsのアロケーションユニットのため、「ディスク上のサイズ」は「サイズ」より少し大きくする必要があることは知っていますが、なぜそれほど大きな違いがあるのでしょうか。ファイル数が多いせいかもしれません。
ところで、このフォルダは私のAndroid携帯のSDカードにあります。この中に、私のマップアプリはキャッシュされたマップを保存し、アプリはGoogleマップからマップを取得します。
スクリーンショットを見ると、「サイズ」と「ディスク上のサイズ」の間に間違いなく大きな違いがあるので、これを引き起こすためにここで何が起こったのでしょうか。
答え
スーパーユーザーの寄稿者であるボブが答えを持っています。
ここでは、SDカードであるとおっしゃっていますので、FAT / FAT32ファイルシステムを使用していると仮定します。 NTFSとexFATは、アロケーションユニットに関して同様に動作します。他のファイルシステムは異なる場合がありますが、いずれにしてもWindowsではサポートされていません。
小さなファイルがたくさんある場合、これは確かに可能です。このことを考慮:
- 50,000ファイル
- FAT32の最大値である32KBのクラスターサイズ(アロケーションユニット)
さて、今 最小 使用されるスペースは50,000 * 32,000 = 1.6 GBです(計算を単純化するために、バイナリではなくSIプレフィックスを使用します)。各ファイルがディスク上で占めるスペースは、常にアロケーションユニットサイズの倍数です。ここでは、各ファイルが実際には1つのユニットに収まるほど小さく、(無駄な)スペースが残っていると想定しています。
各ファイルの平均が2KBの場合、合計で約100 MBになりますが、アロケーションユニットのサイズが原因で、平均でその15倍(ファイルあたり30 KB)も無駄になります。
詳細な説明
なぜこれが起こるのですか? FAT32ファイルシステムは、各ファイルが保存されている場所を追跡する必要があります。すべてのバイトのリストを保持する場合、テーブル(アドレス帳など)はデータと同じ速度で大きくなり、多くのスペースを浪費します。したがって、彼らが行うことは、「クラスターサイズ」としても知られる「アロケーションユニット」を使用することです。ボリュームはこれらのアロケーションユニットに分割されており、ファイルシステムに関する限り、それらを細分化することはできません。これらは、アドレス指定できる最小のブロックです。あなたが家番号を持っているのと同じように、あなたの郵便配達員はあなたが持っている寝室の数やそこに住んでいる人を気にしません。
では、ファイルが非常に小さい場合はどうなりますか?ファイルシステムは、ファイルが0 KB、2 KB、または15 KBであるかどうかを気にせず、可能な限り最小のスペースを提供します。上記の例では、32KBです。あなたのファイルはこのスペースのごく一部しか使用しておらず、残りは基本的に無駄になっていますが、それでもファイルに属しています–あなたが空いている寝室のように。
アロケーションユニットのサイズが異なるのはなぜですか?まあ、それはより大きなテーブル(アドレス帳、例えばジョンが123フェイクストリート、124フェイクストリート、666サタンレーンなどに家を所有していると言う)を持つことと、各ユニット(家)のより多くの無駄なスペースを持つことの間のトレードオフになります。より大きなファイルがある場合は、より大きなアロケーションユニットを使用する方が理にかなっています。これは、他のすべてがいっぱいになるまでファイルが新しいユニット(ハウス)を取得しないためです。小さなファイルがたくさんある場合は、とにかく大きなテーブル(アドレス帳)があるので、小さなユニット(家)を与えることもできます。
大きなアロケーションユニットは、原則として、小さなファイルがたくさんある場合、多くのスペースを浪費します。通常、一般的な使用のために4KBを超える理由はありません。
断片化?
断片化に関しては、断片化はこのようにスペースを浪費するべきではありません。大きなファイルは断片化される、つまり分割されて複数のアロケーションユニットになる場合がありますが、次のユニットを開始する前に各ユニットを埋める必要があります。デフラグすると、割り当てテーブルのスペースが少し節約される可能性がありますが、これは特定の問題ではありません。
可能な解決策
なので gladiator2345提案 、現時点での唯一の現実的な選択肢は、それを使用するか、より小さなアロケーションユニットで再フォーマットすることです。
カードはFAT16でフォーマットされている可能性があります。これは、テーブルサイズの制限が小さいため、より大きなボリュームに対応するためにはるかに大きなアロケーションユニットを必要とします(32KBのアロケーションユニットで上限は2GB)。 ソース の礼儀 ブライアム 。その場合は、とにかくFAT32として安全にフォーマットできるはずです。
説明に追加するものがありますか?コメントで音を立ててください。他の技術に精通したStackExchangeユーザーからの回答をもっと読みたいですか? ここで完全なディスカッションスレッドをチェックしてください 。