一种基于block管理的异常掉电恢复方法及系统

文档序号:1963607 发布日期:2021-12-14 浏览:10次 >En<

阅读说明:本技术 一种基于block管理的异常掉电恢复方法及系统 (Abnormal power failure recovery method and system based on block management ) 是由 金岳平 于 2021-08-04 设计创作,主要内容包括:本申请提供一种基于block管理的异常掉电恢复方法及系统,方法包括:在空闲block列表中选择预设数量的block作为预写block;将预写block的信息及FTL的增量变化表写入SSD;新数据写入预写block中,同时将FTL的更新项同步记录到增量变化表,直到预写block被用完;重复上述步骤,当增量变化表的记录数据总量达到预设值,将完整的FTL备份替换增量备份过程;发生异常掉电后再次上电时,读取有效的增量变化表,将记录更新到FTL中;遍历最后一份有效增量变化表中每一个预写block,查找其有效数据,更新FTL后将最新的FTL更新至SSD。本申请解决了大容量SSD的异常掉电恢复时间过长问题。(The application provides an abnormal power failure recovery method and system based on block management, wherein the method comprises the following steps: selecting a preset number of blocks in an idle block list as pre-written blocks; writing the information of the pre-written block and the increment change table of the FTL into the SSD; writing new data into the pre-written block, and synchronously recording an updating item of the FTL into an incremental change table until the pre-written block is used up; repeating the steps, and replacing the complete FTL backup for the incremental backup process when the total amount of the recorded data of the incremental change table reaches a preset value; when the power is powered on again after abnormal power failure occurs, reading the effective incremental change table and updating the record into the FTL; and traversing each pre-written block in the last effective increment change table, searching effective data of the block, and updating the latest FTL to the SSD after updating the FTL. The method and the device solve the problem that the abnormal power failure recovery time of the high-capacity SSD is too long.)

一种基于block管理的异常掉电恢复方法及系统

技术领域

本发明涉及固态硬盘存储技术领域,尤其涉及一种基于block管理的异常掉电恢复方法及系统。

背景技术

固态硬盘使用操作系统通过一组LBA(Logical Block Address,逻辑区块地址)来读写固态硬盘内部的数据,在普通的硬盘上,由于数据是可以直接覆盖的,所以LBA和PBA(Physical Block Address,物理区块地址)的关系是一一对应的,不会变更,但是由于固态硬盘使用的存储介质NAND闪存有需要先擦除才能写入的特性,导致LBA和PBA的关系不再是固定不变的,因此固态硬盘专门有一个层来负责上层到底层的转换,这个层叫FTL(FlashTranslation Layer,闪存转换层)层,它的主要任务是将FTL层之上的LBA转化为底层需要的PBA。就其转换任务而言,FTL层需要一张从LBA到PBA的映射表,称之为FTL表,它存放在内存中,在整个固态硬盘的读写过程中都需要实时查找、更新这张表,从而能正确读取或写入数据,所以这张表不但要保证能够正确地更新读取,还要保证设备掉电时能正确地保存以及在下一次上电时能正确恢复。

FTL的设计对SSD的性能和寿命会产生很大影响,在小容量的SSD中,FTL一般以大的pagesize作为映射,正常下电时,会自动保存最新的FTL,上电重新加载时,直接读取保存的FTL恢复数据。发生异常掉电时,最新的FTL没有来得及写入SSD,之前保存的FTL已经不是最新的,需要扫描所有的NAND来重建最新的FTL。由于使用较大的pagesize,扫描全盘的时间有限,不需要使用额外的机制。

在大容量的企业级SSD中,动则10TB以上,这类SSD一般通过多个通道并发访问来提高闪存的访问效率,每个通道读写一部分NAND芯片。即使如此,受限于NAND本身的读写速度和外部接口的速度,扫描SSD全盘的时间还是很长,例如,某企业级SSD提供24T物理容量,即使采用较大的pagesize,扫描全盘的时间也需要1-2个小时,这种机制就不能满足要求。同时为了提高SSD的寿命和性能,企业级的SSD设计一般会采用4K的pagesize,扫描的粒度更小,需要的时间会更久。

为了提高掉电恢复的速度,一般会采用block固定分组的形式,如图1所示。几个NAND芯片分为一组,按block的序号分成多个group,例如图1中共2X个NAND,每X个NAND分成一组,每个NAND有n个block,每组NAND会有n个group,整个SSD中包含了2n个group。

写数据时,按照group写数据,在一个group没有写满之前,不会写下一个group。进行垃圾回收时,根据group的有效数据占比进行排序,选择有效数据占比最少的group进行垃圾回收,回收时需要迁移所有的有效数据后再擦除。

写数据详细步骤

a.查找下一个空闲的group A写入管理信息,管理信息中包含写入序列号,用来标明每个group的写入先后顺序;

b.新写入的数据都写入group A,直到group A写满;

c.持续写入时,重复执行a,b过程,每次获取空闲group时,写入的序列号依次递增;

d.写满特定数量的group后更新FTL到SSD中,更新FTL时同时写入最新的group序列号,并标明本次写入的FTL为临时备份;

e.设备正常关机或者卸载驱动时,更新FTL到SSD中,标明本次写入的为关机备份。

发生异常断电时,可能在a、b、c、d中的任何时刻。

垃圾回收详细步骤

a.当预留group不够时,在所有的group中找到平均有效数据占比最低的group F;

b.把有效数据迁移到一个空闲的group K中;

c.Group F迁移完成后,擦除原group F内的所有block;

d.擦除完的group F加入到空闲group列表中。

设备重新上电过程

a.读取最新的FTL,如果FTL标识为关机备份,则加载FTL,读取序列号作为本次设备启用的起始序列号;

b.如果FTL表示为临时备份,则说明上一次下电为异常断电,需要进行异常掉电恢复,恢复时先读取最后一次FTL备份,并获取记录的序列号y,并开始扫描group;

c.扫描盘上的每个group,读取group的序列号,记录所有序列号在y之后的group并按照序列号进行排序,依序读取group中的所有有效数据的信息,并更新到FTL中;

d.扫描完成后,完成掉电恢复过程。

使用这种方式进行异常掉电恢复,可以避免扫描全盘,大大加速了异常掉电的恢复过程,但是存在着以下不足:

(1)group的设计会提高整个SSD的写放大。在group中包含多个block,随着应用的使用,每个block中的有效数据占比并不是一致的。比如一个group的平均有效数据占比为20%,有可能是每个block比较平均,都是20%,更大的可能是group内部的block有效数据占比并不均衡,有的只有5%或者更低,甚至没有有效数据,有的则超过50%。group作为一个整体,在回收时只能进行整个group的擦除,导致部分block的写放大增加,提高了SSD的整体写放大。如果有更小粒度比如到block级别的管理,则可以只回收有效数据最少的block,有效降低写放大。

(2)不能兼顾写放大系数和恢复时间。设计时group的大小会影响写放大和恢复的时间,如果group大,发生有效数据占比不均的可能性越大,则写放大相对较大,但是group总数少,异常掉电恢复的时间较短;group较小,越接近block级别的管理,则写放大相对较小,但是由于group总数多,异常掉电恢复的时间较长。

(3)异常掉电恢复时间随着容量增大。在group大小一定的情况下,容量越大,group越多,这样会造成异常掉电恢复时间随着容量而变长。

发明内容

本发明的目的在于提供一种基于block管理的异常掉电恢复方法及系统,以解决大容量SSD的异常掉电恢复时间过长的问题,同时兼顾SSD的写放大。

为实现上述目的,本发明采用以下技术方案:

本申请第一个方面提供了一种基于block管理的异常掉电恢复方法,包括:写数据阶段:

a,在SSD空闲的block列表中选择预设数量的block作为预写block;

b,将预写block的信息,以及FTL的增量变化表一起写入SSD,完成后清空增量变化表,该步骤为增量备份过程;

c,将新数据写入预写block中,同时将FTL的更新项同步记录到增量变化表中,直到预写block被用完,所述增量变化表中还包括用于标识时序的序列号;

d,重复步骤a至c,当增量变化表的记录数据总量达到了整个FTL的数据量,则在步骤b中进行一次完整的FTL备份替换增量备份过程,新的FTL记录中会记录增量变化表的最新序列号;

e,设备正常关机或者卸载驱动时,更新FTL到SSD中,标明本次写入数据为关机备份;

异常掉电恢复阶段:

f,若在上述步骤a,b,c,d中的任何时刻发生异常掉电,再次上电后,读取最新的FTL;

g,判断读取的FTL中是否有关机备份标记,如果FTL中没有关机备份标记,则读取增量变化表,根据序列号查找其中有效的部分;

h,读取有效的增量变化表,将记录更新到FTL中;

i,读取最后一份有效的增量变化表中预写block的信息,并遍历每一个预写block,查找其中的有效数据;

j,遍历完预写block的信息后,更新FTL,并将最新的FTL更新至SSD中,完成异常掉电恢复过程。

优选地,步骤a中,预写block所包括block的预设数量能够满足未来几秒内的全速写的数据量要求。

优选地,步骤b中,预写block为block的寻址信息,包括block所在的通道号、NAND芯片在该通道的序号和block在该NAND芯片的序号。

优选地,步骤c中,FTL的更新项,每一项内容为一对物理地址和LBA的映射关系。

优选地,步骤g中,判断读取的FTL中是否有关机备份标记,如果FTL中有关机备份标记,则完成FTL加载过程。

优选地,所述方法还包括:FTL发生更新后,所述FTL的新增数据为增量数据,将所述增量数据写入内存上预设的增量存储空间中,即增量变化表;所述FTL保存SSD的逻辑区块地址与物理区块地址的对应关系。

优选地,步骤a中,若SSD预留的空闲的block低于设定的阈值时,所述方法还包括垃圾回收阶段,包括如下步骤:

从SSD的所有block列表中选择有效数据占比最低的block,如果还需要更多的block,则继续选择有效数据占比次低的block,直至满足对block的数量需求;

将选取的block中的有效数据迁移到其它空闲的block中,并擦除该选取的block;

将擦除后的block加入到空闲的block列表中。

本申请第二个方面提供了一种基于block管理的异常掉电恢复系统,包括:写数据单元和异常掉电恢复单元;其中,

所述写数据单元包括:

预写block分配模块,用于在SSD空闲的block列表中选择预设数量的block作为预写block;

增量备份模块,用于将预写block的信息,以及FTL的增量变化表一起写入SSD,完成后清空增量变化表;

新数据写入模块,用于将新数据写入预写block中,同时将FTL的更新项同步记录到增量变化表中,直到预写block被用完,所述增量变化表中还包括用于标识时序的序列号;

第一判断模块,用于判断增量变化表的记录数据总量是否达到了整个FTL的数据量;

替换模块,用于当增量变化表的记录数据总量达到了整个FTL的数据量时,进行一次完整的FTL备份替换增量备份过程,新的FTL记录中会记录增量变化表的最新序列号;

关机备份标记模块,用于当设备正常关机或者卸载驱动时,更新FTL到SSD中,并标明本次写入数据为关机备份;

所述异常掉电恢复单元包括:

最新FTL读取模块,用于在SSD发生异常掉电时,当再次上电后,读取最新的FTL;

第二判断模块,用于判断读取的FTL中是否有关机备份标记;

增量变化表读取模块,用于当FTL中没有关机备份标记时,读取增量变化表,根据序列号查找其中有效的部分;

有效增量变化表读取模块,用于读取有效的增量变化表,并将记录更新到FTL中;

有效数据获取模块,用于读取最后一份有效的增量变化表中预写block的信息,并遍历每一个预写block,查找其中的有效数据;

FTL更新模块,用于在遍历完预写block的信息后,更新FTL,并将最新的FTL更新至SSD中。

优选地,所述预写block的信息为block的寻址信息,包括block所在的通道号、NAND芯片在该通道的序号和block在该NAND芯片的序号。

优选地,所述FTL的更新项,每一项内容为一对物理地址和LBA的映射关系。

优选地,所述系统还包括垃圾回收单元,所述垃圾回收单元包括:

失效目标块选择模块,用于选择待回收的block,其中,所述待回收的block是从SSD的所有block列表中选择有效数据占比最低的block,如果还需要更多的block,则继续选择有效数据占比次低的block,直至满足对block的数量需求;

迁移模块,用于将选取的待回收的block中的有效数据迁移到其它空闲的block中,所述的其它空闲的block是指SSD内除所述待回收的block之外的空闲的block;

擦除模块,用于擦除待回收的block,并将擦除后的block加入到空闲的block列表中。

本申请第三个方面提供了一种基于block管理的异常掉电恢复设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序以实现上述任一项所述的基于block管理的异常掉电恢复方法的步骤。

本申请第四个方面提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一项所述的基于block管理的异常掉电恢复方法的步骤。

与现有技术相比,本发明的技术方案具有以下有益效果:

1)本发明提供了一种基于block管理的异常掉电恢复方法,通过在写数据之前先记录未来数据将会写到什么位置,有效限制了数据的查找范围;通过使用block粒度的FTL管理,使SSD的写放大达到最小;通过增量变化表记录实际的FTL变化情况,不需要通过重读原始数据来进行恢复,提高了未记录FTL表项的更新速度。本申请解决了大容量SSD的异常掉电恢复时间过长的问题,同时兼顾了SSD的写放大。

2)本发明提供了一种基于block管理的异常掉电恢复系统,能够支持上述的基于block管理的异常掉电恢复方法。

附图说明

构成本申请的一部分附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1是现有技术中采用block固定分组形式的分组示意图;

图2是本申请优选实施例的写数据过程的流程图;

图3是本申请优选实施例的异常掉电恢复过程的流程图;

图4是本申请优选实施例的垃圾回收过程的流程图;

图5是本申请优选实施例的SSD中以block为粒度的block列表的示意图(实际一个NAND芯片里面有上千个block);

图6是本申请优选实施例的基于block管理的异常掉电恢复系统的结构框图。

具体实施方式

为使本发明的目的、技术方案及效果更加清楚、明确,以下参照附图并举实例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序,应该理解这样使用的数据在适当情况下可以互换。此外,术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

实施例一:

图2是本申请基于block管理的异常掉电恢复方法中的写数据过程的流程图;图3是异常掉电恢复过程的流程图;图4是垃圾回收过程的流程图;图5是SSD中以block为粒度的block列表示意图。

参阅图2~图5,本申请公开的一种基于block管理的异常掉电恢复方法,包括以下阶段:

(一)写数据过程

步骤A1,从空闲的block列表中选择一批block作为预写block,block的数量一般能够满足未来几秒内的全速写的数据量要求。

步骤A2,将这些预写block的信息连同FTL的增量变化表一起写入SSD,完成后清空增量变化表。这个步骤为增量备份过程。增量备份过程将这个时间点之前的变化和未来的可能变化都进行了相应的记录。其中,预写block的信息为block的寻址信息,包括block所在的通道号、NAND芯片在该通道的序号和block在该NAND芯片的序号。

步骤A3,开始写入数据,新数据都将写入这些预写block中,同时将FTL的更新项同步记录到增量变化表,直到这些block被用完。增量变化表中包含序列号,标识其时序。其中,FTL的更新项,每一项内容为一对物理地址和LBA的映射关系。

步骤A4,重复步骤A1~A3的过程,如果几次增量变化表的记录数据总量达到了整个FTL的数据量,则在步骤A2时进行一次完整的FTL备份替换增量备份过程。新的FTL记录中会记录增量变化表的最新序列号。

步骤A5,设备正常关机或者卸载驱动时,更新FTL到SSD中,标明本次写入的为关机备份。

发生异常断电时,可能在A1,A2,A3,A4中的任何时刻。

(二)异常掉电恢复过程

步骤B1,上电后,读取最新的FTL,如果FTL中有关机保存备份标记,则完成FTL加载过程。

步骤B2,如果FTL中没有关机备份标记,则读取增量变化表,根据序列号查找其中有效的部分。

步骤B3,读取有效的增量变化表,将记录更新到FTL中。

步骤B4,读取最后一份有效的增量变化表中预写block的信息,并遍历每一个预写block,查找其中的有效数据。

步骤B5,遍历完block信息后,更新FTL,并将最新的FTL更新到SSD中,完成异常掉电恢复过程。

(三)垃圾回收过程

步骤C1,预留的空block不足时,会从SSD的所有block列表中选择有效数据占比最低的block,例如图5中,Block(0,4),(1,3),(2,2)……等是没有有效数据的block,Block(0,1),(1,2)……等次之,Block(0,3),(1,0)……等则是全是有效数据的block。在这里会选取Block(0,4),(1,3),(2,2)……等block,如果还需要更多的block,则继续选择Block(0,1),(1,2)……等block。其中,Block(x,y)的编码规则为:x对应NAND的编号,y对应NAND内block序号。

步骤C2,将选取的block中的有效数据进行迁移,并擦除该block。

步骤C3,擦除后的block加入到空闲的block列表中。

实施例二:

相应于上面的方法实施例,本申请实施例还提供了一种基于block管理的异常掉电恢复系统,参阅图6,所述系统包括写数据单元100、异常掉电恢复单元200和垃圾回收单元300。

其中,所述写数据单元100包括:

预写block分配模块101,用于在SSD空闲的block列表中选择预设数量的block作为预写block;

增量备份模块102,用于将预写block的信息,以及FTL的增量变化表一起写入SSD,完成后清空增量变化表;

新数据写入模块103,用于将新数据写入预写block中,同时将FTL的更新项同步记录到增量变化表中,直到预写block被用完,所述增量变化表中还包括用于标识时序的序列号;

第一判断模块104,用于判断增量变化表的记录数据总量是否达到了整个FTL的数据量;

替换模块105,用于当增量变化表的记录数据总量达到了整个FTL的数据量时,进行一次完整的FTL备份替换增量备份过程,新的FTL记录中会记录增量变化表的最新序列号;

关机备份标记模块106,用于当设备正常关机或者卸载驱动时,更新FTL到SSD中,并标明本次写入数据为关机备份。

其中,所述异常掉电恢复单元200包括:

最新FTL读取模块201,用于在SSD发生异常掉电时,当再次上电后,读取最新的FTL;

第二判断模块202,用于判断读取的FTL中是否有关机备份标记;

增量变化表读取模块203,用于当FTL中没有关机备份标记时,读取增量变化表,根据序列号查找其中有效的部分;

有效增量变化表读取模块204,用于读取有效的增量变化表,并将记录更新到FTL中;

有效数据获取模块205,用于读取最后一份有效的增量变化表中预写block的信息,并遍历每一个预写block,查找其中的有效数据;

FTL更新模块206,用于在遍历完预写block的信息后,更新FTL,并将最新的FTL更新至SSD中。

其中,所述垃圾回收单元300包括:

失效目标块选择模块301,用于选择待回收的block,其中,所述待回收的block是从SSD的所有block列表中选择有效数据占比最低的block,如果还需要更多的block,则继续选择有效数据占比次低的block,直至满足对block的数量需求;

迁移模块302,用于将选取的待回收的block中的有效数据迁移到其他空闲的block中,所述的其他空闲的block是指SSD内除所述待回收的block之外的空闲的block;

擦除模块303,用于擦除待回收的block,并将擦除后的block加入到空闲的block列表中。

实施例三:

相应于上面的方法实施例,本申请实施例还提供了一种基于block管理的异常掉电恢复设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行计算机程序以实现上述实施例1中的基于block管理的异常掉电恢复方法的步骤。

实施例四:

另一方面,本申请实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述实施例1中的基于block管理的异常掉电恢复方法的步骤。这里所说的计算机可读存储介质包括随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质。

综上所述,本申请的技术方案具有以下特点:

(1)写之前需要先记录未来数据将会写到什么位置,这样能够有效限制数据的查找范围。预写block的分配频率和数量与SSD的写入速度相关,由于SSD的速率不会随着容量大幅变化,不同容量的SSD的预写block数量基本都一致,不会造成读取数据量的大幅变化,SSD的恢复时间不会随容量增加。

(2)使用block粒度的FTL管理,使SSD的写放大达到最小。由于垃圾回收时,每次都是选择所有block中有效数据最低的block,能最大限度降低搬移的数据量,降低写放大系数。

(3)增量变化表记录了实际的FTL变化情况,不需要通过重读原始数据来进行恢复,提高了未记录FTL表项的更新速度。增量变化表每一项对应一个4k页的映射,一般8个字节代表一项,如果没有这个表,则需要读取原始数据中的管理信息进行恢复。例如16k大小的增量变化表可以记录2k个映射项,只需要一次读操作就能完成,如果要读取原始数据中的管理信息,则需要读取2k次,两者的时间花费相差巨大。

以上对本发明的具体实施例进行了详细描述,但其只是作为范例,本发明并不限制于以上描述的具体实施例。对于本领域技术人员而言,任何对本发明进行的等同修改和替代也都在本发明的范畴之中。因此,在不脱离本发明的精神和范围下所作的均等变换和修改,都应涵盖在本发明的范围内。

14页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:数据的恢复方法、计算设备及存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!