Linux文件系统

inode  block  superblock

一.inode是什么

文件储存在硬盘中,硬盘的最小存储单位是扇区(sector),每个扇区的大小为512字节(0.5KB)。
当硬盘读取文件时不会一个扇区一个扇区的读取,那样效率太低,而是一次读取多个扇区,也就是一个块(block),这样由多个扇区组成的块,是文件存取的最小单位。块的大小,最常见的是4KB,即连续八个sector组成一个块。
文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。

二.inode的内容

inode包含文件的元信息,具体来说有以下内容:

* 文件的字节数

  * 文件拥有者的User ID

  * 文件的Group ID

  * 文件的读、写、执行权限

  * 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。

  

windows索引文件删除 索引文件删除物理块_linux


  * 链接数,即有多少文件名指向这个inode

  * 文件数据block的位置

可以用stat命令,查看某个文件的inode信息:

windows索引文件删除 索引文件删除物理块_windows索引文件删除_02

三.Linux文件系统删除原理

Linux是通过link的数量来控制文件的删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除,一般来说每个文件都有2个link计数器:i_count和i_nlink。
i_count的意义是当前文件使用者(或被调用)的数量;i_nlink的意义是介质连接的数量(硬连接的数量);可以理解为i_count是内存引用计数器,i_nlink是磁盘的引用计数器。

windows索引文件删除 索引文件删除物理块_windows索引文件删除_03

当一个文件被某一个进程引用时,对应i_count数就会增加,当创建文件的硬连接的时候,对应i_nlink数就会增加。
对于删除命令rm而言,实际就是减少磁盘引用计数i_nlink.这里就会有一个问题,如果一个文件正在为某一个进程调用,二用户却执行rm操作把文件删除,会导致虽然文件删除了,但空间没有释放,重启进程即可。进程调用的文件要删除,也可以直接清空文件内的东西,而不是直接rm删除。

硬链接:
具有相同INode节点号的文件互为硬链接文件
删除硬链接文件或者删除源文件任意一个,文件数据实际并未删除
只有删除源文件以及所对应的所有硬链接文件,文件数据才被删除,同时释放磁盘空间
硬链接文件是文件的另一个入口
可以通过设置硬链接文件防止误删
软链接 符号链接
类似于windows上的快捷方式
软连接文件类似一个文本文件,存放的是源文件的路径
删除源文件,链接文件依然存在,但是无法指向源文件
软连接文件和源文件是不同类型的文件,也是不同的文件,inode号也不同
rm可以直接删除
目录链接
对于目录来说,只能创建软连接
每一个目录下都有硬链接 . …
对于父目录来说,子目录都会有指向父目录的链接 父目录链接数+1
每一个文件链接计数器, i_count i_nlink
i_count:当前文件被调用的次数 内存引用计数器
i_nlink:链接的数量 硬链接的数量 磁盘引用计数器

文件删除:i_count和i_nlink同时为0时,代表删除。