Skip to content

固态硬盘

2026 大纲 五(三)2 固态硬盘,补充说明点名两项:读写性能特性、磨损均衡。

没有磁头之后,上一节那套还成立吗

上一节整节都建立在一个前提上:移动磁头很贵。磁盘调度的全部意义就是少跑几个磁道。

SSD 把这个前提抽掉了——它没有磁头,也没有旋转,读任意一个位置的代价都一样。 于是上一节最重要的那个结论直接作废:磁盘调度算法在 SSD 上基本失效

但换掉一个约束不等于没有约束,SSD 换来了三条它自己的、而且更别扭的物理限制:

写只能把 1 变成 0(把 0 改回 1 必须先擦除)、 擦除只能整块进行(一块含很多页)、 每块的擦除次数有限(几千到几万次,擦完就坏)。

三条合起来会导出一个很麻烦的后果:想改一页,得先擦掉它所在的整块, 而擦一次就消耗掉这块寿命的一份。如果老老实实原地改, 一个被频繁改写的位置几天就能把那一块擦废。

所以 SSD 内部必须垫一层软件——FTL(闪存转换层),它做的事一句话: 别原地改,换个地方写,再把逻辑地址重新指过去。

这一句推出后面全部内容:换地方写 ⇒ 旧位置成了垃圾 ⇒ 要垃圾回收 ⇒ 回收时要搬走块里还有效的页 ⇒ 实际写入量大于用户写入量(写入放大) ⇒ 而且得让各块被擦的次数尽量拉平 ⇒ 磨损均衡

⚠️ 有一处要先立住:磨损均衡解决的是"分布"不是"总量"—— 它没法让擦除总次数变少,只能让它别集中在少数几块上。

一、FTL:为什么它非存在不可

假设没有 FTL,主机直接按物理页地址读写,会立刻撞上前两条约束:

要修改逻辑块 5 的内容 ⇒ 该页已经写过,不能覆盖 ⇒ 必须先擦除 ⇒ 擦除只能整块 ⇒ 得把同块内其余 255 个页的有效数据先读出来暂存 ⇒ 擦块 ⇒ 把 256 个页全部写回

结果:主机只想改 4 KB,闪存实际写了 1 MB。

FTL 的解法是换个地方写:把新数据写到一个已擦除的空闲页上,然后把"逻辑块 5"的映射改指向新页,旧页标记为无效。这样一次写就是一次写,不必读-改-擦-写。

映射粒度映射表大小写放大说明
页级映射最大最小(任意页可写到任意空闲页)灵活但映射表放不进 SSD 的 DRAM
块级映射最小最大(块内偏移固定)省内存但退化回读-改-擦-写
混合映射中等中等大部分数据块级映射,另留少量"日志块"按页级映射接收随机写

二、写入放大与垃圾回收

WAF=闪存实际写入的数据量主机请求写入的数据量

WAF 越大,同样的主机写入量消耗掉的擦除次数越多,寿命越短

FTL 采用"换个地方写"之后,无效页会不断堆积,必须由垃圾回收 GC 收拾:① 挑一个无效页多、有效页少的块(搬运量最小);② 把该块中仍然有效的页搬到别的空闲页并更新映射表;③ 擦除这个块,使它重新成为空闲块。

GC、写入放大、磨损均衡是一条链,不是三个独立知识点

不能覆盖写 ⇒ FTL 换地方写 ⇒ 产生无效页 ⇒ 必须 GC ⇒ GC 要搬走有效页 ⇒ 搬运本身就是额外的写写入放大 ⇒ 擦除次数被更快地消耗 ⇒ 磨损均衡才有意义

反过来也成立:GC 挑块的策略同时也是磨损均衡的一部分——若总挑同一批块回收,那批块就被擦穿了。所以实际的 FTL 会把"无效页数量"和"已擦除次数"一起纳入挑块的评分。

TRIM 补的是一个信息鸿沟:文件系统删除文件时通常只在目录和空闲空间管理结构里做标记,并不擦掉数据本身外存空闲空间管理就是这么做的),SSD 无从知道那些页已作废,GC 时还会老老实实搬走。TRIM 命令让文件系统主动通知 SSD"这些逻辑块已经作废",SSD 直接把对应物理页标记为无效 ⇒ GC 搬运量下降 ⇒ 写入放大下降 ⇒ 寿命延长、随机写性能回升。代价是需文件系统、驱动、SSD 固件三方都支持,且 TRIM 过的数据不再可恢复。

三、磨损均衡

策略做法它解决了什么它留下什么
动态磨损均衡每次要写新数据时,从擦除次数最少的空闲块里挑正在被改写的数据轮流落在不同块上冷数据霸占的块永远不进入轮换——那些块擦除次数一直很低,实际参与轮换的块变少,均衡是局部的
静态磨损均衡主动把长期不变的冷数据搬到擦除次数的块上,腾出擦除次数少的块给热数据把冷数据占的低磨损块释放进轮换池,均衡覆盖全盘搬运冷数据本身也是写入,会略微增加写入放大
一块盘寿命的量化走查:均衡与不均衡差 32 倍(想看清"分布问题"怎么变成算式时展开)

一块 256 GB 的 TLC SSD,块的擦除寿命 3000 次,写入放大系数 WAF = 4,某应用每天写入 50 GB。

① 理论总擦写量256 GB×3000=768000 GB=750 TB

擦除寿命是按块计的,而"每块能擦 3000 次"对全盘每一块都成立,所以全盘能承受的闪存侧写入量就是"容量 × 寿命次数"。注意这是闪存侧的量,还不是主机能写的量。

② 计入写入放大后主机实际能写的量750÷4=187.5 TB

闪存被消耗掉的是"闪存侧写入量",而 WAF 描述的正是"闪存侧 ÷ 主机侧",所以主机侧可写量要除以 WAF,不是乘。

③ 若磨损完全均衡187.5×1024÷50=3840 10.5 

先把 TB 换成 GB(乘 1024)才能和"每天 50 GB"约掉单位。"完全均衡"在这里的含义是——全盘每一块的擦除次数同步增长,所以第 ① 步的总量可以一滴不剩地用完

④ 若完全不做均衡,热点写入始终落在同一片 8 GB 区域上:这片区域能承受 8×3000÷4=6000 GB 的主机写入,按每天 50 GB 计只能撑

6000÷50=120 4 个月

分子换成了 8 GB 而不是 256 GB,这是全题的关键。不做均衡时被消耗的只有热点所在的那批块;剩下 248 GB 的块擦除次数还是个位数,却一次也帮不上忙——盘是被那 8 GB 拖死的,不是被容量用完拖死的。这正是"磨损均衡解决的是分布问题"这句话的算式形态。

⑤ 差距3840÷120=32 倍。均衡不是"延长一点寿命"的优化,而是把一块四个月就废的盘变成一块能用十年的盘。

四、闪存类型与 SSD/HDD 对比

类型每单元位数擦除寿命速度单位容量成本
SLC1最长(~10 万次)最快最贵
MLC2中(~1 万次)
TLC3较短(~3000 次)较慢较便宜
QLC4最短最慢最便宜
比较SSDHDD判据/根因
存储介质闪存(电子)磁介质(机械)——
随机读极快(无寻道/旋转)有没有机械定位
顺序读较快差距远小于随机读
随机写快,但受 GC/写放大拖累两者慢的机理不同
读写对称性不对称(读 ≪ 写 ≪ 擦)基本对称闪存的编程/擦除机理
覆盖写不能,必须先擦块能,直接改写磁化方向闪存位只能 1→0
寿命擦写次数限制受机械磨损限制——
抗震 / 噪音好 / 无差 / 有有无运动部件
价格较贵便宜——
磁盘调度不需要需要(SCAN 等)有没有寻道时间可优化

五、换成 SSD 之后,OS 要跟着改什么

受影响的机制原来针对 HDD 的做法换成 SSD 之后
磁盘调度算法SSTF / SCAN / LOOK 重排请求以减少寻道失效。没有寻道时间可省,重排换不来收益反而增加排序开销。实际系统改用最简单的"不排序"策略(Linux 里叫 noop / none),把调度交给 SSD 内部的 FTL
文件的物理布局尽量把一个文件的块放同一柱面、相邻柱面不再重要(随机读≈顺序读);但顺序写仍然更好,因为能降低写放大
页面置换与写回策略主要关心缺页率还要关心写的次数:换出一个被修改过的页要写盘,SSD 上写的代价与寿命成本都远高于读,所以更倾向优先淘汰未修改页改进型 CLOCK 算法把修改位纳入考虑,在 SSD 上收益更大)
删除文件只改目录与空闲空间管理结构还应发 TRIM,否则 SSD 会一直搬运早已作废的数据
交换分区 / 频繁刷盘的日志无特殊考虑属高写入负载,会加速磨损,需要评估写入量

考点速记

  1. 三条物理约束写只能把 1 变成 0(改回去必须先擦)、擦除只能整块进行每块擦除次数有限。加上"页读写、块擦除"这个粒度不对等,推出 FTL 的存在理由。
  2. FTL 的核心做法一句话:别原地改,换个地方写,再把逻辑地址重新指过去。 由此推出整条因果链——换地方写 ⇒ 旧位置成垃圾 ⇒ 垃圾回收 ⇒ 回收要搬走有效页 ⇒ 写入放大(实际写入量 > 用户写入量)⇒ 各块擦除次数要拉平 ⇒ 磨损均衡
  3. 读写性能三条特性读 ≪ 写 ≪ 擦的不对称;随机 ≈ 顺序只对读成立(写因为要 GC 仍受影响);带宽靠多通道多 Die 并行堆出来。
  4. ⚠️磨损均衡解决的是"分布"不是"总量":它没法减少擦除总次数,只能让它别集中在少数几块。动态磨损均衡管新写入落到哪,静态磨损均衡管把冷数据搬走、腾出那些擦得少的块。
  5. ⚠️磨损均衡由 SSD 控制器的 FTL 实现,不是文件系统的职责(对照 文件系统的全局结构速记第七条:跟具体硬件有关的事不归文件系统)。
  6. ⚠️换成 SSD 后磁盘调度算法基本失效——它优化的是寻道,而 SSD 没有磁头。但公平性与优先级仲裁仍然需要,所以 I/O 调度层并没有整个消失。
  7. SSD 相对 HDD 的对照:无机械部件故抗震、静音、功耗低、随机读快;代价是有擦写寿命上限写放大、掉电时映射表可能不一致。

这一节在真题里被考过的形式

SSD 至今不单独成题,本页下方的练习区渲染的是整个 disk-scheduling 标签下的题, 它们全部是磁盘调度题,在磁盘结构与调度讲,范围比本节宽,属正常

不单独成题不等于不考。SSD 在真题里以对照项的身份出现,而且近年在增加:

  • 作为"这件事归谁做"的错项(os-2025-32,在文件系统的全局结构讲)。 问"文件系统能为温彻斯特硬盘和固态硬盘都提供的功能","实现均衡磨损"是错项—— 它由 SSD 控制器的 FTL 负责,而且机械盘根本不需要(速记第五条)。 同题的"降低寻道时间"也是错项,因为 SSD 没有寻道(速记第六条)。
  • 作为文件系统与块大小相关判断的背景(os-2025-32 的正确项"确定盘块大小", 正是因为它与硬件类型无关)。

复习优先级读懂即可,重点只有两条——均衡磨损归 SSD 控制器不归文件系统SSD 没有寻道所以磁盘调度失效。这两条在 2025-32 里各出现过一次。 FTL、写入放大、垃圾回收这条因果链理解一遍就行,至今没有考过计算。

易错:认为均衡磨损是文件系统或操作系统的功能。由 SSD 控制器的 FTL 实现,机械盘也不需要它。

易错:认为磁盘调度算法在 SSD 上同样有效。它优化的是寻道,SSD 没有磁头——但公平性与优先级仲裁仍需要。

易错:认为磨损均衡能延长总的可擦写次数。它只改变分布,不改变总量。

易错:认为 SSD 的随机写和顺序写一样快。随机 ≈ 顺序只对读成立,写要受垃圾回收拖累。

易错:认为 SSD 可以原地修改一页。写只能 1→0,要改必须先擦除整块——这正是 FTL 存在的理由。

相关知识

磁盘结构与调度设备的基本概念与分类页面置换算法外存空闲空间管理

真题练习