还记得我们的文件系统由所有实际文件和一个管理它们的数据库组成吗?这个数据库被称为 inode 表,是inode in linux工作原理的基础部分。
什么是 Linux Inode
Inode(索引节点,index node 的缩写)是该表中的一个条目。每个文件和目录都有自己的inode。它描述了关于文件的所有信息,例如:
- 文件类型(例如,常规文件、目录、字符设备)
- 所有者
- 组
- 访问权限
- 时间戳:mtime(最后修改时间)、ctime(最后属性更改时间)、atime(最后访问时间)
- 对该文件的硬链接数
- 文件大小
- 分配给该文件的块数
- 指向文件数据块的指针(最重要!)
本质上,一个i node存储了关于文件的所有元数据,除了其名称和实际内容。
Inode 的创建和分配
创建文件系统时,也会分配 inode 的空间。算法会根据磁盘的容量和其他因素确定您需要的inode空间量。您可能以前见过“磁盘空间不足”的错误。inode 也可能发生这种情况,尽管不太常见。如果 inode 用尽,您将无法创建新文件。数据存储同时依赖于数据块和数据库(inode表)。
要查看系统上还剩多少 inode,请使用df -i命令。对于管理大量小文件的系统管理员来说,这是一个至关重要的检查。
查看 Inode 信息
每个linux inode都由一个唯一的数字标识。创建文件时,会为其分配一个 inode 编号,通常是连续的。但是,您可能会注意到一个新文件获得了比旧文件更小的 inode 编号。这是因为被删除的 inode 编号可以被新文件重用。要查看 inode 编号,请运行ls -li:
pete@icebox:~$ ls -li
140 drwxr-xr-x 2 pete pete 6 Jan 20 20:13 Desktop
141 drwxr-xr-x 2 pete pete 6 Jan 20 20:01 Documents
该命令输出中的第一个字段就是 inode 编号。您还可以使用stat命令查看文件i node的详细信息:
pete@icebox:~$ stat ~/Desktop/
File: ‘/home/pete/Desktop/’
Size: 6 Blocks: 0 IO Block: 4096 directory
Device: 806h/2054d Inode: 140 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 1000/ pete) Gid: ( 1000/ pete)
Access: 2016-01-20 20:13:50.647435982 -0800
Modify: 2016-01-20 20:13:06.191675843 -0800
Change: 2016-01-20 20:13:06.191675843 -0800
Birth: -
I-Node 如何指向数据
我们知道数据存储在磁盘上,但它可能不是在一个连续的块中。这就是inode linux结构变得至关重要的地方。Inode 指向文件的实际数据块。在典型文件系统中(尽管实现各不相同),每个 inode 包含 15 个指针。前 12 个指针直接指向数据块。第 13 个指针指向一个包含更多指针的块。第 14 和第 15 个指针指向更深层次的指针块。这可能看起来很复杂,但这种结构允许i node保持固定大小,同时能够引用不同大小的文件。小文件可以使用直接指针快速访问,而大文件则通过嵌套指针定位。