linux存储--inode详解(六)

当划分磁盘分区并格式化的时候,整个分区会被划分为两个部分,即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

文件是储存在硬盘上,硬盘的最小存储单位叫扇区。每个扇区能存储大小是0.5KB。进行硬盘分区后就需要将其是格式化。在Linux 系统中ext4文件系统中将数据存储划分两个区域inode区与数据区,这样做的目的是提高文件的读写速度。操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个块(block),也即是上图中所示的簇。这种由多个扇区组成的块是文件存取的最小单位,块最常见的是4KB,也即8个扇区组成,文件里面写的数据都储存在块中。

inode表结构如图所示:
在这里插入图片描述
目录文件:

普通文件是由inode+block构成,在linux下目录也是一种文件,那么目录文件又是什么结构呢,目录文件的结构非常简单,就是一系列目录项(dirent)的列表。每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。通过目录项找到目录下文件的inode信息,然后就可以找到文件的block块及数据信息

如图所示:
在这里插入图片描述
访问一个文件的时候,先进入目录,目录中有相应的目录项,目录项中有对应的文件名和inode号,通过里面的指针指向相应的数据块,这样就访问到文件的内容了。目录这种“特殊的文件”,可以简单地理解为是一张表,这张表里面存放了属于该目录的文件的文件名,以及所匹配的inode编号,它本身的数据也放在数据区中;读写一个文件时就这样来回的从inode和数据区之间切换。可以把文件比作一本书,inode相当于书的目录,数据区相当于书的内容,读书时得先查目录,这本书呢又放在读书馆的书架上,书架可以理解为是目录,看书前先查书架子的索引。

在文件系统中用户可以使用df命令查看每个磁盘分区的inode总数和已使用的数量,

命令:df -i
在这里插入图片描述
由于inode也占用一定的磁盘空间,所以当inode使用空间用完的时候,即使磁盘仍有存储空间也无法使用!所有当磁盘显示仍有可用空间,但使用时却提示空间不足,就有可能是inode使用完毕所造成的。

原文链接:https://blog.51cto.com/groot/1832283

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值