通常情况下,文件属性中的 “大小” <= “占用空间”,这与文件系统存储实际数据的方式有关。

  • 文件系统中,实际数据的存储是以 “” 作为基本单位分配磁盘空间的。
  • 为了更好地管理磁盘空间和更高效地从硬盘读取数据,1个簇只能被1个文件占用,即使文件只占用了簇的一个字节,其他文件也不能再使用这个簇来存储数据。(所以文件的占用空间为 簇的整数倍)
  • 不同的文件系统中,簇的默认大小不一样。
  • 计算文件的占用空间大小:(单位:Byte)
    • 文件大小 = 实际数据的大小
    • 占用空间 = 实际数据占用簇的数量 * 簇的大小

文件占用空间为 0

当文件大小特别小的时候,可能会出现:文件大小大于0,而占用空间等于0 的情况。

  • 产生原因:假设簇大小为4KB,要存储的小文件只有12B,若在此时还分配一个4KB的簇来存储它,必然会造成(4KB-12B≈4KB)的空间浪费(尤其是当系统中有大量如此小的文件时)。 因此文件系统一般会针对这种情况做一些优化设计,以节省空间。
  • 优化办法:将这种小文件的 元数据和实际数据 一起 内联存储 在元数据结构中(即不分配额外的数据块存储它的实际数据)。
    (小文件的临界值的大小与具体的 文件系统设计 有关)
    • 一方面 节省空间;
    • 一方面也能减少读文件时 访问磁盘的次数。
  • 文件系统 File System 一般都是 元数据 & 实际数据 分开存放的。
    当文件过小时,文件系统并没有将实际数据存储到簇中,所以实际数据占用簇的数量为0,也即占用空间为0;
    而元数据中依然保存了实际数据及其大小,所以文件大小不为0。

Others

  • 文件系统 File System 一般都是 元数据 & 实际数据 分开存放的。
    • 元数据
        + File --------- 文件名
        + Size --------- 文件大小(字节)
        + Blocks ------- 文件使用的数据块总数,即簇的总数
        + IO Block ----- 数据块的大小
        + regular file - 文件类型(常规文件) 
        + Device ------- 设备编号 
        + Inode -------- 文件所在的Inode
        + Links -------- 硬链接次数
        + Access ------- 权限
        + Uid ---------- 属主id/用户
        + Gid ---------- 属组id/组名
        + Access Time -- 简写为atime,表示文件的访问时间。当文件内容被访问时,更新这个时间 
        + Modify Time -- 简写为mtime,表示文件内容的修改时间,当文件的数据内容被修改时,更新这个时间。 
        + Change Time -- 简写为ctime,表示文件的状态时间,当文件的状态被修改时,更新这个时间,例如文件的链接数,大小,权限,Blocks数。
      • 每个文件即使是空文件也会耗费对应的元数据存储空间,用来存储元数据;
      • Linux 系统下,使用 stat FileName 命令可以查看指定目录的元数据信息。(如:stat test.txt
      • 用户需要操作一个文件必须首先得到它的元数据,才能定位到文件的位置并且得到文件的内容或相关属性。
    • 实际数据
      • 文件系统中,实际数据的存储是以文件系统逻辑块 (也称 簇 Cluster or 分配单元 Allocation Unit)为单位分配空间的,是磁盘用来存储文件的最小单位;
      • 一个文件必定占用整数个簇,即 每一个簇只能被1个文件占用;
      • 簇是操作系统所使用的逻辑概念,而非磁盘的物理特性。
  • 簇的大小 & 读取速度:
    • Cluster Size 越小越节省空间;
    • Cluster Size 越大越节省读取时间,但是浪费空间。(块分散在硬盘的哪些地方也会影响读取速度)
  • Windows 创建指定大小的文件:
    • fsutil file createnew FileName 736 : 在当前目录下创建一个名为 FileName 的文件,其大小为 736 Byte
    • 文件大小为 736B 时,占用空间为 0;(临界值的大小与具体的文件系统设计有关)
    • 文件大小为 737B 时,占用空间为 4B(簇的大小)。
  • 查看磁盘的簇大小: chkdsk or chkdsk C:

Reference:
https://blog.csdn.net/duyusean/article/details/78643475
https://www.zhihu.com/question/23972911/answer/97378300
https://www.jianshu.com/p/5382d8c1f1e5