什么是 inode?
在 Linux 和 Unix 类操作系统中,inode(index node,索引节点)是文件系统用来存储文件元数据的数据结构。 每个文件(包括目录)都有一个唯一的 inode 编号,它记录了文件的权限、所有者、大小、时间戳等信息,但不包含文件名和实际数据内容。
inode 包含哪些信息?
- 文件类型(普通文件、目录、设备等)
- 文件权限(读、写、执行)
- 文件所有者(User ID 和 Group ID)
- 文件大小(以字节为单位)
- 时间戳(创建时间、修改时间、访问时间)
- 指向数据块的指针(用于定位文件内容在磁盘上的位置)
- 链接计数(有多少个文件名指向这个 inode)
注意:文件名并不存储在 inode 中,而是存储在目录文件的内容里,目录本质上是一个“文件名 → inode 号”的映射表。
如何查看 inode 信息?
在终端中,可以使用以下命令:
# 查看文件的 inode 号
ls -i filename
# 查看文件系统的 inode 使用情况
df -i
# 查看 inode 详细信息
stat filename
小知识:即使删除了文件名(硬链接),只要还有其他硬链接指向同一个 inode,文件数据就不会被释放。
为什么 inode 很重要?
inode 是文件系统高效管理文件的关键。通过将元数据与文件名分离,系统可以:
- 快速查找和访问文件内容
- 支持硬链接(多个文件名指向同一份数据)
- 避免文件名重复带来的冲突
- 更高效地进行磁盘空间和权限管理
常见问题
Q:inode 会用完吗?
A:会!每个文件系统在格式化时就分配了固定数量的 inode。如果创建了大量小文件,可能 inode 用尽而磁盘空间仍有剩余,导致无法创建新文件。
Q:如何解决 “No space left on device” 但磁盘还有空间?
A:很可能是 inode 耗尽。使用 df -i 检查 inode 使用率。