磨损均衡Wear Leveling)是 NAND Flash 存储中的寿命管理机制,通过把写入和擦除分散到不同物理 block,避免少数 block 被频繁擦写而提前失效。

eMMCUFS 和 SSD 中,磨损均衡通常由 闪存控制器FTL(闪存转换层) 自动完成。

核心问题

NAND block 的 Program/Erase cycle 有上限。文件系统层面看起来只是反复更新日志、数据库或配置文件,但如果这些逻辑地址总是落到同一批物理 block,那些 block 会比其他区域更快老化。

磨损均衡要解决:

  • 热数据反复更新导致局部 block 过度磨损。
  • 冷数据长期不动,占住低磨损 block。
  • 空闲 block 池需要同时满足性能和寿命目标。
  • 坏块增长后仍要维持可用容量和可靠性。

核心对象

对象含义工程关注点
erase count某个 block 被擦除的次数寿命估计和搬迁决策
hot data经常更新的数据日志、数据库、状态文件
cold data长期不变的数据系统镜像、只读资源
static wear leveling静态磨损均衡偶尔搬迁冷数据,让低磨损块参与使用
dynamic wear leveling动态磨损均衡新写入尽量选择低磨损空闲块
over-provisioning预留空间给控制器做搬迁、垃圾回收和替换

核心机制

动态磨损均衡的直觉是:

choose block with low erase_count from free_block_pool
write new data there

静态磨损均衡还会处理长期不动的数据:

if cold_block.erase_count is much lower than average:
  move cold data to a more worn block
  free the low-wear block for future hot writes
  • erase_count 是 block 的擦除次数。
  • free_block_pool 是控制器可选择的空闲 block 集合。
  • cold data 搬迁看似多余,但能让低磨损 block 重新进入可写池,避免热写集中在少数块上。

这不是简单平均分配,因为控制器还要同时考虑性能、坏块、数据冷热、垃圾回收成本和掉电一致性。

工程用途

  • 延长 eMMC/UFS/SSD 的可用寿命。
  • 缓解日志、数据库、OTA 状态分区等高频写区域的局部磨损。
  • 配合只读 RootFS、独立数据分区、日志限额和 tmpfs 策略降低写压力。
  • 通过设备寿命字段判断是否接近磨损风险。

嵌入式系统中,常见做法是减少无意义日志写入、给数据分区保留余量、避免长期满盘运行,并把高频临时数据放到 RAM 或专用分区。

边界与常见坑

  • 磨损均衡不能消除寿命限制:它只能分散磨损,不能让 NAND 无限写。
  • 满盘会削弱磨损均衡:空闲块不足时,控制器选择空间变少,写放大增加。
  • 小随机写更伤寿命和延迟:会触发更多映射更新和垃圾回收。
  • 只读系统也可能有写入热点:日志、时间同步、数据库、OTA 标记和崩溃转储都可能持续写。
  • 寿命字段通常是粗粒度估计:不能把它当作精确倒计时。

相关术语