1,磁盘组成和分区介绍
(1)组成:圆形的盘片(主要记录数据)、机械手臂与机械手臂上的磁头(主要读写盘片上的数据)、主轴马达、可以转动盘片、让机械手臂的磁头在盘片上读写数据、扇区(最小的物理存储单位,每个扇区为512bytes)、将扇区组成一个组成一个圆环那就是柱面(柱面是分区的最小单位),第一个扇区很重要,里面有硬盘主引导记录以及分区表,其中MBR占有446bytes,partition table则占有64bytes.
(2)所谓的磁盘分区是指:告诉操作系统我这块磁盘在此分区访问的区域是由A柱面到B柱面之间的块,那么指定分区的柱面范围是记录在哪里呢?就是在第一个扇区的分区表中,但是因为分区表仅仅只有64bytes,因此最多智能记录四条分区的记录,这四条记录我们称为主分区和扩展分区,其中扩展分区还可以再分出逻辑分区(logical),而被格式化的则仅有分区与逻辑分区。其中,IDE硬盘最多有59个逻辑分区,SATA硬盘则有11个逻辑分区
2,文件系统的特性
(1)格式化分区:给定一个文件系统
(2)文件系统:文件系统通常或将这两部分的数据分别存放再不同的块,权限、属性和记录此文件的block号码放在inode中(一个文件一个inode),至于实际数据则放置到date block块中(文件太大时会占用多个block),另外还有一个超级块(superblock)会记录整个文件系统的整体信息,包括inode与block的总量、使用量、剩余量等等。
(3)由于每个inode与block都有编号,而每个文件都会占用一个inode,inode内则会有文件数据放置的block号码,因此,我们可以知道的是,如果能够找到文件的inode的话,那么自然就有知道之歌文件所放置数据的block号码,当然也就能够读出该文件的实际数据了。
3,关于Linux的Ext2文件系统
(1)Ext2文件系统再格式化的时候就是区分多个块组,每个块组都有独立的inode/block/superblock系统,在整个规划中,文件系统也就是分区的最前面有一个启动扇区(boot sector),这个启动扇区可以安装引导装载程序。
示意图如下
每个block-group示意图:
a,data block(数据块)
数据块是用来存放数据的地方,每一个block有特定的大小,可以在格式化的时候来指定大小,大小分别是1KB、2KB、4KB。
由于block大小的区别,会导致文件系统能够支持的最大磁盘容量与最大单一文件容量并不相同。
如下表示的大小:
分析一下,inode/block与文件大小的关系,inode的大小只有128bytes,记录一个block号码需要花掉4byte,系统将inode记录block号码的区域定义为12个直接、一个间接与一个三间接记录区
inode有12个直接指向block号码,所谓的间接就是再拿一个block来记录block号码,以此类推
以最小的block大小1KB来说明最大单一文件限制
直接指向:12x1K=12K
间接指向:256x1K=256k (256的来源就是1KB=1000byte,1000byte / 4byte = 256 个)
双间接指向:256 x 256 x 1K = 256^2K
三间接指向:256 x 256 x 256 x1K = 256^3K
总额:12+256+256^2+256^3=16G
以上方法不能用再2K及4K的block大小的计算中,因为大于2K的block将会收到Ext2文件系统本身的限制,所以计算结果会不太符合。
b,inodetable
inodetable主要记录文件属性以及该文件的实际数据是放置再哪几号block内!属性包括:文件的访问模式、该文件的所有者与组、该文件的大小、该文件创建或状态改变的时间、最近一次的读取时间、最近一次修改的时间、每个文件会占用一个inode,创建文件的数量与inode的数量有关;系统读取文件时需要先找到inode,并分析Inode所记录的权限与用户是否符合,若符合才能开始实际读取block内容。
c,superblock
记录整个文件系统的地方,比如:block和inode的总量、未使用与已使用的inode/block数量、block与inode大小(block为1K、2K、4K,inode为128bytes)等等
d,file system description (文件系统描述说明)
描述每个block、group的开始与结束的block号码,以及说明每个区段分别介于哪个block号码之间(可以通过独门dumpe2fs命令查看)
e,block bitmap (block 对照表)
记录使用与未使用的block号码
f,inode bitmap (inode 对照表)
记录使用与未使用的inode号码
关于Linux的命令。以上的每个区段与superblock的信息都可以使用dumpe2fs命令去查询
4,关于文件系统与目录树的关系
首先了解到每一个文件(不管是目录文件还是一般文件)都会占用一个inode,且可以依据文件内容的大小来分配多个block给该文件使用
(1)目录:当在Ext2系统中,新建一个目录时,Ext2会分配一个inode与至少一块block给该目录,其中,inode记录该目录的相关权限与属性,并且记录分配到那块的block号码;而block则是记录在这个目录下的文件名与该文件名占用的inode号码数据,如果一个分区使用的block大小为4K,因此每一个目录都是4K的倍数。如果某个目录下面文件数太多会导致一个block无法容纳所有的文件名与inode对照表时,Linux会给与该目录多一个block来继续记录相关的数据。
(2)目录树的读取:比如/etc/passwd文件读取。/的inode查询权限 > /的block找到etc目录的inode > etc/的inode查询权限 > etc/的block找到passwd的inode >passwd的inode查询权限 >passwd的block读取内容
5,文件的访问与日志系统功能
(1)新增文件:a,先确定用户对添加文件的目录是否有w、x的权限;b,根据inode bitmap找没有使用的inode号码,将新文件的权限属性写入;c,根据block bitmap找到没有使用的block号码,将实际数据写入block中,并且更新inode的block的指向;d,更新inode bitmap 和block bitmap、superbolock
(2)关于日志文件系统:在文件系统中规划处一个块,用来记录写入或修订文件的步骤;a,当系统要写入一个文件时,先在日志记录块中记录某个文件需要写入的信息;b.开始写入文件的权限与数据,并开始更新metadata,c,完成数据与metadata的更新后,日志记录块中完成对该文件的记录。
6,Linux文件系统的操作
首先为了解决等待磁盘的写入与读取的时间长的问题,Linux采取异步处理的方式
系统读取一个完整的文件放到内存中,此时该数据会被设置成clean的 >修改该文件,内存中该数据会被设置成dirty的(此时所有的操作都是在内存中进行的)>系统会不定时的将内存设为dirty的数据写入磁盘,以保持内存与磁盘中数据的一致性(也可以使用sync命令强制将数据写入磁盘)
7,挂载点的意义
每个文件系统都有独立的inode、block、superblock等等信息,这个文件系统要连接到目录树中才能被我们使用,将文件系统与目录树结合的操作就称为挂载(挂载点一定时一个目录,该目录称为该文件系统的入口)
8,VFS
整个Linux文件系统都是通过一个名为VFS(虚拟文件系统)的内核功能去读取文件系统的,它来进行管理
好了,上面是属于第一部分,这是第一个博客,emmm,继续努力,当然也有引用鸟哥私房菜中的介绍,主要还是为了帮助自己学习