inode和dentry在VFS和实体的文件系统(ext2、ext3等)中都是比较重要的概念。首先看一下虚拟文件系统的标准定义:虚拟文件系统(英语:Virtual file system,缩写为VFS),又称虚拟文件切换系统(virtual filesystem switch),是操作系统的文件系统虚拟层,在其下是实体的文件系统。虚拟文件系统的主要功用,在于让上层的软件,能够用单一的方式,来跟底层不同的文件系统沟通。在操作系统与之下的各种文件系统之间,虚拟文件系统提供了标准的操作接口,让操作系统能够很快的支持新的文件系统。

VFS在Linux系统中的结构为:

在教科书上面,一般是这样描述inode的:inode是内核文件对象的元数据。inode中不包括文件的数据和文件名字信息。inode中只包含数据块的位置信息,数据结构相对稳定,其中没有数据和文件名等变长数据,可以固定其大小,进而可以实现将整个文件系统中的inode按照一定的组织方式来集中存储在硬盘起始的一个,文件系统加载时,可以方便查找即可。

inode仅仅只是保存了文件对象的属性信息,包括:权限、属组、数据块的位置、时间戳等信息。但是并没有包含文件名,文件在文件系统的目录树中所处的位置信息。那么内核又是怎么管理文件系统的目录树呢?

目录项在内核中起到了连接不同的文件对象inode的作用,进而起到了维护文件系统目录树的作用。dentry是一个纯粹的内存结构,由文件系统在提供文件访问的过程中在内存中直接建立。dentry中包含了文件名,文件的inode号等信息。

对于POSIX标准定义了文件系统的inode。VFS接口即是符合POSX标准的,实体文件系统只要能对接上VFS,即可符合POSIX标准。因此,一般而言我们研究VFS文件系统即可了解大部分文件系统的结构。而在VFS中,定义了规范化的inode结构和dentry。

在读取一个文件时,总是从根目录开始读取,每一个目录或者文件,在VFS中,都是一个文件对象,每一个文件对象都有唯一的一个inode与之对应。根目录的inode号为0,在superblock里,可以很快根据inode号索引到具体的inode,因此读取到的第一个inode就是根目录的。读取到了该目录后,内核对象会为该文件对象建立一个dentry,并将其缓存起来,方便下一次读取时直接从内存中取。而目录本身也是一个文件,目录文件的内容即是该目录下的文件的名字与inode号,目录文件的内容就像一张表,记录的文件名与其inode no.之间的映射关系。根据路径即可找到当前需要读取的下一级文件的名字和inode,同时继续为该文件建立dentry,dentry结构是一种含有指向父节点和子节点指针的双向结构,多个这样的双向结构构成一个内存里面的树状结构,也就是文件系统的目录结构在内存中的缓存了。有了这个缓存,我们在访问文件系统时,通常都非常快捷。

有了inode和dentry,也就非常容易理解文件的连接了。我们知道软连接,是一个特殊的文件,该文件通过内容指向目标文件。因此软连接有自己的inode,有自己的内容。其内容记录的是目标文件的inode号和自身的名字。软连接是一种特殊的文件。而硬链接则不一样,硬链接是文件的别名,硬链接不是一个完整的文件对象,硬链接只是将自己的名字写在上级目录的内容(文件名与inode no.的映射表)中。而其inode号即是目标文件的inode。这样硬连接与目标文件一起共用一个inode,使用引用计数来管理硬连接。

Linux文件系统基础之inode和dentry相关推荐

  1. linux文件系统基础--VFS中的file、dentry和inode--讲得非常透的一篇文章

    毕业以来,我花了很多时间阅读内核的代码,深入Linux内核架构,深入理解Linux内核,Robert Love的Linux内核设计与实现,Linux的虚拟文件系统对应章节,也读了很多遍,每一次读,都有 ...

  2. 文件系统调用和Linux文件系统基础

    文件系统调用和Linux文件系统基础 keywords fdisk.LBA.CHS.MBR.super struct.directory.file.inode.inode table.block.fi ...

  3. Linux文件系统中的inode节点详细介绍

    一.inode是什么? 理解inode,要从文件储存说起. 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector).每个扇区储存512字节(相当于0.5KB). 操作系统 ...

  4. Linux文件系统基础

    Linux文件系统基础 文件系统概述 Linux文件系统的特点 Linux文件系统的组成 Linux文件系统类型 EXT文件系统 其他文件系统 文件和目录的基本概念 文件 目录 路径 文件系统概述 操 ...

  5. linux文件系统基础知识

    这两天看了一本fedora 6的实践教程,下面是有关linux文件系统知识的学习笔记: 1.linux文件系统分配策略:     块分配( block allocation ) 和 扩展分配  ( e ...

  6. unix/linux文件系统基础知识

    1.linux文件系统分配策略: 块分配( block allocation ) 和 扩展分配 ( extent allocation ) 块分配:磁盘上的文件块根据需要分配给文件,避免了存储空间的浪 ...

  7. 深入理解linux文件系统( 理解inode与block,理解硬链接软链接,掌握恢复误删文件及其分析方法,掌握用户日志及其查询命令 )

    文章目录 深入理解linux文件系统 前言 inode与block详解 inode和bolck概述 1:数据(block)块: 2:元信息 : inode(索引节点) inodu的内容 Linux系统 ...

  8. linux文件基础知识,linux文件系统基础知识

    利用直接指针.单级间接指针.二级间接指针.三级间接指针可保存的最大文件大小为: 1024*12+1024*256+1024*256*256+1024*256*256*256=16843020 KB,约 ...

  9. Linux 文件系统基础

    1.FHS的概念 FHS的全称Filesystem Hierarchy Standard(文件系统层次化标准),基本上所有的Linux版本的系统都采用这种文件组织方式.它的主要作用是定义了系统中每个目 ...

最新文章

  1. java命令行编译时提示找不到或无法加载主类的问题
  2. Java获取List泛型的真实类型
  3. React 点击按钮显示div与隐藏div
  4. oracle insert select 大 批量 数据_芬兰 Vaisala维萨拉 HM70手持式温湿度表 型号:FL15/HM70+HMP75【北京中西华大吧】...
  5. 解析offsetHeight,clientHeight,scrollHeight之间的区别
  6. SegNet安装、训练、测试
  7. 【缓存】缓存更新策略
  8. Time::HiRes, sleep(), time()
  9. GO函数内部程序执行顺序
  10. 苹果6s连上wifi上不了网络连接服务器未响应,6s连不上网了怎么解决
  11. GICv3软件overview手册之GICv3基本功能(1)
  12. 用Python提取CSDN灌水乐园的帖子
  13. 计算机编程术语(中英文对照)
  14. (Python)正则表达式(二)
  15. @Validated和@Valid使用
  16. python3 enumerate函数_python3 内置函数enumerate
  17. 微观经济学论文选题怎么选?
  18. 机器学习(十二):CS229ML课程笔记(8)——K-means,EM算法
  19. improve your Github overview page
  20. HTTP各版本号的区别

热门文章

  1. 听安全专家讲如何黑掉黑客的故事
  2. iOS-----Xcode-Debug尝试
  3. SqlBulkCopy与触发器,批量插入表(存在则更新,不存在则插入)
  4. Myeclipse8.5配置本地tomcat
  5. R3模擬器版本預覽一下。。暫時沒帶QQ....
  6. oracle表分区详解
  7. J2SE的30个基本概念
  8. corosync+pacemaker+crmsh的高可用web集群的实现
  9. NSURLConnection 实现webView显示HTTPS页面
  10. 数据库课本SQL第三章答案