CN102902637B - 一种固态硬盘数据断电保护方法 - Google Patents
一种固态硬盘数据断电保护方法 Download PDFInfo
- Publication number
- CN102902637B CN102902637B CN201210468860.9A CN201210468860A CN102902637B CN 102902637 B CN102902637 B CN 102902637B CN 201210468860 A CN201210468860 A CN 201210468860A CN 102902637 B CN102902637 B CN 102902637B
- Authority
- CN
- China
- Prior art keywords
- page
- map table
- array
- state hard
- page map
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明涉及一种固态硬盘数据断电保护方法,属于数据存储安全防护技术领域。在固态硬盘内存空间中分配一个数组来保存那些最近更新却又未保存的页映射表的页号码。当每次新收到一个页映射表的页号码时,首先查询数组中是否有该新收到的页号码。当固态硬盘遇到电源故障重新启动后,首先检查页映射表,判断其内容是否有效并且是最新。然后利用页映射表恢复数组。本发明所述方法,能够在电源故障前对页映射表进行有效保存,在固态硬盘遇到电源故障重新启动后执行检测页映射表的工作,并利用页映射表恢复部分元数据。本方法具有高可靠、低成本的特点,即使没有板载电容的固态硬盘,在遇到突然断电的情况下,也能有效保护用户数据和***数据。
Description
技术领域
本发明涉及一种固态硬盘在遭遇突发断电情况下的数据保护方法,属于数据存储安全防护技术领域。
背景技术
固态硬盘(Solid State Disk,简称SSD),是一种采用固态电子存储芯片阵列制成的硬盘,由控制单元和存储单元组成。
固态硬盘通常采用闪存(FLASH芯片)作为存储介质其,最大的优点是可移动,且数据保护不受电源控制,能够适应于各种环境。基于闪存的固态硬盘其内部构造简单,固态硬盘内主体是一块PCB板,这块PCB板上最基本的配件是控制芯片、缓存芯片和用于存储数据的闪存芯片。其中,控制芯片是固态硬盘的大脑,其作用一是合理调配数据在各个闪存芯片上的负荷,二是承担整个数据的中转,连接闪存芯片和外部SATA接口。缓存芯片用于辅助主控芯片进行数据处理。
与传统机械硬盘(HDD)相比,固态硬盘在读取速度、功耗、噪音、抗震性、体积、工作温度范围、容价比等方面均具有明显优势,被广泛应用于军事、车载、工控、视频监控、网络监控、网络终端、电力、医疗、航空等、导航设备等领域。
在正常情况下,当处于电源关闭期间,大多数主机***会向固态硬盘发出一个STANDBY IMMEDIATE命令,让固态硬盘有足够的时间为关闭操作做好准备,主要是让固态硬盘将当前的数据(数据位于临时缓冲区中)写入非易失性闪存介质。但是,当遇到非安全的电源关闭时,例如突然掉电,主机***来不及发出STANDBY IMMEDIATE命令,导致固态硬盘临时缓冲区中的数据无法写入闪存介质,致使数据丢失。
此外,由于用户数据和***数据不能及时更新到存储介质上,当固态硬盘再次启动时,数据可能被写到一个已经写过的页上,导致写入失败,造成文件损坏甚至丢失。这是因为闪存存储介质的特性,闪存必须先删除其中存储的数据后才能再写入,而不能像在普通机械硬盘里那样被直接覆盖。
如何处理在遇到电源非安全关闭时对固态硬盘的数据进行保护,成为技术人员亟待解决的问题。
发明内容
本发明的目的是为了解决固态硬盘在遇到电源非安全关闭情况下的数据保护问题,提出一种数据断电保护的方法。
本发明的目的是通过以下技术方案实现的。
本发明所述方法的基本原理是:通过对固件程序进行扩充实现在电源突发故障情况下对数据进行保护。具体技术手段包括:
首先,在固态硬盘的内存空间中,通过分配一个数组来保存那些最近更新却又未保存的页映射表的页号码。每次保存时,只保存这部分的页映射表,而非全部的页映射表。当每次新收到一个页映射表的页号码时,使用一种特殊的算法来保存该页号码,过程如下:首先查询数组中是否有该新收到的页号码,如果有,则将该页号码所在位置之前的所有元素均后移一位,并在数组第0个元素的位置存储新收到的号码;如果没有,则保存数组中最后一个元素,并把前面所有元素均后移一位,在数组第0个元素的位置存储新收到的号码。
当固态硬盘遇到电源故障重新启动后,首先检查页映射表。当固态硬盘启动时,要从闪存介质中读取页映射表到固态硬盘内存中。因此,每次读入某一页页映射表后先进行判断,如果全是0xFF,则表明未写入任何数据,认为当前读入的页映射表是错误的,然后从本block的第0页开始读;否则读本block上的下一页的位置,如果下一页全是0xFF并且本页的内容不全是0xFF,则认为本页内容有效并且是最新的页映射表。
然后,利用页映射表恢复数组。在固态硬盘发生电源故障时,可能会导致部分元数据没有及时写回闪存,此时要用已有信息来恢复元数据。设数组大小为PAGES_PER_BLK,数组的大小等同于一个块中有多少页,数组记录了本bank上当前块中页的lpn的值。具体恢复方法如下:
利用一个循环,顺序读入页映射表中所有属于bank n的条目,然后判断条目中的vpn是否在bank n上要处理的block的范围中的vpn内,如果在,则利用页映射表中这个条目的值更新数组;如果不在,则处理页映射表中下一个属于bank n的条目,直到处理完成所有属于bank n的页映射表条目。执行上述判断直至循环结束。
有益效果
本发明所述方法,能够在电源故障前对页映射表进行有效保存,在固态硬盘遇到电源故障重新启动后执行检测页映射表的工作,并利用页映射表恢复部分元数据。本方法具有高可靠、低成本的特点,即使没有板载电容的固态硬盘,在遇到突然断电的情况下,也能有效保护用户数据和***数据。
附图说明
图1为保存页映射表算法示意图;
图2为检测页映射表程序流程图;
图3为页映射表内存示意图;
图4为利用页映射表恢复数组程序流程图。
具体实施方式
下面结合附图及实施例对本发明方法的具体实施方式做进一步详细说明。
一种固态硬盘数据断电保护方法。
首先,在固态硬盘的内存空间中,通过分配一个数组lpn_list_of_cur_vblock来保存那些最近更新却又未保存的页映射表的页号码。每次保存时,只保存这部分的页映射表,而非全部的页映射表,从而加快保存速度,并且可以减少写盘的次数,延长固态盘使用寿命。当每次新收到一个页映射表的页号码时,使用一种特殊的算法来保存该页号码。过程如下:首先查询数组lpn_list_of_cur_vblock中是否有该新收到的页号码,如果有,则将该页号码所在位置之前的所有元素均后移一位,并在数组第0个元素的位置存储新收到的号码;如果没有,则保存该数组中最后一个元素,并把前面所有元素均后移一位,在数组第0个元素的位置存储新收到的号码。举例如下:
假定当前接收到的页映射表号码为6,假定当前数组状态为图1中第一列所示时,数组中依次存储有{0、2、15、6、20、3},查询数组后发现数组中已有6,则将6所在位置之前的所有元素(0、2、15)在数组中所处的位置均后移一位,后移的元素如图1中灰色表示,在数组的第0个位置存储新来的页号码6,此时数组状态为图1中第二列所示,数组中依次存储有{6、0、2、15、20、3}。此时,又新收到一个页映射表的号码4,经查询数组后发现数组中没有4,则***保存数组中最后一个元素3所指向的页映射表内容,并把数组前面所有的元素(6、0、2、15、20)在数组中所处的位置均后移一位,数组的第0位用于存储新来的元素4。最终的数组状态如附图说明图1中第三列所示。
当固态硬盘遇到电源故障重新启动后,首先检查页映射表。当固态硬盘启动时,要从闪存介质中读取页映射表到固态硬盘内存中。由于固态硬盘发生电源故障时,可能导致闪存中记录页映射表的位置是错误的,如果按照这个错误的值读入页映射表,将会导致当前读到的页映射表不是最新的或者是错误的。这是因为在固态硬盘中,页映射表中的某一页是固定在一个bank上的某一个block上的,每更新一次页映射表,就把当前的页映射表写入到闪存上,把当前的写入页向下写一个页位置,如果本block已经写满,则把本block擦除,然后写到第0页的位置。因此,每次读入某一页页映射表后先进行判断,如果全是0xFF,则表明未写入任何数据,认为当前读入的页映射表是错误的,然后从本block的第0页开始读;否则读本block上的下一页的位置,如果下一页全是0xFF并且本页的内容不全是0xFF,则认为本页内容有效并且是最新的页映射表。程序流程图如图2所示。
然后,利用页映射表恢复数组lpn_list_of_cur_vblock。在固态硬盘发生电源故障时,可能会导致部分元数据没有及时写回闪存,此时要用已有信息来恢复元数据。设数组大小为PAGES_PER_BLK,数组的大小等同于一个块中有多少页,数组记录了本bank上当前块中页的lpn的值。具体恢复方法如下:
由于连续的lpn页在固态硬盘bank上轮流分布,如图3所示,假设固态盘上有8个bank,则lpn=0的页分布在bank0上,lpn=12的页分布在bank4上,其他情况类推。因此,利用一个循环,顺序读入页映射表中所有属于bank n的条目,然后判断条目中的vpn是否在bank n上要处理的block的范围中的vpn内,如果在,则利用页映射表中这个条目的值更新lpn_list_of_cur_vblock数组;如果不在,则处理页映射表中下一个属于bank n的条目,直到处理完成所有属于bank n的页映射表条目。执行上述判断直至循环结束。流程如图4所示。
实施例
以Indilinx公司的Jasmine OpenSSD实验平台,和韩国Sungkyunkwan大学OpenSSD v1.0.6源码为例进行分析,其具体实现步骤为:
第一步:在OpenSSD v1.0.6源码中GreedyFTL部分中set_vpn()函数中,实现保存更新的页映射表的页号码到数组中。在main()函数中添加计数器,一旦写操作执行后,开始计数,到达额定值后,即进行保存这部分跟新的页映射表,而不是全部的页映射表。
第二步:修改OpenSSD v1.0.6源码中GreedyFTL部分中的load_pmap_table()函数,实现检查页映射表的功能。修改OpenSSD v1.0.6源码中GreedyFTL部分中的garbage_collection()函数,实现利用页映射表恢复lpn_list_of_cur_vblock数组的功能。
第三步:使用Code Sourcery G++Lite Edition for ARM编译源代码生产固件文件firmware.bin,使用MS Visual Studio 2008编译出下载程序install.exe。
第四步:使用SATA线连接Jasmine实验平台和电脑,关闭实验平台电源并设置实验平台为工厂模式,然后打开实验平台电源,使用下载程序install.exe下载编译好的固件到Jasmine实验平台上。
第四步:关闭实验平台电源,设置跳线正常模式。
第五步:打开实验平台电源,使Jasmine实验平台具有电源故障数据保护功能。
第六步:从连接实验平台的电脑上向实验平台复制文件,在文件复制结束后,直接断开实验平台电源,然后再连接实验平台电源。使用Beyond Compare文件比较工具比较源文件和复制文件,结果显示并没有差别,说明在写文件操作结束后发生电源故障,复制文件没有丢失或者损坏。
第七步:从连接实验平台的电脑上向实验平台复制包含大量小文件(文件大小<1MB)的文件夹,在文件复制过中后,直接断开实验平台电源,然后再连接实验平台电源。使用Beyond Compare文件比较工具比较源文件夹和复制文件夹,显示仅有少量文件丢失或者文件结构损坏,说明在写文件操作中电源故障,仅有少量复制文件丢失或者损坏。
至此,就已经实现在Jasmine实验平台上实现本发明所阐述的方案。
本发明不仅限于以上实施例,凡是利用本发明的设计思路,做一些简单变化的方案,都应计入本发明的保护范围之内。
Claims (1)
1.一种固态硬盘数据断电保护方法,其特征在于:
首先,在固态硬盘的内存空间中,通过分配一个数组来保存那些最近更新却又未保存的页映射表的页号码;每次保存时,只保存这部分的页映射表,而非全部的页映射表;
当每次新收到一个页映射表的页号码时,使用以下方法来保存该页号码:首先查询数组中是否有该新收到的页号码,如果有,则将该页号码所在位置之前的所有元素均后移一位,并在数组第0个元素的位置存储新收到的号码;如果没有,则保存数组中最后一个元素,并把前面所有元素均后移一位,并在数组第0个元素的位置存储新收到的号码;
当固态硬盘遇到电源故障重新启动后,首先检查页映射表;当固态硬盘启动时,要从闪存介质中读取页映射表到固态硬盘内存中,每次读入某一页对应的页映射表后先进行判断,如果全是0xFF,则表明未写入任何数据,认为当前读入的页映射表为错误,然后从本block的第0页开始读;否则读本block上的下一页的位置,如果下一页全是0xFF并且本页的内容不全是0xFF,则认为本页内容有效并且是最新的页映射表;
然后,利用页映射表恢复数组;设数组大小为PAGES_PER_BLK,数组的大小等同于一个块中有多少页,数组记录了本bank上当前块中页的逻辑页号lpn的值;具体恢复方法如下:
将本bank记为bank n,利用一个循环,顺序读入页映射表中所有属于bankn的条目,然后判断条目中的虚拟页号vpn是否在bank n上要处理的block的虚拟页号范围内,如果在,则利用页映射表中这个条目的值更新数组;如果不在,则处理页映射表中下一个属于bank n的条目,直到处理完成所有属于bank n的页映射表条目;执行上述判断直至循环结束,循环结束的条件为:是否循环到页映射表中最后一页。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210468860.9A CN102902637B (zh) | 2012-11-19 | 2012-11-19 | 一种固态硬盘数据断电保护方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210468860.9A CN102902637B (zh) | 2012-11-19 | 2012-11-19 | 一种固态硬盘数据断电保护方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102902637A CN102902637A (zh) | 2013-01-30 |
CN102902637B true CN102902637B (zh) | 2015-04-22 |
Family
ID=47574882
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210468860.9A Expired - Fee Related CN102902637B (zh) | 2012-11-19 | 2012-11-19 | 一种固态硬盘数据断电保护方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102902637B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103279366B (zh) * | 2013-04-24 | 2016-08-10 | 中国科学院苏州纳米技术与纳米仿生研究所 | 固态硬盘及掉电后基于固态硬盘快速开机的方法 |
CN106201778B (zh) * | 2016-06-30 | 2019-06-25 | 联想(北京)有限公司 | 信息处理方法及存储设备 |
CN107402724B (zh) * | 2017-07-31 | 2020-07-24 | 苏州浪潮智能科技有限公司 | 一种SSD中Journal元数据的保存方法及*** |
CN108228376A (zh) * | 2017-12-29 | 2018-06-29 | 北京联想核芯科技有限公司 | 一种ssd硬盘的数据处理方法和装置 |
TWI678622B (zh) * | 2018-06-15 | 2019-12-01 | 慧榮科技股份有限公司 | 資料儲存裝置的開發系統以及產品化方法 |
CN109002258A (zh) * | 2018-06-27 | 2018-12-14 | 郑州云海信息技术有限公司 | 固态硬盘内命名空间分配方法、***及设备和存储介质 |
CN112286721A (zh) * | 2019-07-23 | 2021-01-29 | 慧荣科技股份有限公司 | 瞬间断电回复处理方法及计算机可读取存储介质以及装置 |
CN112306742A (zh) | 2019-07-23 | 2021-02-02 | 慧荣科技股份有限公司 | 瞬间断电回复处理方法及计算机可读取存储介质以及装置 |
TWI704450B (zh) * | 2019-07-23 | 2020-09-11 | 慧榮科技股份有限公司 | 瞬間斷電回復處理方法及電腦程式產品以及裝置 |
CN114327258B (zh) * | 2021-11-30 | 2023-08-15 | 苏州浪潮智能科技有限公司 | 一种固态硬盘处理方法、***、设备及计算机存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1338751A (zh) * | 2001-07-05 | 2002-03-06 | 刘海全 | 一种计算机硬盘数据的保护方法 |
CN1420440A (zh) * | 2001-11-16 | 2003-05-28 | 三星电子株式会社 | 快闪存储器管理方法 |
CN102043727A (zh) * | 2009-10-10 | 2011-05-04 | 成都市华为赛门铁克科技有限公司 | 恢复固态硬盘映射表的方法及其装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7904749B2 (en) * | 2008-10-24 | 2011-03-08 | Hitachi, Ltd. | Fast data recovery from HDD failure |
US8074113B2 (en) * | 2009-03-10 | 2011-12-06 | Emulex Design & Manufacturing Corporation | System and method for data protection against power failure during sector remapping |
-
2012
- 2012-11-19 CN CN201210468860.9A patent/CN102902637B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1338751A (zh) * | 2001-07-05 | 2002-03-06 | 刘海全 | 一种计算机硬盘数据的保护方法 |
CN1420440A (zh) * | 2001-11-16 | 2003-05-28 | 三星电子株式会社 | 快闪存储器管理方法 |
CN102043727A (zh) * | 2009-10-10 | 2011-05-04 | 成都市华为赛门铁克科技有限公司 | 恢复固态硬盘映射表的方法及其装置 |
Also Published As
Publication number | Publication date |
---|---|
CN102902637A (zh) | 2013-01-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102902637B (zh) | 一种固态硬盘数据断电保护方法 | |
CN103136116B (zh) | 存储器存储***及其中控装置、管理方法与断电恢复方法 | |
US8977807B2 (en) | Secure memory system with fast wipe feature | |
CN103577121B (zh) | 一种基于Nand Flash的高可靠线性文件存取方法 | |
CN101876949B (zh) | 数据储存***与方法 | |
CN104699413B (zh) | 数据管理方法、存储器存储装置及存储器控制电路单元 | |
CN104461964A (zh) | 一种存储装置 | |
CN101494085B (zh) | 防止非易失性存储器发生读取干扰的方法及其控制器 | |
CN101963891A (zh) | 数据存储处理方法与装置、固态硬盘***与数据处理*** | |
CN1831786A (zh) | 闪速存储器数据完整性保护方法 | |
CN102591790B (zh) | 基于固态硬盘的数据存储快照实现方法及固态硬盘 | |
CN101251826A (zh) | 闪速存储器、用于闪速存储器的数据管理方法及设备 | |
CN101782875A (zh) | 存储设备和数据存储方法 | |
CN105468544B (zh) | 实现防掉电文件***的方法、装置以及防掉电文件*** | |
CN108255740A (zh) | 一种flash均衡擦写方法及*** | |
CN110781029A (zh) | 断电保护方法及*** | |
CN104915265B (zh) | 数据备份方法和电子设备 | |
CN105786721A (zh) | 一种内存地址映射管理方法及处理器 | |
CN104281505A (zh) | 数据备份方法、装置和电子设备 | |
CN104008070A (zh) | 固态驱动器中的主引导记录保护 | |
CN103593255A (zh) | 数据管理方法、记忆存储存储器与记忆存储控制器 | |
CN101908066A (zh) | 基于FRAM和Flash的文件***管理模块 | |
CN102737716B (zh) | 存储器储存装置、存储器控制器与数据写入方法 | |
CN113711189A (zh) | 用于管理固态驱动器上的降低电力故障能量需求的***及方法 | |
CN105095352A (zh) | 应用于分布式***的数据处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150422 Termination date: 20201119 |