第 13 章

硬盘和 SSD 有什么不同

硬盘和 SSD 有什么不同

机械硬盘就像一张旋转的黑胶唱片,只不过它记的不是音乐,而是你的文件。SSD 则完全没有活动部件,更像一个超大号的 U 盘。两者都能存储数 TB 的数据,但内部工作方式截然不同——这些差异直接决定了你打开大文件时是秒开还是转圈。

Level 1:建立直觉

机械硬盘(HDD):旋转的磁性舞台

想象一张黑胶唱片,正在以 7200 转/分钟高速旋转(比大多数 CD 播放器还快)。上面不是音乐的刻纹,而是磁性材料记录的 0 和 1。

一只"读写头"漂浮在盘片表面约 5-10 纳米的高度(真的就是 nm 级别——比一粒灰尘小 1000 倍)。当你要读取数据时:

  1. 寻道(Seek):磁头移动到数据所在的轨道。这需要 3-10 毫秒——机械运动,无法更快
  2. 旋转等待(Rotational Latency):等待目标扇区旋转到磁头下方。7200rpm = 每转 8.33ms,平均等 4.17ms
  3. 传输(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 的访问速度:

与 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 的核心:

FTL 引入了一个重要问题:写入放大(Write Amplification)

你写入 4KB 数据,FTL 可能需要:

  1. 读出一个 512KB 的块(因为这个块里还有其他有效数据)
  2. 在新的空白块里写入原来的有效数据 + 你的新 4KB
  3. 擦除旧块

实际写入到 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 设计:

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 年)仍然是长期归档的首选介质。

本章评分
4.7  / 5  (23 评分)

💬 留言讨论