Linux 文件存储结构原理:从 dentry 到 inode 再到硬链接
在 Linux 系统中,文件存储的结构是一个层次化的体系,涉及到多个关键概念,包括 dentry(目录项)、inode(索引节点)以及硬链接。理解这些概念的工作原理,对于深入理解 Linux 文件系统的行为和性能至关重要。
1. Dentry(目录项):文件系统中的'路标'
Dentry 是 Linux 文件系统中的一个关键概念,它代表目录项(directory entry),用于描述文件或目录在文件系统中的位置。你可以把它看作是文件系统中的'路标',帮助操作系统快速定位文件或目录。
Dentry 的作用
- 文件名到 inode 的映射:Dentry 将文件名映射到对应的 inode,从而实现了文件名到文件内容的快速访问。
- 缓存目录结构:Dentry 缓存了目录的结构,避免频繁访问磁盘,从而提高了文件系统的性能。
Dentry 的结构
一个 Dentry 对象通常包含以下信息:
- 文件名:文件或目录的名称。
- 指向 inode 的指针:Dentry 通过指针指向对应的 inode,从而关联到文件的实际数据。
- 父目录的指针:Dentry 还包含指向父目录的指针,从而构建目录的层次结构。
Linux 源码中的 dentry 定义
在 Linux 内核中,dentry 结构体定义在 <linux/dcache.h> 文件中。它表示目录项,用于缓存文件和目录的名称到 inode 的映射。
struct dentry {
atomic_t d_count; // 引用计数
unsigned int d_flags; // 标志位
struct inode *d_inode; // 指向对应的 inode
struct dentry *d_parent; // 指向父目录的 dentry
struct qstr d_name; // 文件名
// 其他字段...
};
解释
d_count:引用计数,表示该 dentry 被引用的次数。d_flags:标志位,表示 dentry 的状态,如是否被锁定等。d_inode:指向对应的 inode,用于快速访问文件的数据。d_parent:指向父目录的 dentry,用于构建目录的层次结构。


