上次的帖子我已经说过了SSD为什么需要带掉电保护,我也对掉电时会出现的问题做了基本的解释,本帖我再举例几种典型的掉电故障类型。
由于闪存读取和编程的单位是Page(页),而擦除的单位是Block(块),因此需要利用FTL(映射表)来维护所有的读写擦操作,如果映射表损坏,那么SSD上的数据就不复存在了。为了保证SSD的性能,映射表的更新一般都在高速缓存内进行,但是高速缓存掉电会丢数据,因此在编程和擦除操作的时候突发掉电就会引起下面标出的错误。
掉电故障类型
如图所示(画的不好见笑了),主要故障类型有:
Bit出错 - 突发掉电时,闪存正在做擦除操作,擦除指令已发送下去,但是并未完成就掉电了,下次上电后SSD主控以为之前的擦除操作完成了,接下来对这个区域编程的时候,可能返回的还是旧数据,因此ECC报错了。
元数据出错 - 突发掉电时,映射表没有来得及写入到闪存,并且下次上电后没有被完整恢复(如果映射表损伤严重或者恢复过程中又碰到了掉电等严重问题),没有元数据等于不知道盘内用户数据在哪里,就会造成数据完全或者部分损坏。
SSD变砖 - 突发掉电时,关键数据出错,并且上电后无法恢复,整块SSD无法使用。
掉电位 - 类似上个帖子说的MLC颗粒在编程Upper Page时突发掉电,造成之前写入的Lower Page数据出错。
写飞 - 编程操作时突发掉电,造成写入的数据位置出错。
写入顺序出错 - A1和A2将要写入同一个地址,原本是A2在缓存里把之前的A1覆盖并写入闪存,因为突发掉电造成A2没有在缓存里覆盖A1,导致写入顺序出错,最终出现了A2丢失的结果。
以上所有的问题,在SSD有完整端对端和掉电保护的方案中都能够被解决,当然前提是SSD的固件健壮性过关,没有隐藏的bug。
|