SSD异常掉电数据是否会损坏

1. 问题发现

基于X1 Master系统在整机下电时,对于SSD固态硬盘实际属于异常掉电,引发一些思考

【思考】

Master系统下电前会根据上位机发送的预关机指令,更新并保存文件系统信息到mram中,完成后对master系统下电

但是这时对于SSD其实相当于一次SPOR(系统突然下电),那么对于SSD是否会发生缓存中的用户数据未及时保存或者映射表未能刷入闪存的情况

 

2. SSD正常掉电应该如何执行?

首先想到对于固态硬盘应该一定有类似于flush之类的指令来通知SSD把所有缓存落盘和映射表更新保存。

查了下ATA指令协议发现指令Idle Immediately,在掉电前, 主机会通过命令通知SSD,SSD收到该命令后, 主要会做以下事情:

(1)把buffer中缓存的用户数据刷入闪存。

(2)把映射表刷入闪存。

(3)把闪存的块信息写入闪存(比如当前写的是哪个闪存块, 以及写到该闪存块的哪个位置, 哪些闪存块已经写过, 哪些闪存块又是无效的等) 。

(4)把SSD其他信息写入闪存。

主机等SSD处理完以上事情后, 才会真正停止对SSD的供电。 正常掉电不会导致数据的丢失, 重新上电后, SSD只需把掉电前保存的相关信息(比如映射数据, 闪存块信息等) 重新加载, 又能接着掉电前的状态继续工作。

 

3. 如果发生异常掉电怎么办?

(1)SSD异常掉电的影响

所谓的异常掉电, 就是SSD在没有收到主机的掉电通知时就被断电; 或者收到主机的掉电通知, 但还没有来得及处理上面提到的那些事情, 就被断电了。 异常掉电可能会导致数据的丢失, 比如缓存在SSD中的数据来不及写到闪存, 掉电导致这部分数据丢失。 还有, 根据闪存特性, 如果掉电发生在写MLC的Upper page, 会导致其对应的Lower Page数据遭到破坏, 也就是意味着之前写入闪存的数据也可能由于异常掉电导致丢失。

(2)实测为什么异常掉电没有影响

实际上在我们的项目中每次系统下电对于SSD都属于异常掉电,但是从测试结果发现,从盘内读出的数据从来没有丢失过。

查看了资料发现,为防止异常掉电导致的数据丢失, 一个简单的设计就是在SSD上加电容,SSD一旦检测到掉电, 就让电容开始放电, 然后把RAM中的数据刷到闪存上面去, 从而避免数据丢失。 企业级的SSD一般都带有电容。 带电容的SSD, 还是需要设计异常掉电处理模块, 因为电容不能100%保证SSD在掉电前把所有的信息刷入闪存。

跟用户确认,我们当前使用的这款SSD是有电容做掉电保护的,异常掉电后SSD控制器还能工作20ms左右,足够保存mapping table了,所以测试一直没有发生数据损坏的问题

 

4. 防止异常掉电的其他方法

(1)还有一个比较前卫的想法, 就是把RAM这种Volatile(掉电数据丢失) 的东西, 用Non-Volatile(掉电数据不丢失) 的东西来替代, 但要求这种NonVolatile的东西性能上接近RAM。 这样, 整个SSD都是Non-Volatile的了。 Intel和Micron合作开发的3D XPoint, 可作为一个选择。 3D XPoint兼有闪存掉电数据不丢失和内存快速访问的特点。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值