【转载】SSD断电保护原理
异常掉电的隐患
若没有合理的掉电保护机制,而异常掉电的发生又不可避免,当发生异常掉电,会引发很多问题。
(1)丢盘
异常掉电,会使得映射表来不及保存,丢失逻辑地址到物理地址的映射,待重新上电后,SSD将无法被BIOS识别。只能通过返厂维修解决问题,然而所谓返厂维修是通过重新开卡解决你的丢盘问题。重新开卡也就意味着所有用户数据的丢失!
(2)丢失缓存中的数据
SSD一般都采用SDRAM或者DDR(也即DDR SDRAM)做缓存,其中SDRAM是非易失性存储介质,断电之后数据会丢失。
(3)导致误判的“坏块”增加
MLC中,能存储2bit的数据,page以shared page方式存放,把LSB、MSB一个物理cell的两个bit分别映射到两个不同的page里面;将LSB(lower significant bit)放到Lower page(慢页)中存放,将MSB(most significant bit)放到Upper page(快页)中存放;操作规则为:先操作LSB后操作MSB。因此慢页的操作耗时比快页短。

所以在MLC中,若Program时,Lower page没有被成功Program,会导致这个cell上的电压发生偏移,从而影响到Upper page中的数据。因此,如果错误bit数超过ECC纠错能力,那么在重新上电读取错误时,该Block被标记为坏块;或者,如果Lower page已经编程成功,而在Upper page编程过程中突然掉电,必然会导致Lower page中的数据发送错误,如果数据错误数量超过SSD ECC纠错能力,那么就会在读取时出现错误,Block会被主控判为“Bad Block”并标识到bad block table中。
掉电保护原理
通常SSD会使用钽电容或者超级电容用作掉电后的供电设备;钽电容,适合宽温环境,但是容量较小;超级电容,不适合高低温环境,但是容量很大。
(1)超级电容(或钽电容)通过正常电源充电;
(2)在超级电容(或钽电容)输入端、SATA电源输入端,分别对输入电源进行侦测,侦测电路连接到对应的GPIO口;
(3)电源突然断电的瞬间,由GPIO反馈到Firmware;
(4)端口5V断后,Firmware反馈给HOST,不再接收还未传输到SSD的数据;
(5)限制电路端的侦测电路(防止瞬间输入电流过大而击穿硬件的保护电路)反馈到HOST,切换电源输入,转由超级电容(或钽电容)供电,满足断电后更新映射表及缓存内数据的写入所需的电力。
待考虑的问题
(1)电容容量的大小
容量太小:电量不够用于数据的保存,照样会有异常掉电隐患。容量太大:一是,SSD需要电容充分放电后才能被识别,如果只是短暂突然的掉电,重新上电后电容仍然没有放电完毕,SSD将不会被识别;二是,容量大的电容需要充电的时间长,充电时间若不够,没有足够的电量保存数据。
(2)电容得老化问题
电容也是有使用期限的,很长时间之后电容得老化可能导致电容电量只能有原来的30%。
(3)数据保护对象
不同的厂家对数据保护对象有不同,常见的保护对象分为以下三种:
- 保护SDRAM中所有数据(映射表+用户数据);再次上电后,相当于断电前的操作被中断,重新上电后就可立马进入待命状态。
- 只保护映射表;再次上电后,需要先把上次NAND Flash中保存的映射表提取到SDRAM中,再将保存的用户数据提取出来,两者结合更新映射信息,更新完之后才进入待命状态。
- 只保护用户数据;再次上电后,需要先把上次NAND Flash中保存的映射表提取到SDRAM中,只是丢掉了用户断电前正在操作的数据,无法更新。
【转载】SSD断电保护原理的更多相关文章
- [转载]SSD原理与实现
[转载]SSD原理与实现 这里只mark一下,对原论文讲解的很好的博文 https://zhuanlan.zhihu.com/p/33544892 这里有一个关于SSD的很好的程序实现,readme里 ...
- iOS App的加固保护原理
本文由 网易云发布. 本文从攻防原理层面解析了iOS APP的安全策略.iOS以高安全性著称,但它并非金刚不坏之身.对于信息安全而言,止大风于青萍之末是上上策,杭研深入各个细节的研发工作,正是网易产 ...
- [转帖]SSD的工作原理、GC和TRIM、写入放大以及性能评测
SSD的工作原理.GC和TRIM.写入放大以及性能评测 https://blog.csdn.net/scaleqiao/article/details/50511279 SSD的物理结构和工作原理 ...
- 进程保护原理Hook函数Openprocess
Win32子系统: ...
- [转载]jQuery诞生记-原理与机制
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=3520 一.看似偶然的 ...
- 【转载】COM多线程原理与应用
原文:COM多线程原理与应用 目录: COM多线程原理与应用 目录: 前言: 套间: 套间的定义: 套间的分类: 套间的进入和退出: 对象的同步: 组件对象的同步: COM对象线程模型: 进程内对象线 ...
- SSD基本工作原理
SSD主要由SSD控制器,FLASH存储阵列,板上DRAM(可选),以及跟HOST接口(诸如SATA,SAS, PCIe等)组成. SSD主控通过若干个通道(channel)并行操作多块FLASH颗粒 ...
- 【转载】Java类加载原理解析
Java类加载原理解析 原文出处:http://www.blogjava.net/zhuxing/archive/2008/08/08/220841.html 1 基本信息 摘要: 每个j ...
- [转载]cocos2d-触摸分发原理
本文由泰然翻译组组长 TXX_糖炒小虾 原创,版权所有,转载请注明出处并通知作者和泰然! 原作 http://www.ityran.com/archives/1326/comment-page-1 触 ...
随机推荐
- 光杆mdf文件的导入
场景,准备学习SSAS的时候,按照教程在微软下载了示例数据库AdventureWorksDW2012,下载来才发现只有一个mdf文件. 正好今天群里有位兄弟也碰到差不多的问题,客户数据库里的ldf文件 ...
- 参数innodb_force_recovery影响了整个InnoDB存储引擎的恢复状况
参数innodb_force_recovery影响了整个InnoDB存储引擎的恢复状况.该值默认为0,表示当需要恢复时执行所有的恢复操作.当不能进行有效恢复时,如数据页发生了corruption,My ...
- Android external扩展工程
Android的扩展工程包含在external文件夹中,这是一些经过修改后适应Android系统的开源工程,这些工程有些在主机上运行,有些在目标机上运行: 工程名称 工程描述 aes 高级加密标 ...
- linux内核完全剖析——基于0.12内核-笔记(1)-CPU 数据通信
CPU数据通信总线 CPU通过地址线.数据线.控制信号组成的本地总线(或称为内部总线)与系统其它部分进行数据通信. 地址总线 地址总线用于内存或I/O设备的地址,即指明需要读/写数据的具体位置. 数据 ...
- PHP学习第一天
PHP语句是以分号结尾的 单行注释: // C++风格的单行注释 # shell 风格的单行注释 跟python差不多 多行注释: /*......*/ c++风格的多行注释 常量定义: ...
- ModuleNotFoundError No module named urllib2
ModuleNotFoundError No module named urllib2?那么在进行编辑的来进行代码上开发,那就会出现的来代码的上错误,也是版本的上差异导致的问题. 工具/原料 ...
- 封装php redis缓存操作类
封装php redis缓存操作类,集成了连接redis并判断连接是否成功,redis数据库选择,检测redis键是否存在,获取值,写入值,设置生存时间和删除清空操作. php redis类代码: &l ...
- Mac svn使用学习-2-服务端
2.在mac环境下搭建一个SVN服务器环境 1)创建一个名为myCode的仓库——svnadmin命令 格式: svnadmin SUBCOMMAND REPOS_PATH [ARGS & O ...
- pytorch GPU的程序kill后未释放内存
使用PyTorch设置多线程(threads)进行数据读取(DataLoader),其实是假的多线程,他是开了N个子进程(PID都连着)进行模拟多线程工作,所以你的程序跑完或者中途kill掉主进程的话 ...
- vue实例的属性和方法
vue实例的属性和方法 1. 属性 vm.$el #指定要绑定的元素 vm.$data #Vue 实例的数据对象 vm.$options #获取自定义属性的值 new Vue({ customOpti ...