【问题标题】:why does an inode have two different fields for size and block count?为什么一个 inode 有两个不同的大小和块计数字段?
【发布时间】:2013-06-12 18:14:09
【问题描述】:

Linux 的 inode 中有两个独立的字段,即大小和块。为什么我们必须有两个字段。如果我们只有块数,还不够吗?

我尝试创建一个文本文件,并向其中添加字符。大小在变化,但块数几乎保持不变。 (使用“stat filename”命令)

因此我可以假设“大小”字段用于确保操作系统不会读取存储在不属于文件的块中的不相关数据吗?

【问题讨论】:

    标签: linux operating-system filesystems inode


    【解决方案1】:

    在大多数 Linux 文件系统中,文件中可能有空洞 - 由未映射到任何磁盘块的零填充的区域。因此,文件大小和块大小可以不同。

    【讨论】:

      【解决方案2】:

      是的,size 字段仅用于读取属于文件的字节。

      实际上,一个文件在磁盘上占用的块可能比size / block_size + 1 更多。

      【讨论】:

      • 为什么一个文件会在磁盘上占用比这更多的块?因为间接阻塞?
      • 不,因为磁盘空间分配算法和文件中可能的预分配或漏洞(如果有漏洞,块可能比预期的少)。考虑以下示例:块大小(由stat 报告)为 512 字节,但 I/O 块大小为 4 KB。当您创建一个 1 字节的文件时,它会占用整个 I/O 块(因为整个 4 KB 传输到/从磁盘传输时分配较少会效率低下),这意味着 stat 将报告 4096/512 = 8文件的块。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      • 2015-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多