一种固态硬盘及其数据恢复方法和终端设备与流程

文档序号:25543647发布日期:2021-06-18 20:40
一种固态硬盘及其数据恢复方法和终端设备与流程

本发明属于存储技术领域,尤其涉及一种固态硬盘及其数据恢复方法和终端设备。



背景技术:

固态硬盘(solidstatedisk或solidstatedrive,简称ssd)是用固态电子存储芯片阵列制成的存储硬盘,由控制单元和存储单元(flash芯片、dram芯片)两部分组成。固态硬盘在接口的规范和定义、功能及使用方法以及产品外形和尺寸上与普通硬盘完全一致,现被广泛应用于军事、车载、工控、网络监控、电力、医疗、航空、导航设备等领域。

ssd的掉电情况分为两种,一种是正常掉电,另一种是异常掉电。正常掉电之前,主机会通过命令通知ssd,ssd将缓存中的用户数据和映射表,以及相关的状态信息(诸如闪存块擦写次数、闪存块读次数、闪存块其他信息等)写入到闪存中。主机等ssd处理完上述事情之后,才会真正停止对ssd的供电。可见,正常断电的情况下,不会导致ssd的数据丢失,重新上电之后,ssd只需要将掉电之前保存的相关信息重新加载,就可以接着掉电前的状态继续工作。

所谓异常掉电,是指ssd在没有收到主机的掉电通知的情况下被断电,或者收到了主机的掉电通知,但是还没有来得及将上述数据写到闪存中,就被断电了。因此,异常掉电会导致ssd丢失数据。例如,异常掉电导致ram中的映射表丢失,对于一个逻辑地址,ssd查找不到对应的物理地址,ssd就无法从闪存中读取数据返回给主机,或者映射表中的数据不是最新的,旧的物理地址对应着老的数据,ssd就会错误的把老的数据返回给主机。列举的这些情况,都将严重影响ssd的使用。

为了防止ssd在异常掉电发生时丢失数据,现有技术中,在ssd中设置电容,异常掉电发生时,电容开始放电为ssd供电,使得ssd尽可能地将ram中的数据写到闪存中,从而尽可能的避免数据丢失。

目前的技术水平,无法做到在发生异常掉电时,保证ssd不发生数据丢失。与用户数据丢失不同,缓存中的映射表是可以恢复的。映射表的恢复原理其实很简单,只要全盘扫描整个闪存空间,就能获得所有的映射关系,最终完成整个映射表的重构。

但是做全盘扫描,需要处理的数据量大,导致映射表的恢复速度慢,而且所耗时间还跟ssd的容量成正比,现在的ssd容量已经达到tb级别,如果全盘扫描就会花费几十分钟,这在实际使用中,用户是不能接受的。另外,恢复的映射表的准确性不高,导致逻辑地址与物理地址的映射关系可能会出现错误,影响ssd的使用。



技术实现要素:

有鉴于此,本发明实施例提供了固态硬盘及其数据恢复方法和终端设备,解决了ssd现有的数据恢复算法,需要全盘扫描闪存空间,数据恢复慢,且准确性不高的问题。

本发明实施例的第一方面提供了一种固态硬盘的数据恢复方法,包括以下步骤:

按照预设时间间隔将固态硬盘中的预设数据通过快照的方式存入闪存的预设位置;

在固态硬盘发生异常掉电之后,重新上电时,重构缓存中的映射表;

对最新的快照信息对应的物理地址与固态硬盘发生异常掉电时对应的物理地址之间的所有物理地址按顺序逐一扫描,进行数据恢复;

其中,所述进行数据恢复包括:

获取当前的物理地址的块号;

根据当前的物理地址的块号以及所述映射表,确定当前的物理地址对应的逻辑地址;

读取所述逻辑地址的页号;

根据所述逻辑地址的页号计算所述逻辑地址的块号;

判断所述逻辑地址的块号对应的逻辑块是否为有效块;

若所述逻辑块为有效块,则保存相应的物理块中的用户数据,更新元数据,寻找下一个物理地址进行数据恢复;

若所述逻辑块不为有效块,则从所述固态硬盘的可用空间中选择可用的物理块进行替换,并更新相应的元数据的分配,寻找下一个物理地址进行数据恢复。

本发明实施例的第二方面提供了一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如固态硬盘的数据恢复方法的步骤。

本发明实施例的第三方面提供了一种固态硬盘,所述固态硬盘存储有计算机程序,所述计算机程序被处理器执行时实现如固态硬盘的数据恢复方法的步骤。

本发明实施例与现有技术相比存在的有益效果是:

本技术方案中,在ssd异常掉电之后,进行数据恢复时,仅需要对最新快照点和异常掉电点之间的物理地址进行扫描以及相应的数据恢复,数据处理量少,数据恢复速度快,另外,通过重构的映射表,实现了对元数据及其分配的更新,使得数据恢复的可靠性高。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1是本发明中定期通过快照保存信息的示意图;

图2是本发明中元数据的数据结构示意图;

图3是本发明中元数据与物理地址之间的对应关系示意图;

图4是本发明的固态硬盘的数据恢复方法的第一实施例的流程图;

图5是本发明的固态硬盘的数据恢复方法的第一实施例中进行数据恢复的子流程图;

图6是本发明的固态硬盘的数据恢复方法的第二实施例中进行数据恢复的子流程图;

图7是本发明的终端设备的第一实施例的结构示意图。

具体实施方式

以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本发明实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。

为了说明本发明所述的技术方案,对本发明中涉及的一些技术术语进行说明。

1、快照

所谓快照,就是ssd按照一定的时间间隔把ssd中ram的数据(包括映射表和用户数据)和ssd的状态信息(诸如闪存块的擦写次数、闪存块的读取次数以及闪存块的其他信息等)写入到闪存的预设位置,与正常掉电前ssd要做的事情类似。在时间轴上最近的一次快照,为最新的快照点(如图1所示的快照d),被其记录的信息为最新的快照信息。

2、ftl

ftl(flashtranslationlayer,即闪存转换层)。ftl其实就是一种逻辑地址到物理地址的映射。当文件系统发送指令要写入或者更新一个特定的逻辑页时,ftl实际上是把数据写入到一个空闲的物理页并更新映射表,并把这个页上包含的旧数据标记为无效。ftl转换的性能直接影响到ssd的性能表现。

3、映射表

ssd内部维护一张逻辑页到物理页地址转换的映射表。用户每次写入一个逻辑页,就会产生一个新的映射关系,这个新的映射关系会加入或者更改映射表。当读取某个逻辑页时,ssd的主控首先查找映射表,找到该逻辑页对应的物理页,然后访问闪存读取相关的数据。

4、块映射

ftl有三种类型的映射策略,本发明的数据恢复方法使用的是块映射策略。块映射以闪存的块为映射粒度,一个逻辑块可以映射到任意一个闪存的物理块,但是映射前后每个页在块中的偏移不变。

块映射原理为:用户通过逻辑区块地址(logicalblockaddress,lba)访问ssd,每个lba代表一个逻辑块。ssd的主控是以闪存页(物理页)为基本单元读写闪存的,用户写入一个逻辑页的用户数据,ssd的主控会找一个物理页把用户数据写入,ssd内部的映射表记录了这条映射,下次用户再读这个逻辑页时,可以通过映射表中的映射关系找到闪存物理页中存储的用户数据。

5、元数据

ssd在将用户数据写到闪存的时候,会额外的打包一些数据,该写数据就叫做元数据(metadata),元数据记录着该笔用户数据的相关信息,如图2所示,比如该笔用户数据对应的逻辑地址lba以及用户数据的写入时间(时间戳ts)等等。

如图3所示,元数据存储于闪存中,与物理地址建立了对应关系。如果我们读取到物理地址,就能读取到对应的元数据和用户数据,而元数据包含逻辑地址,所以就可以获得逻辑地址与物理地址的映射关系。只需要全盘扫描整个闪存空间,就能获得所有的映射关系,最终完成整个映射表的重构。

假设ssd起初把逻辑地址1的数据写在物理地址1上,后来用户又改写了该数据,ssd把它写到了物理地址8上。假设ssd按照顺序从物理地址1逐一扫描到物理地址x,对逻辑地址1来说,一开始会产生映射关系:逻辑地址1——〉物理地址1,当扫描到物理地址8时,就会发生新的映射关系,由于最后写入的数据总是最新的,即其时间戳为较大一者,因此新产生的映射关系取代了旧的映射关系,最后映射关系变成:逻辑地址1——〉物理地址8。

为了说明本发明的技术方案,下面通过具体实施例来进行说明。

图4为本发明的ssd的数据恢复方法的第一实施例的流程图,如图1所示,数据恢复方法包括以下步骤:

s11:按照预设时间间隔将ssd中的预设数据通过快照的方式存入闪存的预设位置。

在本实施例中,预设数据包括映射表、用户数据以及ssd的状态信息。其中映射表缓存于dram中,用户数据以及ssd的状态信息存在闪存中,ssd的状态信息包括物理块的擦写次数和读次数。预设位置位于ssd的闪存的可用空间。

在本实施例的步骤s11中,ssd通过ftl定期把上述预设数据写入到闪存中去,与正常掉电前ssd要做的事情类似,这个操称之为快照,即ftl拥有快照功能。

s12:ssd发生异常掉电之后,重新上电时,重构缓存中的映射表。

在本实施例中,如果发生了异常断电,重新上电过程中,ftl扫描缓存中的数据,自动实现对映射表的重构。

s13:对最新的快照信息对应的物理地址与ssd发生异常掉电时对应的物理地址之间的所有物理地址按顺序逐一扫描,进行数据恢复。

在本实施例中,在完成映射表的重构之后,ftl根据最新的快照信息(即最近一次的快照点)对应的物理地址开始,按照顺序逐一对ssd闪存的物理地址进行扫描,通过ftl的块映射原理实现恢复数据,直到扫描到ssd发生异常掉电(异常掉电点)时对应的物理地址结束。

其中,如图5所示,进行数据恢复的包括以下子步骤:

s131:获取当前的物理地址的块号。

在子步骤s131中,ftl判断当前扫描到的物理地址是否为ssd发生异常掉电时对应的物理地址,若是则结束本发明的数据恢复的流程,执行其他流程,若否则获取当前的物理地址的块号。

s132:根据当前的物理地址的块号以及映射表,确定当前的物理地址对应的逻辑地址。

在子步骤s132中,ftl根据当前的物理地址的块号,从映射表中获取出当前的物理地址对应的逻辑地址。

s133:读取所述逻辑地址的页号。

在子步骤s133中,ftl算法可以根据逻辑地址来读取该逻辑地址的页号。

s134:根据所述逻辑地址的页号计算所述逻辑地址的块号。

在子步骤s134中,ftl算法根据读取的该逻辑地址的页号,计算出该逻辑地址的块号(可以采用现有的计算方法实现)。

s135:判断所述逻辑地址的块号对应的逻辑块是否为有效块。

在子步骤s135中,ftl通过是否能够通过计算出的逻辑地址的块号对应的逻辑块正常读取到用户数据,来判断该逻辑块是否为有效块,若能够正常读取到用户数据则判断该逻辑块为有效块,若不能则判断该逻辑块为无效块。

由于逻辑块和物理块是对应的,该步骤也可以描述为,ftl判断能否通过该逻辑块正常读取到相应物理块上存储的用户数据,若能则判断该逻辑块为有效块,若不能则判断该逻辑块为无效块。

s136:若所述逻辑块为有效块,则保存相应的物理块中的用户数据,更新元数据,寻找下一个物理地址进行数据恢复。

在子步骤s136中,若子步骤s135的判断结果为该逻辑块为有效块,则保存相应的物理块中的用户数据,并相应地更新元数据,然后返回子步骤s131。其中,更新元数据包括更新元数据中的逻辑地址。

s137:若逻辑块不为有效块,则从ssd的可用空间中选择可用的物理块进行替换,并更新相应的元数据的分配,寻找下一个物理地址进行数据恢复。

在子步骤s137中,若子步骤s135的判断结果为该逻辑块为无效块,ftl认定与该逻辑块对应的物理块为坏块,并从ssd的可用空间中选择可用的物理块作为与该逻辑块对应的物理块,即对坏块进行替换,并且更新相应的元数据的分配。具体的,更新相应的元数据的分配包括更新元数据中逻辑地址的块号,以及将该元数据与相应的物理地址建立对应关系。

在本发明的ssd数据恢复方法的第一实施例中,在ssd异常掉电之后,进行数据恢复时,仅需要对最新快照点和异常掉电点之间的物理地址进行扫描以及相应的数据恢复,数据处理量少,数据恢复速度快。另外,通过重构的映射表,实现了对元数据及其分配的更新,保证了物理地址和逻辑地址对应关系的准确,即使得数据恢复的可靠性高。

在本发明的ssd数据恢复方法的第二实施例中,参见图1,ssd的数据恢复方法包括步骤s11-s13。在本实施例中,如图6所示,步骤s13包括以下子步骤:

s61:获取当前的物理地址的块号;

s62:根据当前的物理地址的块号以及映射表,确定当前的物理地址对应的逻辑地址;

s63:读取所述逻辑地址的页号;

s64:根据所述逻辑地址的页号计算所述逻辑地址的块号;

s65:判断所述逻辑地址的块号对应的逻辑块是否为有效块;

s66:若所述逻辑块为有效块,则保存相应的物理块中的用户数据,更新元数据,寻找下一个物理地址进行数据恢复;

s67:若逻辑块不为有效块,则判断ssd的可用空间中是否有可用的物理块;

s68:若ssd可用空间中有可用的物理块,则选择可用的物理块进行替换,记录无效块的块号,并更新相应的元数据的分配,寻找下一个物理地址进行数据恢复;

s69:若ssd的可用空间中没有可用的物理块,则判断ssd的预留空间中是否有可用的物理块;

s70:若ssd的预留空间中有可用的物理块,则选择可用的物理块进行替换,记录无效块的块号,并更新相应的元数据的分配,寻找下一个物理地址进行数据恢复;

s71:若ssd的预留空间中没有可用的物理块,则对ssd进行垃圾回收;

s72:在垃圾回收之后,从ssd的预留空间选择可用的物理块进行替换,并更新相应的元数据的分配,记录无效块的块号以及预留空间中用于替换的物理块的块号,寻找下一个物理地址进行数据恢复。

在本实施例中,子步骤s61-s66与第一实施例中的子步骤s131-s136对应相同。

在本实施例的子步骤s67中,若子步骤s65的判断结果为该逻辑块为无效块,ftl认定与该逻辑块对应的物理块为坏块,此时则进一步判断ssd的可用空间中是否有可用的物理块。

在本实施例的子步骤s68中,若子步骤s67的判断结果为ssd可用空间中有可用的物理块,则选择可用的物理块作为与该逻辑块对应的物理块,或者说对无效块进行替换,并且更新相应的元数据的分配。具体的,更新相应的元数据的分配包括更新元数据中逻辑地址的块号,以及将该元数据与相应的物理地址建立对应关系。另外,记录该无效块的块号。最后返回子步骤s61。

在本实施例的子步骤s69中,若子步骤s67的判断结果为ssd可用空间中无可用的物理块,则进一步判断ssd的预留空间(op)中是否有可用的物理块。

在本实施例的子步骤s70中,若子步骤s69的判断结果为ssd的op中有可用的物理块,ftl选择op中可用的物理块作为与该逻辑块对应的物理块,即对无效块进行替换,记录无效块的块号,并更新相应的元数据的分配,返回子步骤s61。其中,更新相应的元数据的分配包括更新元数据中逻辑地址的块号,以及将该元数据与相应的物理地址建立对应关系。

在本实施例的子步骤s71中,若子步骤s69的判断结果为ssd的op中没有可用的物理块,ftl则对ssd的可用空间以及op都进行垃圾回收(gc)。

在本实施例的子步骤s72中,在垃圾回收之后,ftl从ssd的op中选择可用的物理块作为与该逻辑块对应的物理块,即对无效块进行替换,并更新相应的元数据的分配,以及记录无效块的块号以及op中用于替换的物理块的块号,返回子步骤s61。其中,更新相应的元数据的分配包括更新元数据中逻辑地址的块号,以及将该元数据与相应的物理地址建立对应关系。

在本发明的ssd的数据恢复方法的第二实施例中,能够准确的判断出块的状态,并根据重构的映射表,恢复元数据,使得恢复后的映射信息可靠性高。

本发明还提供了一种终端设备,如图7所示,终端设备100包括:处理器101、存储器102以及存储在存储器102中并可在处理器101上运行的计算机程序103。处理器101执行计算机程序103时实现上述ssd的数据恢复方法的各实施例中的步骤。

示例性的,计算机程序103可以被分割成一个或多个单元/模块,所述一个或者多个单元/模块/子模块被存储在存储器102中,并由处理器101执行,以完成本发明。

终端设备100可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。终端设备100可包括,但不仅限于,处理器101、存储器102。本领域技术人员可以理解,图7仅仅是终端设备100的示例,并不构成对终端设备100的限定,终端设备100可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如终端设备100还可以包括输入输出设备、网络接入设备、总线等。

处理器101可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

存储器102可以是终端100的内部存储单元,例如终端100的硬盘或内存。存储器102也可以是终端100的外部存储设备,例如终端100上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。进一步地,存储器102还可以既包括终端100的内部存储单元,也包括外部存储设备。存储器102用于存储计算机程序103以及终端100所需的其他程序和数据。存储器102还可以用于暂时地存储已经输出或者将要输出的数据。

本发明还提供了一种固态硬盘ssd,固态硬盘ssd存储有计算机程序,计算机程序被处理器执行时实现如ssd的数据恢复方法任一实施例中的步骤。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。

以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。

再多了解一些
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1