linux文件系统inode和block关系

在 Linux 文件系统中,inodeblock 是文件存储和管理中的两个核心概念,它们之间有着密切的关系。

1. 什么是 inode?

  • inode(索引节点)是 Linux 文件系统中用来存储文件元数据的数据结构。每个文件或目录都有一个唯一的 inode。
  • inode 中包含了文件的以下信息:
    • 文件类型(普通文件、目录、符号链接等)
    • 文件大小
    • 文件权限(读、写、执行等)
    • 文件的所有者(用户 ID 和组 ID)
    • 文件的时间戳(创建、修改、访问时间)
    • 指向数据块(block)的指针(即文件内容实际存储的位置)
  • 注意:inode 中不包含文件名,文件名是由目录项(directory entry)维护的,目录项将文件名映射到对应的 inode 编号。

2. 什么是 block?

  • block(数据块)是文件系统中最小的存储单位,用于实际存储文件的内容
  • 文件系统将硬盘划分为多个固定大小的块(比如 1KB、4KB 等,具体大小取决于文件系统格式化时的设置)。
  • 一个文件的内容可能占用一个或多个 block。如果文件很小,可能只占用一个 block 的一部分;如果文件很大,则会占用多个 block。

磁盘分区在格式化的时候,inode/block已经给确定下来了

3. inode 和 block 的关系

  • inode 是文件的“索引”,它通过指针记录了文件数据所在的 block 位置
  • 一个 inode 可以指向多个 block,具体取决于文件的大小和文件系统的设计:
    • 直接指针:inode 通常包含一些直接指向数据块的指针(比如 ext4 文件系统中通常有 12 个直接指针),用于存储较小的文件。
    • 间接指针:如果文件较大,inode 会使用间接指针(指向一个 block,这个 block 里存的是更多数据块的地址)。
    • 双重间接指针和三重间接指针:对于超大文件,会有更复杂的指针结构,层层指向最终的数据块。
  • 简单来说:
    • inode 是“文件的大脑”,负责描述文件和管理它的存储位置。
    • block 是“文件的身体”,实际存放文件的内容。

4. 举个例子

假设你有一个 10KB 的文件,文件系统 block 大小是 4KB:

  • 这个文件需要 3 个 block 来存储(2 个满的 4KB block + 1 个部分使用的 2KB block)。
  • 文件的 inode 会记录这些 block 的地址(比如 block 100、101 和 102)。
  • 当你读取文件时,系统先找到 inode,再通过 inode 中的指针找到对应的 block,读取数据。

5. 实际查询方法

在 Linux 中,你可以用以下命令查看 inode 和 block 的关系:

  • ls -li:显示文件的 inode 编号(第一列)。
  • stat 文件名:查看文件的详细元数据,包括 inode 号和占用的 block 数量。
  • df -i:查看文件系统的 inode 使用情况。
  • df -h:查看 block 使用情况。

查看磁盘block默认值:
blockdev --getbsz /dev/sda1

6. 总结

  • inode 负责文件的元数据和定位数据块。
  • block 负责存储文件的实际内容。
  • inode 通过指针连接到 block,形成文件存储的完整结构。