设为首页 收藏本站
查看: 1201|回复: 0

[经验分享] linux中的inode节点

[复制链接]

尚未签到

发表于 2018-5-20 06:20:01 | 显示全部楼层 |阅读模式
一、背景

    传统的磁盘与文件系统的应用中,一个分区就只能够被格式化成一个文件系统,所以我们可以说一个文件系统就是一个分区。但是由于新技术的利用,例如我们常听到的LVM与软磁盘阵列(software raid),这些技术可以将一个分区格式化为多个文件系统(例如LVM),也能够将多个分区合成一个文件系统(LVM,RAID),通常我们可以称呼一个可被挂载的数据为一个文件系统而不是一个分区。

    那么文件系统是怎么运行的呢?这与操作系统的数据有关。较新的操作系统的文件数据除了文件实际内容外,通常含有非常多的属性,例如Linux操作系统的文件权限(rwx)与文件属性(所有者、群组、时间参数等)。文件系统通常会将这两部分的数据分别存在不同的块,元数据是存放在inode table中,而数据是存放在数据块中。每个文件的元数据内容有很多,包括文件类型,权限,链接数等,每个文件都有自己的元数据表,里面存放了每个文件的描述。

  

二、inode和block的简要意义

    inode:记录文件的元数据,一个文件占用一个inode,同时记录此文件的数据所在的block号码;

    block:实际记录文件的内容,若文件太大,会占用多个block.

  

三、inode的工作原理

    由于每个inode与block都有编号,而每个文件都会占用一个inode,inode内则有文件数据存放的block编号。因此,我们可以知道的是,如果能够找到文件的inode,那么自然就会知道这个文件锁存放数据的block号码,当然也能够读出该文件的实际数据。



    下面我们来用图解说明一下:

    假设/dir1/a 中有xxx数据,dir1/b 中有yyy数据

      系统中有个索引表(inode table),索引表是每个分区独立的一个,每个分区中有个节点表,存放了节点号和元数据还有指针,当访问dir1的时候,因为/dir1是个文件夹,需要先访问/根,而根是在节点号为2 的位置,2编号的节点下面有许多目录,根中也有自己的指针指向数据块,这个数据块有两部分,一部分是存放子目录,另一部分存放的是子目录的节点编号,根在它的子目录下查找/dir1文件,假设/dir1文件对应的节点编号为1000,就会返回到inode table表找到节点编号为1000,指针指向到原始数据,假设/dir1目录中a文件的节点编号为20000,b文件的节点编号为20001,又返回到inodetable中查找,查找到的指针编号为2000指向他的数据块,数据块中存放的内容为xxx。
    DSC0000.png

四、inode表结构

    inode要记录的数据非常多,但偏偏就只有128byte而已,而inode记录要花掉4byte,假设一个文件有400MB且每个block为4KB,那么至少要10万条block号码记录。inode哪有那么多可记录的信息?为此我们将inode记录block号码的区域定为12个直接、一个间接、一个双重间接与一个三重间接。

    如下图所示:

    直接指针:编号为1-12,每一个都指向一个数据块,block块的大小为4k,最多可以存放12*4k=48k的文件,如果文件在48k之内,就可以使用直接指针找到数据块所在地。

间接指针:指针不是直接指向数据,而是指向一个指针数据块,这个指针数据块大小也是4k,但是指针数据块存放的不是数据而是地址,假设4k的指针数据块里面也要存放指针存放为4Byte,一个指针可以存放4字节,所以可以存放1024个指针,1024个指针可以指向1024个数据块,所以能指向的数据大小为 1024*4K=4096K=4M。
双重间接指针:所谓双重间接指针,就是其在指向数据的过程中经过了两个指针数据块,根据间接指针的论述,我们不难得出双重间接指针所能够指向的数据大小为 1024*1024*4K=4G
三重间接指针:所谓双重间接指针,就是其在指向数据的过程中经过了三个指针数据块,根据间接指针的论述,我们不难得出双重间接指针所能够指向的数据大小为 1024*1024*1024*4K=4T

DSC0001.png     数据块的查找:如果查找的数据块较小,一个指针指向数据块就可以了,如果发现数据块较大,就直接调用后面的 间接指针。这些事针对32位系统而言的。

五、查看inode节点编号

    节点的编号是系统随机分配的

    ls -l:查看索引编号

    DSC0002.png



    在一个分区中节点号是不同的,不同分区节点号有可能相同   

    在一个分区中节点号相同那就说明这是同一个文件

    例如:

    用a的文件创建新的链接b,a和b的节点号相同,说明a和b是同一个文件
他们除了名字不同,其余属性一致,包括元数据等,这就是硬链接
DSC0003.png


df -i 查看在一个目录下的节点最大数
假如工作过程中报出磁盘已满的错误,有可能不是磁盘真正的蛮了,也有可能是inode消耗完了
DSC0004.png







   



   

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-462276-1-1.html 上篇帖子: 【linux】 锁的条件 下篇帖子: Linux,你了解多少!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表