- 浏览: 53611 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
mayatama:
jiakon 写道你好,请问yum install glust ...
Glusterfs+Swift 对外提供对像存储 -
jiakon:
你好,请问yum install glusterfs glus ...
Glusterfs+Swift 对外提供对像存储
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(...)
发表评论
-
Glusterfs+Swift 对外提供对像存储
2013-11-27 16:14 3024虽然Glusterfs本身对外只提供POSIX兼容的文件存 ... -
poll实现详解
2013-06-04 16:11 0说到select和poll,也就是IO多路转接,在APUE ... -
qemu-kvm使用gluster协议
2013-03-29 10:12 3242为了提高以glusterfs做为存储的 虚拟机的IO性能, ... -
Glusterfs社区开发流程
2013-03-21 14:36 1613Glusterfs开源社区使用 Git + Ger ... -
Glusterfs扩展属性
2013-03-06 12:27 1641英文原文: http://hekafs ... -
图说DHT
2013-02-28 14:22 1265dht-diskusage.c 它包含dh ... -
call_stack 与 call_frame
2013-02-28 10:04 1167call_stack由一个或多个call_frame组成。 ... -
使用glusterfs API
2013-02-21 10:43 3456如果是通过rpm安装的glusterfs 在执行 ... -
Glusterfs吞吐量性能测试
2013-01-10 13:55 3576我在这里 介绍了如何用iozone来测试glusterfs性 ... -
Glusterfs配置文件
2012-12-20 14:58 0Glusterfs会在 /var/lib/glusterfs存 ... -
glusterd中的状态机浅析
2012-12-20 13:14 2376当RPC请求到达Glusterd守护进程后, 它会根据rpcs ... -
Gluster术语表
2012-12-19 16:31 1545接触新的东西的时候,缩写/术语啥的最头疼了。下面我总结了一 ... -
iozone测试glusterfs性能
2012-11-27 11:39 2653iozone 是linux下的磁 ... -
syntask@glusterfs
2012-11-26 16:04 0syntask struct sy ... -
epoll与event_pool
2012-11-07 14:56 1748epoll is a scalable I/O even ... -
CircleBuffer@glusterfs
2012-11-05 17:22 841CircleBuffer 是逻辑上呈环形的缓冲区 。 ... -
如何查看brick上文件扩展属性
2012-10-25 16:25 1233在brick目录(不是volume挂载目录)执行: ... -
xlators 综述
2012-10-11 15:19 0xlator是glusterfs里面比较有意思的东西,下面由简 ... -
关于卷的配置文件(Volume Spec)
2012-10-10 17:07 2314Glusterfs使用了xlator模块化架构,用户可以通过编 ... -
afr代码解析
2012-09-26 14:30 255afr 是一个xlator, 全称是Automatic F ...
相关推荐
1.inode简介 理解inode,要从文件储存说起。文件储存在硬盘上,硬盘的最小存储单位叫做”扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,...
每个块都可能含有superblock,但是我们也说一个文件系统应该仅有一个superblock 而已,那是怎么回事?事实上除了第一个块内会含有superblock 之外,后续的块不一定含有superblock,而若含有superblock则该superblock...
jffs2代码分析详尽资料jffs2代码分析详尽资料jffs2代码分析详尽资料
这个PPT非常详细的讲解了linux的命令行,我相信读者在读完这个PPT后会更加清晰的理解linux的命令行系统
Linux 中的文件分为 Hard Link 和 Symbolic Link 两种。Hard Link 文件又被称为硬链接文件、实体...要读取该文件的内容,需要通过文件所在的目录中记录的文件名找到文件的 inode 号,然后通过 inode 找到存储文件内容的
文件系统结构详解,文件系统组成以及存储原理,以及linux中操作磁盘的一些常用命令
linux文件系统 系统管理员很重要的任务之一就是管理好自己的磁盘文件系统,...这就得要谈到 filesystem 中的 inode 与 block 了。 本资源是linux文件系统资源的合集,内容详细,通俗易懂,有需要的朋友可以下载学习。
《手把手教Linux驱动4-进程、文件描述符、file、inode关系详解》 《 手把手教Linux驱动3-之字符设备架构详解,有这篇就够了 》 《手把手教Linux驱动2-模块参数param和符号导出export用法》 《手把手教Linux驱动1-...
Ext2文件系统详细介绍,包括superblock,inode,group descriptor等详细内容
从操作系统的角度详解Linux文件系统层次、文件系统分类、文件系统的存储结构、不同存储介质的区别(RAM、ROM、Flash)、存储节点inode。 在LINUX系统中有一个重要的概念:一切都是文件。其实这是UNIX哲学的一个体现,...
linux文件里的【inode = index node】解释:要理解inode必须了解磁盘和【目录项】,inode实际是连接【目录项】和磁盘的中间物质。 图里的大圈代表硬件的磁盘,里面的小圈代表某个文件存储在磁盘上了。 【inode = ...
Linux mke2fs命令 Linux mke2fs命令用于建立ext2文件系统。...-i 指定”字节/inode”的比例。 -N 指定要建立的inode数目。 -l 从指定的文件中,读取文件西中损坏区块的信息。 -L 设置文件系统的标签名称。 -m
入门学习Linux常用必会60个命令实例详解 Linux必学的60个命令 Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。所以,在Linux系统上工作离不...
一、简介 Linux的文件能否找到文件的创建时间取决于文件系统类型,在ext4之前的早期文件系统中(ext、ext2、ext3),文件的元数据不会...Device: 807h/2055d Inode: 5255117 Links: 1 Access: (0755/-rwxr-xr-x) Uid
Linux mkfs.minix命令 Linux mkfs.minix命令用于建立Minix文件系统。...-i 指定文件系统的inode总数。 -l 从指定的文件中,读取文件系统中损坏区块的信息。 -n 指定文件名称长度的上限。 -v 建立第2版的Minix文件系统。
Linux命令如何修改文件的三个时间 ...Device: 801h/2049d 文件所在的设备名 Inode: 378 文件索引节点号 Links: 4 被硬链接的次数 Access: (0775/drwxrwxr-x) 文件的用户权限 Uid: ( 1000/houh
Python实现文件的全备份和差异备份 之前有写利用md5方式来做...ctime(Create time)是在写入文件、更改所有者、权限或链接设置时随Inode的内容更改而更改的 废话不多说直接上代码: #!/usr/bin/env python import
在最近的帖子中,我们看了 如何识别并定位硬链接的文件 (即,指向同一硬盘内容并共享 inode)。在本文中,我们将查看能找到具有相同 内容 ,却不相链接的文件的命令。 硬链接很有用是因为它们能够使文件存放在文件...