本文对鸟哥的Linu私房菜(基础学习篇-第四版)
的7.1.2
、7.1.3
小节进行了归纳,其中包含了笔者自己的一些理解。如若有误,还望指正。
文件系统特性
- 为什么要格式化?
对于一个新买的磁盘,插在主板上,计算机并不能直接使用。还需要对这个磁盘进行分区,格式化操作,之后操作系统才能使用该磁盘。
为什么要进行格式化?
这是因为每种操作系统所设置的文件属性/权限并不相同,为了存放这些文件所需要的数据,因此就需要将分区进行格式化,以成为操作系统能够利用的文件系统格式。
- 文件系统与硬盘分区
过去,一个分区只能被格式化为一个文件系统,所以称一个文件系统就是一个硬盘分区,这没有太大的问题。但是,新技术产生,比如LVM、软件磁盘阵列(software raid)等
,这些技术可以将一个分区格式化为多个文件系统(如LVM
),或者将多个分区合成一个文件系统(LVM,RAID
)。我们不再说针对硬盘分区进行格式化了。
我们可以称呼一个可被挂载的数据为一个文件系统而不是一个分区。
- 文件系统的运行
文件系统如何运行与操作系统的文件有关。在Linux操作系统下,文件除了具有实际的内容外,还具有很多属性,比如权限,归属,状态等(这里的权限指文件的访问操作权限,归属指文件所属用户,所属组等)。
文件系统通常会将内容和属性(包括权限)分开存放在不同区块。
内容(实际数据):存放到
数据区块
属性(包括权限):存放到inode
为了更好的理解,我们先对一些重要的概念进行简略解释:
文件系统是在建立在磁盘上面的,我们在描述相关概念时,可以从磁盘的角度去理解。
-
区块
(block): 一个或几个扇区组成的数据存储空间。我们的数据是存储在磁盘上的,具体地说是存储在磁盘上的扇区上的。所谓扇区就是磁盘的最小存储单位。扇区有不同的规格,主要是512B
和4K
两种规格。区块有1K
.2K
.4K
三种主要规格。当我的区块规格设置为4K
,扇区规格为512B
时,8个扇区就构成了一个区块。为了便于后面相关概念的理解,我们可以将区块理解为磁盘上能够存储一定大小数据的空间。当我们的对文件系统进行格式化时,操作系统会将整个文件系统对应的磁盘分区按照指定大小划分为一个一个的区块(这里是说一个磁盘分区格式化为一个文件系统的情况),并且为每个区块都进行一个编号。
这里需要注意区分一下
区块
和数据区块
。 -
数据区块(data block):用来存储文件实际内容的区块。数据区块也是区块,只是专注于存储文件实际数据。当文件较大时,一个区块存不下,就要用到多个区块。
-
inode
:记录文件属性。一个文件占用一个inode,同时记录此文件的数据所在区块号码。一个文件的inode
实际上是对该文件信息的抽象命名,一个文件的inode也是存储在某个区块中的。inode
也有规格,一般为128B
,256B
。如果我的inode
设置为128B
,那么磁盘上对应的某个128B
大小的空间就用来存储该inode
对应文件的属性信息。 -
超级区块
:记录此文件系统的整体信息。超级区块也是区块,只不过该区块专注于记录文件系统的整体信息。这些信息包括:inode与数据区块的总量、使用量、剩余量,以及文件系统的格式与相关信息等。比如你去百度上搜索某某大学,进入其官网,可以看到该大学的简介,这里的简介相当于"超级区块"。
Linux的ext2文件系统
当我们对文件系统进行格式化时,操作系统会将对应磁盘的部分划分为一个一个的区块。然后会规划哪些区块存储inode
,哪些区块存储文件实际数据
(即哪些区块充当数据区块),同时还有一些区块被用来存储其他信息。
文件系统一开始就将inode
与数据区块
规划好了,除非重新格式化(或者使用resize命令),否则不能修改inode
与数据区块
的大小与数量。
为了便于管理,操作系统不会将整个文件系统的inode存放在一起,也不会将所有文件实际数据存放在一起,而是分为多个区块群组,每个区块群组有自己独立的inode
,数据区块,超级区块等。
具体如下:
上图为ext2格式化后的结构图。
在整体规划中,文件系统最前面有一个启动扇区(boot sector),这个启动扇区可以安装启动引导程序。这里不做介绍。
从上图可以看出:每个区块群组有六个部分
Super Block
(超级区块):存储整个文件系统的相关信息,没有超级区块,就没有这个文件系统。注意不是每个区块群组都有超级区块。后面我们会使用命令进行验证。
*Filesystem Description
(文件系统描述说明):主要记录某一类区块的起始与终止编号。比如30000~350000
是我的数据区块,这段区块用来存放文件实际数据,那么这个起始编号与终止编号会被Filesystem Description
记录。同样会以这样的方式去记录(超级区块
,块位图
,inode位图
,inode table
)。
-
区块对照表
(块位图):用来记录哪些区块被使用,哪些区块未被使用。 -
inode对照表
(inode位图):记录哪些inode已被使用,哪些未被使用。 -
inode表
(inode table):记录inode
的实际内容,比如文件的属性,文件实际数据放置在那几个区块。inode
记录的数据至少有下面这些:- 权限
- 归属
- 大小
- 状态(时间戳):ctime,atime,mtime
- 文件特性标识(flag)。如SetUID
- 文件实际内容的指向。也就是实际内容存储在哪些区块的编号。
-
数据区块
(data block):用来存放文件数据的区块。ext2文件系统中所支持的区块大小为1K
,2k
,4k
。区块大小的差异会影响到文件系统所能支持的最大磁盘容量与最大单一文件容量,这个以后再讲。
ext2文件系统有一些限制:
- 原则上,区块大小与数量格式化完后就不能再修改。
- 每个区块只能放一个文件的数据,即不能将两个不同文件的数据放在同一个区块。
- 承上,文件大于区块大小时会占用多个区块,文件小于区块大小会独占整个区块(因为不能有其他文件的数据,此时会造成磁盘空间的浪费)。