主要阐述以下内容:
磁盘的内部结构及实现机制
分区的结构及实现机制
块的构造及原理
扇区的构造及结构
由于机械硬盘的访问机制为移动磁头,并等待磁碟旋转,因此在设计磁盘时,需要考虑如何组织数据为顺序访问,并且最大限度提供一次顺序访问尽可能多的数据
由于块大小设计直影响到性能、内存、空间等因素,因此需要合理设置块大小,同时需要合理的为业务扩展预留升级空间
机械磁盘读写原理
机械硬盘获取数据的方式为:
1、通过查找meta数据(图中的Data Meta,它是用于描述数据的数据,所以称为数据元,通常这些数据会被Cache在磁盘Cache或OS Cache中),捕获数据存储物理区域。包括:磁头指向的磁道位置、磁道的起始、结束位置等,其中还包含了数据块的标记,如使用状态,分区、块、卷、扇区等等存储细节等,是磁盘运作机制的核心组件
2、驱动磁碟旋转(服务器通常磁盘会一直旋转,但为了省电及减少对驱动轴的损耗,通常会对旋转进行优化,即空闲时降低磁盘旋转速度或停止转动,但重新驱动磁盘也会消耗大量的功耗,厂家进行了很多节能减排的优化措施,为绿色环保做了不少贡献)
3、将磁头(图中的head)移动到指定的磁道,并从指定的起始位置开始读取bit流,一直至指定的结束位置,并将信号传送至处理程序,最后转化为OS识别的数据
机械硬盘核心组件:
1、磁盘控制器:内部包含用于控制多磁碟并行访问的机制,包括磁头移动、盘片旋转、供电、缓存、写保护等,是整个磁盘的核心组件
2、分区(LUN):机械硬盘要被使用,通常先要被分区,并基于分区进行格式化,格式化将产生Meta数据,Meta数据通常会占用部分磁盘空间。空间大小取决于Block大小、分区量,Block越小,需要消耗的空间,用于于索引磁盘数据,接下来我们将还会介绍块及扇区的组合方式,多碟磁盘中,磁盘控制器将在每块磁碟中划分一块空间用于该分区使用,达到并行访问的目的,提升响应速度(通常某些访问需要集中访问的数据都集中在某些分区中),此处的分区不同于OS中的分区,此处为物理分区
3、块:块由扇区构成,块大小决定了数据访问的性能,如果大数据如果存储在小块中会导致浪费大量的数据元空间,并消耗更多的Cache、更多的寻道时间(数据是被分散再分区中的各个位置),所以当应用数据块比较小的时候,我们建议将数据划分成更大的块,提升性能,但如果块划的太大,会导致存储空间的浪费,当这些不需要的数据被LOAD到应用中时,同样会消耗额外的OS内存,通常我们建议根据业务的类型,在应用层选择合适的数据集大小,并设置合理的磁盘块大小
块由扇区构成,扇区直接构建再磁碟的磁面上,每个扇区为512byte,业绩意味着4KB的块大小将需要8个扇区组成(通常Linux设置块大小为4K),但再某些数据库应用中我们将数据库的数据设置为更大,如8K、16K、64K,日志设置为更大,如8K、16K、64K等,结构如下
4、扇区:扇区是磁盘存储的单元,扇区顾名思义,机械硬盘是圆形的,通过分区格式化后将得到一个一个的扇形结构,一条磁道的存储空间被格式化后将的到大量的扇形结构,磁盘的扇区大小为512byte,其在磁盘的结构如下图:
图中我们可以看到扇区结构非常复杂,包含数据区域、扇区分界标识区域、扇区间隙区域,磁盘在处理数据时为了更好的保护数据及容错、设计了扇区分界标识及扇区间隙(当然远远不止如此)