坏块管理是什么?
坏块管理(Bad Block Management)可侦测及标记出闪存中的坏块,并事先预留备用区块,以便在区块故障时加以替补,如此可防止数据再度被写入已经故障的区块当中,进而提高产品耐用度。
两种坏块
闪存的坏块分为两种类型:出厂时固有的坏块(Early Bad Blocks)和使用后产生的坏块(Later Bad Blocks)。固有的坏块大多是在制程中产生的,通常占总容量的1%。这类坏块由于技术因素无可避免。反之,使用产生的坏块随着闪存使用时间的拉长、写入及抹除次数的增加而自然发生,闪存中约有5%的容量会预先被划分出来,作为日后替补这类坏块的保留区。
坏块管理如何运作?
就固有坏块来说,我们初次使用一个全新的闪存时,控制器内建的程序便会建立一张坏块表(Bad Block Table),然后程序会逐一检查各个区块。一旦发现坏块,程序就会将该坏块信息标记于坏块表当中,以避免数据再次写入至该区。使用产生的坏块则随着闪存使用次数增加逐渐产生。此时控制器若检查出坏块,也会将坏块信息新增至坏块表内,并将坏块中储存的数据转移至可用区块,以免数据遗失。如下图。
如图所示,控制器会先对无法写入数据的区块执行自动错误校正(Error Correction Code,ECC)。如果执行失败,有效数据就会被转移至预留的区块。转移后,控制器会标记该坏块并将之记录于块坏表,以确保数据不再被写入进此坏块。
结语
由于正常区块会随着擦写而损耗,需要时不时检查闪存中哪些区块已失效,然后用新区块替换之。现代闪存具备坏块管理的功能,可延长闪存使用年限、增进耐用度,并减少读写错误发生的机率。因此坏块管理乃是闪存产品不可或缺的功能。