本文转载自:https://blog.csdn.net/tongyijia/article/details/52809281node
先来提出三个概念:
- superblock
- inode
- blocklinux
superblock:记录此文件系统的总体信息,包括inode,block总量,使用量,剩余量,以及文件系统的格式与相关信息等。
inode:记录文件的属性,一个文件占用一个inode,同时记录此文件数据所在的block号码。
block:实际记录文件的内容,若文件太大,则会占用多个block。学习
inode和block都有编号,在文件系统最初格式化的时候就已经分好了inode和block块并编好号码。假设咱们要在linux中存储一个文件,那么,文件的名称权限,各类属性都存储在它的inode中,每一个文件只有一个inode,这个inode中还存储着这个文件数据的实际放置的block号码。例如咱们要读取一个文件,先去读取这个文件的inode,对比权限等属性,如有权限读取,则根据inode中存储的block号码依次去block块读取数据。以下图: .net
这种文件系统咱们就叫作索引式文件系统(indexed allocation)3d
这里作一个对比,闪存的FAT格式,这种文件系统并无inode的存在,因此,FAT没有办法将这个文件的全部block在一开始就读取出来,每一个block的号码都记录在前一个block中,读取时以下: blog
这样的话,在读取文件时,它须要一个个将block读出后,才会知道下一个block所处的位置,若是一个同一个文件数据写入的block分散的太过厉害,则咱们的磁盘读取头没法在磁盘转一圈就获得全部数据,要多转好多圈才可以完整的读取到这个文件的内容。索引
碎片整理:文件若是写入的太过离散的话文件读取的效能将会变的不好,碎片整理就是将同一个文件所属的block汇整在一块儿,这样数据的读取会比较容易,FAT文件系统就常常须要碎片整理,EXT2是索引式文件系统,基本不太须要经常进行碎片整理,但文件系统使用的时间过久的话,经常删除/编辑/新增文件时仍是会可能形成文件数据太过于离散的问题,因此偶尔仍是须要进行整理。图片
linux的EXT2文件系统的学习:ip
当一个文件系统高达数百GB时,inode,block的数量太庞大不容易管理,所以EXT2文件系统在格式化是基本是区分红多个区块群组(block group),每一个区块群组又有本身独立的inode/block/superblock系统,如图:get
文件系统最前面有一个启动扇区(boot sector),这个启动扇区能够安装开机管理程序。
data block:
放置文件内容的地方,在EXT2文件系统中支持的block大小有1K,2K,4K三种。在格式化时block就固定了,且每一个block都有编号,便于inode记录。因为block大小的差别,会致使文件系统所能支持的最大磁盘容量与最大单一文件容量不一样。以下:
这里关于block有几点提示:
- 原则上,block的大小与数量在格式化完成后就不能再改变了(除非从新格式化)
- 每一个block中最多只能放置一个文件的数据
- 若是文件大于一个block大小,则一个文件将会占用多个block
- 若是文件小于block,则该block的剩余容量就不能被使用了
inode table:
inode记录的数据至少有:
inode的一些特点:
inode的大小是有限的,那么,若是一个文件的很大,block数量不少,inode须要记住的block号码也不少,那么,inode这时是如何记住的呢?看了下面这个图就会明白了:
inode中的双简接与三间接就解决了这个问题。将block号存在block中,是否是就能存下了?
Superblock:
Superblock也是一个很重要的地方,它记录了整个文件系统的相关信息。它记录的信息主要有:
一个vaild bit数值,若此文件系统已经被挂载,此值为1,若为挂载则为0
Superblock是很是重要的,由于整个文件系统的基本信息都存在于此。通常来讲Superblock大小为1024bytes。
其实,每一个block group均可能含有superblock,但咱们又说一个文件系统只有一个superblock,这是由于除了第一个block group含有superblock外,后续的block group也可能含有superblock做为第一个block group中的superblock的备份,这样,有利于superblock的救援。
Filesystem Description(文件系统描述说明):
这个区段能够描述每一个 block group 的开始与结束的 block 号码,以及说明每一个区段 (superblock,bitmap, inodemap, data block) 分别介于哪个 block 号码之间。
block bitmap (区块对照表):
block bitmap当中能够知道哪些block是空的,咱们能够根据这个快速的找到能够存放数据的空block。
当你删除文件的时候,这个文件本来占用的block号码就必须释放出来,此时,在block bitmap中,相对应的block号码就要修改为【未使用】的状态。
inode bitmap (inode对照表)
与block bitmap功能相似,这里不作说明。
感谢阅读,欢迎指正。