我不确定这是否适用于 Unix 或 Windows 以外的任何其他操作系统,因此有此标题。当您在 Windows 中查看文件的属性时,您会看到大小和磁盘大小。有人能解释一下这两者之间的区别吗?
答案1
“磁盘大小”考虑了可能应用于文件的任何压缩以及文件写入的最后一个分配单元末尾的“松弛”空间。
NTFS 允许透明地压缩/解压缩文件。压缩文件时,其大小保持不变(即文件中数据的大小),但文件的磁盘占用空间可能会更小,因为 NTFS 驱动程序会在将文件数据写入磁盘时透明地压缩文件数据。
文件系统将文件存储在原子分配单元中——在 NTFS 和 (ex)FAT 中为“簇”。给定卷的簇大小可能有所不同(对于 NTFS,簇大小从 4K 到 64K,对于其他文件系统,簇大小则不同)。小于单个簇的文件将存储在单个簇中,因此至少占用一个簇大小的磁盘空间。文件大小不太可能是簇大小的整数倍,因此分配给文件的最后一个簇将包含文件数据和“空闲”数据的组合,占用最后一个簇中剩余的未使用部分。“磁盘大小”也计算这个“空闲”空间。
值得注意的是,对于 NTFS,非常小的文件可以存储在该文件的主文件表 (MFT) 条目中(文件名、文件数据和文件属性的总和为 1024 字节或更少的文件)。文件在磁盘上的大小仍将与 NTFS 卷的簇大小相同。
稀疏文件是一种机制,文件看起来很大,但包含大量零区域和稀疏的数据。NTFS 支持稀疏文件,并将磁盘上的大小报告为数据运行实际使用的区域(不包括零)。
编辑:
正如 syneticon-dj 指出的那样,这个问题当然也适用于其他操作系统。该du
命令的 GNU 版本有一个--apparent-size
参数,它将显示文件的数据大小,而不是磁盘大小(这是 的默认设置du
)。有时每个大小都是相关的,了解它们之间的区别是个好主意。