当划分磁盘分区并格式化的时候,整个分区会被划分为两个部分,即inode区和data block(实际数据放置在数据区域中)这个inode即是(目录、档案)文件在一个文件系统中的唯一标识,需要访问这个文件的时候必须先找到并读取这个文件的 inode。 Inode 里面存储了文件的很多重要参数,其中唯一标识称作 Inumber, 其他信息还有创建时间(ctime)、修改时间(mtime) 、文件大小、属主、归属的用户组、读写权限、数据所在block号等信息
所以文件就有两部份组成:
1、元数据:inode table(索引节点表)
2、数据内容:数据块(block)
inode包含文件的元信息,具体来说有以下内容:
* 文件的字节数
* 文件拥有者的User ID
* 文件的Group ID
* 文件的读、写、执行权限
* 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
* 链接数,即有多少文件名指向这个inode
* 文件数据block的位置
文件系统一开始就将inode与block规划好了,除非重新格式化,否则inode和block固定后就不会在发生变化。每个inode与block都与自己的编号,inode就是记录档案的属性,一个档案占用一个inode,同时记录此档案数据所在的block码。block则是实际记录档案的内容,若档案过大则会占用多个block。
由于每个inode与block都有自己的编号,而每个文件都会占用inode,inode内有数据 block的位置,因此可以制动啊,如果能够找到文件的inode,就可以找到文件所放置数据的block号码,也就能够找到文件的时间数据所在了。所以inode就有指针的作用,而在inode结构中,并不是只有一种指针,而是有多种。
在inode表中将第1 - 12块指针当作直接块指针,由于一个指针只能指向一个block块,所以如一个block块有4K的存储空间,那么使用直接块指针的文件最大不能超过48K,这时就需要用到间接块指针,或双重间接块指针,或三重间接块指针。
直接块指针
直接块指针就是inode中直接记录了block块的号码,直接指向block块,
假如一个文件的属性与权限数据放置在inode4号,而这个inode记录了档案数据的实际位置放置点位2,7,13,15这四个block号码,此时操作系统可以据此来排列磁盘的阅读顺序,可以直接将四个block的内容读出来,数据的读取如下图所示
间接块指针
间接块指针,其实和直接块指针大同小异,他们都是指针,只是直接块指针式直接指向的block块存储的是文件的数据,而间接块指针是将指向的block块继续当作指针块使用,所以间接指针指向的block块存储的是指针信息,它将继续指向下一个block块中存储的文件数据。
双重间接块指针
理解了间接指针块,那么双重间接指针块就容易理解了,它是在间接指针块的基础上将第二次指向的block块也当作指针使用,这样就可以指向更的的block块。
三重间接块指针
三重间接块指针的道理就和双重的道理一样了,只是把第三次指向的block块也当作指针块当作指针使用,这样就可以执行跟过的block块。
前面已经提到使用直接块指针的文件最大不能超过48K,假定一个指针块需要4个字节,一个block块有4K的存储空间,那么一个block块就可以存储1024个指针块,所以间接块指针的文件最大就可以存储1024*4K=4M的文件,以此类推使用双重间接块指针的文件最大存储空间就有1024*1024*4K=4G,使用三重间接块指针的文件最大存储空间就可以达到1024*1024*1024*4K=4T。
inode表结构如图所示:
目录文件:
普通文件是由indoe+block构成,在linux下目录也是一种文件,那么目录文件又是什么结构呢,目录文件的结构非常简单,就是一系列目录项(dirent)的列表。每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。通过目录项找到目录下文件的inode信息,然后就可以找到文件的block块及数据信息
如图所示:
在文件系统中用户可以使用df命令查看每个磁盘分区的inode总数和已使用的数量,
命令:df -i
由于inode也占用一定的磁盘空间,所以当inode使用空间用完的时候,即使磁盘仍有存储空间也无法使用!所有当磁盘显示仍有可用空间,但使用时却提示空间不足,就有可能是inode使用完毕所造成的。