【Linux】磁盘存储+文件系统简介
目录
1、理解硬件
1.1 磁盘构成
1.2 CHS地址定位
1.3 磁盘的逻辑结构
1.3.1 理解过程
1.3.2 真实过程
2、引入文件系统
2.1 引入“块的概念”
2.2 引入“分区”概念
2.3 了解分组细节
正文:
1、理解硬件
1.1 磁盘构成
磁盘由主轴马达、磁盘、磁头、磁头臂、永磁铁构成。如下图:
图中那面光滑的可以照镜子的圆盘就是磁盘,光滑的磁盘上其实有一圈一圈磁道,磁道又由一个一个扇区组成,每条磁道上扇区个数都是相同的。
扇区:是磁盘存储数据的基本单位,512字节,块设备
如何定位⼀个扇区呢?
• 可以先定位磁头(header)
• 确定磁头要访问哪⼀个柱⾯(磁道)(cylinder)
• 定位⼀个扇区(sector)
1.2 CHS地址定位
每个磁头、磁道、扇区都有编号,起始编号分别是:0,0,1 这就称为CHS地址定位
文件=内容+属性都是数据,无非就是占据那几个扇区的问题!能定位一个扇区了,能不能定位多个扇区呢?
扇区是从磁盘读出和写入信息的最小单位,通常大小为 512 字节。
磁头(head)数:每个盘片一般有上下两面,分别对应1个磁头,共2个磁头
磁道(track)数:磁道是从盘片外圈往内圈编号0磁道,1磁道…,靠近主轴的同心圆用于停靠磁头,不存储数据
柱面(cylinder)数:磁道构成柱面,数量上等同于磁道个数
扇区(sector)数:每个磁道都被切分成很多扇形区域,每道的扇区数量相同
圆盘(platter)数:就是盘片的数量
磁盘容量=磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数
细节:传动臂上的磁头是共进退的
柱面(cylinder),磁头(head),扇区(sector),显然可以定位数据了,这就是数据定位(寻址)方式之一
**CHS寻址对早期的磁盘⾮常有效,知道⽤哪个磁头,读取哪个柱⾯上的第⼏扇区就可以读到数据了。但是CHS模式⽀持的硬盘容量有限,因为系统⽤8bit来存储磁头地址,⽤10bit来存储柱⾯地址,⽤6bit来存储扇区地址,⽽⼀个扇区共有512Byte,这样使⽤CHS寻址⼀块硬盘最⼤容量为256 * 1024 * 63 * 512B = 8064 MB(1MB = 1048576B)(若按1MB=1000000B来算就是8.4GB)
1.3 磁盘的逻辑结构
【结论:磁盘是一个以扇区为单位的一维数组】
1.3.1 理解过程

每面磁盘扇区总数相等,每条磁道扇区个数相等。
把多面磁盘按线性结构展开就是一个一维数组 ,确定一个扇区等于确定一个一维数组下标
用数组下标定义任意扇区称为:LBA
但系统不认识LBA只认CHS,所以要把LBA转换成CHS(转换由磁盘自己完成,我们知道磁盘容量就行)
LBA转成CHS:
• 柱⾯号C = LBA // (磁头数*每磁道扇区数)【就是单个柱⾯的扇区总数】
• 磁头号H = (LBA % (磁头数*每磁道扇区数)) // 每磁道扇区数
• 扇区号S = (LBA % 每磁道扇区数) + 1
• "//": 表⽰除取整
例如:告诉我们磁盘有100面,10磁道,有个下标124,如何转成CHS?
124/100=1(H)找到第一面
124%100=24,24/10=2(C)确定磁道
24%10=4(S)确定扇区
这就是把LBA转换成CHS过程。
以上是以面为单位展开,磁盘真实展开并不以物理盘面展开,而是以柱面为单位展开!
1.3.2 真实过程
柱面是⼀个逻辑上的概念,其实就是整个磁盘所有盘面的统一磁道。
所以,磁盘物理上分了很多⾯,但是在我们看来逻辑上,磁盘整体是由“柱⾯”卷起来的。
所以,磁盘的真实情况是:
磁道:
某⼀盘⾯的某⼀个磁道展开:
即:⼀维数组
柱⾯:
整个磁盘所有盘⾯的同⼀个磁道,即柱⾯展开:这不就是个二维数组
整盘:整个磁盘不就是多张⼆维的扇区数组表(三维数组)
所以,寻址⼀个扇区:先找到哪⼀个柱⾯(Cylinder) ,在确定柱⾯内哪⼀个磁道(其实就是磁头位置Head),在确定扇区(Sector),所以就有了CHS。
我们之前学过C/C++的数组,在我们看来,其实全部都是⼀维数组:
为什么要用CHS寻址,因为磁盘是三维的有三个下标,下标顺序不能乱!
LBA转换成CHS本质:一维数组下标转换成三个数字【数组的下标就是每⼀个扇区的LBA地址。OS使⽤磁盘,就可以⽤⼀个数字访问磁盘扇区了】磁盘就是一个以扇区为单位的一维数组。
2、引入文件系统
2.1 引入“块的概念”
其实硬盘是典型的“块”设备,操作系统读取硬盘数据的时候,其实是不会⼀个个扇区地读取,这样效率太低,⽽是⼀次性连续读取多个扇区,即⼀次性读取⼀个”块”(block)。
硬盘的每个分区是被划分为⼀个个的”块”。⼀个”块”的大小是由格式化的时候确定的,并且不可更改,最常⻅的是4KB,即连续八个扇区组成⼀个 ”块”。”块”是文件存取的最小单位。如下图:
通过上图,当给你一个磁盘总容量,总容量/4KB就知道有多少块,拿着块号++/--往上找不就可以访问任意扇区。
因此,OS看待磁盘认为是一个块设备,每块都有下标,文件OS的角度看待磁盘也是块设备,有两种访问方式:LBA和块号,而LBA又可以转换成块号。
2.2 引入“分区”概念
磁盘是一个个块组成,当磁盘很大OS还是不好管理,所以再分区,如果还大就再分组。把每个组管理好等于把磁盘管理好(分治思想)
把磁盘分区后只要知道从哪个块号开始到哪个块号结束为一个分区,也就可以把整个分区内的内容管理好。例如Windows上我们有C、D、E、F盘,实际上我们只有一块物理盘,只是分区把它分成大家所看到的C、D、E、F盘。
2.3 了解分组细节
文件 = 内容 + 属性 对于Linux来说不管是内容还是属性都是数据,既然是数据就要存储。在还没被加载到内存前存放在磁盘中。
1. Linux中内容和属性分开存储
2. OS文件系统中和磁盘进行IO的基本单位是4KB(所以每个数据块大小是4KB)
以上是对文件系统的简要介绍,具体inode如何存储等一系列问题都还没解答!为了知识点的连贯性,统一放在下节ext2文件系统部分详细介绍。
感谢观看,下节再见~