精华内容
下载资源
问答
  • inode和dentry

    2017-02-27 11:23:00
    根据路径即可找到当前需要读取的下一级文件的名字和inode,同时继续为该文件建立dentrydentry结构是一种含有指向父节点子节点指针的双向结构,多个这样的双向结构构成一个内存里面的树状结构,也就是文件系统的...

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

     

    VFS在Linux系统中的结构为:

    vfs_relations_static

    在教科书上面,一般是这样描述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,使用引用计数来管理硬连接。

    转载于:https://my.oschina.net/sukai/blog/846917

    展开全文
  • Linux文件系统基础之inode和dentry

    千次阅读 2016-08-10 09:41:28
    Linux文件系统基础之inode和dentry inode(节点)和dentry(目录项)在VFS实体的文件系统(ext2、ext3等)中都是比较重要的概念。首先看一下虚拟文件系统的标准定义:虚拟文件系统(英语:virtual file system,缩写为...

    Linux文件系统基础之inode和dentry

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

    VFS在Linux系统中的结构为:

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

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

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

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

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

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

    展开全文
  • >>转载请注明来源:飘零的代码 piao2010 ’s ...本文链接地址:Linux cp mv rm ln 命令对于 inode dentry 的影响 在看《unix环境高级编程》文件系统一节的时候,发现自己对文件系统相关的概念不是很清...

                             >>转载请注明来源:飘零的代码 piao2010 ’s blog,谢谢!^_^
    >>本文链接地址:Linux cp mv rm ln 命令对于 inode 和 dentry 的影响

    在看《unix环境高级编程》文件系统一节的时候,发现自己对文件系统相关的概念不是很清晰。
    首先介绍两个基本概念:
    第一个重要概念 inode (中文名:索引节点),包含文件的大部分信息:
      * 文件的字节数
      * 文件拥有者的User ID
      * 文件的Group ID
      * 文件的读、写、执行权限
      * 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
      * 链接数,即有多少目录项指向这个inode
      * 文件数据block的位置

    通过stat命令可以很方便地查看文件inode。

    第二个重要概念 dentry (中文名:目录项),它包含文件名和指向inode的指针等信息,也就是说通过dentry可以找到对应的inode,再通过inode找到文件存储的block位置

    如果要更加深入学习文件系统,可以参考这篇文章

    接下来步入正题:分析 Linux cp mv rm ln 命令对于 inode 和 dentry 的影响。
    实验方法也很简单,只要有一台linux主机就行,分别用cp mv rm ln 命令对文件操作,然后利用 ls -il 查看文件inode号,stat查看inode信息。

    我直接给出测试结论:

    cp命令:
    1)分配一个未使用的inode号,在inode 表中添加一个新项目;(注意:如果是cp到一个已经存在的文件,则inode号采用被覆盖之前的目标文件的inode号,如果你对运行中的apache 共享模块so文件进行这种操作,就会出现Segmentation fault
    2)在目录中新建一个目录项,并指向步骤1)中的inode;
    3)把数据复制到block中。

    mv命令:
    a. 如果mv命令的目标和源文件所在的文件系统相同:
    1)使用新文件名建立目录项;
    2)删除带有原来文件名的目录项;
    备注:该操作对inode表没有影响(除时间戳),对数据的位置也没有影响,不移动任何数据。(即使是mv到一个已经存在的目标文件,新目录项指源文件inode,会先删除目标文件的目录项,所以如果你对运行中的apache的共享模块so文件进行这种操作的话不会有问题,新的so文件inode号变了

    b. 如果目标和源文件所在文件系统不相同,就是cp和rm;

    rm命令:
    1)减少链接数量,如果链接数为0释放inode(inode号码可以被重新使用);
    2)如果inode被释放,则数据块放到可用空间列表中;
    3)删除目录中的目录项

    ln命令:
    a. 硬链接 ln 文件名 链接名
    多个目录项指向同一个inode号;
    用rm来删除硬链接文件:
    1)仅仅是减少链接数量;
    2)只要有一个链接存在文件就存在;
    3)当链接数为零,文件就被删除了。

    b. 软链接(符号链接) ln -s 文件名 链接名
    符号链接的内容就是它所指向的文件名;
    符号链接文件有自己的inode;
    rm删除的话只是删除这个链接文件。

    参考资料:
    http://blog.csdn.net/rstevens/article/details/1824785
    http://iminmin.blog.51cto.com/689308/402660
    《unix环境高级编程》

    转载于:https://www.cnblogs.com/cnland/archive/2013/03/20/2970537.html

    展开全文
  • 首先介绍两个基本概念:第一个重要概念inode (中文名:索引节点),包含文件的大部分信息:* 文件的字节数* 文件拥有者的User ID* 文件的Group ID* 文件的读、写、执行权限* 文件的时间戳,共有三个:ctime指inode上...

    在看《unix环境高级编程》文件系统一节的时候,发现自己对文件系统相关的概念不是很清晰。

    首先介绍两个基本概念:

    第一个重要概念inode (中文名:索引节点),包含文件的大部分信息:

    * 文件的字节数

    * 文件拥有者的User ID

    * 文件的Group ID

    * 文件的读、写、执行权限

    * 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。

    * 链接数,即有多少目录项指向这个inode

    * 文件数据block的位置

    通过stat命令可以很方便地查看文件inode。

    第二个重要概念dentry (中文名:目录项),它包含文件名和指向inode的指针等信息,也就是说通过dentry可以找到对应的inode,再通过inode找到文件存储的block位置。

    如果要更加深入学习文件系统,可以参考这篇文章

    接下来步入正题:分析 Linux cp mv rm ln 命令对于 inode 和 dentry 的影响。

    实验方法也很简单,只要有一台linux主机就行,分别用cp mv rm ln 命令对文件操作,然后利用 ls -il 查看文件inode号,stat查看inode信息。

    我直接给出测试结论:

    cp命令:

    1)分配一个未使用的inode号,在inode 表中添加一个新项目;(注意:如果是cp到一个已经存在的文件,则inode号采用被覆盖之前的目标文件的inode号,如果你对运行中的apache 共享模块so文件进行这种操作,就会出现Segmentation fault)

    2)在目录中新建一个目录项,并指向步骤1)中的inode;

    3)把数据复制到block中。

    mv命令:

    a. 如果mv命令的目标和源文件所在的文件系统相同:

    1)使用新文件名建立目录项;

    2)删除带有原来文件名的目录项;

    备注:该操作对inode表没有影响(除时间戳),对数据的位置也没有影响,不移动任何数据。(即使是mv到一个已经存在的目标文件,新目录项指源文件inode,会先删除目标文件的目录项,所以如果你对运行中的apache的共享模块so文件进行这种操作的话不会有问题,新的so文件inode号变了)

    b. 如果目标和源文件所在文件系统不相同,就是cp和rm;

    rm命令:

    1)减少链接数量,如果链接数为0释放inode(inode号码可以被重新使用);

    2)如果inode被释放,则数据块放到可用空间列表中;

    3)删除目录中的目录项

    ln命令:

    a. 硬链接 ln 文件名 链接名

    多个目录项指向同一个inode号;

    用rm来删除硬链接文件:

    1)仅仅是减少链接数量;

    2)只要有一个链接存在文件就存在;

    3)当链接数为零,文件就被删除了。

    b. 软链接(符号链接) ln -s 文件名 链接名

    符号链接的内容就是它所指向的文件名;

    符号链接文件有自己的inode;

    rm删除的话只是删除这个链接文件。

    参考资料:

    http://blog.csdn.net/rstevens/article/details/1824785

    http://iminmin.blog.51cto.com/689308/402660

    《unix环境高级编程》

    来源:https://www.cnblogs.com/cnland/archive/2013/03/20/2970537.html

    展开全文
  • http://www.ruanyifeng.com/blog/2011/12/inode.html http://teaching.idallen.com/dat2330/04f/notes/links_and_inodes.html http://www.thegeekstuff.com/2012/01/linux-inodes/ http://blog...
  • Linux文件系统之inodedentry

    千次阅读 2017-04-06 15:20:59
    linux文件系统中重要的两个数据结构: inodedentry
  • struct inode struct dentry struct file
  • Linux 文件系统的 Superblock, Inode, Dentry File 分类: linux基础知识 2014-06-30 16:13 133人阅读 评论(0) 收藏 举报 目录(?)[+] 参考文档:...
  • Linux文件系统中的superblock、inodedentry、file
  •  dentry的中文名称是目录项,是Linux文件系统中某个索引节点(inode)的链接。这个索引节点可以是文件,也可以是目录。  二、dentry的结构:以下是dentry的结构体  struct dentry {  atomic_t d_count; 目录项...
  • SDcardFS文件系统浅析(二) - inodedentry、super_block 在开始之前,首先得理解文件系统中inodedentry、super_block的含义,下面简单介绍下这三个结构的作用,但不做代码层面分析,有个大概认知即可,如果详细...
  • superblock、dentryinode、file之间的关系
  • http://daoluan.net/blog/inode-vnode-dentry/ 传统的Unix既有v节点(vnode)也有i节点(inode),vnode的数据结构中包含了inode信息。但在Linux中没有使用vnode,而使用了通用inode。“实现虽不同,但在概念上是...
  • unix为了支持多种文件系统,包括DOS FAT、Windows NTFS、UNIX EXT2、EXT3等文件系统格式,采用了面向对象的实现了VFS虚拟文件系统,屏蔽了下层硬件文件系统的差异,向上提供了统一的访问接口。 vfs使用一组struct...
  • 管理VFS数据结构的组成部分主要包括超级块和inode。 VFS是物理文件系统与服务之间的一个接口层,它对Linux的每个文件系统的所有细节进行抽象,使得不同的文件系统在Linux核心以及系统中运行的进...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,751
精华内容 5,500
关键字:

inode和dentry