为什么’大小’和’磁盘上的大小’之间有很大的差别?

why-is-there-a-big-difference-between-size-and-size-on-disk-00

大多数时候,“大小”和“磁盘大小”的值在检查文件夹或文件大小时将非常接近匹配,但是如果两者之间存在巨大差异该怎么办? 今天的超级用户Q&A帖子看这个混乱的问题的答案。

今天的问答环节由我们感谢SuperUser - Stack Exchange的一个分支,这是一个社区驱动的Q&A网站分组。

问题

超级用户读者thelastblack想知道为什么尺寸和磁盘大小之间的一个文件夹在他的手机的SD卡上有这么巨大的区别:

如下所示,这个文件夹的“大小”和“磁盘大小”字段之间有太大的区别。 这是为什么?

why-is-there-a-big-difference-between-size-and-size-on-disk-01

我知道磁盘上的大小应该比大小因为Windows中的分配单位有点多,但为什么有很大的区别? 可能是因为大量的文件?

BTW,这个文件夹在我的Android手机的SD卡上。 在这里,我的地图应用程序存储其缓存的地图,该应用程序从Google地图获取其地图。

看看截图,尺寸和磁盘上的大小之间肯定有巨大的差异,所以这里发生了什么导致这一点?

答案

超级用户贡献者鲍勃有我们的答案:

我将假设你在这里使用FAT / FAT32文件系统,因为你提到这是一个SD卡。 NTFS和exFAT在分配单元方面表现相似。 其他文件系统可能不同,但它们在Windows上不受支持。

如果你有很多小文件,这当然是可能的。 考虑这个:

  • 50,000个文件
  • 32 KB簇大小(分配单位),这是FAT32的最大值

好了,现在所采取的最小空间为50000 * 32000 = 1.6 GB(使用SI前缀,不是二进制,为了简化数学)。 每个文件在磁盘上占用的空间总是分配单元大小的倍数 - 在这里我们假设每个文件实际上足够小,以适合单个单元,剩下一些(浪费的)空间。

如果每个文件平均为2 KB,你总共会得到大约100 MB - 但是由于分配单元大小,你也平均浪费了15倍(每个文件30 KB)。

深入解释

为什么会发生这种情况? 那么,FAT32文件系统需要跟踪每个文件存储的位置。 如果要保存每个单字节的列表,表(如地址簿)将以与数据相同的速度增长 - 并浪费大量空间。 所以他们做的是使用“分配单位”,也称为“簇大小”。 卷被分成这些分配单元,并且就文件系统而言,它们不能被细分 - 它们是它可以寻址的最小块。 很像你有一个房子号码,但你的邮递员不在乎你有多少个卧室或谁住在他们。

那么,如果你有一个非常小的文件会发生什么? 嗯,文件系统不关心文件是0 KB,2 KB还是15 KB,它会给它最小的空间 - 在上面的例子中,这是32 KB。 你的文件只使用少量的这个空间,其余的基本上是浪费,但仍然属于该文件 - 很像一个卧室,你离开无人居住。

为什么有不同的分配单元大小? 好吧,它成为一个权衡之间有一个更大的表(地址簿,例如说约翰拥有一个房子在假冒街123,假街124号,666撒旦巷等),或更浪费的空间在每个单位(房子) 。 如果你有更大的文件,使用更大的分配单位更有意义 - 因为文件不会得到一个新的单位(房子),直到所有其他人填满。 如果你有很多小文件,好吧,你会有一张大桌子(地址簿),所以也可以给他们小单位(房子)。

大型分配单元,作为一般规则,如果你有很多小文件,将浪费大量的空间。 通常没有一个很好的理由去超过4 KB一般使用。

碎片?

对于碎片化,碎片化不应该以这种方式浪费空间。 大文件可以被分段,即分割成多个分配单元,但是每个单元应当在下一个开始之前被填充。 碎片整理可能会在分配表中节省一些空间,但这不是您的具体问题。

可能的解决方案

作为gladiator2345建议 ,在这一点上你的唯一真正的选择是与它共处或较小的分配单元格式化。

您的卡可能格式化为FAT16,其对表大小具有较小的限制,因此需要更大的分配单元,以便处理更大的卷(上限为2 GB,分配单位为32 KB)。 来源礼貌Braiam 如果是这样,你应该能够安全格式化为FAT32无论如何。


有什么东西添加到解释? 声音在评论中。 想要阅读更多的技术精明的Stack Exchange用户的答案? 这里查看完整的话题

赞 (0)
分享到:更多 ()