文件系统1、引入“块”概念2、引入“分区”概念3、引入文件系统3.1、块组Block Group3.1.1、Data Blocks3.1.2、Block Bitmap3.1.3、inode Table3.1.4、inode Bitmap3.1.5、GDT3.1.6、Super Block3.2、补充问题1、引入“块”概念一次只访问一个扇区扇区才512字节访问效率太低了。我们规定连续8个扇区为块即块的大小为4KB 4096字节。块是文件存取的基本单位。2、引入“分区”概念像我们的电脑就有“C盘 D盘”的分区概念。Linux对于磁盘的空间会做一个“分区”。如果把一个分区管理好了那么其它的分区就都可以采取这种管理策略。3、引入文件系统Linux采用的文件系统如图所示其中Partition [n]就是分成的若干个分区。分区是文件系统的基本单位。3.1、块组Block Group分区太大了所以分区又分为若干个块组。如果能把块组管理好就能把分区管理好。3.1.1、Data BlocksData Blocks其中包含的就是存储数据的块。Data Blocks中块的块号在整个文件系统中是唯一的。这个时候问题来了怎么知道哪个块被使用哪个块空闲呢3.1.2、Block BitmapBlock Bitmap是位图本质是用比特位存储Data Blocks中块的使用情况。由于块的块号在整个文件系统内唯一我们就可以根据块号通过位运算找出Block Bitmap的对应比特位以查看块是否被占用。3.1.3、inode Table文件组成文件 内容 属性内容由数据块Data Blocks来存储那属性呢答案是inode。inode是Linux中一个struct结构体。inode存储的就是文件属性。从这里我们也可以看出Linux采用的文件系统一个明显的特点是文件内容和文件属性分开存储。结构体struct inode的大小是唯一的一般128字节。inode有inode number作为一一映射inode number在整个分区上也是唯一的。同样每一个inode都需要许多块存储。我们也需要知道专门用于存储inode的块的占用情况。3.1.4、inode BitmapBlock Bitmap是位图本质是用比特位存储用于存储inode的块的使用情况。3.1.5、GDTGDT全程 Group Descriptor Table即“块组描述符表”。GDT记录的是整个块组的信息包括Block Bitmap, inode Bitmap, inode Table, Data Blocks的范围Data Blocks空余的个数inode Table空余的个数…3.1.6、Super BlockSuper Block即“超级块”。超级块存储的是整个分区的文件系统信息。3.2、补充问题新建一个空文件要不要占据空间要。因为要创建inode描述文件的属性而inode占空间。查找文件时通过inode number能帮我们找到文件的inode(属性)那么文件的内容如何找到呢__le32 i_block[EXT2_N_BLOCKS];/* Pointers to blocks */结构体ext2_inode中存储了一张映射表建立了inode与存储数据的块号的联系即建立了inode number与存储数据的块号的联系。进一步理解文件的增、删、查、改。文件的增、删、改动作都大差不差创建或修改inode开辟或修改新的Data Blocks、Blocks Bitmap修改inode所在块组的inode Bitmap的比特位…而文件的删除就不太一样了也可以说更简单只需抹除Block Bitmap和inode Bitmap里的记录信息就可以了。也就意味着删除文件再新建不用特意抹除数据而是在新建的时候覆盖掉旧数据就可以了。所以日常生活中下载数据往往很慢而删除数据往往是几秒钟的事。格式化格式化其实就是向GDT里写入最开始的文件系统信息。所以过去的一切修改痕迹都会被覆盖我们也就无法获得过去的文件信息。inode中没有文件名inode存储的是文件的属性信息但是inode中并没有存储文件的文件名。这又是怎么一回事文件名保存在目录文件中。目录文件也是文件目录文件保存的内容inode number 与文件名的映射关系。访问文件其实是通过文件的inode number完成的。未来访问某一个文件我们就必须知道文件所处的当前目录而当前目录也是一个文件我们就必须知道当前目录的上一级目录……所以我们就需要绝对路径、相对路径、PWD等表示路径的东西。