一、 Linux文件系统之 inode,block,superblock
Linux文件系统可以简单分为 inode table和data area
inode table:存有inode,每个inode中记录了文件的元数据,可以通过stat命令查看文件的元数据
data area:存有data
- superblock:记录此filesystem 的整体信息,包括inode/block的总量、使用量、剩余量, 以及 档案系统的格式与相关信息等;
- inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的资料所在的block 号码
- block:实际记录文件的内容,若文件太大时,会占用多个block 。
#File:文件名称;
#Size:文件大小;
#Blocks:占用的磁盘块数;
#IO Block:IO块大小;
#regular file:这里是显示文件的类型,这是一个普通文件
#Device:所在设备;
#Inode:Inode节点号;
#Links:被链接的次数;
#Access(第一个):访问权限;
#Uid:uid号和属主;
#Gid:gid号和属组;
#Access(第二个):文件近一次的访问时间;
#Modify:文件的修改时间;
#Chang:文件的改变时间
inode也会消耗磁盘空间,在磁盘格式化时,操作系统会自动将磁盘分为两个区域,一个数据区,一个 inode区,存放inode所包含的信息,整个磁盘的可以使用容量由inode和磁盘空间共同决定,当inode 消耗完之后,磁盘空间还有剩余也无法存储数据。
读取文件流程,以要读取/etc/fstab文件内容为例:
二、Linux文件系统删除原理
1、硬链接
- 具有相同INode节点号的文件互为硬链接文件;
- 删除硬链接文件或者删除源文件任意一个,文件数据实际并未删除;
- 只有删除源文件以及所对应的所有硬链接文件,文件数据才被删除,同时释放磁盘空间;
- 硬链接文件是文件的另一个入口;
- 硬链接文件可以用rm命令删除;
- 可以通过设置硬链接文件防止误删。
2、软链接(符号链接)
- 类似于windows上的快捷方式
- 软连接文件类似一个文本文件,存放的是源文件的路径
- 删除源文件,链接文件依然存在,但是无法指向源文件
- 软连接文件和源文件是不同类型的文件,也是不同的文件,inode号也不同
- rm可以直接删除
3、目录链接
- 对于目录来说,只能创建软链接;
- 每一个目录下都有硬链接"."号;
- 在父目录里面创建一个子目录,父目录的链接数增加1(子目录里都有指向父目录的链接)。但是在父目录里 创建文件,父目录的链接数不会增加。
4、Link计数器
Linux是通过link的数量来控制文件删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除。
一般来说,每个文件都有2个link计数器:i_count 和 i_nlink。
- i_count的意义是当前文件使用者(或被调用)的数量,i_nlink 的意义是介质连接的数量(硬链接的数量);可以理解为i_count是内存引用计数器。当一个文件被某一个进程引用时,对应i_count数就会增加
- i_nlink是磁盘的引用计数器。当创建文件的硬链接的时候,对应i_nlink 数就会增加。
文件删除:i_count和i_nlink同时为0时,代表删除