理解文件系统中inode的概念

理解文件系统中inode的概念
  • 概念:inode就是索引节点,它用来存放档案及目录的基本信息,包含时间、档名、使用者及群组等

  • inode 是 UNIX 操作系统中的一种数据结构,其本质是结构体

  • 在 Linux 中,索引节点结构存在于系统内存及磁盘,其可区分成 VFS inode 与实际文件系统的 inode。

  • VFS inode 作为实际文件系统中 inode 的抽象,定义了结构体 inode 与其相关的操作 inode_operations

    Linux 中 VFS inode
    include/linux/fs.h
    
    struct inode { 
    ... 
    const struct inode_operations   *i_op; // 索引节点操作
    unsigned long           i_ino;      // 索引节点号
    atomic_t                i_count;    // 引用计数器
    unsigned int            i_nlink;    // 硬链接数目
    ... 
    } 
    
    struct inode_operations { 
    ... 
    int (*create) (struct inode *,struct dentry         *,int, struct nameidata *); 
    int (*link) (struct dentry *,struct inode *,struct dentry *); 
    int (*unlink) (struct inode *,struct dentry *); 
    int (*symlink) (struct inode *,struct dentry *,const char *); 
    int (*mkdir) (struct inode *,struct dentry *,int); 
    int (*rmdir) (struct inode *,struct dentry *); 
    ... 
    }
    1. Linux 中 VFS inode

      • 每个文件存在两个计数器:i_count 与 i_nlink,即引用计数与硬链接计数
      • i_count 用于跟踪文件被访问的数量,而 i_nlink 则是上述使用 ls -l 等命令查看到的文件硬链接数
      • 当文件被删除时,则 i_nlink 先被设置成 0
      • 文件的这两个计数器使得 Linux 系统升级或程序更新变的容易
      • 系统或程序可在不关闭的情况下(即文件 i_count 不为 0),将新文件以同样的文件名进行替换,新文件有自己的 inode 及 data block,旧文件会在相关进程关闭后被完整的删除
    2. 文件系统 ext4 中的 inode

    ext4 中的 inode
    
    struct ext4_inode { 
    ... 
    __le32  i_atime;        // 文件内容最后一次访问时间
    __le32  i_ctime;        // inode 修改时间
    __le32  i_mtime;        // 文件内容最后一次修改时间
    __le16  i_links_count;  // 硬链接计数
    __le32  i_blocks_lo;    // Block 计数
    __le32  i_block[EXT4_N_BLOCKS];  // 指向具体的 block 
    ... 
    };
    • 三个时间的定义可对应与命令 stat 中查看到三个时间

    • i_links_count 不仅用于文件的硬链接计数,也用于目录的子目录数跟踪(目录并不显示硬链接数,命令 ls -ld 查看到的是子目录数)

    • 文件系统 ext3 对 i_links_count 有限制,其最大数为:32000(该限制在 ext4 中被取消)

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_长风_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值