硬盘驱动器(HDD)工作原理详解:从硬件结构到数据读写
硬盘驱动器(HDD)工作原理详解:从硬件结构到数据读写
硬盘驱动器(HDD)是计算机存储设备的重要组成部分,其工作原理涉及复杂的机械和电磁技术。本文将通过图文结合的方式,深入浅出地介绍HDD的内部结构、工作原理以及数据读写过程。
1. 硬盘拆解
1.1 盘片(platter)
盘片是存储数据的地方:
- 根据存储容量的不同,硬盘可能会有多个盘片堆叠。
- 磁盘由铝镁合金和其他合金的多个涂层组成,其中磁性功能层是120nm的钴铬钽合金薄层,由磁性微块组成,磁极方向能变。
盘片安装在主轴上,主轴使用中心的无刷直流电机以7200rpm的等速度旋转。
1.2 机械臂装置
机械臂装置包括以下几个组成部分:
- 机械臂(arm):每个盘片上下各有一个臂。
- 滑橇(slider)和读写头(read/write head):每个臂的末端有一个称为slider的模块,它里面又包括了一个读/写头(注意,读头和写头是分开的两个部件)。
- 读写头停靠装置:只有当盘片全速旋转时,机械臂才会转到磁盘表面上。平时盘片不旋转时,机械臂会停在磁盘边上的一个小塑料装置上。
- 尾部音圈电机(马达):机械臂的尾部有一个音圈电机,由线圈和上下两个强钕磁铁组成。这种马达的速度和精度:读/写头能够在不同磁道上来回移动约20次/秒,位置精度约30nm。
1.3 机械臂-电路板之间的数据线
一条柔性电线沿着机型臂的侧面布线,一边连接到读/写头,另一边连接到一个连接器,该连接器进一步连接到硬盘的主板(PCB)。
1.4 PCB 和上面的芯片
PCB上的主要芯片包括:
- 主处理器芯片
- 内存芯片,作为主处理器的cache
- 控制音圈马达和磁盘主轴电机的芯片
1.5 数据线接口(e.g. SATA)和电源线接口
PCB边缘有两个硬件接口:
- 数据接口:例如SATA接口,用于和电脑主板相连传输数据
- 电源接口:用于给HDD供电
1.6 防尘装置
硬盘有两个防尘装置:
- 垫圈:将磁盘密封起来
- 灰尘过滤器:用于捕获灰尘颗粒
2. 盘片的微观组成
2.1 磁盘(disk) -> 磁道(track)
每个磁盘以同心圆的方式分割为多个磁道,每个磁盘的磁道数量能达到500,000个甚至更多。
2.2 磁道(track) -> 扇区(sector)
沿着直径的方向,所有磁道又被分割为多个扇区。
2.3 扇区内
每个扇区中,依次包含五部分:
- 前导/同步区(preamble or synchronization zone):记录旋转磁盘的确切速度和每个比特位的长度。
- 地址区:帮助读/写头确定当前位于哪个磁道和扇区。
- 数据区:扇区的大小因盘而异,例如老一些的盘是512字节或2KB,新一些的通常是4KB。
- 纠错码(ECC)区:用于校验存储在块中的数据。
- 扇区之间的间隔区:给了读/写磁头一定的容错能力。
3. 写数据
3.1 磁场微块和磁化
扇区是由一个个磁场微块组成的,写头通过改变磁盘微块的磁化方向来实现数据写入,每个磁盘微块大小约为90nm x 100nm x 125nm。
3.2 写入 1bit 的过程
电流施加到write head的线圈之后,就会在此处产生一个强磁场,这个磁场沿着write head向下,聚焦到尖端的一个小点,改变它正下方的磁盘微块极性,磁化之后的微块变成永磁体,能保持这个状态很多年。
3.3 覆盖写
原理跟上面一样,也是逐bit来。如果新写入的bit跟已经存储的一样,磁极就不变,否则就改变一下方向。
4. 读数据
4.1 如何表示 0 和 1
实际的read head,检测的是相邻两个微块的磁极变化,这是因为磁极变化的强度比单个微块的磁场强度要大得多,所以这种方式的检测准确率非常高。
4.2 读头(read head)内部结构
读头里面是多层导电材料,由铁磁材料和非磁性材料的交替组成。这种多层材料具有一种称为巨磁阻(giant magnetoresistance, GMR)的特性,简单来说,穿过它的磁场强度发生变化时,它的电阻率就会变化。
4.3 读取数据:GMR 和读头电阻率
基于GMR特性,根据读头的电阻率就能判断下面存储的0还是1:
- 电阻率较低时,表示读取头下方磁场变化强,对应存储的是bit 1;
- 电阻率较高且无磁场时,对应存储的是bit 0。
4.4 连续 0 的问题
如果较长连续区域的磁极都一样,对应的就是一长串的0,由于读头的精度,有可能会导致多读或少读几个0,导致数据错乱。解决方少:利用每个sector的前导区和纠错码区中的信息。
5. Linux 存储相关的子系统和软件栈
5.1 从进程 read/write 请求到 HDD 读写数据
来自Linux Storage Stack Diagram,涵盖了3.x ~ 6.x多个内核版本,这里先贴一个3.x的,因为简单,方便看出从用户进程发出read/write请求到HDD读写数据的内核模块链路:
虚拟文件系统(VFS)里面分为几类:
- 常规文件系统(ext4, xfs, btrfs, …)
- 网络文件系统(NFS, CIFS, …)
- 伪文件系统(procfs, sysfs, …)
- 特殊文件系统(tmpfs, devtmpfs, …)
再贴一个kernel v6.9的:
5.2 内核 block layer 深入解读
- A block layer introduction part 1: the bio layer, LWN.net, 2017
- A block layer introduction part 2: the request layer, LWN.net, 2017
5.3 其他优质文章
- How does a hard drive work, https://www.explainthatstuff.com/, 2024
- How a Hard Drive Works, cs.stanford.edu, 2012
- HDD from Inside: Hard Drive Main Parts, https://hddscan.com/