磁盘面:磁盘是由一叠磁盘面组成,见下左图 。
磁头(Heads):每个磁头对应一个磁盘面,负责该磁盘面上的数据的读写 。
磁道(Track):每个盘面会围绕圆心划分出多个同心圆圈,每个圆圈叫做一个磁道 。
柱面(Cylinders):所有盘片上的同一位置的磁道组成的立体叫做一个柱面 。
扇区(Sector):以磁道为单位管理磁盘仍然太大,所以计算机前辈们又把每个磁道划分出了多个扇区,见下图

文章插图

文章插图
硬盘结构
硬盘的内部是金属盘片,将圆形的盘片划分成若干个扇形区域,这就是扇区 。若干个扇区就组成整个盘片 。为什么要分扇区?是逻辑化数据的需要,能更好的管理硬盘空间 。以盘片中心为圆心,把盘片分成若干个同心圆,那每一个划分圆的“线条”,就称为磁道 。
硬盘内的盘片有两个面,都可以储存数据,而硬盘内的盘片往往不止一张,常见的有两张,那么,两张盘片中相同位置的磁道,就组成一个“柱面”,盘片中有多少个磁道,就有多少个柱面 。盘片两面都能存数据,要读取它,必须有磁头,所以,每一个面,都有一个磁头,一张盘片就有两个磁头 。
硬盘的存储容量=磁头数×磁道(柱面)数×每道扇区数×每道扇区字节数 。
磁道从外向内自0开始顺序进行编号,各个磁道上的扇区数是在硬盘格式化时确定的 。
文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector) 。每个扇区储存512字节(相当于0.5KB) 。
比较古老的CHS (Cylinder/Head/Sector :磁头(Heads)、柱面(Cylinder)、扇区(Sector))结构体系. 因为很久以前,在硬盘的容量还非常小的时候,人们采用与软盘类似的结构生产硬盘 。也就是硬盘盘片的每一条磁道都具有相同的扇区数,由此产生了所谓的3D参数,即是磁头数(Heads)、柱面数(Cylinders)、扇区数(Sectors)以及相应的3D寻址方式 。

文章插图
以前老式的磁盘,每个磁道的扇区都一样,这样外磁道整个弧长要大于内部的扇区弧长,因而其磁记录密度就要比内部磁道的密度要小 。最终,导致了外部磁道的空间浪费 。
解决CHS磁盘浪费空间的方案有两种:
1、尽量减少单个扇区的宽度,从而让每个扇区面积尽量一样

文章插图
2、改变磁道中的扇区数量

文章插图
目前硬盘都采用这种技术:ZBR(Zoned Bit Recording)区位记(Zoned zōnd )
Zoned-bit recording(ZBR 区位记录)是一种物理优化硬盘存储空间的方法,此方法通过将更多的扇区放到磁盘的外部磁道而获取更多存储空间 。

文章插图
ZBR磁盘扇区结构示意图
使用ZBR 区位记录法磁盘的特点:
读外圈的数据快,读内圈的数据慢,所以测试硬盘经常看到读取速度越来越慢的曲线图就很正常了 。

文章插图
磁盘IO时的过程 。第一步,首先是磁头径向移动来寻找数据所在的磁道 。这部分时间叫寻道时间 。
第二步,找到目标磁道后通过盘面旋转,将目标扇区移动到磁头的正下方 。
第三步,向目标扇区读取或者写入数据 。到此为止,一次磁盘IO完成 。
故:单次磁盘IO时间 = 寻道时间 + 旋转延迟 + 存取时间 。
对于旋转延时,现在主流服务器上经常使用的是1W转/分钟的磁盘,每旋转一周所需的时间为60*1000/10000=6ms,故其旋转延迟为(0-6ms) 。对于存取时间,一般耗时较短,为零点几ms 。对于寻道时间,现代磁盘大概在3-15ms,其中寻道时间大小主要受磁头当前所在位置和目标磁道所在位置相对距离的影响 。
操作系统通过按磁道对应的柱面划分分区,来降低磁盘IO所花费的的寻道时间 ,进而提高磁盘的读写性能 。
【linux系统磁盘类型,磁盘的物理结构及磁盘IO过程详解】
推荐阅读
- Linux中Cache内存占用过高解决办法
- 利用微信公众号+类豆瓣小组网站 打造正规自动赚钱系统
- Linux 磁盘分区工具和挂载,fdisk管理分区详解
- 高可用集群系统如何防止脑裂
- 在线升级苹果macOS操作系统最详教程
- 最全面的各类RAID详解
- Linux用户态进程的内存管理
- 如何在 Linux 中删除文本中的回车字符
- linux如何用ftp脚本自动下载文件
- 太傻了!下次二面再回答不好“秒杀系统“设计原理,我就捶死自己
