前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux文件系统和inode

Linux文件系统和inode

作者头像
用户5807183
发布2019-07-30 12:21:21
5.7K0
发布2019-07-30 12:21:21
举报
文章被收录于专栏:Linux知识积累

学到linux上的软连接和硬链接,不得不了解inode,要想知道inode,不得不了解一些文件系统,至少是Linux文件系统

Linux文件系统

文件系统是什么

我的理解,文件系统类似现实中的档案管理,条理化的存储数据。它定义了磁盘上储存文件的方法和数据结构。 不同的人管理档案有不同的管理方法,那么相对于不同的系统格式有不同的存储办法,所以就有了不同的文件系统类型。什么ext2,ext3,ext4,xfs,NTFS,FAT等。但是不同人的管理方法有的领导不承认或者是不认识,那么领导就不能来按照他的管理方法来查找档案,就像不同的操作系统只认识特定的文件系统一样。要想让“领导”认识某些文件系统,则需要教会领导,那么这就涉及到更深层次的编译系统了。

inode是什么

inode又要扯到存储了,我们知道数据是保存在磁盘中的,磁盘上最小存储数据的是扇区,每个扇区一般都是可以存放512字节的数据。

那么如果数据大于512字节时候,磁盘需要不停地移动磁头来查找数据,我们知道一般地文件很容易超过512字节那么如果把多个扇区合并为一个块,那么磁盘就可以提高效率了,。那么磁头一次读取多个扇区就为一个块“block”(linux上称为块,Windows上称为簇)。

一个块多为4KB,因为块是文件系统层面上的概念,所以块也可以在格式化时候自行定义。

文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。

Linux文件系统工作原理初识

我们知道文件系统记录的数据,除了其自身外,还有数据的权限信息,所有者等属性,这些信息都保存在inode中,那么谁来记录inode信息和文件系统本身的信息呢,比如说文件系统的格式,inode与data的数量呢?那么就有一个超级区块(supper block)来记录这些信息了.

每个inode和block,都有编号。通俗讲

  • superblock:记录此 filesystem 的整体信息,包括inode/block的总量、使用量、剩余量, 以及文件系统的格式与相关信息等
  • inode:记录文件的属性信息,可以使用stat命令查看inode信息。
  • block:实际文件的内容,如果一个文件大于一个块时候,那么将占用多个block,但是一个块只能存放一个文件。(因为数据是由inode指向的,如果有两个文件的数据存放在同一个块中,就会乱套了)

inode用来指向数据block,那么只要找到inode,再由inode找到block编号,那么实际数据就能找出来了。我来试着画一个简图

Linux文件系统格式化时候,格式化上面三个区域,supper block, inode 与 block 的区块,假设某一个数据的属性与权限数据是放置到 inode 5 号,而这个 inode 记录了档案数据的实际放置点为 3,4,10 这四个 block 号码,此时我们的操作系统就能够据此来寻找数据了。称为索引式文件系统。

Windows中的FAT文件系统就不是索引式文件系统,如下简图

很明显,我们懂了每一个数据块都存放下一个数据块的索引,如上1>7>4>15。 但这就有了一个问题,如果文件系统中碎片太多,那么将大大降低数据的读取速度。虽然linux系统也会存在碎片化的问题,但由于是索引式文件系统,所以影响并不大,所以一般情况下windows需要经常进行碎片化整理,而linux很少需要进行整理,但是也可以写脚本进行整理,不过这都是那些高手们干的事情。

Inode

inode内容

可以使用stat命令进行查看

  • 文件的字节数
  • 文件拥有者的User ID
  • 文件的Group ID
  • 文件的读、写、执行权限
  • 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
  • 链接数,即有多少文件名指向这个inode
  • 文件数据block的位置
inode大小与数量

inode也会占用磁盘空间,大小一般为128k或256k. inode 数量也可以使用mke2fs -N来进行指定,这在实际的生产中很有必要,比如说论坛系统,因为里面的文件很小,并且很多,很可能会出现inode先用完,而数据空间并没没有使用完。此时就需要根据经验,根据磁盘总空间来进行估算出inode的需求,最好在使用inode完的同时,block也使用完。

生产环境下如果inode不够使用了的缓解办法

如果/data 所在分区inode不够使用 1、删除/data/cache目录中的部分文件,释放出/data分区的一部分inode。 2、用软连接将其他分区目录连接到/data/cache,使用其他分区的inode来缓解/data分区inode不足的问题:   ln -s /opt/newcache /data/cache

硬链接与软连接

说到inode,那么硬链接与软连接不用说我们就可以明白了其中的原理了,我就总结了点两者的不同吧。 (1).软硬链接实现的原理不同 硬链接是建立一个目录项,包含文件名和文件的inode,但inode是原来文件的inode号,并不建立其所对应得数据。所以硬链接并不占用inode。 软连接也创建一个目录项,也包含文件名和文件的inode,但它的inode指向的并不是原来文件名所指向的数据的inode,而是新建一个inode,并建立数据,数据指向的是原来文件名,所以原来文件名的字符数,即为软连接所占字节数

(2).软硬链接所能创建的目标有区别 因为每个分区各有一套不同的inode表,所以硬链接不能跨分区创建而软连接可以,因为软连接指向的书文件名。

(3).硬链接不能指向目录 如果说目录有硬链接那么可能引入死循环,但是你可能会疑问软连接也会陷入循环啊,答案当然不是,因为软连接是存在自己的数据的,可以查看自己的文件属性,既然可以判断出来软连接,那么自然不会陷入循环,并且系统在连续遇到8个符号连接后就停止遍历。但是硬链接可就不行了,因为他的inode号一致,所以就判断不出是硬链接,所以就会陷入死循环了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Linux知识积累 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Linux文件系统
  • Inode
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档