一种固态硬盘数据断电保护方法

文档序号:6381749阅读:644来源:国知局

专利名称::一种固态硬盘数据断电保护方法
技术领域
:本发明涉及一种固态硬盘在遭遇突发断电情况下的数据保护方法,属于数据存储安全防护
技术领域

背景技术
:固态硬盘(SolidStateDisk,简称SSD),是一种采用固态电子存储芯片阵列制成的硬盘,由控制单元和存储单元组成。固态硬盘通常采用闪存(FLASH芯片)作为存储介质其,最大的优点是可移动,且数据保护不受电源控制,能够适应于各种环境。基于闪存的固态硬盘其内部构造简单,固态硬盘内主体是一块PCB板,这块PCB板上最基本的配件是控制芯片、缓存芯片和用于存储数据的闪存芯片。其中,控制芯片是固态硬盘的大脑,其作用一是合理调配数据在各个闪存芯片上的负荷,二是承担整个数据的中转,连接闪存芯片和外部SATA接口。缓存芯片用于辅助主控芯片进行数据处理。与传统机械硬盘(HDD)相比,固态硬盘在读取速度、功耗、噪音、抗震性、体积、工作温度范围、容价比等方面均具有明显优势,被广泛应用于军事、车载、工控、视频监控、网络监控、网络终端、电力、医疗、航空等、导航设备等领域。在正常情况下,当处于电源关闭期间,大多数主机系统会向固态硬盘发出一个STANDBYIMMEDIATE命令,让固态硬盘有足够的时间为关闭操作做好准备,主要是让固态硬盘将当前的数据(数据位于临时缓冲区中)写入非易失性闪存介质。但是,当遇到非安全的电源关闭时,例如突然掉电,主机系统来不及发出STANDBYIMMEDIATE命令,导致固态硬盘临时缓冲区中的数据无法写入闪存介质,致使数据丢失。此外,由于用户数据和系统数据不能及时更新到存储介质上,当固态硬盘再次启动时,数据可能被写到一个已经写过的页上,导致写入失败,造成文件损坏甚至丢失。这是因为闪存存储介质的特性,闪存必须先删除其中存储的数据后才能再写入,而不能像在普通机械硬盘里那样被直接覆盖。如何处理在遇到电源非安全关闭时对固态硬盘的数据进行保护,成为技术人员亟待解决的问题。
发明内容本发明的目的是为了解决固态硬盘在遇到电源非安全关闭情况下的数据保护问题,提出一种数据断电保护的方法。本发明的目的是通过以下技术方案实现的。本发明所述方法的基本原理是通过对固件程序进行扩充实现在电源突发故障情况下对数据进行保护。具体技术手段包括首先,在固态硬盘的内存空间中,通过分配一个数组来保存那些最近更新却又未保存的页映射表的页号码。每次保存时,只保存这部分的页映射表,而非全部的页映射表。当每次新收到一个页映射表的页号码时,使用一种特殊的算法来保存该页号码,过程如下首先查询数组中是否有该新收到的页号码,如果有,则将该页号码所在位置之前的所有元素均后移一位,并在数组第O个元素的位置存储新收到的号码;如果没有,则保存数组中最后一个元素,并把前面所有元素均后移一位,在数组第O个元素的位置存储新收到的号码。当固态硬盘遇到电源故障重新启动后,首先检查页映射表。当固态硬盘启动时,要从闪存介质中读取页映射表到固态硬盘内存中。因此,每次读入某一页页映射表后先进行判断,如果全是OxFF,则表明未写入任何数据,认为当前读入的页映射表是错误的,然后从本block的第O页开始读;否则读本block上的下一页的位置,如果下一页全是OxFF并且本页的内容不全是OxFF,则认为本页内容有效并且是最新的页映射表。然后,利用页映射表恢复数组。在固态硬盘发生电源故障时,可能会导致部分元数据没有及时写回闪存,此时要用已有信息来恢复元数据。设数组大小为PAGES_PER_BLK,数组的大小等同于一个块中有多少页,数组记录了本bank上当前块中页的Ipn的值。具体恢复方法如下利用一个循环,顺序读入页映射表中所有属于bankη的条目,然后判断条目中的νρη是否在bankη上要处理的block的范围中的vpn内,如果在,则利用页映射表中这个条目的值更新数组;如果不在,则处理页映射表中下一个属于bankη的条目,直到处理完成所有属于bankη的页映射表条目。执行上述判断直至循环结束。有益效果本发明所述方法,能够在电源故障前对页映射表进行有效保存,在固态硬盘遇到电源故障重新启动后执行检测页映射表的工作,并利用页映射表恢复部分元数据。本方法具有高可靠、低成本的特点,即使没有板载电容的固态硬盘,在遇到突然断电的情况下,也能有效保护用户数据和系统数据。图I为保存页映射表算法示意图;图2为检测页映射表程序流程图;图3为页映射表内存示意图;图4为利用页映射表恢复数组程序流程图。具体实施例方式下面结合附图及实施例对本发明方法的具体实施方式做进一步详细说明。一种固态硬盘数据断电保护方法。首先,在固态硬盘的内存空间中,通过分配一个数组lpn_list_of_cur_vblock来保存那些最近更新却又未保存的页映射表的页号码。每次保存时,只保存这部分的页映射表,而非全部的页映射表,从而加快保存速度,并且可以减少写盘的次数,延长固态盘使用寿命。当每次新收到一个页映射表的页号码时,使用一种特殊的算法来保存该页号码。过程如下首先查询数组lpn_list_of_cur_vblock中是否有该新收到的页号码,如果有,贝Ij将该页号码所在位置之前的所有元素均后移一位,并在数组第O个元素的位置存储新收到的号码;如果没有,则保存该数组中最后一个元素,并把前面所有元素均后移一位,在数组第O个元素的位置存储新收到的号码。举例如下假定当前接收到的页映射表号码为6,假定当前数组状态为图I中第一列所示时,数组中依次存储有{0、2、15、6、20、3},查询数组后发现数组中已有6,则将6所在位置之前的所有元素(0、2、15)在数组中所处的位置均后移一位,后移的元素如图I中灰色表示,在数组的第O个位置存储新来的页号码6,此时数组状态为图I中第二列所示,数组中依次存储有{6、0、2、15、20、3}。此时,又新收到一个页映射表的号码4,经查询数组后发现数组中没有4,则系统保存数组中最后一个元素3所指向的页映射表内容,并把数组前面所有的元素(6、0、2、15、20)在数组中所处的位置均后移一位,数组的第O位用于存储新来的元素4。最终的数组状态如图I中第三列所示。当固态硬盘遇到电源故障重新启动后,首先检查页映射表。当固态硬盘启动时,要从闪存介质中读取页映射表到固态硬盘内存中。由于固态硬盘发生电源故障时,可能导致闪存中记录页映射表的位置是错误的,如果按照这个错误的值读入页映射表,将会导致当前读到的页映射表不是最新的或者是错误的。这是因为在固态硬盘中,页映射表中的某一页是固定在一个bank上的某一个block上的,每更新一次页映射表,就把当前的页映射表写入到闪存上,把当前的写入页向下写一个页位置,如果本block已经写满,则把本block擦除,然后写到第O页的位置。因此,每次读入某一页页映射表后先进行判断,如果全是OxFF,则表明未写入任何数据,认为当前读入的页映射表是错误的,然后从本block的第O页开始读;否则读本block上的下一页的位置,如果下一页全是OxFF并且本页的内容不全是OxFF,则认为本页内容有效并且是最新的页映射表。程序流程图如图2所示。然后,利用页映射表恢复数组lpn_list_of_cur_vblock。在固态硬盘发生电源故障时,可能会导致部分元数据没有及时写回闪存,此时要用已有信息来恢复元数据。设数组大小为PAGES_PER_BLK,数组的大小等同于一个块中有多少页,数组记录了本bank上当前块中页的Ipn的值。具体恢复方法如下由于连续的Ipn页在固态硬盘bank上轮流分布,如图3所示,假设固态盘上有8个bank,则Ipn=O的页分布在bankO上,lpn=12的页分布在bank4上,其他情况类推。因此,利用一个循环,顺序读入页映射表中所有属于bankη的条目,然后判断条目中的νρη是否在bankη上要处理的block的范围中的νρη内,如果在,则利用页映射表中这个条目的值更新lpn_list_of_cur_vblock数组;如果不在,贝U处理页映射表中下一个属于bankη的条目,直到处理完成所有属于bankη的页映射表条目。执行上述判断直至循环结束。流程如图4所示。实施例以Indilinx公司的JasmineOpenSSD实验平台,和韩国Sungkyunkwan大学OpenSSDvl.0.6源码为例进行分析,其具体实现步骤为第一步在OpenSSDvl.0.6源码中GreedyFTL部分中set_vpn()函数中,实现保存更新的页映射表的页号码到数组中。在mainO函数中添加计数器,一旦写操作执行后,开始计数,到达额定值后,即进行保存这部分跟新的页映射表,而不是全部的页映射表。第二步修改OpenSSDvl.0.6源码中GreedyFTL部分中的load_pmap_tableO函数,实现检查页映射表的功能。修改OpenSSDvl.0.6源码中GreedyFTL部分中的garbage—collectionO函数,实现利用页映射表恢复lpn_list_of_cur_vblock数组的功能。第三步使用CodeSourceryG++LiteEditionforARM编译源代码生产固件文件firmware,bin,使用MSVisualStudio2008编译出下载程序install,exe。第四步使用SATA线连接Jasmine实验平台和电脑,关闭实验平台电源并设置实验平台为工厂模式,然后打开实验平台电源,使用下载程序install.exe下载编译好的固件到Jasmine实验平台上。第四步关闭实验平台电源,设置跳线正常模式。第五步打开实验平台电源,使Jasmine实验平台具有电源故障数据保护功能。第六步从连接实验平台的电脑上向实验平台复制文件,在文件复制结束后,直接断开实验平台电源,然后再连接实验平台电源。使用BeyondCompare文件比较工具比较源文件和复制文件,结果显示并没有差别,说明在写文件操作结束后发生电源故障,复制文件没有丢失或者损坏。第七步从连接实验平台的电脑上向实验平台复制包含大量小文件(文件大小〈1MB)的文件夹,在文件复制过中后,直接断开实验平台电源,然后再连接实验平台电源。使用BeyondCompare文件比较工具比较源文件夹和复制文件夹,显示仅有少量文件丢失或者文件结构损坏,说明在写文件操作中电源故障,仅有少量复制文件丢失或者损坏。至此,就已经实现在Jasmine实验平台上实现本发明所阐述的方案。本发明不仅限于以上实施例,凡是利用本发明的设计思路,做一些简单变化的方案,都应计入本发明的保护范围之内。权利要求1.一种固态硬盘数据断电保护方法,其特征在于首先,在固态硬盘的内存空间中,通过分配一个数组来保存那些最近更新却又未保存的页映射表的页号码;每次保存时,只保存这部分的页映射表,而非全部的页映射表;当每次新收到一个页映射表的页号码时,使用以下方法来保存该页号码首先查询数组中是否有该新收到的页号码,如果有,则将该页号码所在位置之前的所有元素均后移一位,并在数组第O个元素的位置存储新收到的号码;如果没有,则保存数组中最后一个元素,并把前面所有元素均后移一位,并在数组第O个元素的位置存储新收到的号码;当固态硬盘遇到电源故障重新启动后,首先检查页映射表;当固态硬盘启动时,要从闪存介质中读取页映射表到固态硬盘内存中,每次读入某一页页映射表后先进行判断,如果全是OxFF,则表明未写入任何数据,认为当前读入的页映射表为错误,然后从本block的第O页开始读;否则读本block上的下一页的位置,如果下一页全是OxFF并且本页的内容不全是OxFF,则认为本页内容有效并且是最新的页映射表;然后,利用页映射表恢复数组;设数组大小为PAGES_PER_BLK,数组的大小等同于一个块中有多少页,数组记录了本bank上当前块中页的Ipn的值;具体恢复方法如下利用一个循环,顺序读入页映射表中所有属于bankη的条目,然后判断条目中的vpn是否在bankη上要处理的block的范围中的vpn内,如果在,则利用页映射表中这个条目的值更新数组;如果不在,则处理页映射表中下一个属于bankη的条目,直到处理完成所有属于bankη的页映射表条目;执行上述判断直至循环结束。全文摘要本发明涉及一种固态硬盘数据断电保护方法,属于数据存储安全防护
技术领域
。在固态硬盘内存空间中分配一个数组来保存那些最近更新却又未保存的页映射表的页号码。当每次新收到一个页映射表的页号码时,首先查询数组中是否有该新收到的页号码。当固态硬盘遇到电源故障重新启动后,首先检查页映射表,判断其内容是否有效并且是最新。然后利用页映射表恢复数组。本发明所述方法,能够在电源故障前对页映射表进行有效保存,在固态硬盘遇到电源故障重新启动后执行检测页映射表的工作,并利用页映射表恢复部分元数据。本方法具有高可靠、低成本的特点,即使没有板载电容的固态硬盘,在遇到突然断电的情况下,也能有效保护用户数据和系统数据。文档编号G06F12/16GK102902637SQ201210468860公开日2013年1月30日申请日期2012年11月19日优先权日2012年11月19日发明者朱瑞瑾,谭毓安,王文明,马忠梅,李元章,张全新,张雪兰申请人:北京理工大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1