前序:说起文件系统,可能会有很多人觉得不好理解,到底什么是文件系统,文件系统和目录有什么关系?文件系统和磁盘有没有关系?是不是越想越复杂?这一点不用担心,我会给各位讲清楚,尤其是文件系统,必须要搞明白,说的夸张一些,把文件系统理解透彻了,就能搞定半个Linux了,所以加油吧。
在前文中已经给大家粗略讲过文件系统,这里再给大家回顾一番
这里是引用
所谓的“挂载”其实就是利用一个目录当作进入点,然后将磁盘分区的数据放置在该目录下,也就是说进入该目录就可以读取该分区数据的意思。那个进入点我们将之称为“挂载点”。由于整个系统最重要的是根目录,因此根目录一定要挂载到某个分区,至于其他的目录可以依据用户自己的需求将之挂载到相应的分区下。以上图为例,假设我们将磁盘分为两个分区,分区1挂载到根目录,分区2则挂载到/home目录。这也就是说,当我的数据放在/home的各层目录中时,数据是放在分区2的,如果不是放到/home中,数据就是被放到了分区1中。我们可以将挂载磁盘分区的挂载点称之为文件系统
————————————————
版权声明:本文为CSDN博主「小学徒一枚」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Gao068465/article/details/103832668
这里是引用
下面进入正题
一、文件系统的特性
我们都知道磁盘分区完毕后还要进行格式化,之后操作系统才能使用这个文件系统,但是你是否想过为什莫要进行格式化?这是因为每种操作系统所设置的文件属性/权限并不相同,所以为了存放这些文件所需的数据,就需要将分区进行格式化,以成为操作系统能够利用的文件系统格式。到这里也就能明确一件事:每种操作系统所能使用的文件系统是不同的,通常我们称呼一个可被挂载的数据为一个文件系统。在Linux中,文件系统通常会将文件权限(rwx)和文件属性(拥有者、用户组、时间参数)放置到inode中,至于实际数据则放置到数据区块中。另外,还有一个超级区块(superblock)会记录整个文件系统的整体信息,包括inode(一个文件占用一个inode)与数据区块的总量、使用量与剩余量。既然已经提到了inode,那么就顺便说一说inode与数据区块的关联,前面已经说过inode中记录文件的属性,一个文件占用一个inode,inode内则有文件数据放置的区块号码,因此只要找到文件的inode,那么就会知道文件数据放置的数据区块。
作为运维人员,大家应该听到过所谓的碎片整理吧,之所以需要碎片整理的原因就是因为文件写入的区块太过于离散,此时文件的读取性能将变的很差,这个时候可以通过碎片整理将同一文件所属的区块集合到一起,这样数据的读取就会比较容易。
看一看inode,文件系统在一开始就已经将inode与数据区块规划好了,除非重新格式化或者利用专门的命令去修改,否则inode与数据区块在固定后就不再变动。但是假如我们的文件系统的容量高达几百G时,这时将inode和数据区块都放置在一起是不容易管理的,所以就产生了一种称为“区块群组”的方案,简单的说就是将整个文件系统分为多个小的文件系统,这些小的文件系统也都拥有自己indoe,数据区块和超级区块。举个简单的例子:在当兵时,一个团会分成几个营,团有自己的单位组成,比如团长、政委等等,而营也有自己的组成单位,比如营长和教导员,这就像“区块群组”,分成一组一组管理就会更容易。
接下来仔细介绍“区块群组”的六大组成部分:
1)数据区块:
数据区块是用来放置文件数据的地方,在ext2文件系统中所支持的区块大小有1k,2k及4k三种,每个区块都会有自己的编号,便于在inode中进行查找,一个区块只能放一个文件的数据,哪怕是文件小于该区块大小,那么剩下的区块空间也不再使用;一个大于区块大小的文件可以放置于多个区块,但是有一点要注意:区块大小的差异,会导致文件系统能够支持的最大磁盘容量与最大单一文件容量并不相同,看图说话:
做一道小题,看看是否真正掌握:假设你的ext2文件系统使用的是4k区块,而该文件系统中有10000个小文件,每个文件大小均为50B,请问你的磁盘浪费多少容量?
答:所有文件容量:50Bx10000=488.3KB
每个区块浪费:4096-50=4046B
总共浪费容量:4046x10000=38.6MB
也就是说原本只需要消耗不到1MB的数据,实际上却占用了将近40MB容量。
2)inode Table(inode 表)
关于inode,不打算说太多,简单聊一聊就行。基本上来说,inode记录的数据至少有下面这些:
该文件的读写属性(rwx);
该文件的拥有者和用户组(owner,group);
该文件的大小;
该文件建立或状态改变的时间(ctime);
最近一次的读取时间;
最近一次的修改时间;
该文件真正内容的指向;
其实关于inode表还有一个概念,需要大家自己去了解,这里不再详细介绍,即“将inode记录区块号码的区域定义为12个直接,1个间接,1个双间接和1个三间接记录区”
3)超级区块
超级区块是记录整个文件系统相关信息的地方,没有超级区块,就没有这个文件系统,它记录的信息主要有:
数据区块与inode的总量;
未使用的和已经使用的inode和数据区块的数量
数据区块(1k、2k、4k)与inode的大小(128B或256B)
文件系统的挂载时间、最近一次写入数据的时间等
一个有效为数值,若此文件系统已经挂载,则有效位为0,反之则为1
超级区块非常的重要,因为文件系统的基本信息都存储在这里,如果超级区块损坏,你的文件系统可能就需要花费很多时间去修复。前面我们提到过每一个区块群组都可能有一个超级区块,但是一个文件系统不是只有一个超级区块吗?这里不是很矛盾吗?其实是这样的,一般来说,除了第一个区块群组有超级区块,其他的区块群组是不一定有超级区块的,如果有,那么这个超级区块则该是第一个区块群组里的超级区块的备份。
4)Filesystem Description
这个区段可以描述每个区块群组的开始与结束的区块,以及说明这个区段位于哪两个区块之间
5)区块对照表
区块对照表的作用就是让我们知道哪些区块是空着的,可以用来放置新的数据
6)inode对照表
这个其实与区块对照表的功能类似,用来记录使用和未使用的inode号码。