CentOS 7文件系统之inode节点解析

一、inode与block概述

文件是存储在硬盘上的,硬盘的最小存储单位叫做“扇区”,每个扇区存储512 字节。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"。这种由多个扇区组成的"块",是文件 存取的最小单位。"块"的大小,最常见的是 4KB,即连续八个 sector 组成一个 block。文件数据存储在“块”中,那么还必须找到一个地方存储文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种存储文件元信息的区域就叫做inode,中文译名为“索引节点”,也叫 i 节点。因此一个文件必须占用一个inode,但至少占用一个block。
CentOS 7文件系统之inode节点解析

二、inode的内容

inode 包含很多的文件元信息
1.文件的字节数
2.文件拥有者的 User ID
3.文件的 Group ID
4.文件的读、写、执行权限
5.文件的时间戳
如图我们执行“stat aaa.txt”来查看该晚间的inode信息。
CentOS 7文件系统之inode节点解析
上图所示在Linux 系统文件有三个主要的时间属性,分别是ctime(change time)是最后一次改变文件或目录(属性)的时间; atime(access time)是最后一次访问文件或目录的时间;mtime(modify time)是最后一次修改文件或目录(内容)的时间。
然而在indoe中不包括文件的名称,文件名存放于目录中。目录也是一种文件,目录文件的结构如下图,每一行称为一个目录项。
CentOS 7文件系统之inode节点解析
每个 inode 都有一个号码,操作系统用 inode 号码来识别不同的文件,Linux 系统内部不使用文件名,而使用 inode 号码来识别文件。对于用户来说,文件名只是 inode 号码便于识别的别称。

三、indoe号码

用户在访问文件时,表面上是用户通过文件名来打开文件,而实际系统内部的过程分成以下三步:
(1)系统找到这个文件名对应的 inode 号码;
(2)通过 inode 号码,获取 inode 信息;
(3)根据 inode 信息,找到文件数据所在的 block,并读出数据。
常见的查看 inode 号码的方式有两种:
(1)ls -i 命令:直接查看文件名所对应的 inode 号码;
(2)stat 命令:通过查看文件 inode 信息而查看到inode 号码。
CentOS 7文件系统之inode节点解析
当用户在 Linux 系统中试图访问一个文件时,系统会先根据文件名去查找它对应的 inode,看该用户是否具有访问这个文件的权限。如果有权限就指向相对应的数据 block,如果没有权限就返回 Permission denied。
CentOS 7文件系统之inode节点解析

四、inode的大小

inode 也会消耗硬盘空间,所以格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是 inode 区,存放 inode 所包含的信息。每个 inode 的大小,一般是 128 字节或 256 字节。通常情况下需要重点关注 inode 总数,然而inode 的总数在格式化时就给定了。
如图我们执行“df -i”命令来查看每一个硬盘分区的inode总数和使用量。
CentOS 7文件系统之inode节点解析

五、inode的特殊作用:

由于 inode 号码与文件名分离,导致一些 Unix/Linux 系统具备以下几种特有的现象。
(1)文件名包含特殊字符,可能无法正常删除。这时直接删除 inode,能够起到删除文件的作用;
(2)移动文件或重命名文件,只是改变文件名,不影响 inode 号码;
(3)打开一个文件以后,系统就以 inode 号码来识别这个文件,不再考虑文件名。

猜你喜欢

转载自blog.51cto.com/14449521/2433117