深入解析Linux inode
深入解析Linux inode
一、inode是什么?
inode(index node)是Linux/Unix文件系统中用于存储文件元数据(metadata)的数据结构,每个文件或目录都有一个唯一的inode。你可以把它想象成文件的”身份证”。
二、inode包含哪些信息?
每个inode存储以下关键信息(但不包含文件名):
文件类型(普通文件、目录、符号链接等)
文件权限(rwx权限)
文件所有者(UID/GID)
文件大小
时间戳(创建、修改、访问时间)
指向文件数据块的指针(文件内容实际存储位置)
链接计数(有多少文件名指向此inode)
三、inode与文件名的关系
文件名只是inode的一个”别名”或”标签”
多个文件名可以指向同一个inode(这就是硬链接的原理)
系统通过目录项(directory entry)将文件名映射到inode
四、如何查看inode?
使用ls -i
命令:
1 | ls -i 文件名 |
示例输出:
1 | ls -i secure-ip.txt |
这里的33582157
就是file.txt的inode号。
五、硬链接与inode的关系
当创建硬链接时:
- 系统不会创建新的inode
- 只是在目录中新增一个条目,指向相同的inode
- inode的”链接计数”值会增加1
例如:
1 | # 创建源文件 |
输出会显示两个文件名有相同的inode号。
六、为什么硬链接不能跨分区?
因为:
不同文件系统(分区)有各自独立的inode编号体系
一个分区的inode号在另一个分区可能指向完全不同的文件
硬链接依赖于相同的inode号,所以不能跨分区
七、inode的其他重要特性
唯一性:在同一文件系统内,每个inode号是唯一的
持久性:即使移动文件(在同分区内),inode号保持不变
有限资源:文件系统创建时会分配固定数量的inode,用尽后即使有磁盘空间也无法创建新文件
八、实际应用场景
1. 查找大文件:通过inode查找被删除但仍被进程占用的文件
1 | lsof | grep deleted |
其中:
1992
是保持文件打开的进程ID3r
表示文件描述符253,0
是设备号(标识文件所在的磁盘分区)。33625066
是该文件的 inode 编号。(deleted)
表示文件已被删除,但 inode 仍被进程占用。
2. 解决”磁盘未满但无法创建文件”问题:
1 | df -i # 查看inode使用情况 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 RHCloudOps博客!
评论