目录
前言
磁盘的物理结构
物理结构
磁头和盘片工作解析图
盘面区域划分图(俯视盘面图)
扇区的寻址、定位(CHS定位)
磁盘存储的逻辑抽象结构
LBA定址
文件系统
磁盘分区
EXT2文件系统
组块中的信息介绍
查看inode编号
前言
上两篇文章我们研究的是通过进程将文件加载到内存中打开文件对文件进行一系列的操作;但是在计算机内部不是所有的的文件都被打开,大部分文件是没有被打开的(当前并不需要访问),都在磁盘中进行保存;被进程打开的文件需要管理,没有被进程打开的文件也需要被管理。
没有被打开的文件的核心工作:通过路径快速定位文件,对磁盘中的文件进行增删查改(CRUD)操作。
对文件的管理工作就包括:
- 进程打开的文件进行管理
- 没有被打开的储存在磁盘中文件进行管理
这就是文件系统,文件系统的作用:解决文件的存储问题。
磁盘的物理结构
操作系统如何管理磁盘中未打开的文件就要从磁盘的物理结构说起,延申抽象程逻辑结构进行解密。
物理结构
磁头和盘片工作解析图
这里的盘片可以想象成一个双面的光盘,通过磁盘高速转动和磁头震动两面都可以写入数据 。
盘面区域划分图(俯视盘面图)
磁盘的每一面都含有若干个划分好的宽度相等的同心圆环,又将每个圆环切割成面积相等的扇形形成扇区,扇区的最小存储单元为512字节。
扇区的寻址、定位(CHS定位)
如果我们想要向一个扇区写入:
- 首先要找到那一面,本质就是选择磁头(Head)
- 再选择该面上的哪一个磁道(Cylinder/track)
- 最后选择该磁道上的一个扇区(Sector)
这就是CHS定位法。
当我们找到对应的扇区就可以进行写入,可以向任意一个扇区或者向连续多个扇区写入;当然也可以不指定扇区,直接随机写入。
磁盘存储的逻辑抽象结构
不知道大家小时候有没有玩过磁带,磁带本身是一圈一圈盘起来的上面记录着数据;当我们将磁盘破坏以后,就可以将盘起来的磁带拉成一条线。由原来的圆形结构拉直成现在的线性结构。
通过这个案例我们可以将上面磁盘的每个原型结构盘面抽象成线性结构。所有的面组成一个很长线性结构, 将这个很长的线性结构分成几个面线性结构;再将每个面包含的每条磁道划分成线性结构;最后将每个磁道中包含的扇区分成更小的线性结构。这样我们就将物理磁盘结构抽象成为一个类似与数组的线性结构;对于磁盘的管理就变成了对数组的管理。
LBA定址
一个扇区的大小为512字节,我们将连续的八块扇区组成一个文件块,大小为4KB。
因此操作系统可以按照扇区为单位进行存储也可以基于文件系统,按照文件块为单位进行数据存储。
我们对每个文件块从头开始进行编号,对某个文件进行CRUD操作时只需要找到文件对应的编号即可;这样的方式称为:逻辑区块地址(Logical Block Address, LBA)。
文件系统
磁盘分区
计算机中存放信息的主要的存储设备就是磁盘,但是磁盘不能直接使用,必须对硬盘进行分割,分割成的一块一块的硬盘区域就是磁盘分区。在传统的磁盘管理中,将一个磁盘分为两大类分区:主分区和拓展分区。主分区是能够安装操作系统,是能够进行计算机启动的分区,这样的分区可以直接格式化,然后安装系统,直接存放文件。
磁盘分区的目的:
- 有利于管理,系统一般单独放一个区,这样由于系统区只放系统,其他区不会受到系统盘出现磁盘碎片的性能影响。
- 如果一个分区出现逻辑损坏,仅损坏的分区而不是整个硬盘受影响。
- 每个分区可以根据不同的需求定制。例如,如果一个分区很少往里写数据,就可以将它加载为只读。如果想要许多小文件,就需要使用有许多节点的文件系统分区。
总结:方便管理和降低安全隐患。
就像我们新买的笔记本电脑进行分盘,C盘是系统文件;D盘安装一些软件或者游戏;E盘放我们的代码或者文件等等。
EXT2文件系统
上面我们对一个磁盘进行了分区;假设我们现在有一个500GB的磁盘分为四个区大小分别为100GB、100GB、100GB、200GB,这四个分区的文件存储机制都是一样的,现在我们之研究一个区即可。上面我们提到八个扇区组成一个文件块,那么一个分区就含有数量很多的块,对这些小内存块一一很难管理。但是我们可以将这一块组织起来形成一个块组,对这些形成的块组进行管理。
组块中的信息介绍
Block(块):磁盘中最小存储单元是扇区(1扇区=512Bytes),而文件系统的最小存储单元是Block(一般地,1Block = 4KB = 8 扇区)。在 Ext2 文件系统中,磁盘的整个空间是以块为单位被管理的,块也是被分配来存储数据的最小单位,一个文件即使只有 1 字节,也会至少占用一个存储块。类似于内存中使用地址标记每个字节,文件系统用存储块的块号来标记每个存储块。
Boot Block(引导块):每个磁盘分区的开头 1024 字节大小都预留为分区的启动扇区,存放引导程序和数据,所以又叫引导块。引导块在第一个 Block,即 Block 0 中存放,但是未必占满这个 Block,原因是 Block 的大小可能大于 1024 字节。
inode Table(i结点表):存放文件的属性,如:文件大小、权限、所有者、ACM时间、inode编号、Date blocks中占据的内存块编号。
Data blocks(数据区):磁盘中最小存储单元是扇区(1扇区=512Bytes),而文件系统的最小存储单元是Block(一般地,1Block = 4KB = 8 扇区)。在 Ext2 文件系统中,磁盘的整个空间是以块为单位被管理的,块也是被分配来存储数据的最小单位,一个文件即使只有 1 字节,也会至少占用一个存储块。类似于内存中使用地址标记每个字节,文件系统用存储块的块号来标记每个存储块。
inode Bitmap(inode位图):每个bit表示一个inode是否空闲可用。
Block Bitmap(块位图):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用
GDT(Group Descriptor Table/块组描述符):描述块组属性信息,用来描述每个 group 的开始与结束位置的 block 号码,以及说明每个块(superblock、bitmap、inodemap、datablock) 分别介于哪一个 block 号码之间
Super Block(超级块):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个文件系统结构就被破坏了。
注:超级块并不是每个块组都含有的而是每个分区中的某几个块组含有,当一个超级块失效时含有超级块的块组会将数据进行拷贝。
查看inode编号
ls - l - i
一般情况下,一个文件一个inode,基本上inode每个文件都要在整个分区具有唯一性;Linux内核中识别文件和文件名没有关系只和inode有关系。因此文件名和inode具有映射关系。
总结:
- 内容和属性都是数据,并且内容和属性分开存储;内容存储在block中,属性存储在inode中
- 用户只使用文件名,内核使用inode;文件名和inode具有映射关系
- 新建文件只需要在inode位图中寻找一个空闲的inode,并且根据块位图分配相应的块;并将相应的块的编号和文件的各种属性填入inode即可。
- 删除一个文件只需要修改文件inode对应的inode位图即可。
- 目录也是文件,目录内部直接保存着此目录中所有文件和每个文件的inode的映射关系。
- 文件名不属于文件属性。
今天对Linux下文件系统的分享到这就结束了,希望大家读完后有很大的收获,也可以在评论区点评文章中的内容和分享自己的看法;个人主页还有很多精彩的内容。您三连的支持就是我前进的动力,感谢大家的支持!!!