文件系统
文件系统就是文件管理系统,简称文件系统。
文件系统的核心为两张表+superblock超级块:
两张表:inode表+group表
superblock超级块:分区第一个block
inode表中存储的是元数据,包含File、Size、Blocks等字段;
group分组表中为各个block块的分组情况;
superblock超级块中包含卷名、挂载点、UUID等多个字段。
inode表
inode
inode表中包含文件系统所有文件列表
一个节点是在一个表项,包含了有关文件的信息(元数据)。
一个文件有且只有一个inode
inode中包含12个直接指针,1个间接指针,1个双间接指针,1个三间接指针
文件系统提取文件的顺序:
1、根据文件名,通过Directory里的对应关系,找到文件对应的Inode number
2、再根据Inode number读取到文件的Inode table
3、再根据Inode table中的Pointer读取到相应的Blocks
示例:
[root@centos ~]# stat MBR
File: ‘MBR’
Size: 512 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 135140357 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2020-03-25 21:58:04.870919270 -0400
Modify: 2020-03-25 21:57:48.174858778 -0400
Change: 2020-03-25 21:57:48.174858778 -0400
Birth: -
字段 | 含义 |
---|---|
File | 文件名 |
Size | 该文件的大小 |
Blocks | block块总计数量 |
IO Block | block块的大小 |
Device | 设备 |
Inode | 该文件的inode号 |
Links | 链接数量 |
Access | 权限 |
Uid | 该文件的Uid |
Gid | 该文件的Gid |
Access | 该文件的atime文件上一次打开的时间 |
Modify | 该文件的mtime文件内容上一次变动的时间 |
Change | 该文件的ctime—inode上一次变动的时间 |
block
文件数据存储在block中
每块block只能存储一个文件
block 文件系统的最小存储单位是 1k,2k,4k,2^n
inode和block的关系
由上面的定义可以知道block是用来存储文件数据的,每一个block只能存储一个文件,并且每个block都有自己的编号,当一个文件特别大的时候,存储该文件的block数量也会很大,而且,在没有inode的时候读取文件,只有当读取完上一个block的时候才会知道下一个block号,才能继续读取。这个时候因为block的数量很大,读取速度会很慢。inode的存在很好的解决了这一个问题,inode中除了存储元数据之外,还会存储block指针,当我们在读取大文件的时候,inode中的指针会迅速找出block并将其排序之后快速读取,大大提高了效率。
inode与block关系小结:
1.磁盘被分区格式化分区之后,会分为元数据和block两部分
2.inode存放文件的属性以及指向文件实体的指针(block的位置)
3.superblock用来存储inode和block等等整个文件系统的全部信息,包括inode和block的大小,数量,以及block的使用情况。
4.创建了一个文件时会同时创建inode和block,inode用来存储元数据和block指针,block用来存储数据内容。
5.一个block只能被一个文件使用,所以一个block并不是越大越好,当服务器存储的小文件居多,那么block设置的小一点比较好,不会浪费空间。