Linux(5)-inode节点

索引节点:inode

分区要格式化,创建文件系统

Inode:中文意思是索引节点(index node),在每个Linux存储设备或存储设备分区(存储设备可以是硬盘,软盘,U盘)

被格式化为文件系统后,一般都有两部分:第一部分是Inode,第二部分是Block。(Linux特有的)

Block是用来存储实际数据用的,例如:照片,视频等普通文件数据。

 

inode就是用来存储这些数据属性信息的(也就是ls -l的结果),inode包含的属性信息包括文件大小、属主、归属的用户组、读写权限、文件类型,修改时间,还包含指向文件实体的指针的功能(类似于指针的功能,inode节点-block的对应关系)等,但是,唯独不包含文件名

 

Ls -l

1111  -r--r--r--  2  root  root  4.0k  Oct 28  11:33   oldboy 

Inode                                            文件名是存放在Block中的

 

inode示意图:

Inode除了记录文件属性的信息外,还会为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令,即可通过inode的值最快的找到相对应的文件实体。文件,inode,block之间的关系见下图。

(具体流程: 通过文件名,找到对应文件名的block(在inode中判断你是否有足够的权限)、再通过block找到具体的文件内容

生活例子:

教室门口贴着一张纸(inode),有大家的位置信息,以及学生身高,座位就相当于block。

一本书。储存设备或分区就相当于这本书,Block相当于书中的每一页内容,而inode就相当于这本书前面的目录,一本书有很多的内容,一个知识点可能有多页,如果想查找某部分或某知识点的内容,我们一般先查书的目录,通过目录能更快的找到我们想要看的知识点内容。

 

一般block的大小:

一般 block 的大小是 1k、2k、4k。(所以一个视频文件就有可能有多个block,所以看具体文件的大小,大就分配多几个inode,小可能就一个)

 

block大小怎样为好:

有关Block的大小:磁盘读取数据是按Block为单位读取的(且一个Block只能存放一个文件系统),Block并非越大越好,Block快越大对于单个的小文件多的业务,会非常浪费空间,因为,一个文件无论多大都会占用一个inode和一个block。但是对于大文件,可以提升读物的效率,因为如果bolck 块太小,就要读取多个block,这样就消耗IO,如果block大,则会读取较少的Block就读完数据,从而减少磁盘IO。当前的生产环境 Block 块一般都是4k

block过大的缺点:对于小文件

优点:对于大文件

 

ls -l输出的格式

 

链接:

1111  -r--r--r--  2  root  root  4.0k  Oct 28  11:33   aaa.txt 

            文件对应的硬链接数

链接分两种:软链接(符号链接,相当于Win快捷方式)和硬链接。

软链接:在软连接中,软连接文件实际上就是一个文本文件,这个文件中包含有软连接指向另一文件的位置信息内容,因此,通过访问这个“快捷方式”就可以迅速定位到软连接所指向的源文件实体(软连接文件与源文件的inode是不相同的,硬链接的Inode是相同的

  1. 软连接类似Windows里的快捷方式,软连接里面存放的是源文件的路径,并且执行源文件。
  2. 删除源文件,软连接文件依然存在,但是无法访问指向的路径内容了
  3. 执行命令 “Ln  -s  源文件 软连接文件”
  4. 软连接和源文件是不同类型的文件,也是不同的文件,inode号不同

 

硬链接:是指通过索引节点(Inode)来进行链接。在Linux(ext2,ext3)文件系统中,保存在磁盘分区中的文件不管是什么类型都会给它分配一个编号,这个编号被称为索引节点编号(Inode Index)简称Inode,即在系统文件中的编号

  多个文件名指向用一个索引节点(inode)是正常且允许的。这种情况文件就称为硬链接。

  硬链接的作用之一就是允许一个文件拥有多个有效路径名(多个入口,可以防止误删)

注意:目录不可以创建硬链接,但是可以创建软连接

目录的硬链接数是2的原因

但是 ll 会发现目录的硬链接数是2 (因为有 . 当前目录 和 ..  上一级目录)

在父目录里创建一个子目录,父目录的连接数增加 1 ,(子目录都有 .. 来指向父目录)。但是在父目录里创建文件,父目录的连接数不会增加。

 

为什么可以防止误删?

因为文件系统(ext2)的原理是,只要文件的索引节点(inode Index)还有一个或一个以上的硬链接。值删除其中一个硬链接并不影响索引节点本身和其他的链接(即数据文件实体并未被删除)。只有当最后一个连接被删除后,此时如果有新数据要存储到硬盘上是或者系统通过类似fsck做磁盘检查的时候,被删除文件的数据块及目录的链接才会被释放,空间被新数据占用并覆盖。此时,数据就再也无法找回了。

总结:在Linux系统中,删除静态文件(目录也是文件)的条件是与之相关的所有硬链接文件均被删除。(硬链接相当于文件的另一个入口)

硬链接文件是具有相同inode节点号的不同文件

 

全局结论:删除软连接文件对源文件及硬链接文件无任何影响

          删除硬链接文件对源文件及软链接文件无任何影响

          删除源文件,对硬链接文件没有影响,但是会导致软连接文件失效,白字红底闪烁

          同时删除源文件,硬链接文件 _hard_link ,整个文件会真正的被删除

          很多硬件设备中的快照功能,就是利用了硬链接的原理

 

控制文件删除: (文件删除的原理)

(1)文件的硬链接数: i_link=0 文件就被删除了

创建一个文件 i_link=1为这个文件,创建硬链接:i_link=2

  1. 是否有进程占用使用这个文件,有一个进程占用这个文件 i_count =1,有两个进程 i_count=2(i_count=0 且 i_link =0  文件就被删除)

 

硬盘报错 “No Space Left on device”,但是 df -h查看磁盘空间没满,请问为什么?

(df -i)有可能是 inode 满了

 

有些日志删除完了之后,发现空间还没释放,因为我们的Web 服务的进程还在占用着这个inode

空间为什么不释放?

  1. Hardlink
  2. 另一个进程还在使用这个文件
  3. 磁盘空余空间维护出现问题(系统重启,会重新回收没有inode引用的的文件)

 

生产环境:最佳的解决方案:

  1. 删除文件,重启
  2. 清空文件,不删除
  3. 不要删除当天被进程占用的文件,删除之前的

 

文件删除的原理:

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值