第2章:存储介质与原理:机械硬盘(HDD)工作原理、固态硬盘(SSD)工作原理、闪存转换层(FTL)详解

聊存储系统,绕不开最底层的介质。说白了,数据最终得有个地方待着。我这些年跟各种存储设备打交道,从老旧的机械盘到最新的NVMe固态,踩过的坑不少。今天咱们就把HDD和SSD的底裤扒开,看看它们到底怎么工作的。

2.1 机械硬盘(HDD)工作原理

机械硬盘,老当益壮。虽然现在SSD是主流,但大容量冷数据存储,HDD依然有它的江湖地位。我前几年帮一个视频监控项目做方案,几十PB的数据,全上SSD?老板会砍人的。最后还是用了一堆16TB的氦气盘。

HDD的核心结构,其实跟老式唱片机有点像。主要部件就这几样:

  • 盘片(Platter):涂有磁性材料的圆形铝片或玻璃片。数据就存这里。
  • 磁头(Head):读写数据的小元件,悬浮在盘片上方几纳米。注意,是悬浮,不是接触。
  • 主轴马达(Spindle Motor):带动盘片高速旋转。家用盘一般是5400或7200转/分钟。
  • 磁臂(Actuator Arm):带动磁头在盘片径向移动,寻找目标磁道。

工作原理其实不复杂:盘片转起来,磁头在盘片上移动,通过电磁感应读写数据。写数据时,磁头线圈通电产生磁场,改变盘片上微小区域的磁极方向。读数据时,盘片上的磁场变化在磁头线圈中感应出电流,电流大小和方向就代表了0和1。

关键指标:寻道时间 + 旋转延迟 = 访问时间

寻道时间:磁头移动到目标磁道的时间。旋转延迟:目标扇区转到磁头下方的时间。这两项加起来,就是HDD的随机访问延迟,通常在几毫秒到十几毫秒。跟SSD的微秒级比,确实慢不少。

嗯,这里要注意一个坑。我曾经遇到过一块硬盘,读写速度突然变慢,还时不时有咔咔声。后来一查,是磁头老化,开始刮擦盘片了。这就是所谓的“坏道”。所以,HDD最怕震动和突然断电。磁头还没归位,盘片突然停了,磁头就可能撞到盘片,造成物理损伤。

2.2 固态硬盘(SSD)工作原理

SSD,现在谁电脑里还没一块?速度快、抗震、静音。它的核心是闪存芯片(NAND Flash)。没有机械部件,全靠电子移动。

SSD的内部结构,我拆过不少,主要部件:

  • 主控芯片(Controller):SSD的大脑。负责数据读写、磨损均衡、垃圾回收、ECC纠错等。相当于一个微型计算机。
  • 闪存颗粒(NAND Flash):存储数据的芯片。分SLC、MLC、TLC、QLC,现在主流是TLC和QLC。
  • DRAM缓存:部分SSD有,用于缓存映射表,提升性能。无DRAM的SSD(如一些入门级NVMe)会用主机内存做HMB。

闪存的工作原理,跟HDD完全不同。它基于浮栅晶体管。每个存储单元(Cell)可以存储电荷,电荷量多少代表不同的数据状态。比如SLC只存0或1,TLC可以存8种状态(3比特)。

读写擦的基本操作:

  • 读(Read):检测单元内电荷量,判断数据。速度最快。
  • 写(Program):向浮栅注入电荷。注意,写操作只能将0写成1(或者反过来,取决于具体实现)。而且写之前必须先擦除。
  • 擦除(Erase):将整个块(Block)内的所有单元电荷清空。擦除是以块为单位,非常慢。

重要特性:写前擦除 & 寿命有限

闪存不能像HDD那样直接覆盖写。必须先擦除整个块,再写入新数据。而且每个存储单元有擦写次数限制(P/E Cycle)。SLC约10万次,TLC约1000-3000次。这就是为什么SSD有寿命一说。

我有个朋友,做视频剪辑的,天天往SSD里写素材。用了两年,SSD突然掉盘了。一查,写入量已经超过标称的TBW(总写入字节数)。所以,选SSD时,TBW是个硬指标,别光看速度。

2.3 闪存转换层(FTL)详解

FTL,这是SSD的灵魂。没有它,操作系统根本没法用闪存。为什么?因为操作系统是按“扇区”读写数据的,而闪存是按“页”读写、按“块”擦除。这中间巨大的差异,全靠FTL来抹平。

FTL的核心功能,说白了就两件事:

  1. 地址映射:把操作系统发来的逻辑块地址(LBA),翻译成闪存上的物理块地址(PBA)。
  2. 垃圾回收(GC):把无效数据占用的块清理出来,供后续写入。

咱们展开说说地址映射。你想想看,操作系统以为数据是连续写在磁盘上的。但实际上,SSD内部可能把数据分散在不同的闪存块里。FTL维护着一张映射表,记录每个LBA对应哪个PBA。

映射表的管理方式,主要有几种:

  • 页级映射:每个逻辑页映射到一个物理页。粒度最细,性能最好,但映射表很大(需要DRAM)。
  • 块级映射:每个逻辑块映射到一个物理块。映射表小,但性能差(因为块内页的偏移固定)。
  • 混合映射:结合两者,数据块用块级映射,日志块用页级映射。折中方案。

垃圾回收,是FTL里最耗时的操作。当SSD写满后,再写入新数据,就得先做GC。GC的过程:

  1. 选一个包含无效数据的块(比如块里有些页的数据已经被更新到别处了)。
  2. 把块里还有效的数据,读到缓存,再写到另一个空闲块。
  3. 擦除原块,变成空闲块。

这个过程会产生写放大(Write Amplification)。写放大系数 = 实际写入闪存的量 / 主机请求写入的量。系数越大,SSD寿命越短,性能越差。

避坑指南:我曾经遇到过一块SSD,用久了写入速度暴跌。一查,是垃圾回收跟不上写入速度。主控策略太保守,空闲块太少,导致每次写入都要先做GC。后来换了块带独立DRAM缓存、GC策略激进的SSD,问题解决。所以,买SSD别只看顺序读写,4K随机性能和GC策略更重要。

FTL还负责磨损均衡(Wear Leveling)。就是把擦写操作均匀分布到所有闪存块上,避免某些块过早报废。动态磨损均衡只在写入时选择擦写次数少的块;静态磨损均衡还会把长期不动的冷数据搬走,让那些块也能被擦写。

最后,FTL还得做坏块管理。闪存出厂就有坏块,使用中也会产生新坏块。FTL会标记这些坏块,不再使用它们,并用备用块替换。

下面这张图,是我画的FTL在SSD中的位置和作用流程,帮你理清思路:

FTL在SSD中的核心作用 操作系统 / 文件系统 发送 LBA 读写请求 LBA 闪存转换层 (FTL) 地址映射 | 垃圾回收 | 磨损均衡 PBA NAND 闪存 FTL 内部核心模块 地址映射 LBA → PBA 转换 维护映射表 垃圾回收 (GC) 回收无效块 减少写放大 磨损均衡 均匀分布擦写 延长SSD寿命 坏块管理 标记并替换坏块 ECC纠错 检测并纠正位错误 缓存管理 DRAM/HMB 缓存策略

总结一下,HDD靠机械旋转和磁头移动,成本低容量大,但随机访问慢、怕震动。SSD靠电子和闪存,速度快、抗震,但有寿命限制和写放大问题。FTL则是SSD的幕后英雄,它让操作系统能像用HDD一样用SSD,同时默默处理着地址映射、垃圾回收、磨损均衡这些脏活累活。

理解这些底层原理,对你做存储系统架构设计至关重要。选型时,你就知道什么时候该用HDD做冷存储,什么时候该用SSD做热数据加速。设计缓存策略时,你也会考虑到写放大和寿命问题。


专注资料整理