深入浅出SSD之掉电恢复
掉电分为两种,一种是正常掉电,另一种是异常掉电。这两者都需要SSD在重新上电之后,从掉电中恢复过来,继续正常的工作。
正常掉电: 在掉电前,主机会通过命令通知SSD, 比如SATA中的Idle Immediatelym,收到该命令后,SSD需要完成以下事情:
- 把写缓存中的用户数据刷入内存;
- 把映射表刷入内存;
- 把闪存的块信息写入内存(比如当前写的是哪个内存块,写到该内存块的哪个位置,哪些内存块已经写过,哪些内存块是无效的,等等);
- 把SSD的其他信息写入内存。
设备需要把掉电前需要进行的事情都完成,才会反馈给主机“可以断电了”的信息。主机收到命令响应后,才会真正停止对SSD的供电。正常掉电不会导致数据的丢失,重新上电后,SSD只需把掉电前保存的相关信息(比如映射数据、内存块信息等)重新加载,接着掉电前的状态继续工作。
异常掉电: 指SSD在没有收到主机的掉电通知时就被断电;或者收到主机的掉电通知,但还没来得及处理上述事情就被断电。
异常掉电可能会导致数据的丢失,比如缓存在主机中的数据来不及写到闪存中,掉电会导致这一部分数据丢失;闪存正在写的数据,掉电后大概率也会丢失;同时根据闪存特性,如果掉电发生时,正在写MLC的UP,那么与其对应的LP数据也会遭到破坏,这意味着之前写入到闪存的数据也可能丢失。
异常掉电恢复的目前一方面在于尽可能恢复用户的数据,把损失降低到最低;另一方面是让SSD经过异常掉电后还能正常工作。
虽然SSD使用闪存作为存储介质,丢掉数据不丢失,但是一个SSD除了有丢电数据不丢失的闪存,还有丢电数据丢失的RAM(SRAM或者DRAM)。闪存的作用是存储数据,而RAM主要在SSD工作时缓存用户数据和存放映射表(Map Table,逻辑地址映射闪存物理地址)。所以一旦掉电,RAM的数据就会丢失