ホームページ » の仕方 » サイズとディスク上のサイズに大きな違いがあるのはなぜですか?

    サイズとディスク上のサイズに大きな違いがあるのはなぜですか?

    ほとんどの場合、 'Size'と 'Size on disk'の値は、フォルダまたはファイルのサイズをチェックするときに非常によく一致しますが、両者の間に大きな矛盾があるとどうなりますか?本日のSuperUser Q&Aの投稿では、この紛らわしい問題に対する答えを見ています。.

    本日の質疑応答セッションは、コミュニティ主導のQ&A Webサイトのグループである、Stack Exchangeの下位区分であるSuperUserの好意により提供されます。.

    質問

    SuperUserの読者thelastblackは、自分の携帯電話のSDカードのフォルダに対して、「サイズ」と「ディスクのサイズ」の間にこのような大きな違いがある理由を知りたいのです。

    あなたが以下で見ることができるように、このフォルダーのための 'サイズ'と 'ディスク上のサイズ'フィールドの間には大きな違いがあります。何故ですか?

    Windowsのアロケーションユニットのため、 'Size on disk'は 'Size'より少し大きくなければならないことを私は知っていますが、なぜそれほど大きな違いがあるのでしょうか。ファイル数が多いためか?

    ところで、このフォルダは私のAndroid携帯のSDカードにあります。この中に、私の地図アプリはキャッシュされた地図を保存し、アプリはGoogle Mapsから地図を取得します。.

    スクリーンショットを見ると、 'Size'と 'Size on disk'の間に間違いなく大きな食い違いがあるので、これを引き起こすためにここで何が起こったのか?

    答え

    SuperUserの寄稿者Bobが私たちに答えを持っています。

    私はあなたがこれがSDカードであると述べているので、あなたがここでFAT / FAT32ファイルシステムを使用していると仮定するでしょう。 NTFSとexFATは、割り当て単位に関して同様に動作します。他のファイルシステムは異なるかもしれませんが、とにかくそれらはWindowsでサポートされていません.

    あなたがたくさんの小さなファイルを持っているなら、これは確かに可能です。このことを考慮:

    • 50,000ファイル
    • 32 KBのクラスターサイズ(アロケーションユニット)。これはFAT32の最大値です。

    さて、今 最小 使用されるスペースは50,000 * 32,000 = 1.6 GBです(数学を簡単にするために、バイナリーではなくSIプレフィックスを使用)。各ファイルがディスク上で占めるスペースは、常にアロケーションユニットサイズの倍数です。ここでは、各ファイルは実際には1つのユニットに収まるように十分に小さいと仮定しています。.

    各ファイルの平均が2 KBの場合、合計で約100 MBの容量になります。ただし、割り当て単位のサイズのため、平均で15倍(ファイルあたり30 KB)も無駄になります。.

    詳細な説明

    なぜこれが起こるのですか? FAT32ファイルシステムでは、各ファイルの保存場所を追跡する必要があります。すべての1バイトのリストを保持するのであれば、テーブル(アドレス帳のように)はデータと同じ速度で成長し、多くのスペースを無駄にします。それで彼らがすることは「クラスターサイズ」としても知られている「アロケーションユニット」を使うことです。ボリュームはこれらの割り当て単位に分割され、ファイルシステムに関する限り、それらを細分化することはできません - それらはそれがアドレスできる最小ブロックです。あなたが家の番号を持っているのと同じように、しかしあなたの郵便配達員はあなたが何人の寝室を持っているか、誰がそれらに住んでいるかを気にしません.

    それで、あなたが非常に小さいファイルを持っているとどうなりますか?ファイルシステムは、ファイルが0 KB、2 KB、15 KBのどれであっても構いません。上記の例では、32 KBです。あなたのファイルはこのスペースのごく一部を使用しており、残りは基本的に無駄になっていますが、それでもファイルに属しています - まるであなたが空いている寝室のように.

    なぜ配分単位サイズが異なるのですか?まあ、それはより大きなテーブル(アドレス帳、例えば123 Fake Street、124 Fake Street、666 Satan Laneなどに家を所有していると言っていること)、またはそれ以上の無駄なスペース(家)を持つことのトレードオフになります。より大きなファイルがある場合は、より大きなアロケーションユニットを使用する方が理にかなっています - 他のすべてのファイルがいっぱいになるまでファイルは新しいユニット(家)を取得しないためです。小さなファイルがたくさんある場合は、とにかく大きなテーブル(アドレス帳)があるので、小さな単位(家)を用意してください。.

    大きなアロケーションユニットは、原則として、小さなファイルがたくさんあると、多くのスペースを無駄にします。通常、4 KBを超えて一般的な用途に使用するのに十分な理由はありません。.

    断片化?

    断片化に関しては、断片化はこの方法でスペースを無駄にするべきではありません。大きなファイルは複数のアロケーションユニットに分割される、すなわち分割されるかもしれませんが、各ユニットは次のユニットが開始される前にいっぱいにされるべきです。デフラグはアロケーションテーブルのスペースを少し節約するかもしれませんが、これはあなたの特定の問題ではありません.

    可能な解決策

    gladiator2345が示唆しているように、現時点でのあなたの唯一の本当の選択肢はそれと一緒に暮らすか、より小さなアロケーションユニットで再フォーマットすることです.

    お使いのカードはFAT16でフォーマットされているかもしれません。テーブルサイズの制限がより小さく、したがってより大きなボリュームに対応するためにもっと大きな割り当て単位を必要とします(32 KBの割り当て単位で上限2 GB)。 Braiamのご厚意による。その場合は、とにかくFAT32として安全にフォーマットできるはずです。.


    説明に追加するものがありますか?コメントで音を消す。他の技術に精通したStack Exchangeユーザーからの回答をもっと読みたいですか?こちらのディスカッションスレッドをチェックしてください。.