为什么文件占用的空间会大于文件实际大小.

如果你检查文件夹的属性,你会看到文件大小(Size)和文件在磁盘上的大小 (Size on disk).

这两个值或多或少有点差异,这取决于你用的文件系统和文件类型.

有可能两个值之间会相差1GB甚至更多 .

你可以在Windows Explorer中右击任意文件夹然后在右键菜单中选择属性(properties)来验证.

如果文件夹中有大量文件,可能需要一段时间才能显示完毕.

以下截图中你可以看到,有0.2GB( Gigabyte )的差异,相对总数来说并不大.然而不同情况下可能有很大的差异.

size on disk

那么为什么有差异呢?

原因在于文件系统(file systems )和簇(cluster sizes)大小.这里不打算讲太多细节的东西,每个文件系统Windows都支持.比如NTFS或者FAT32, 都用簇(clusters)的概念

簇是一个磁盘空间的最小单元  微软官方解说如下:

簇大小是一个磁盘用来存储文件的最小单位. 如果一个文件大小不是簇的偶数倍,额外的空间必须用来储存这个文件,直至到簇的下一个偶数倍数。(这个是直翻的感觉不太好理解,按照我对簇的理解应该是… 如果一个文件没有超过一个或多个簇的大小,那么簇剩余的空间也会分配给这个文件.直到下个文件才会用新的簇保存.)

一些默认的簇大小:

  • NTFS 2 GB - 16 TB drives - 4 KB
  • FAT16 1 GB - 2 GB drives - 32 KB
  • FAT16 2 GB - 4 GB drives - 64 KB
  • FAT32 256 MB - 8 GB drives - 4 KB

想象下这个情景: 如果你有 1 Gigabyte FAT16 的磁盘. 在上面存储了1000个大小为 1 Kilobyte 的文件.

属性对话框中的文件大小会显示 1,000 Kilobyte, 而文件在磁盘上的大小会显示 32,000 Kilobyte (1000x32KB) ,共 31,000 Kilobyte的差异.

每个文件的大小是 1 Kilobyte, 然后浪费 31 Kilobyte . 原因这个磁盘簇的大小是32 Kilobyte.

这个问题在Fat32和NTFS的文件系统上有所减小,因为这两个系统默认的簇大小是4 Kilobyte. 不过一些USB 设备,或者老系统可能还是用FAT16文件系统.

随着容量的增加,这个又一次成为了问题. 一个64TB的NTFS卷是32kb .

查看磁盘的簇大小

cluster size windows

  1. 按下Windows键,然后输入CMD ,右击显示的cmd.exe然后在右键菜单中选择以管理员运行.
  2. 在命令行窗口中输入 chkdsk  盘符(比如 chkdsk d:) 然后等待执行完成.
  3. 检查 "bytes in each allocation unit" 这一项. 他是字节(bytes)单位. 如果你要转为KB(Kilobytes), 除以1024就可以了. 以图中的例子来说 , 4096 bytes就是4 Kilobyte (4096 / 1024 = 4).

我们能做什么?

基于具体存储使用,我们可以减少簇的大小:

  1. 用Fat32 或 NTFS 代替FAT16(14年的文档..我感觉FAT16实在太遥远了,这年头还用FAT16的估计也转不到FAT32和NTFS). 不过这个可能无法实现,比如有些文件系统就是要求FAT16格式. 如果没有这样的需求,你最好转一下,用来节省空间. 你可以用命令行工具 CONVERT进行转换.比如你要把文件系统转为ntfs , 你可以打这个命令CONVERT d: /fs:ntfs (注 : FAT文件系统的原有数据不会丢失).
  2. 分区的时候.你同样可以减少每个盘的簇大小.默认情况下 512 MB FAT16 分区簇大小是 16KB, 1GB是32KB.

英文原文在此,转载请注明出处.

原文地址:https://www.cnblogs.com/haseo/p/3884522.html