1:简单说说磁盘以及分区的构成,我们知道,磁盘由盘面,磁头,磁臂构成,假设磁盘盘面上只有一层,我们将盘面一圈圈的划分,然后以原点为中心,连一条线出去,某个圈上被截出来的部分就是扇区,整个一个圈就是一个柱面,我们经常说的分区其实就是以柱面为单位的,0磁道1扇区(一个扇区一般情况下为512字节)的MBR记录了操作系统内核文件的位置,占446字节,然后分区表占用66字节.
2:说说文件系统,我觉得它存在的必要性就是方便我们操作系统能以一种他自己的方式去处理数据,Windows的文件系统为NTFS,U盘有fat,Linux有ext2,ext3,ext4等,叫做(linux Second Extended file system),下面我们说说linux文件系统ext2的管理方式,首先介绍三个概念:
1:data block:就是我们数据实际存储的地方。
2:inode:记录我们某个文件的存储信息,一个文件一个inode,一个inode存储的信息有此文件对应的data block号码。
3:super block:记录的是我们磁盘的inode使用量,剩余量等。
我们的磁盘是被在格式化的时候确定block的大小的,一般为1,2,4K,正常情况下一个扇区
的大小为512个字节,也就是大概0.5K左右,所以block为1K就是一个block为两个扇区,
同理往上继续计算就OK,block的大小实际上用dumpe2fs
命令就可以查看,它可以反映
很多的信息,好,先不着急,跳出去,我们继续以一种俯视的眼光看待我们的磁盘,我
们发现实际上格式化之后所有的区域都被划分成了扇区,但是我已经说过磁盘读取的时
候最小单位并不是扇区,而是”块”,并且注意:我们的磁盘是被分成block组的,实际上
也是为了解决查找迅速的问题,要是inode中记录的block位置太散,那岂不是要将整个分
区遍历一遍,不太好吧,所以就像我们分区的目的是不想把磁盘遍历一遍一样,我们的
block分组的方式初衷也是一样的,就是为了更加集中每一块block的大小,以便于提高我
们查找的速度。下面我们走进去一个block group 的世界看看:
实际上我们只要能理解一个block group中的内容,别的都一样,我们就将这一个block
group看做一次磁盘或者一个分区,它中包含的内容有:
1:super block:记录整个文件系统的相关的地方,主要有block和inode的使用量和总量,block和inode的大小,文件系统的挂载时间,最近一次写入数据的时间等。
2:文件系统描述(File system Description):描述每个block group的开始与结束的block号码,以及每个区段(superblock,bitmap等)分别介于哪一个block之间,
3:块对照表(block bitmap):它反应的是具体的我们目前block的详细信息,从它中我们可以知道哪个block是空的,可以继续存数据,同样,删除文件时候,原本的block也要还回来。
4:inode对应表:不用多说,当然是我们现在系统中inode的使用情况。
以上的四个东西都是记录了一个数据,要说详细的话,比如super block中记录了block使用了100个,那我从block bitmap中可以知道到底是哪100个被使用,但是这100个的具体信息就要牵扯到我们下面要介绍的这个东西:inode table : 它记录了具体的信息,就像一个桌子,上面摆放着我所有的inode,然后每个中对应哪些block都一目了然,那我们看看某个具体的block中记录的是什么
5:我们用stat 命令查看到的信息,实际上我们的系统读文件的时候是找inode的,由于每个文件都对应一个inode,找到inode才能读出block的内容,那么一个文件对应一个inode,这就表示我们的系统能创建的文件数目与我们的inode数量有关,所以即使我们的某个block group 有空的block,但是没有inode,那也是不能新建文件的。
6:data block:那就是我们实际记录数据的地方。
7:inode与目录树的关系:
下面我说说inode与目录树的关系,我们的ext2文件系统正常情况下每当我们新创建一个目录,系统就会为我们自动分配一个inode和一个block,inode用来记录目录的创建信息,权限以及前面提到的分配的block号码等东西,block就会记录我们的目录中文件名和文件的inode,文件的inode记录的是文件的具体权限等信息和文件数据所占用的block,如果这一个block不够,那就继续在拿一个block使用,所以我们一般ls -ld查看一个目录的时候,所查到的大小一般为1,2,4K的整数倍。
8:继续说inode与目录树的读取,实际上我们已经可以发现我们的系统中无论是读取文件还是读取目录,都是先读取inode的内容,所以我们的目录中要是有x权限,才能读取我们目录的inode,知道权限信息,再读取block,才能看到具体有什么文件,在看文件的inode,才知道你有没有r权限读文件。
9:文件系统的大小与磁盘的读取性能:
并不是我们将一个分区分的越大越好,原因是我们的block块是随意选取位置的,如果分散的比较厉害,那么肯定会影响查找速度。
10:日志文件系统:正常情况下,我们将数据写入磁盘的过程中,首先更新block块的内容,然后更新inode的内容,然后更新inode tabel和super block,要是我们在写数据进磁盘的过程中一不小心断电了,没有更新inode tabel和super block的内容,那下一次开机虽然可以同步,但是比较麻烦,正常情况下需要将磁盘全部对比一遍,要是是日志文件系统,那么就可以将写入的信息写进这个日志文件系统中,它是一个128M的块,下次开启检测的时候检测的范围就小多了。
11:再简单描述下VFS,它将各种文件系统全部处理,然后提供统一接口。实际上VFS很强大。