系统架构设计师: 文件系统之索引节点

本文详细解析了Linux文件系统中的索引节点(Inode),包括其数据结构、存储的元数据信息及其在文件系统中的作用。同时介绍了索引节点如何通过直接指针和间接指针来管理文件数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PS:下面的讲解,基于Linux/Unix

        可以参考这篇文章:https://www.centoschina.cn/course/introduction/11033.html

        索引节点,其英文为 Inode,是 Index Node 的缩写。存储于文件系统上的任何文件都可以用索引节点来表示。

       文件系统主要分为两部分,一部分为元数据(metadata),另一部分为数据本身。元数据,“包含了与数据有关信息的数据”。索引节点管理着文件系统中元数据的部分。

       文件系统中的任何一个文件或目录都与一个索引节点相对应。每个索引节点都是一个数据结构,存储着目标数据的如下信息:

        文件大小(以字节为单位)

        ( 存放文件的)设备标识符

        (文件所有者的)用户标识符

        用户组标识符

        文件模式(所有者、用户组及其他人对于文件的读取有怎样的权限)

        扩展属性(如 ACL)

        文件读取或修改的时间戳

        链接数量(指向该文件的硬链接数,记住,软链接不计算在内)

        指向存储该内容的磁盘区块的指针

       文件分类(是普通文件、目录还是特殊区块设备)

        文件占用的区块数量

Linux 文件系统从来不存储文件创建时间。

        一个典型的索引数据看起来会是像下面这样:

# stat 01

Size:7845633 Blocks:1786 IO Block:4096 regular file

Device:803h/2051d Inode:12684895 Links:1

Access:(0644/-rw-r--r--) Uid:(0/root)Gid:(0/root)

Access:2017-09-0701:46:54.000000000-0500

Modify:2017-04-2706:22:02.000000000-0500

Change:2017-04-2706:22:02.000000000-0500

          索引节点的创建与正在使用的文件系统有关。一些文件系统在创建时就创建了索引节点,故其索引节点的数量有限。而一些如 JFS 和 XFS 等系统也在文件系统创建时创建索引节点,但使用动态节点分配,并按需扩大索引节点的数量,因此可以避免所有索引节点用完的情况。

        当用户试图读取文件或与该文件相关的信息时,他会使用文件名称。但是,实质上这个文件名称首先映射为存储于目录表中的索引点节号码。通过该索引节点号码读取到相对应的索引节点。

        索引节点号码及相对应的索引节点存放于映射表(Inode table)中。

 

        索引节点只存储元数据信息,其中包括真正的数据存储的区块的信息。

        大多数文件系统会以 15个指针的形式来存储数据结构。这 15个指针包括:

       直接指向文件数据区块的 12个指针,称为直接指针(direct pointer)。

        一个单独非直接指针(singly indirect pointer),指向一个由多个指针构成的区块,后者的指针又指向文件数据区块。

        一个双重非直接指针(doubly indirect pointer),指向一个由多个指针构成的区块,后者的指针又指向一个由多个指针构成的区块,这一区块的指针又指向文件数据的区块。

        一个三重非直接指针(triply indirect pointer),指向一个由多个指针构成的区块,后者的指针又指向一个由多个指针构成的区块,其指针又指向另一个由多个指针构成的区块,这一区块的指针又指向文件数据的区块。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值