首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何通过inode找到对应dentry

通过dentry找inode众人皆知,但是如何通过inode找dentry? 答案先行:inode里有一个成员叫i_dentry,一般情况可以通过这个来找到。...通过从栈上找参数,我们找到了inode的地址是:ffff915e6effb130 然后看看i_dentry: crash> inode.i_dentry ffff915e6effb130 i_dentry...= { first = 0xffff91617f8e9bf0 } dentry中的d_alias对应的就是上面的成员,他的偏移量在0xb0,因此对应dentry的地址就是0xffff91617f8e9bf0...- 0xb0是ffff91617f8e9b40,我们来看看: crash> dentry ffff91617f8e9b40 struct dentry { d_flags = 67108992,...最后补充说明一下,可以看到d_alias是一个hlist,因为inode可以对应很多dentry(硬链接),所以要找到所有对应的dentry就要用list找了,那就是另一个故事了。

2.3K40
您找到你想要的搜索结果了吗?
是的
没有找到

VFS四大对象之三 struct dentry

继上一篇文章介绍了inode结构体:继续介绍目录项dentry: https://cloud.tencent.com/developer/article/1053852 三、dentry结构体 目录项:...对dentry进行管理,dentry_hashtable是由list_head组成的链表,一个dentry创建之后,就通过 d_hash链接进入对应的hash值的链表中。...inode关联,但是一个inode可以对应多个dentry,因为一个文件可以被链接到其他文件,所以,这个dentry就是通过这个字段链接到属于自己的inode结构中的i_dentry链表中的。...注意只要操作成功这个dentry就是有效的,否则无效。...所以,只要dentry结构是有效的,则其指针d_inode必定指向一个inode结构。但是inode却可以对应多个 dentry,上面已经说过两次了。 注意:整个结构其实就是一棵树。

2.8K60

虚拟文件系统

Linux系统中,可以使用多种文件系统来挂载不同的设备,如 ext2、ext3、nfs等等。...那么Linux是如何做到的呢?这就得益于 虚拟文件系统(Virtual File System,简称 VFS)。...虚拟文件系统抽象数据结构 Linux奉行了Unix的理念:一切皆文件,比如一个目录是一个文件,一个设备也是一个文件等,因而文件系统在Linux中占有非常重要的地位。...注册文件系统 Linux为了支持不同的文件系统而创造了虚拟文件系统,虚拟文件系统更像一个规范(或者说接口),真实的文件系统需要实现虚拟文件系统的规范(接口)才能接入到Linux内核中。...当安装Linux系统时,需要把磁盘格式化为指定的文件系统,其实格式化就是把文件系统超级块信息写入到磁盘中。

1.5K30

300来行代码带你实现一个能跑的最小Linux文件系统

几乎所有的关于Linux文件系统实现的资源都在用不同的语言解释上面的这些问题,这很容易陷入细节的泥潭。 本文以Linux内核为例,用一种稍微不同的方式去描述文件系统的实现。...嗯,我会分3个部分来介绍Linux内核的文件系统: Linux文件系统在不同视角下的样子 实现一个很小但能跑的文件系统 接下来要做什么 本文中,我会通过一个实实在在的文件系统实现的例子,试图阐述 实现一个文件系统...下面是代码: // tinyfs.c #include #include #include #include <...inode *dir, struct dentry *dentry, umode_t mode, bool excl) { return tinyfs_do_create(dir, dentry...inode *dir, struct dentry *dentry) { int i; struct inode *inode = dentry->d_inode; struct

4.5K10

​聊聊内核虚拟文件系统

linux会实现多种基于磁盘的文件系统,比如ext4/xfs等,为了支持不同的磁盘文件系统,且多个磁盘文件系统互相访问,Linux内核在用户进程和磁盘文件系统系统之间引入一个臭小抽象层,这个就是虚拟文件系统...目录的inode存储的内容是目录项(dentry=inode + 文件或者目录名称)的列表. dentry有什么作用?...dentry也也叫做目录项,用来建立文件名和inode之间的关联每个dentry实例形成网络层次关系,与文件系统的结构形成一定的映射关系。...我们执行文件查找命令时候,内核是通过vfs层的detnry来进行查找,同时内核提供dentry cache(d_cache)来缓存dentry,采用LRU策略来管理缓存,设置dcache(dentry...cache)目录是为了加速查找inode.在vfs中dentry定义如下: struct dentry { /* RCU lookup touched fields */ unsigned int

72610

VFS- 内核是如何抽象文件系统的

Linux 当中文件系统千奇百种,比较常见的有 EXT3、EXT4,还有基于内存的 ramfs、tmpfs 和基于网络的 nfs,和基于用户态的 fuse,当然 fuse 应该不能完全的文件系统,只能算是一个能把文件系统实现放到用户态的模块...这个 wiki 上列出了很多 Linux 的文件系统类型。...对于这些文件系统,Linux 做了一层抽象就是 VFS 虚拟文件系统,这个其实就是软件设计必然的过程,对于不同的实现规定统一的接口,也就是定义与实现分离,如果想要自己实现一个文件系统的话只要实现一个满足...dentry 代表的是目录结构中的一个文件,而文件其实就是没有子目录的文件。dentry 链接到了超级快和父 dentry 和子 dentry 以及对应的 inode。...dentry 和 inode 的关系是多对一的,即多个 dentry 可以指向同一个文件,这和 linux 当中的文件链接有关。

1.7K30

内存回收导致关键业务抖动案例分析-论云原生OS内存QoS保障

蒋彪,腾讯云高级工程师,10+年专注于操作系统相关技术,Linux内核资深发烧友。目前负责腾讯云原生OS的研发,以及OS/虚拟化的性能优化工作。...导语 云原生场景,相比于传统的 IDC 场景,业务更加复杂多样,而原生 Linux kernel 在面对云原生的各种复杂场景时,时常显得有些力不从心。...本文基于腾讯云原生场景中的实际案例,展现针对类似问题的一些排查思路,并希望借此透视 Linux kernel 的相关底层逻辑以及可能的优化方向。...       list_add(&dentry->d_lru, &dentry->d_sb->s_dentry_lru);        dentry->d_sb->s_nr_dentry_unused...cache 无限制 Linux 倾向于尽可能将空闲内存利用起来,用作 cache(主要是page cache和slab),用于提升性能(主要是文件访问)。

1.8K31

浅谈文件系统中的核心数据结构

linux中文件系统还有几种核心数据结构分别是super_block、inode、dentry、file.super_block是磁盘文件系统(xfs/ext4)的内存呈现,inode是linux中文件唯一呈现...dentry是文件本身的代表,存储了文件的名称和inode.file是文件被打开的状态,每个进程执行文件的系统调用都会实例化file。每一数据结构都会有一些列的函数表定义和私有数据。...函数操作定义 const struct dentry_operations *s_d_op; // dentry的指针,指向根节点的root struct dentry *s_root; //...简单描述 // 文件系统的目录树是采用组织dentry来呈现 struct dentry { // 指向父目录的dentry struct dentry *d_parent; // 保存了文件名字和哈希值...的操作函数,每个文件系统都针对d_op进行初始化 const struct dentry_operations *d_op; // dentry私有数据 void *d_fsdata; /

80020

Linux删除文件过程解析

概述 ---- 当我们执行rm命令删除一个文件的时候,在操作系统底层究竟会发生些什么事情呢,带着这个疑问,我们在Linux-3.10.104内核下对ext4文件系统下的rm操作进行分析。...源码分析 ---- rm命令是GNU coreutils里的一个命令,在对一个文件进行删除时,它实际上调用了Linux的unlink系统调用,unlink系统调用在内核中的定义如下: SYSCALL_DEFINE1...dentry); exit2: dput(dentry); } mutex_unlock(&nd.path.dentry->d_inode->i_mutex);...以及目录项缓存dcache这几个重要概念,更具体的内容可参考Linux内核分析的相关书籍,如Robert Love的《Linux内核设计与实现》一书。...参考文献 [1] https://www.ibm.com/developerworks/cn/linux/l-cn-usagecounter/ [2] https://digital-forensics.sans.org

14.1K22

通俗易懂!快速了解虚拟文件系统(VFS)

前言 为什么 Linux 内核的文件系统类型那么多,都能挂载上呢?为什么系统里可以直接 mount 其他文件系统呢?...甚至能把 windows 下的文件夹挂载到 windows 上,为什么 Linux 的虚拟文件系统这么强大?这得益于它的数据结构设计得十分精妙。好像听过,Linux 有什么解决不了的?加一层。...因此,Linux 有一句经典的话:一切皆文件。 关键数据结构介绍 Linux VFS 抽象出 4 种类型的数据结构,实现将不同类型的文件系统挂载到目录结构中。...) 存放 dentry 与对应文件链接的有关信息,每个 dentry 代表路径中的一个特定部分,每个磁盘类文件系统以自己的方式将目录项信息存放在磁盘上。...d_seq; /* per dentry seqlock */ struct hlist_bl_node d_hash; /* lookup hash list */ struct dentry

1.9K20

深度剖析 Linux 的 3 种“拷贝”命令

Linux 下有 3 种“拷贝”,分别是 ln,cp,mv,这 3 个命令貌似都能 copy 出一个新的文件出来。 细心的小伙伴看到我给 “拷贝” 打上了双引号?...在揭秘这 3 个命令之前,我们必须先复习文件的基础知识点,Linux 的文件和目录的关系。 ? Linux 的文件和目录 ?...在 深度剖析 Linux cp 的秘密 一文中,我们详细剖析了文件系统的形态。...问题来了:Linux 的目录是一个倒挂的树形结构呀,为什么上面说 inode 是平坦的结构?如下: ? Linux 的文件确实是树形结构,inode 也确实是平坦的结构。...以下是笔者从内核精简出来的 dentry 结构体,通过这个总结到几个信息: dentry 绑定到唯一一个 inode 结构体; dentry 有父,子,兄弟的索引路径,有这个就足够在内存中构建一个树了,

1.9K20
领券