`
lancelotwjq
  • 浏览: 54916 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

inode详解

 
阅读更多

inode是glusterfs中重要的数据结构之一, glusterfs用它来表示文件系统中的inode,但二者不是 等价的。

 

inode数据结构

 

先粗略看下inode数据结构定义,对它有个整体印象

 

typedef struct _inode inode_t;

struct _inode {
        inode_table_t       *table;         /* the table this inode belongs to */
        uuid_t               gfid;
        gf_lock_t            lock;
        uint64_t             nlookup;
        uint32_t             ref;           /* reference count on this inode */
        ia_type_t            ia_type;       /* what kind of file */
        struct list_head     fd_list;       /* list of open files on this inode */
        struct list_head     dentry_list;   /* list of directory entries for this inode*/
        struct list_head     hash;          /* hash table pointers */
        struct list_head     list;          /* active/lru/purge */

        struct _inode_ctx   *_ctx;    /* replacement for dict_t *(inode->ctx) */
};

 

其中 一个叫list的成员十分重要,将在后面提到,它以节点的形式插入active list或lru list或purge list中

成员hash, list都是一个节点,他们不存放任何数据,只是用来表示各种链表关系

成员fd_list, dentry_list 是真正的链表

 

inode与dentry的关系

 

在inode.c文件中,高频词除了inode外,还有dentry。它对应与文件系统中目录项。

dentry与inode是多对一的关系,很多dentry可以指向同一个inode。 dentry主要的数据是目录项的名字。

typedef struct _dentry dentry_t;
struct _dentry {
        struct list_head   inode_list;   /* list of dentries of inode */
        struct list_head   hash;         /* hash table pointers */
        inode_t           *inode;        /* inode of this directory entry */
        char              *name;         /* name of the directory entry */
        inode_t           *parent;       /* directory of the entry */
}; 

 

同上,inode_list,hash也只是一个节点。

 

inode.c中,另一个数据结构是inode_table, 它相当于是一个总管,管理所有inode的状态/lru/hash/内存分配/。定义请察看源文件。

 

 

 

inode 的状态转移图

 

                                ------ref-------> [active]

                              /                             / \

inode_create ---> [lru] <------unref-----     ---unref-retire------->[purge] ---->  destory                   

                              \                                                                              /

                                -------table-prune--(lru_size>lru_limit)--->--            

 

注:lru表示Least Recently Used最近最少使用算法, 网上一堆,这里就不赘述了。

 

其中active,lru,purge代表inode的三个状态, 在inode_table中定义有3个链表与之对应。

 

当inode->list在某个链表中时,就代表inode处于这种状态。

 

list_move函数负责将链表节点在不同的链表中转移。如

 

   list_move (&inode->list, &inode->table->active);

 

就表示将inode的状态设为active。

 

 


inode_ctx

 

ctx(context) 存放inode的一些私有数据,它的定义很有意思:

struct _inode_ctx {
        union {
                uint64_t    key;
                xlator_t   *xl_key;
        };
        union {
                uint64_t    value1;
                void       *ptr1;
        };
        union {
                uint64_t    value2;
                void       *ptr2;
        };
};  

 它有3个union, union在C语言中并不常见,这么高密度的出现在这里,我猜测是为了内存对齐。这样ctx结构体的大小不会随着操作系统是32位还是64位而变化,一定为3*64bit。

 

 

hash & grep

 

为了提高 inode和dentry的查找速度,作者都对他们做了hash:

 

inode使用gfid 作为hash key; dentry使用name 作为hash key。

 

hash表存放在inode_table中:  inode_hash[],  name_hash[]

 

hash查找函数为: inode_grep(...),  dentry_grep(...)

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    linux-inode

    ### Linux中的Inode详解 #### 一、inode的概念与作用 在Linux系统中,了解inode的概念至关重要,因为它是理解文件系统以及硬盘存储机制的基础。inode(索引节点)是一种特殊的结构体,它用来存储文件的元信息。...

    Inode多网卡限制破解

    ### Inode多网卡限制破解方法详解 #### 一、Inode校园网限制多网卡破解步骤 **背景介绍:** 对于很多在校学生而言,使用学校的Inode认证系统时经常会遇到多网卡限制的问题,这使得无法通过笔记本电脑创建无线热点...

    iNodeClient_Linux64_7.3 (E0524).tar.gz

    《Linux64位iNode客户端详解与安装指南》 标题中的“iNodeClient_Linux64_7.3 (E0524).tar.gz”表明这是一个针对Linux 64位系统的iNode客户端软件,版本号为7.3,E0524可能是发布日期或者特定版本的标识。该文件...

    iNode for Linux 5.0

    《iNode for Linux 5.0:校园网认证客户端详解》 在计算机网络领域,特别是教育网络环境下,iNode是一款广泛使用的校园网认证客户端。本文将深入探讨"iNode for Linux 5.0",包括其功能特性、安装流程以及在Linux...

    H3C Inode密码查看器

    《H3C Inode密码查看器详解》 在IT领域,网络设备的安全管理至关重要,而H3C作为知名的网络设备供应商,其产品广泛应用于各类网络环境中。本文将深入探讨H3C Inode密码查看器这一工具,旨在帮助管理员更好地理解和...

    iNodeClient for Ubuntu

    《iNodeClient在Ubuntu 11.10上的安装与使用详解》 iNodeClient是一款专为Ubuntu 11.10设计的应用程序,它提供了丰富的功能,方便用户进行特定的操作。本文将深入探讨如何在Ubuntu 11.10操作系统上安装和使用iNode...

    iNodeClient_MacOS.tar.rar

    《Inode智能上网客户端在Mac OS上的应用详解》 Inode智能上网客户端是一款专为提升网络体验而设计的工具,尤其适用于Mac OS操作系统用户。它以其高效、安全和易用的特点,深受广大用户的喜爱。本篇文章将深入探讨...

    openwrt brcm47xx njit 可通过inode 认证

    《OpenWRT在brcm47xx平台上的njit_inode认证详解》 OpenWRT是一个高度可定制的Linux发行版,专为嵌入式设备,尤其是无线路由器设计。在这个主题中,我们聚焦于OpenWRT在brcm47xx架构上的应用,以及njit_inode认证...

    iNodeClient_Linux.tar.gz

    《iNodeClient在Linux系统中的应用详解》 iNodeClient是一款专为Linux用户设计的客户端接入软件,由知名网络设备制造商H3C精心打造。这款软件的主要目标是为使用校园网的用户提供便捷、稳定的网络接入服务。在Linux...

    h3c iNode for linux

    【知识点详解】 1. **h3c iNode**:h3c iNode是华三通信(H3C)推出的一款网络客户端软件,它主要用于高校校园网的接入和管理。此软件不仅支持Windows系统,还特别为Linux用户提供了版本,以满足不同用户的需求。 ...

    linux文件系统,inode,datablock,superblock,Filesystem Description等详解

    本文将深入探讨Linux文件系统的基础概念,包括inode、datablock、superblock以及它们在文件系统中的作用。 首先,让我们了解文件系统的基本结构。文件系统(File System)定义了数据在硬盘等存储设备上的组织方式,...

    xfs_inode_item.rar_Only

    《XFS文件系统中的Inode Item详解》 在Linux内核v2.13.6中,XFS文件系统扮演着至关重要的角色。XFS,全称eXtreme File System,是一种高性能、日志结构的文件系统,广泛应用于大型数据存储场景。在这个版本的内核中...

    iNodeClient For Mac 智能客户端

    《iNodeClient for Mac:智能客户端详解》 在IT领域,网络接入安全是至关重要的,尤其是在企业环境中。H3C的iNode智能客户端正是为了解决这个问题而设计的。本文将详细探讨iNodeClient for Mac的功能特性,以及如何...

    jfs_inode.rar_V2

    《Linux v2.13.6中的JFS Inode分配机制详解》 在Linux操作系统中,文件系统是管理和组织磁盘存储空间的核心组件。其中,Inode(索引节点)是文件系统的重要概念,它存储了文件的各种元数据,如文件的所有者、权限、...

    详解Linux索引节点inode

    Linux中的索引节点(inode)是文件系统的核心组成部分,它负责存储文件的元信息,而非文件的实际内容。本文将深入探讨inode的概念、包含的内容、特点以及操作系统读取磁盘文件的流程,同时揭示inode带来的诸多优点。...

    华为H3C 802.1X客户端[兼容INODE V2.4-335]

    1. **802.1X协议详解**: - **基本概念**:802.1X是一种基于端口的网络访问控制协议,由IEEE制定,它允许网络设备(如交换机)在用户尝试连接网络时执行身份验证。 - **工作原理**:当设备尝试连接网络时,802.1X...

    iNodeSetup7.3 (E0538 Chinese).rar

    《H3C iNode PC 7.3 (E0538) 软件详解》 H3C公司的iNode是一款专为网络设备管理设计的客户端软件,它提供了全面的网络管理和监控功能,帮助用户高效地管理和维护网络环境。在最新的版本iNode 7.3 (E0538 Chinese)中...

    cams-inode华维上网拨号器

    《cams-inode华维上网拨号器:μCOSII中文教程详解》 cams-inode华维上网拨号器是一款专为校园等网络资源密集区域设计的拨号软件,它能够帮助用户方便快捷地接入网络,享受高效稳定的互联网服务。在深入探讨cams-...

Global site tag (gtag.js) - Google Analytics