- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ext3、ext4 orphan inode机制分析
ext3、ext4 的 orphan inode 机制分析 一、概述 orphan 在英文中是孤儿的意思,在这里取被遗弃、被删除之意。 orphan inode 是什么样的 inode 呢?这种 inode 是怎样产生的呢? 先介绍一个概念,文件的引用计数,准确地说应该是 inode 的引用计数,因为一般来说一个文件会对应 一个 inode。文件的引用计数,简单地说是表示有多少个文件指向该文件,准确地说是文件的硬链接的个 数。 情况 1:设想一个进程,open 一个文件,然后 unlink 该文件,然后进行文件读写。这是允许的,并且在 进程退出时,内核会自动将引用计数为 0 的文件删除。 但是如果该进程尚未退出之前,系统崩溃了,那么,内核就没有机会将已被 unlink、并且引用计数为 0 的 inode 从磁盘上删除了。 情况 2 :设想我们正在截断一个大文件(系统调用truncate ),但是操作尚未完成,系统就崩溃了。同样, 内核也没有办法将该文件的所有数据块全部删除了。 ext3、ext4 的 orphan inode 机制就是处理上述两种情况的。基本思想是这样的:如果要删除或截断一个 inode ,要先把这个inode 记录到磁盘上的一个特殊的 orphan inode 链表上。如果删除或截断操作能够 正常完成,那么,就从磁盘上的 orphan inode 链表上删除该 inode ;否则,如果删除或截断操作未完成 之前,系统就发生崩溃了,那么,系统重启后,文件系统会遍历磁盘上的 orphan inode 链表,对链表上 的每一个 inode 都重新进行一遍删除或截断操作,以此来保证这些 inode 真正在磁盘上被删除,维护文 件系统的一致性。 内核版本:2.6.35 二、相关数据结构及之间的关系 先总体说一下 orphan inode 的组织。 orphan inode 需要在两个地方组织,分别是在内存中和在磁盘上。不论在哪里,从抽象角度来看, orphan inode 都被组织成一个单向链表。 1、ext4_inode struct ext4_inode { __le32 i_dtime; /* Deletion Time */ } 这个是磁盘上的 inode 的结构,i_dtime 本来表示该 inode 被删除的时间,在 orphan inode 机制中,因 为此时该域的值并不重要,故借用一下,用于记录下一个被 unlink/truncate 的 inode 号。 2、ext4_super_block struct ext4_super_block { __le32 s_last_orphan; /* start of list of inodes to delete */ } 这个是磁盘上的 superblock 结构。其中,s_last_orphan 记录的是最近一个被 unlink/truncate 的 inode 号,从抽象角度来看,它就代表磁盘上 orphan inode 单链表的头。 新的 inode 插入 orphan inode 链表时采用“头插法”,也就是说,最近被 unlink/truncate 的 inode 号 会放在 s_last_orphan 中。 这样,磁盘上的 orphan inode 单链表如下图 1 所示。 ext4_super_block{ ext4_inode{ ext4_inode{ ext4_inode{ s_last_orphan i_dtime i_dtime i_dtime=0 } } } } 链表头 第二个 inode 第三个 inode 最后一个 inode 图 1 磁盘上的 orphan inode 链表结构图 3、ext4_inode_info struct ext4_inode_info { _
有哪些信誉好的足球投注网站
文档评论(0)