【Linux 学习】 文件系统
Linux文件系统
1、磁盘
左图中的椭圆代表磁盘的一个盘片,右图为盘片的放大图,盘面上面的一道同心圆表示一个磁柱,磁柱是有许多扇区组成的,扇区是最小的物理存储单元。多个磁柱构成一个分割槽即分区。一个磁盘的第一个扇区是非常重要的,一般记录了整个磁盘的分割方式即分区表。该分区表一般为64bytes,仅能够记录4个分区(分为主分区和扩展分区),其中扩展分区可以继续分割出逻辑分区,而逻辑分区的个数依据系统而来。
2、文件系统
将磁盘分好区后,并不能直接利用磁盘的空间,而是需要将磁盘对应的分区或分割槽格式化为文件系统后,才能够被操作系统利用。一般的,一个分区对应一个文件系统。
Linux系统中,文件系统将文件的属性和数据分开放,文件的属性存放在iNode里面,具体的文件内容则存放到block里面。对于目录而言,iNode存放目录的属性,而目录下面的文件或者子目录存放到对应的block里面。另外,Linux系统为了管理这些iNode和data block增加了一个super block区块。每一个文件都会对应一个iNode,一个或者多个data block。
磁盘被格式化后,iNode和data block就已经被确定下了。往往一个100G左右的文件系统格式化后得到的iNode和data block的数量非常惊人,因此Linux将这些iNode和datablock进行分组管理。每一个组内具有superblock、iNode和data block,而且在文件系统的最前面预留一个扇区用来安装引导程序。
2.1 iNode
iNode主要用来存放文件的属性和权限等。每一个iNode大小固定为128bytes,每一个文件都会占用一个iNode。而iNode在记录block位置是需要消耗掉4byte,因此最多一个iNode可以存放128/4=32个block的位置。但这是在不存储文件的饿属性的权限的情况下计算而来的。实际文件的大小往往比较大,如果iNode直接记录block并且block直接用来存放数据时,这时文件系统能够存储的文件大小将会非常受限。因此Linux采用12个直接block、1个间接、1个双间接、一个三间接。间接表示iNode存放的block不用来存放数据而是下一级block的位置。
另外,一个文件系统中需要管理的iNode节点数目非常庞大,为了能够更加有效地管理,Linux系统将其进行分组block group,每一个都相当于一个小的文件系统:同时具有superblock、iNode、datablock以及文件系统描述等信息。
2.2 data block
Data block是用来存放数据的,其有1k、2k和4k的区别。一个Data block只能存放一个文件的数据,因此较大的data block容易造成data block填充不满从而导致磁盘利用率不高。而较小的data block又难以管理,因此需要结合实际Linux主机的用途设置data block大小。
2.3 superblock
Suoperblock主要用来记录整个文件系统的iNode、datablock的使用情况。
2.4 Filesystem Description
文件系统描述说明,用来规定每组block group的划分情况。
2.5 blcok bitmap
区块bitmap,该结构主要用来表述哪些data block是已经被使用了的,哪些是可以后期继续使用的。
2.6 inode bitmap
类似block bitmap。
3 目录树
与一般文件相比较,目录主要记录目录下面的文件名,而文件才实际存放数据内容。因此对于目录而言,分配至少一个datablock用来存放文件名。
3.1 目录树读取
每一个目录对应有自己的block,并且目录下的文件名存放到该block中,因此我们要读取目录下的文件时,需要先找到该目录的iNode和block,然后再block中找到对应的文件名,然后找到对应文件名的iNode节点,然后找到数据datablock,最后从中将数据读取出来。