硬盘和 SSD 有什么不同
硬盘和 SSD 有什么不同
机械硬盘就像一张旋转的黑胶唱片,只不过它记的不是音乐,而是你的文件。SSD 则完全没有活动部件,更像一个超大号的 U 盘。两者都能存储数 TB 的数据,但内部工作方式截然不同——这些差异直接决定了你打开大文件时是秒开还是转圈。
Level 1:建立直觉
机械硬盘(HDD):旋转的磁性舞台
想象一张黑胶唱片,正在以 7200 转/分钟高速旋转(比大多数 CD 播放器还快)。上面不是音乐的刻纹,而是磁性材料记录的 0 和 1。
一只"读写头"漂浮在盘片表面约 5-10 纳米的高度(真的就是 nm 级别——比一粒灰尘小 1000 倍)。当你要读取数据时:
- 寻道(Seek):磁头移动到数据所在的轨道。这需要 3-10 毫秒——机械运动,无法更快
- 旋转等待(Rotational Latency):等待目标扇区旋转到磁头下方。7200rpm = 每转 8.33ms,平均等 4.17ms
- 传输(Transfer):读写数据,速度约 100-200 MB/s(顺序读取)
所以,读取一块随机数据的延迟:
随机访问延迟 = 寻道时间 + 旋转等待 + 传输时间
≈ 7ms + 4ms + 0.01ms
≈ 11ms(约 1000 万纳秒)
内存访问是 50ns,HDD 随机访问是 11ms——慢了 20 万倍。
HDD 的结构:
┌─────────────────────────┐
│ 读写头 │← 约5nm 悬浮高度
│ ↕ 机械手臂 │
├─────────────────────────┤
│ 轨道 0 ──────────── │
│ 轨道 1 ──────────── │← 数千到数十万条同心圆轨道
│ 轨道 2 ──────────── │
│ ... │
└─────────────────────────┘
↑ 以 7200rpm 旋转
每个轨道分成扇区(Sector),传统扇区大小 512 字节,现代硬盘 4096 字节(4K 扇区)。
SSD:沙子做的记忆
SSD 使用**NAND Flash(闪存)**存储数据,没有任何活动部件。
NAND Flash 的存储原理:每个存储单元是一个浮栅晶体管(Floating Gate Transistor):
控制栅极(Control Gate)
│
源极 ─────┤├───── 漏极
浮栅(Floating Gate)
↑ 被绝缘层包围,电子可以被"困"在这里
通过向浮栅施加高压,可以把电子注入浮栅(写"0")或驱走电子(写"1")。读取时,根据浮栅中的电荷量判断存储的是 0 还是 1。
SSD 的访问速度:
- 随机读取延迟:约 50-100 微秒(µs)= 0.05-0.1 毫秒
- 顺序读取带宽:PCIe 4.0 NVMe SSD 可达 7,000 MB/s
与 HDD 相比:
随机访问延迟:SSD 0.08ms vs HDD 11ms → SSD 快 137 倍
顺序读取带宽:SSD 7000MB/s vs HDD 200MB/s → SSD 快 35 倍
SSD 最大的革命不是速度,而是随机访问和顺序访问一样快(几乎)——没有寻道时间,没有旋转等待。这彻底改变了数据库、操作系统等软件的设计假设。
容量与价格
2024 年的市场价格(参考):
类型 每TB价格 典型容量
HDD 机械 约 $20/TB 1-18 TB(企业可到 30TB)
SATA SSD 约 $60/TB 0.5-4 TB
NVMe SSD 约 $80/TB 0.5-4 TB
企业 NVMe 约 $300/TB 0.5-30 TB
HDD 仍然以性价比优势存在,尤其是需要大量冷数据存储(视频、备份、归档)时。
Level 2:原理剖析
NAND Flash 的分类:SLC/MLC/TLC/QLC
NAND Flash 可以在每个存储单元中存储多个位:
类型 位/单元 电压等级数 相对速度 寿命(P/E次数)
SLC 1 bit 2 最快 约 100,000 次
MLC 2 bits 4 快 约 10,000 次
TLC 3 bits 8 中等 约 3,000 次
QLC 4 bits 16 较慢 约 1,000 次
PLC 5 bits 32 最慢(研究中) 约 100 次
消费级 SSD 主要用 TLC(3 位/单元,8 个电压等级)。每个单元区分 8 个不同的电荷等级:
电荷等级:00000000 → "111"(3 bits)
电荷等级:00111111 → "110"
电荷等级:01111111 → "101"
...
电荷等级:11111111 → "000"
问题:16 个电压等级比 2 个电压等级更难区分,更容易出错(相邻等级差距小,噪声影响大)。这就是为什么 QLC SSD 比 SLC 更慢且更不耐用。
3D NAND 的出现:2007 年前,NAND 是平面的(2D),靠缩小特征尺寸提高密度。当 2D 缩小到极限,Samsung 在 2013 年率先推出 3D V-NAND:把 NAND 层垂直堆叠(128 层、176 层,甚至 236 层),大幅提高密度同时改善可靠性(每层可以用更大的特征尺寸)。
2024 年,主流 NAND Flash 是 200+ 层的 3D QLC,容量密度超过 1 TB/cm²。
SSD 内部架构
SSD 不只是 Flash 芯片,内部有复杂的系统:
主机(PCIe/SATA)
│
SSD 控制器(主控)
├── 闪存翻译层(FTL,Flash Translation Layer)
├── 磨损均衡器(Wear Leveling)
├── 错误纠正(ECC)
├── DRAM 缓存(可选)
└── NAND Flash 芯片阵列(并行通道)
├── 通道 0
├── 通道 1
├── ...
└── 通道 7(8通道SSD)
**闪存翻译层(FTL)**是 SSD 的核心:
- 地址映射:逻辑块地址(LBA)到 Flash 物理地址的映射(因为 Flash 不能原地改写)
- 写入前擦除:Flash 单元在写入前必须先擦除,而擦除是以"块"为单位(128-512KB),比写入的"页"(4-16KB)大得多
- 垃圾回收(GC):整理碎片,把有效数据合并,释放需要擦除的块
FTL 引入了一个重要问题:写入放大(Write Amplification):
你写入 4KB 数据,FTL 可能需要:
- 读出一个 512KB 的块(因为这个块里还有其他有效数据)
- 在新的空白块里写入原来的有效数据 + 你的新 4KB
- 擦除旧块
实际写入到 Flash 的数据量 >> 你原来的 4KB,写入放大比(WAF)可能达到 2-10 倍。过高的 WAF 加速了 SSD 的磨损。
接口:SATA vs NVMe
旧的 SSD 用 SATA 接口,新的用 NVMe(Non-Volatile Memory Express):
接口对比:
SATA III:带宽上限 600 MB/s,命令队列深度 32(1条命令通道)
NVMe(PCIe 3.0 x4):带宽上限 3,500 MB/s,64K 命令队列,65535 个并行命令
NVMe(PCIe 4.0 x4):带宽上限 7,000 MB/s
NVMe(PCIe 5.0 x4):带宽上限 14,000 MB/s
SATA 的 600 MB/s 带宽是 2009 年设计的,当时以为 SSD 再快也快不过这个。NVMe 专为 SSD 设计:
- 命令并行:SATA 只有一个命令队列(队列深度 32),NVMe 有 64K 个队列,每个队列深度 65K,理论上可以同时处理数十亿个命令
- CPU 开销:NVMe 的驱动程序更轻量,中断延迟更低
- 直接访问:NVMe 支持直接从 CPU 缓存访问 SSD 内部的 DRAM 缓存(Storage Class Memory 方向)
Level 3 · 规范怎么定义的(资深)
存储设备的接口与协议标准
存储设备的行为由多层标准定义。物理层方面,SATA 接口遵循 Serial ATA International Organization 的 SATA 3.0 规范(6 Gbps 带宽),NVMe SSD 使用 PCIe 接口(PCI-SIG 的 PCIe 5.0/6.0 规范,分别为 32GT/s 和 64GT/s)。NVMe 协议本身(NVM Express 规范,目前为 2.0 版本)定义了主机与存储设备之间的命令集、队列模型和管理接口。NVMe 的关键创新是支持最多 65535 个 I/O 队列,每个队列最深 64K 条目——相比 SATA/AHCI 的单队列 32 深度,并发能力提升了数个数量级。
NAND Flash 的物理规范由 JEDEC 的 JESD230 系列(ONFI 标准)定义,包括页大小(通常 4KB-16KB)、块大小(通常 256-2048 页)、编程/擦除电压、耐久度要求(TLC 约 1000-3000 P/E 周期)等。SSD 的核心挑战是闪存翻译层(Flash Translation Layer, FTL),它将主机看到的逻辑块地址(LBA)映射到实际的物理页地址,并管理垃圾回收(GC)和磨损均衡(Wear Leveling)。
TRIM 命令在 ATA 标准(ACS-2)中被定义为 DATA SET MANAGEMENT 命令,在 NVMe 中对应 DEALLOCATE 命令。它告诉 SSD 哪些逻辑块已被文件系统删除,SSD 可以在后台回收这些块,为垃圾回收减轻压力。
Level 4 · 边界与陷阱(所有人)
陷阱 1:SSD 的写放大(Write Amplification)侵蚀寿命
NAND Flash 的最小写入单位是"页"(4-16KB),但最小擦除单位是"块"(数百个页)。当 SSD 需要写入新数据但没有空闲块时,必须先将一个包含部分有效数据的块整体读出、擦除,然后将有效数据和新数据一起写回。这导致主机写入 1GB 数据,SSD 内部可能实际写入了 3-10GB——这就是写放大(Write Amplification Factor, WAF)。随机小写入的 WAF 最高可达 10 以上。这意味着一块标称 3000 P/E 寿命的 TLC SSD,在高随机写负载下的实际可写总量可能只有标称值的 1/10。数据库应用中,将 WAL(Write-Ahead Log)和数据文件分到不同的 SSD 上,可以显著降低写放大。
陷阱 2:SSD 的性能会随使用时间退化
全新的 SSD(所有块都是空的)性能最佳,因为写入可以直接使用预擦除的空闲块。但随着使用,空闲块减少,垃圾回收需要越来越频繁地"搬运"有效数据,写入延迟会从微秒级跳到毫秒级。这就是为什么 SSD 厂商会保留一部分容量不对外暴露(Over-Provisioning,通常 7-28%)。企业级 SSD 的 OP 比例更高(28%),以维持长时间稳态性能。如果你看到 SSD 的 benchmark 写着"新盘性能",而你的业务是持续写入,实际性能可能只有标称的一半。
陷阱 3:SSD 掉电后数据不是永久安全的
与机械硬盘不同,SSD 的数据以电荷形式存储在浮栅中,电荷会随时间缓慢泄漏。JEDEC 标准要求消费级 SSD 在 30°C 环境下断电后至少保持数据 1 年,企业级 SSD 在 40°C 下保持 3 个月。已经接近 P/E 寿命末期的 SSD,数据保持时间会更短。这意味着 SSD 不适合做长期冷存储——如果你把重要数据备份到 SSD 后放进抽屉一年不通电,数据可能已经静默损坏了。磁带(可保持 30 年)仍然是长期归档的首选介质。