文件系统中的inode

为什么需要inode?
在linux系统中,每个文件不仅有内容数据,还包括文件的各种属性,如所属用户组、所属用户、能否执行、文件建立时间、文件特殊属性等等。由于linux操作系统是一个多用户、多任务的环境,为了保护每个用户所拥有的数据的隐秘性,具有多样化的文件属性在所难免。linux文件系统从ext2开始,将文件属性和文件内容分开存储,分别由indoeblock负责。
将一个分区格式化为ext2时,就必须要指定inode与block的大小,即当分区被格式化为ext2的文件系统时候,它一定胡有inode表与块区域这两个区域。

inode是神马?
简单说,块是记录“文件内容数据”的区域,inode则是记录“该文件的相关属性,以及文件内容放置在哪一个块内”的信息。
存储文件的各属性包含以下内容:
(1)文件的内容信息:文件类型type、文件大小(字节)、以及相应的block的位置信息
(2)文件的拥有者和用户组:User ID&Group ID
(3)文件的权限信息:read/write/execute
(4)文件的时间戳:
ctime指inode上一次变动的时间
mtime指文件最近一次修改的时间
atime指文件最近一次读取的时间
(5)链接数,即有多少文件名指向这个inode
注意:inode本身不记录文件名,文件名则记录在目录所属的块区域。

可以用stat命令查看某个文件的inode信息:

或直接查看inode号($ ls -i )

每个inode节点的大小,一般是128字节或256字节。
inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。查看每个硬盘分区的inode总数和已经使用的数量,可以使用df命令。

每个inode都有一个号码,操作系统用inode号码来识别不同的文件。
Ps.Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。

系统如何创建文件与目录?
当创建一个文件时,文件系统为该文件分配至少一个inode和与该文件大小相对应数量的block,inode记录文件属性,同时指向相应的block。
当创建一个目录时,文件系统为目录文件分配一个inode和至少一个block,inode记录该目录的属性,并指向分配到的那个块,该块记录该目录下的相关文件(或目录)的关联性。

系统如何读取文件与目录?
当读取一个文件或目录X时,提供给文件系统的是一个路径,文件系统会首先读取该文件X所在目录的inode,然后通过该inode获得其对应的block,再在block中通过已知的文件名X,查找到该文件的inode,是一个递归的过程。

硬链接和软链接?
硬链接:
由于使用的是inode号码来识别文件,Linux允许多个文件名指向同一个inode号(一般情况文件名与inode号是一一对应的)。
用不同的文件名访问同样的文件内容,对文件内容的修改会影响所有的文件名,但删除一个文件名并不影响另一个文件名的访问,这种链接被称为“硬链接”。添加链接后,链接数增加。
 ln 源文件 目标文件

创建目录时,默认会生成两个目录项:”.”和”..”。前者的inode号码就是当前目录的inode号码,等同于当前目录的”硬链接”;后者的inode号码就是当前目录的父目录的inode号码,等同于父目录的”硬链接”。所以,任何一个目录的”硬链接”总数,总是等于2加上它的子目录总数(含隐藏目录)。

软链接:
文件A与B的路径相同,但是inode号不同,读取A时,系统会自动导向文件B,无论打开哪一个文件,最终读取的都是文件B,此时,文件A就称为文件B的“软链接”或者“符号链接”。A依赖于B存在,若删除了文件B,打开文件A时就会报错。且添加软链接后,B文件的链接数不会变化。
  ln -s 源文文件或目录 目标文件或目录

inode的特殊作用
由于inode号码与文件名分离,这种机制导致了一些Unix/Linux系统特有的现象
1. 有时,文件名包含特殊字符,无法正常删除。这时,直接删除inode节点,就能起到删除文件的作用。
2. 移动文件或重命名文件,只是改变文件名,不影响inode号码。
3. 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名。因此,通常来说,系统无法从inode号码得知文件名。

Leave a Reply

Your email address will not be published. Required fields are marked *