坏块管理Bad Block Management)是 NAND Flash 存储中识别、记录、绕过和替换坏 block 的机制;在 eMMCUFS 中,它通常由内部 闪存控制器 自动处理。

坏块不是异常设计,而是 NAND 的正常工程现实。可靠系统的关键不是“没有坏块”,而是能持续正确管理坏块。

核心问题

NAND block 可能在两个阶段变坏:

  • 出厂坏块:制造后就不可靠,厂商会标记。
  • 增长坏块:运行中因为擦写磨损、干扰或保持时间下降而变得不可靠。

如果系统继续往坏块写关键数据,可能出现读错误、启动失败、文件系统损坏或静默数据损坏。

核心对象

对象含义工程关注点
bad block marker出厂坏块标记常在 OOB/spare 区,裸 NAND 驱动要识别
bad-block table坏块表记录哪些 block 不再使用
reserved block pool备用块池用于替换坏块和维持容量
ECC failure超过纠错能力的错误可能触发坏块判定或数据搬迁
remap重映射把逻辑数据迁移到健康物理块
grown bad block运行中新增坏块寿命和可靠性风险信号

核心机制

托管式存储中的坏块处理可以简化为:

if read_error > ECC_capability or program/erase fails:
  mark block as bad
  allocate replacement block
  move recoverable data
  update mapping table
  • read_error > ECC_capability 表示错误数量超过 ECC(错误纠正码) 可纠正范围。
  • program/erase fails 表示写入或擦除操作失败。
  • replacement block 来自控制器预留空间。
  • update mapping table 让后续逻辑地址不再落到坏块。

裸 NAND 场景下,坏块管理可能由 MTD、UBI、文件系统和驱动共同完成;eMMC 场景下,主机一般看不到物理坏块,只看到 I/O 错误、寿命指标或容量/性能变化。

工程用途

  • 保证 eMMC/UFS/SSD 在 NAND 局部退化后仍能继续使用。
  • 在量产测试和老化测试中筛出坏块增长异常的设备。
  • 支撑启动分区、RootFS 和数据分区的长期可靠性。
  • 帮助定位“同一批设备运行一段时间后启动失败”的存储根因。

边界与常见坑

  • 坏块不是文件系统坏道的同义词:NAND 物理 block 和文件系统逻辑块不是同一层。
  • eMMC 中坏块通常不可见:控制器隐藏了物理坏块,主机只能看到抽象后的错误或健康指标。
  • ECC 可纠正不代表没有风险:纠错次数上升可能预示数据保持能力下降,需要搬迁或替换设备。
  • 备用块池不是无限的:增长坏块过多后,设备可能进入只读、报错或容量异常状态。
  • 裸 NAND 不能忽略出厂坏块标记:擦掉 OOB 标记或错误格式化会破坏坏块管理。

相关术语