白蛇2:青蛇劫起金典语录(《白蛇2:青蛇劫起》的经典台词)
技术进步,与其说是技术人员的努力,不如说是无数用户血泪控诉的结果……
事实上,在消费领域,因为异常掉电导致用户整盘数据丢失的现象屡见不鲜,而SSD厂商基本没有能力提供数据恢复工具(除非controller厂商愿意提供给SSD厂商)。
那么,异常掉电会导致那些问题的产生呢?
通常情况下,如果没有断电保护,固态硬盘会面临三大问题:
1、丢盘,即,在重新上电之后,SSD无法被BIOS所识别,更无法登录OS。
丢盘现象在消费级SSD领域非常普遍,百度一下,结果应该可以用“汗牛充栋”来形容了。出现这种状况,通常是由于映射表在更新过程中来不及保存,导致映射表丢失,映射表丢失就意味着物理和逻辑之间的映射关系不在存在,而一般固态硬盘厂商并不会提供任何可供用户恢复映射表的工具,因此,一但映射表丢失,就会出现固态硬盘无法被系统识别,只能通过返厂维修,而返厂后是通过重新开卡量产的方式进行维修,用户数据全部丢失是必然。
尽管厂商采取了各种技术手段,如:备份多份映射表,一旦发生错误进行映射表回滚等方式保证SSD最起码不“丢盘”,从理论上看似乎比较稳妥,用户最多就是损失一些最后写入的数据。
但是,如果不进行额为的断电保护设计,从实际测试结果看,效果并不理想,“丢盘”的现象仍旧存在较高的概率。
2、丢失缓存中的数据
固态硬盘一般采用SDRAM或者DDR做缓存,DDR属易失性存储介质,一旦断电,DDR中的所有数据全部丢失。
3、导致误判的“坏块”增加
对于MLC来说,page通常是以shared page的方式存在,shared page实际上是一个物理cell中的两个bit在逻辑上被分配为到两个page上,如果在Program的过程中,Lower page没有被成功Program,会导致这个cell的电压发送偏移,从而影响到upper page的数据,因此,如果错误bit数超过ECC纠错能力,那么,在重新上电读取错误时,这个Block会被作为坏块对待。
实际的测试结果是,如果在program的过程中不停进行掉电,有些厂商的SSD会非常快的产生大量新增坏块。
掉电保护的应对方案
掉电保护通常是通过超级电容或者钽电容进行数据保护,兵哥工厂也使用过其他冷门方案,如:钴酸锂电池等。
超级电容:适合大容量SSD,原理上讲,超级电容要么可以过高温、要么可以过低温,无法同时过高低温,应用与生活于温室之中的企业级方案或者消费级比较适合,因此,工业领域和军工领域一般不会选择使用超级电容,但是,实际的测试,超级电容是可以同时过高温和低温的,但一般不会冒险使用在环境苛刻的领域。
钽电容:容量较小,但可以过高低温,是军工和工业常用电容,缺点是,当SSD容量很大时,需要很多颗电容,对有限的PCB面积来说是个严峻的挑战。
掉电保护需要固件和外围电路两方面的配合,异常掉电数据保护的原理是:超级电容(或者钽电容)通过正常电源充电,在超级电容(或者钽电容)输入端及SATA电源输入端分别对输入电源进行侦测,侦测电路连接到对应的GPIO口。 电源发生突然断电瞬间,由GPIO反馈到Firmware:端口5V断电后,反馈给HOST,不再接收还未传输到SSD的数据;限流电路端(防止瞬间输入电流过大击穿硬件的保护电路)的侦测电路反馈到主控,切换电源输入,转由超级电容(或者钽电容)供应,满足断电后更新映射表及缓存内数据写入所需的电力。
框图如下:
自从加了电容,一切看上去那么完美,然而……
使用电容做断电保护的安全隐患
众所周知,电容跟电池一样,在使用一定的期限后,会出现老化,即,充电后无法达到初始供电电量。假设,SSD使用3年以后,电容的供电量只有初始设计的一半,SSD的数据可靠性将如何保证?
更严重的隐患是:这个隐患目前似乎在整个行业内极少有人想起。换句话说,即使在保修期内,用户的数据安全也是无法得到保障的。
看到此问题,大家会下意识认为,在初始设计时,将电容设计为原先的2倍或者更多不就解决问题了?
兵哥告诉你一个残酷的事实:
这种方案好像解决了未来的掉电保护隐患,却事实上却带来另外两个更严重的问题:
1、重新启动时可能会无法识别SSD,需要先关闭电源一段时间后,SSD才能被识别和启动,因为SSD需要电容充分放电后才能被识别。
2、电容足够大时,需要充电的时间就会变的很长,如果快速的做重新启动并执行写操作然后立即断电,因为此时电容充电不足,将无法起到掉电保护作用,数据仍然会存在丢失或者映射表丢失的严重隐患,此所谓:过犹不及。
完美的解决方案到底有木有?
以下内容涉及专利内容,不便公开,但在事实上完美使用的解决了此问题:
rBackup意思为“rapid backup”,此项技术是香港理工大学邵教授的团队与瑞耐斯共同为解决此问题而提出的革新技术,并形成了一项发明专利:《一种异常断电时固态硬盘数据快速备份的方法及系统》,这项技术解决了在不改变电容数量的情况下,即使电容老化到初始设计值(正常使用值)的30%,剩余的电量仍有足够的能力将缓存数据完整的写入Nand flash。
是否很完美?不用担心重启不了的问题,还可以保证用户在保修期之后仍然安全无忧的使用SSD。