CN115016740B - 一种数据恢复方法、装置、电子设备及存储介质 - Google Patents
一种数据恢复方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN115016740B CN115016740B CN202210825561.XA CN202210825561A CN115016740B CN 115016740 B CN115016740 B CN 115016740B CN 202210825561 A CN202210825561 A CN 202210825561A CN 115016740 B CN115016740 B CN 115016740B
- Authority
- CN
- China
- Prior art keywords
- dirty
- storage medium
- data
- index
- memory
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1446—Point-in-time backing up or restoration of persistent data
- G06F11/1448—Management of the data involved in backup or backup restore
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0652—Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0683—Plurality of storage devices
- G06F3/0685—Hybrid storage combining heterogeneous device types, e.g. hierarchical storage, hybrid arrays
Abstract
本申请提供一种数据恢复方法、装置、电子设备及存储介质,应用于与采用混合存储架构的存储设备对应的虚拟缓存设备;其中,所述混合存储架构包括支持覆盖式写入数据的第一存储介质和支持擦除式写入数据的第二存储介质;所述方法包括:响应于所述存储设备满足IO模式的切换条件,将所述第二存储介质中存储的脏索引、以及与所述脏索引对应的脏数据同步至内存中;响应于将所述第二存储介质中存储的所述脏索引以及所述脏数据同步至内存中完成,将当前的IO模式由第二存储介质缓存模式切换为内存缓存模式;基于内存中存储的脏索引,将内存中存储的脏数据回写至所述第一存储介质。
Description
技术领域
本申请涉及存储技术领域,尤其涉及一种数据恢复方法、装置、电子设备及机器可读存储介质。
背景技术
随着各行各业产生的数据量越来越大,用户对数据处理的要求也越来越高。为了兼顾高性能和低成本,可以基于采用了混合存储架构的存储设备,为用户提供数据存储、数据访问等数据服务。
例如,所述混合存储架构可以包括固态硬盘和机械硬盘;其中,所述固态硬盘可以作为缓存盘,所述机械硬盘可以作为后端盘;所述固态硬盘可以用于为所述机械硬盘进行缓存加速。
在实际应用中,如果缓存盘出现损坏的情况,而缓存盘中存储的脏数据还没有同步至后端盘,就会导致整个混合存储盘的数据不完整;并且,由于从缓存盘向后端盘中同步脏数据并不是按照IO时间的顺序,而是按照数据在后端盘的目标存储地址的顺序,因此需要丢弃掉与该缓存盘捆绑的后端盘中的全部数据。
发明内容
本申请提供一种数据恢复方法,应用于与采用混合存储架构的存储设备对应的虚拟缓存设备;其中,所述混合存储架构包括支持覆盖式写入数据的第一存储介质和支持擦除式写入数据的第二存储介质;所述方法包括:
响应于所述存储设备满足IO模式的切换条件,将所述第二存储介质中存储的脏索引、以及与所述脏索引对应的脏数据同步至内存中;其中,所述脏索引为与其对应的数据未回写至所述第一存储介质的索引;所述脏数据为未回写至所述第一存储介质的数据;
响应于将所述第二存储介质中存储的所述脏索引以及所述脏数据同步至内存中完成,将当前的IO模式由第二存储介质缓存模式切换为内存缓存模式;
在所述IO模式为内存缓存模式的情况下,基于内存中存储的脏索引,将内存中存储的脏数据回写至所述第一存储介质。
可选的,在将所述第二存储介质中存储的脏索引、以及与所述脏索引对应的脏数据同步至内存中之前,所述方法还包括:
检测内存的可用容量是否达到预设容量;
如果达到预设容量,则将所述第二存储介质中存储的脏索引、以及与所述脏索引对应的脏数据同步至内存中;
如果未达到预设容量,则将所述第二存储介质中存储的所述脏数据同步至所述第一存储介质中;
响应于将所述第二存储介质中存储的所述脏数据同步至所述第一存储介质中完成,将当前的IO模式由第二存储介质缓存模式切换为数据透传模式。
可选的,在当前的IO模式为第二存储介质缓存模式的情况下,所述IO模式的切换条件包括以下示出的任一条件:
将请求写入所述存储设备的数据存储至所述第二存储介质失败;
将所述第二存储介质中存储的脏数据回写至所述第一存储介质失败;
检测到所述第二存储介质的剩余寿命低于预设阈值。
可选的,所述第二存储介质中存储了第一索引树;所述第一索引树中包括的索引,用于指示与其对应的数据在所述第二存储介质中的存储地址,以及用于指示与其对应的数据在所述第一存储介质中的存储地址;
所述将所述第二存储介质中存储的脏索引、以及与所述脏索引对应的脏数据同步至内存中,包括:
遍历所述第二存储介质中存储的第一索引树,读取出所述第一索引树包括的脏索引;
根据所述脏索引指示的与其对应的数据在所述第二存储介质中的存储地址,读取出所述第二存储介质中存储的与所述脏索引对应的脏数据,并将读取出的所述脏数据写入至内存;
根据所述脏数据在内存中的存储地址、以及所述脏索引指示的与其对应的数据在所述第一存储介质中的存储地址,重新生成与所述脏数据对应的脏索引,并将重新生成的所述脏索引插入至内存中存储的第二索引树;其中,所述第二索引树中包括的索引,用于指示与其对应的数据在内存中的存储地址,以及用于指示与其对应的数据在所述第一存储介质中的存储地址。
可选的,所述基于内存中存储的脏索引,将内存中存储的脏数据回写至所述第一存储介质,包括:
遍历内存中存储的所述第二索引树,读取出所述第二索引树包括的脏索引;
根据所述第二索引树包括的脏索引指示的与其对应的数据在内存中的存储地址,读取出内存中存储的与所述脏索引对应的脏数据,并将读取出的所述脏数据写入至所述脏索引指示的与其对应的数据在所述第一存储介质中的存储地址;
在将所述脏数据写入至所述第一存储介质中后,将内存中存储的所述脏索引更新为干净索引,以完成将内存中存储的所述脏数据回写至所述第一存储介质;其中,所述干净索引为与其对应的数据已回写至所述第一存储介质的索引。
可选的,所述将所述第二存储介质中存储的所述脏数据同步至所述第一存储介质中,包括:
遍历所述第二存储介质中存储的第一索引树,读取出所述第一索引树包括的脏索引;
根据所述脏索引指示的与其对应的数据在所述第二存储介质中的存储地址,读取出所述第二存储介质中存储的与所述脏索引对应的脏数据,并将读取出的所述脏数据写入至所述脏索引指示的与其对应的数据在所述第一存储介质中的存储地址。
可选的,所述第一索引树和/或所述第二索引树,为采用B+树数据结构的索引树。
本申请还提供一种数据恢复装置,应用于与采用混合存储架构的存储设备对应的虚拟缓存设备;其中,所述混合存储架构包括支持覆盖式写入数据的第一存储介质和支持擦除式写入数据的第二存储介质;所述装置包括:
同步单元,用于响应于所述存储设备满足IO模式的切换条件,将所述第二存储介质中存储的脏索引、以及与所述脏索引对应的脏数据同步至内存中;其中,所述脏索引为与其对应的数据未回写至所述第一存储介质的索引;所述脏数据为未回写至所述第一存储介质的数据;
切换单元,用于响应于将所述第二存储介质中存储的所述脏索引以及所述脏数据同步至内存中完成,将当前的IO模式由第二存储介质缓存模式切换为内存缓存模式;
回写单元,用于在所述IO模式为内存缓存模式的情况下,基于内存中存储的脏索引,将内存中存储的脏数据回写至所述第一存储介质。
本申请还提供一种电子设备,包括通信接口、处理器、存储器和总线,所述通信接口、所述处理器和所述存储器之间通过总线相互连接;
所述存储器中存储机器可读指令,所述处理器通过调用所述机器可读指令,执行上述方法。
本申请还提供一种机器可读存储介质,所述机器可读存储介质存储有机器可读指令,所述机器可读指令在被处理器调用和执行时,实现上述方法。
通过以上实施例,在当前的IO模式为第二存储介质缓存模式的情况下,响应于采用混合存储架构的存储设备满足IO模式的切换条件,可以确定所述第二存储介质无法继续为第一存储介质进行数据缓存;由于在所述第二存储介质出现损坏、写入次数达到最大限制等情况下,仍然可能将所述第二存储介质中存储的数据读取出来,因此可以尝试将所述第二存储介质中存储的脏索引、以及与所述脏索引对应的脏数据同步至内存中,并且可以将当前的IO模式切换为内存缓存模式,然后可以基于同步至内存中的脏索引将同步至内存中的脏数据回写至所述第一存储介质。基于此,在混合存储架构中,通过将当前作为缓存盘的第二存储介质中存储的脏数据同步至内存中,并且利用内存代替所述第二存储介质,继续为所述第一存储介质进行数据缓存,不仅可以避免所述第二存储介质出现损坏时需要重新恢复整个混合存储盘中的数据,而且无需增加额外的固态硬盘作为备份缓存盘,即可提高混合存储架构的可靠性。
另外,由于内存的数据处理速度快于所述第二存储介质,因此在提高混合存储架构的可靠性的同时,还可以兼顾混合存储架构的数据处理性能。
附图说明
图1是一示例性的实施例示出的一种缓存盘中存储的数据示意图;
图2是一示例性的实施例示出的一种数据恢复方法的流程示意图;
图3是一示例性的实施例示出的另一种数据恢复方法的流程示意图;
图4是一示例性的实施例示出的一种数据恢复装置所在电子设备的硬件结构图;
图5是一示例性的实施例示出的一种数据恢复装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
为了使本技术领域的人员更好地理解本说明书实施例中的技术方案,下面先对本说明书实施例涉及的混合存储架构的相关技术,进行简要说明。
随着各行各业产生的数据量越来越大,用户对数据处理的要求也越来越高。为了兼顾高性能和低成本,可以基于采用了混合存储架构的存储设备,为用户提供数据存储、数据访问等数据服务。
其中,所述混合存储架构可以包括支持覆盖式写入数据的第一存储介质和支持擦除式写入数据的第二存储介质。例如,所述第一存储介质具体可以为机械硬盘(HDD,HardDisk Drive),所述第二存储介质具体可以为固态硬盘(SSD,Solid State Disk或SolidState Drive)。
在实际应用中,由于支持覆盖式写入数据的所述第一存储介质通常具备容量较大、成本较低、可靠性较高、随机读写性能较差等特点,而支持覆盖式写入数据的所述第二存储介质通常具备随机读写性能较高、容量较小、成本较高等特点;因此,所述第二存储介质通常可以用于为所述第一存储介质进行数据缓存、加速。
例如,在Flashcache、Bcache等技术中,可以将SSD作为缓存盘,并可以将HDD作为后端盘,捆绑生成一个虚拟硬盘(也可以称作混合存储盘);在需要将数据写入至该虚拟硬盘时,可以先将数据写入至缓存盘,再将数据从缓存盘同步至后端盘;也即,可以先将随机写入的IO存储在缓存盘中,并可以将缓存盘中的IO按照其应该写入至后端盘的存储地址进行排序,还可以进行IO合并,从而将随机IO转换为顺序IO,提高了向后端盘写入数据的性能。
在一个可能的实施例中,由于可以使用一个SSD为多个HDD进行缓存加速,导致SSD的写入次数会远远多于HDD的写入次数,并且,SSD的写入次数本身就是有限的,因此,在混合存储架构中,SSD的使用寿命相较于HDD的使用寿命更短。由此可见,在混合存储架构中,缓存盘往往会比后端盘先出现损坏的情况。
在实际应用中,如果缓存盘出现损坏的情况、或者缓存盘的寿命到期,而缓存盘中存储的脏数据还没有同步至后端盘,就会导致整个混合存储盘的数据不完整;并且,由于从缓存盘向后端盘中同步脏数据并不是按照IO时间的顺序,而是按照数据在后端盘的目标存储地址的顺序,因此根据缓存盘出现损坏的时刻,难以确定缓存盘中丢失的脏数据有哪些,以至于需要丢弃掉与该缓存盘捆绑的后端盘中的全部数据,并尝试重新恢复整个混合存储盘中的全部数据。
例如,请参见图1,图1是一示例性的实施例示出的一种缓存盘中存储的数据示意图。如图1所示,在缓存盘的存储空间中,可以按照随机写入的IO的时间顺序(也即从时刻t1至t6的顺序),将数据d1、d2、d3、d4、d5依次写入缓存盘的存储空间中;进一步地,在从缓存盘向后端盘中同步脏数据时,可以按照数据在后端盘的目标存储地址的顺序,先将数据d2、d4写入至后端盘中相应的存储地址。在这种情况下,如果缓存盘出现损坏的情况、或者缓存盘的寿命到期,而缓存盘中存储的脏数据d1、d3、d5还没有同步至后端盘中,会导致这部分未同步至后端盘中的脏数据丢失;而由于丢失的数据不具备时间连续性,后端盘无法确定丢失的数据是哪些数据,因此后端盘只能丢弃掉已成功存储的数据d2、d4,并在更换新的缓存盘之后,尝试重新向向整个混合存储盘中写入数据d1-d5,也即,重新将数据d1-d5写入更换后的缓存盘中,并且将更换后的缓存盘中存储的脏数据写入至后端盘,以完成该混合存储盘的数据恢复。
在一种相关技术中,为了保证混合存储架构的可靠性,可以使用额外的固态硬盘作为备份缓存盘,以在主缓存盘损坏时使用备份缓存盘继续为后端盘进行缓存,保证整合混合存储盘能够继续提供数据服务。
例如,Bcache可以为用户提供脏数据镜像功能,也即,在将请求写入混合存储盘的数据缓存至主缓存盘、以及从主缓存盘向后端盘同步脏数据的过程中,可以将主缓存盘中的存储内容的变化同时镜像给备份缓存盘;由于备份缓存盘中的存储内容与主缓存盘中存储内容一致,因此在主缓存盘损坏时,可以直接使用备份缓存盘来代替主缓存盘,继续为后端盘进行缓存加速。
由此可见,在以上示出的实施例中,在数据读写操作的同时,利用额外的固态硬盘作为备份缓存盘,为主缓存盘进行脏数据镜像备份,不仅会导致混合存储架构的成本增加,而且会导致数据读写操作的延迟更高。
有鉴于此,本说明书旨在提出一种无需增加额外的固态硬盘作为备份缓存盘,即可提高混合存储架构的可靠性的技术方案。
在实现时,所述混合存储架构可以包括支持覆盖式写入数据的第一存储介质和支持擦除式写入数据的第二存储介质,所述第二存储介质可以用于为所述第一存储介质进行数据缓存;响应于采用所述混合存储架构的存储设备满足IO模式的切换条件,与所述存储设备对应的虚拟缓存设备可以将所述第二存储介质中存储的脏索引、以及与所述脏索引对应的脏数据同步至内存中;其中,所述脏索引为与其对应的数据未回写至所述第一存储介质的索引;所述脏数据为未回写至所述第一存储介质的数据;进一步地,响应于将所述第二存储介质中存储的所述脏索引以及所述脏数据同步至内存中完成,可以将当前的IO模式由第二存储介质缓存模式切换为内存缓存模式;在所述IO模式为内存缓存模式的情况下,可以基于内存中存储的脏索引,将内存中存储的脏数据回写至所述第一存储介质。
由此可见,在本说明书中的技术方案中,在当前的IO模式为第二存储介质缓存模式的情况下,响应于采用混合存储架构的存储设备满足IO模式的切换条件,可以确定所述第二存储介质无法继续为第一存储介质进行数据缓存;由于在所述第二存储介质出现损坏、写入次数达到最大限制等情况下,仍然可能将所述第二存储介质中存储的数据读取出来,因此可以尝试将所述第二存储介质中存储的脏索引、以及与所述脏索引对应的脏数据同步至内存中,并且可以将当前的IO模式切换为内存缓存模式,然后可以基于同步至内存中的脏索引将同步至内存中的脏数据回写至所述第一存储介质。基于此,在混合存储架构中,通过将当前作为缓存盘的第二存储介质中存储的脏数据同步至内存中,并且利用内存代替所述第二存储介质,继续为所述第一存储介质进行数据缓存,不仅可以避免所述第二存储介质出现损坏时需要重新恢复整个混合存储盘中的数据,而且无需增加额外的固态硬盘作为备份缓存盘,即可提高混合存储架构的可靠性。
另外,由于内存的数据处理速度快于所述第二存储介质,因此在提高混合存储架构的可靠性的同时,还可以兼顾混合存储架构的数据处理性能。
下面通过具体实施例,并结合具体的应用场景对本申请进行描述。
请参见图2,图2是一示例性的实施例示出的一种数据恢复方法的流程示意图。所述数据恢复方法可以应用于与采用混合存储架构的存储设备对应的虚拟缓存设备。
可选地,所述存储设备可以为云存储设备。具体地,所述云存储设备可以为面向云存储服务提供数据存储功能的块存储设备。
可选地,与所述存储设备对应的虚拟缓存设备可以为Bcache虚拟设备,所述Bcache虚拟设备也就是Linux内核为应用程序提供的虚拟硬盘。具体地,所述Bcache虚拟设备可以为回写模式下的Bcache虚拟设备,也即,所述Bcache虚拟设备可以采用write-back的缓存模式。
其中,所述混合存储架构可以包括支持覆盖式写入数据的第一存储介质和支持擦除式写入数据的第二存储介质。在所述混合存储架构中,所述第二存储介质可以为所述第一存储介质进行数据缓存,也即,所述第二存储介质可以作为缓存盘,所述第一存储介质可以作为后端盘。例如,所述第一存储介质具体可以为HDD,所述第二存储介质具体可以为SSD;在所述混合存储结构中,可以将SSD作为缓存盘,并可以将HDD作为后端盘,用SSD为HDD进行缓存加速。需要说明的是,以上示出的仅仅是一种示例性的描述,在所述混合存储结构中,所述第一存储介质和所述第二存储介质也可以是其他存储介质,本说明书中不做特殊限定。
为了使本技术领域的人员更好地理解本说明书实施例中的技术方案,下面以所述第一存储介质为HDD、所述第二存储介质为SSD为例,对本说明书中的实施例进行说明。
在本说明书中,所述数据恢复方法可以执行以下步骤:
步骤202:在当前的IO模式为第二存储介质缓存模式的情况下,响应于采用混合存储架构的存储设备满足IO模式的切换条件,将第二存储介质中存储的脏索引、以及与所述脏索引对应的脏数据同步至内存中。
其中,所述脏索引,可以为与其对应的数据未回写至所述第一存储介质的索引;所述脏数据,可以为未回写至所述第一存储介质的数据。
其中,在所述混合存储架构中,所述第二存储介质可以为所述第一存储介质进行数据缓存。
例如,混合存储架构可以包括SSD和HDD;当前的IO模式可以为SSD缓存模式,也即,可以将所述SSD作为缓存盘,为所述HDD进行缓存加速;响应于采用所述混合存储架构的存储设备满足IO模式的切换条件,可以将SSD中存储的脏索引、以及与所述脏索引对应的脏数据同步至内存中,以尝试将IO模式切换至内存缓存模式。
其中,所述第二存储介质缓存模式,也即,在所述混合存储架构中,利用所述第二存储介质为所述第一存储介质进行缓存加速的IO模式。例如,在IO模式为第二存储介质缓存模式的情况下,响应于针对所述存储设备的数据写入请求,可以先将请求写入所述存储设备的数据缓存至所述第二存储介质中,再进一步地由所述第二存储介质向所述第一存储介质同步脏数据。
可选地,在所述步骤202中,所述IO模式的切换条件,具体可以包括以下示出的任一条件:
将请求写入所述存储设备的数据存储至所述第二存储介质失败;
将所述第二存储介质中存储的脏数据回写至所述第一存储介质失败;
检测到所述第二存储介质的剩余寿命低于预设阈值。
例如,若SSD出现损坏的情况,无法在SSD中写入数据,会导致将请求写入所述存储设备的数据缓存至SSD失败;响应于将请求写入所述存储设备的数据缓存至SSD失败,可以确定满足所述IO模式的切换条件,可以尝试进行数据恢复,也即可以将SSD中存储的脏索引以及脏数据同步至内存中。
又例如,由于在将SSD中存储的脏数据回写至HDD的过程中,需要将SSD中存储的与该数据对应的脏索引更新为干净索引,也即,需要针对SSD中存储的索引进行写操作,因此若SSD出现损坏的情况,无法在SSD中写入数据,会导致无法将SSD中存储的与该数据对应的脏索引更新为干净索引,也即,会导致将SSD中存储的脏数据回写至HDD失败;响应于将SSD中存储的脏数据回写至HDD失败,可以确定满足所述IO模式的切换条件,可以将SSD中存储的脏索引以及脏数据同步至内存中。
又例如,可以按照预设周期,定时读取SSD的状态寄存器,以确定SSD的剩余寿命;若检测到SSD的剩余寿命低于预设阈值,可以认为SSD无法继续作为HDD的缓存盘,确定满足所述IO模式的切换条件,可以将SSD中存储的脏索引以及脏数据同步至内存中,从而可以提前将所述存储设备的IO模式切换为内存缓存模式,以尽量避免SSD的寿命到期时才进行数据恢复,可能对数据读写性能造成的影响。
需要说明的是,在当前的IO模式为第二存储介质缓存模式的情况下,响应于采用混合存储架构的存储设备满足IO模式的切换条件,可以确定所述第二存储介质无法继续为第一存储介质进行数据缓存;由于在所述第二存储介质出现损坏、写入次数达到最大限制等情况下,仍然可能将所述第二存储介质中存储的数据读取出来,因此可以尝试将所述第二存储介质中存储的脏索引、以及与所述脏索引对应的脏数据同步至内存中。
可选地,在所述步骤202中,所述第二存储介质中存储了第一索引树;所述第一索引树中包括的索引,可以用于指示与其对应的数据在所述第二存储介质中的存储地址,以及可以用于指示与其对应的数据在所述第一存储介质中的存储地址。在这种情况下,所述将所述第二存储介质中存储的脏索引、以及与所述脏索引对应的脏数据同步至内存中,具体可以包括:遍历所述第二存储介质中存储的第一索引树,读取出所述第一索引树包括的脏索引;根据所述脏索引指示的与其对应的数据在所述第二存储介质中的存储地址,读取出所述第二存储介质中存储的与所述脏索引对应的脏数据,并将读取出的所述脏数据写入至内存;根据所述脏数据在内存中的存储地址、以及所述脏索引指示的与其对应的数据在所述第一存储介质中的存储地址,重新生成与所述脏数据对应的脏索引,并将重新生成的所述脏索引插入至内存中存储的第二索引树;其中,所述第二索引树中包括的索引,用于指示与其对应的数据在内存中的存储地址,以及用于指示与其对应的数据在所述第一存储介质中的存储地址。
例如,所述SSD可以用于存储数据的索引,并可以基于数据的索引在所述SSD中构建出第一索引树;所述第一索引树中的包括的索引,可以用于指示与其对应的数据分别在SSD中的存储地址、以及在HDD中的存储地址;响应于所述存储设备满足IO模式的切换条件,可以遍历所述SSD中存储的第一索引树,以读取出所述第一索引树包括的脏索引;进一步地,可以根据读取出的脏索引指示的与其对应的数据在所述SSD中的存储地址,读取出所述SSD中存储的与所述脏索引对应的脏数据,并将读取出的所述脏数据写入至内存;进一步地,还可以根据所述脏数据在内存中的存储地址、以及所述脏索引指示的与其对应的数据在HDD中的存储地址,重新生成与同步至内存中的所述脏数据对应的脏索引,并可以将重新生成的所述脏索引插入至内存中存储的第二索引树。
在以上示出的实施例中,在将SSD中存储的脏索引与脏数据同步至内存中的过程中,可以在内存中构建与SSD中存储的第一索引树对应的第二索引树;具体地,由于内存的容量相较于SSD的容量较小,因此,可以仅仅基于所述第一索引树中包括的脏索引,在内存中构建出对应的第二索引树,而无需基于所述第一索引树中包括的全部索引,在内存中构建出对应的第二索引树,从而在提高混合存储架构的可靠性的同时,避免了过多地占用内存空间。
可选地,所述第一索引树和/或所述第二索引树,可以为采用B+树(B+tree)数据结构的索引树;也即,所述第一索引树和/或所述第二索引树可以为基于数据的索引而构建的B+树。其中,B+树中包括的每个索引,可以为一个“bkey-数据指针”对,所述bkey可以为用于唯一标识数据的关键字,所述bkey的键值也就是所述数据指针,所述数据指针可以用于指向bkey标识的数据的存储地址。由此可见,在以上示出的实施例中,若所述第一索引树和/或所述第二索引树为采用B+树数据结构的索引树,不仅可以节约用于缓存数据索引的内存,还可以减少IO次数。
需要说明的是,关于索引树的数据结构,本领域技术人员也可以根据需求,灵活选择其他数据结构,本说明书中不做特别限定。例如,所述第一索引树和/或所述第二索引树,也可以为采用B树(B-tree)、LSM树(Log Structured Merge Tree,日志结构合并树)等数据结构的索引树。
可选地,在所述步骤202中,所述响应于采用混合存储架构的存储设备满足IO模式的切换条件,将第二存储介质中存储的脏索引、以及与所述脏索引对应的脏数据同步至内存中,具体可以包括:响应于所述存储设备满足IO模式的切换条件,检测内存的可用容量是否达到预设容量;如果达到预设容量,则将所述第二存储介质中存储的脏索引、以及与所述脏索引对应的脏数据同步至内存中。
例如,在当前的IO模式为SSD缓存模式的情况下,响应于采用混合存储架构的存储设备满足IO模式的切换条件,可以检测内存的可用容量是否达到预设容量,以确定可用内存大小是否支持所述虚拟存储设备在内存缓存模式下正常工作;如果检测到内存的可用容量达到预设容量,可以确定可用内存大小能够支持所述虚拟存储设备在内存缓存模式下正常工作,则可以将SSD中存储的脏索引、以及与所述脏索引对应的脏数据同步至内存中,以尝试将IO模式切换至内存缓存模式。
步骤204:响应于将所述第二存储介质中存储的所述脏索引以及所述脏数据同步至内存中完成,将当前的IO模式由第二存储介质缓存模式切换为内存缓存模式。
例如,若采用所述混合存储架构的存储设备满足IO模式的切换条件,响应于将SSD中存储的脏索引、以及与所述脏索引对应的脏数据同步至内存中完成,可以将当前的IO模式由SSD缓存模式切换至内存缓存模式,以在内存缓存模式下进行数据恢复。
其中,所述内存缓存模式,也即,在所述混合存储架构中,利用内存为所述第一存储介质进行缓存加速的IO模式。例如,在IO模式为内存缓存模式的情况下,响应于针对所述存储设备的数据写入请求,可以先将请求写入所述存储设备的数据缓存至内存中,再进一步地由内存向所述第一存储介质同步脏数据。
步骤206:在所述IO模式为内存缓存模式的情况下,基于内存中存储的脏索引,将内存中存储的脏数据回写至第一存储介质。
例如,在将当前的IO模式由SSD缓存模式切换至内存缓存模式之后,可以基于已经同步至内存中的脏索引,将已经同步至内存中的脏数据回写至HDD,以完成数据恢复,并且Bcache虚拟设备可以在内存缓存模式下继续为用户提供数据服务。
可选地,在所述步骤206中,所述内存中存储了所述第二索引树;所述第二索引树中包括的索引,可以用于指示与其对应的数据在内存中的存储地址,以及可以用于指示与其对应的数据在所述第一存储介质中的存储地址。在这种情况下,所述基于内存中存储的脏索引,将内存中存储的脏数据回写至所述第一存储介质,具体可以包括:遍历内存中存储的所述第二索引树,读取出所述第二索引树包括的脏索引;根据所述第二索引树包括的脏索引指示的与其对应的数据在内存中的存储地址,读取出内存中存储的与所述脏索引对应的脏数据,并将读取出的所述脏数据写入至所述脏索引指示的与其对应的数据在所述第一存储介质中的存储地址;在将所述脏数据写入至所述第一存储介质中后,将内存中存储的所述脏索引更新为干净索引,以完成将内存中存储的所述脏数据回写至所述第一存储介质;其中,所述干净索引为与其对应的数据已回写至所述第一存储介质的索引。
例如,内存可以用于存储数据的索引,并可以基于数据的索引在内存中构建出第二索引树;所述第二索引树中的包括的索引,可以用于指示与其对应的数据分别在内存中的存储地址、以及在HDD中的存储地址;在所述IO模式为内存缓存模式的情况下,可以遍历内存中存储的第二索引树,以读取出所述第二索引树包括的脏索引;进一步地,可以根据读取出的脏索引指示的与其对应的数据在内存中的存储地址,读取出内存中存储的与所述脏索引对应的脏数据,并将读取出的所述脏数据写入至所述脏索引指示的与其对应的数据在HDD中的存储地址;进一步地,在将内存中存储的脏数据写入至HDD中之后,可以将内存中存储的与该数据对应的脏索引更新为干净索引,以完成将内存中存储的所述脏数据回写至HDD。其中,将脏索引更新为干净索引,可以理解为,将所述脏索引的状态标记为“clean”状态,所述“clean”状态可以用于指示与其对应的数据已回写至HDD。具体地,在将内存中存储的脏数据写入至HDD中之后,可以对内存中存储的所述第二索引树进行更新,以将与已回写至HDD中的脏数据对应的脏索引标记为“clean”状态。
可选地,在所述步骤206中,在所述IO模式为内存缓存模式的情况下,响应于针对所述存储设备的数据写入请求,可以先将请求写入所述存储设备的第一目标数据缓存至内存,再将内存中缓存的所述第一目标数据回写至所述第一存储介质。
例如,在所述IO模式为内存缓存模式的情况下,响应于针对所述存储设备的数据写入请求,可以先将请求写入所述存储设备的第一目标数据缓存至内存,并且,可以根据所述数据写入请求指示的所述第一目标数据在HDD中的目的存储地址、以及所述第一目标数据在内存中的存储地址,生成与缓存至内存中的所述第一目标数据对应的索引,还可以将生成的索引插入内存中存储的第二索引树;进一步地,在将所述第一目标数据回写至HDD时,可以根据内存中存储的第二索引树中包括的与所述第一目标数据对应的脏索引,从所述脏索引指示的与其对应的数据在内存中的存储地址,读取出内存中存储的所述第一目标数据,并将读取出的所述第一目标数据写入至所述脏索引指示的与其对应的数据在HDD中的存储地址;进一步地,在将内存中存储的所述第一目标数据写入至HDD中之后,可以将内存中存储的与所述第一目标数据对应的脏索引更新为干净索引,以完成将内存中存储的所述第一目标数据回写至HDD。
在一个可能的例子中,可以创建同步脏数据进程,其中,所述同步脏数据进程可以用于响应于检测到内存中缓存的脏数据的数据量达到预设阈值,将内存中缓存的脏数据回写至所述第一存储介质。
可选地,在所述步骤206中,在所述IO模式为内存缓存模式的情况下,响应于针对所述存储设备的数据读取请求,可以先在内存存储的数据中查找请求读取的第二目标数据;若查找到,则直接读取内存中存储的所述第二目标数据;若未查找到,则读取所述第一存储介质中存储的所述第二目标数据。进一步地,还可以将从所述第一存储介质中读取出的所述第二目标数据,缓存至内存中。
例如,在所述IO模式为内存缓存模式的情况下,响应于针对所述存储设备的数据读取请求,可以先遍历内存中存储的第二索引树,查找是否存在与所述数据读取请求指示的所述第二目标数据对应的索引;如果查找到,说明内存中缓存过所述第二目标数据,可以根据查找到的索引指示的所述第二目标数据在内存中的存储地址,读取内存中存储的所述第二目标数据;如果为查找到,说明内存中并未缓存过所述第二目标数据,可以根据查找到的索引指示的所述第二目标数据在HDD中的存储地址,读取HDD中存储的所述第二目标数据。进一步地,为了加速后续可能产生的数据读取操作,可以将从HDD中读取到的所述第二目标数据缓存至内存中,并在内存存储的第二索引树中插入与所述第二目标数据对应的索引。
可选地,在所述步骤202中,在将所述第二存储介质中存储的脏索引、以及与所述脏索引对应的脏数据同步至内存中之前,所述方法还可以包括:
检测内存的可用容量是否达到预设容量;
如果达到预设容量,则将所述第二存储介质中存储的脏索引、以及与所述脏索引对应的脏数据同步至内存中;
如果未达到预设容量,则将所述第二存储介质中存储的所述脏数据同步至所述第一存储介质中;响应于将所述第二存储介质中存储的所述脏数据同步至所述第一存储介质中完成,将当前的IO模式由第二存储介质缓存模式切换为数据透传模式。
例如,在当前的IO模式为SSD缓存模式的情况下,响应于采用混合存储架构的存储设备满足IO模式的切换条件,可以检测内存的可用容量是否达到预设容量,以确定可用内存大小是否支持所述虚拟存储设备在内存缓存模式下正常工作;如果检测到内存的可用容量达到预设容量,可以确定可用内存大小能够支持所述虚拟存储设备在内存缓存模式下正常工作,则可以将SSD中存储的脏索引、以及与所述脏索引对应的脏数据同步至内存中,以尝试将IO模式切换至内存缓存模式。
又例如,在当前的IO模式为SSD缓存模式的情况下,响应于所述存储结构满足IO模式的切换条件,可以检测内存的可用容量是否达到预设容量;如果检测到内存的可用容量未达到预设容量,可以确定可用内存大小无法支持所述虚拟存储设备在内存缓存模式下正常工作,则可以将SSD中存储的脏数据同步至HDD中,以尝试将IO模式切换为数据透传模式;响应于将SSD中存储的脏数据同步至HDD中完成,可以将当前的IO模式由SSD缓存模式切换至数据透传模式,以使所述虚拟缓存设备在数据透传模式下继续工作。
其中,所述内存的可用容量,可以包括内存的当前剩余容量;或者,所述内存的可用容量,也可以包括在内存的全部容量中,用于支持数据恢复功能的部分容量。其中,关于所述用于支持数据恢复功能的部分容量,可以是由本领域技术人员预先配置的,也可以是内存根据其工作负载动态地确定出来的,本说明书中不做特别限定。
需要说明的是,在以上示出的实施例中,关于所述预设容量的具体取值,本说明书中不做特殊限定。例如,所述预设容量至少可以大于缓存在SSD中的脏数据的数据量,以保证缓存在SSD中的全部脏数据可以被同步至内存中,进而保证整个混合存储盘的数据完整性。
另外,需要说明的是,在以上示出的实施例中,响应于满足IO模式的切换条件,可以优先尝试切换至内存缓存模式,从而在提高混合存储的可靠性的同时,保证混合存储的数据处理性能。以及,在检测到内存的可用容量无法支持所述虚拟缓存设备在内存缓存模式下正常工作的情况下,可以尝试切换至数据透传模式,从而提高了数据恢复成功的可能性,避免了内存的可用容量不足而导致数据恢复失败。
其中,所述数据透传模式,也即,在所述混合存储架构中,直接利用所述第一存储介质进行数据存储的IO模式。例如,在IO模式为数据透传模式的情况下,响应于针对所述存储设备的数据写入请求,可以直接将请求写入所述存储设备的数据写入至所述第一存储介质。
在另一些可能的实施例中,响应于满足IO模式的切换条件,也可以按照预设策略,直接尝试切换至数据透传模式,从而保证混合存储的可靠性,避免设备掉电导致内存中缓存的脏数据丢失,进而导致数据恢复失败。
可选地,在所述步骤208中,所述第二存储介质中存储了第一索引树;所述第一索引树中包括的索引,可以用于指示与其对应的数据在所述第二存储介质中的存储地址,以及可以用于指示与其对应的数据在所述第一存储介质中的存储地址。在这种情况下,所述将所述第二存储介质中存储的所述脏数据同步至所述第一存储介质中,具体可以包括:遍历所述第二存储介质中存储的第一索引树,读取出所述第一索引树包括的脏索引;根据所述脏索引指示的与其对应的数据在所述第二存储介质中的存储地址,读取出所述第二存储介质中存储的与所述脏索引对应的脏数据,并将读取出的所述脏数据写入至所述脏索引指示的与其对应的数据在所述第一存储介质中的存储地址。
例如,所述SSD可以用于存储数据的索引,并可以基于数据的索引在所述SSD中构建出第一索引树;所述第一索引树中的包括的索引,可以用于指示与其对应的数据分别在SSD中的存储地址、以及在HDD中的存储地址;响应于将SSD中存储的脏索引以及脏数据同步至内存中失败,可以遍历所述SSD中存储的第一索引树,以读取出所述第一索引树包括的脏索引;进一步地,可以根据读取出的脏索引指示的与其对应的数据在所述SSD中的存储地址,读取出所述SSD中存储的与所述脏索引对应的脏数据,并可以根据读取出的脏索引指示的与其对应的数据在HDD中的存储地址,将读取出的所述脏数据写入至所述HDD中的所述存储地址。
可选地,在所述步骤210中,在所述IO模式为数据透传模式的情况下,响应于针对所述存储设备的数据写入请求,可以将请求写入所述存储设备的第三目标数据直接写入至所述第一存储介质。
例如,在所述IO模式为数据透传模式的情况下,响应于针对所述存储设备的数据写入请求,可以根据所述数据写入请求指示的所述第三目标数据在HDD中的目的存储地址,将所述第三目标数据直接写入至HDD。
可选地,在所述步骤210中,在所述IO模式为数据透传模式的情况下,响应于针对所述存储设备的数据读取请求,可以在所述第一存储介质存储的数据中,直接查找请求读取的第四目标数据。
例如,在所述IO模式为数据透传模式的情况下,响应于针对所述存储设备的数据读取请求,可以根据所述数据读取请求指示的所述第四目标数据在HDD中的存储地址,直接读取HDD中存储的所述第四目标数据。
通过以上技术方案可知,在当前的IO模式为第二存储介质缓存模式的情况下,响应于采用混合存储架构的存储设备满足IO模式的切换条件,可以确定所述第二存储介质无法继续为第一存储介质进行数据缓存;由于在所述第二存储介质出现损坏、写入次数达到最大限制等情况下,仍然可能将所述第二存储介质中存储的数据读取出来,因此可以尝试将所述第二存储介质中存储的脏索引、以及与所述脏索引对应的脏数据同步至内存中,并且可以将当前的IO模式切换为内存缓存模式,然后可以基于同步至内存中的脏索引将同步至内存中的脏数据回写至所述第一存储介质。基于此,在混合存储架构中,通过将当前作为缓存盘的第二存储介质中存储的脏数据同步至内存中,并且利用内存代替所述第二存储介质,继续为所述第一存储介质进行数据缓存,不仅可以避免所述第二存储介质出现损坏时需要重新恢复整个混合存储盘中的数据,而且无需增加额外的固态硬盘作为备份缓存盘,即可提高混合存储架构的可靠性。
另外,由于内存的数据处理速度快于所述第二存储介质,因此在提高混合存储架构的可靠性的同时,还可以兼顾混合存储架构的数据处理性能。
需要说明的是,在云存储服务中,可以分为单副本与多副本的场景;其中,所述单副本是指针对请求写入所述虚拟缓存的设备,只在为云存储服务提供存储功能的存储设备中保存一份;而所述多副本是指针对请求写入所述虚拟缓存的设备,在为云存储服务提供存储功能的存储设备中保存多份,每份可以分别保存在不同的存储介质中,这样,当其中某一种存储介质出现异常时,可以利用其它存储介质中保存的副本进行数据恢复。
由此可见,通过本说明书中的技术方案,一方面,在单副本的场景中,在用于作为缓存盘的所述第二存储介质出现异常时,可以将所述第二存储介质中缓存的脏数据同步至内存中,并可以将内存中的脏数据回写至所述第一存储介质中,或者,可以直接将所述第二存储介质中缓存的脏数据同步至所述第一存储介质中;从而可以避免所述第二存储介质中缓存的脏数据丢失,降低整个混合存储盘的数据无法恢复的风险。
另一方面,在多副本的场景中,在用于作为缓存盘的所述第二存储介质出现异常时,若利用存储在其他第一存储介质中的数据副本,来对所述第一存储介质进行数据恢复,会造成长时间的IO抖动;而基于本说明书中的技术方案,可以避免在数据恢复的过程中造成长时间的IO抖动。
为了使本技术领域的人员更好地理解本说明书实施例中的技术方案,下面结合如图3所示的流程示意图对本说明书中的实施例进行说明。请参见图3,图3是一示例性的实施例示出的另一种数据恢复方法的流程示意图。
在一个可能的实施例中,所述混合存储架构中可以包括用于作为缓存盘的SSD和用于作为后端盘的HDD。本说明书中的数据恢复方案可以应用于与采用所述混合存储架构的云存储设备对应的Bcache设备。
如图3所示,Bcache设备当前的IO模式可以设置为SSD缓存模式。在IO模式为SSD缓存模式的情况下,响应于针对所述Bcache设备的IO写入请求,可以将请求写入所述Bcache设备的数据先缓存至SSD。
响应于IO写入SSD失败,可以确定满足IO模式的切换条件,因此可以先检测内存的可用容量是否达到所述预设容量,以确定所述Bcache设备是否可以切换为内存缓存模式。
如果检测到内存的可用容量达到预设阈值,则可以将SSD中存储的脏索引、以及与所述脏索引对应的脏数据同步至内存中,以尝试将IO模式切换至内存缓存模式;响应于将SSD中存储的所述脏索引与所述脏数据同步至内存中完成,可以将Bcache设备的IO模式由SSD缓存模式切换至内存缓存模式。
如果检测到内存的可用容量达到预设阈值,则可以将SSD中存储的脏数据同步至HDD中,以尝试将IO模式切换至数据透传模式;响应于将SSD中存储的所述脏数据同步至内存中完成,可以将Bcache设备的IO模式由SSD缓存模式切换至数据透传模式。
进一步地,在将Bcache设备的IO模式切换至内存缓存模式或数据透传模式之后,可以重新尝试本次IO。具体地,在IO模式为内存缓存模式的情况下,可以重新尝试将请求写入所述Bcache设备的数据先缓存至内存,再进一步地将内存中缓存的脏数据回写至HDD;在IO模式为数据透传模式的情况下,可以重新尝试将请求写入所述Bcache设备的数据直接写入HDD。
通过以上示出的实施例可知,在满足IO模式切换条件(如SSD出现损坏、SSD的剩余寿命即将到期等)的情况下,所述Bcache设备可以自动实现数据恢复;也即,可以自动地将SSD中缓存的未同步至HDD中的脏数据读取出来,并可以将读取出来的脏数据写入至内存或HDD中,避免SSD中缓存的所述脏数据出现丢失的情况,进而避免了整个混合存储盘中的数据需要进行数据恢复的情况。
与上述数据恢复方法的实施例对应的,本说明书还提供了一种数据恢复装置的实施例。
请参见图4,图4是一示例性的实施例示出的一种数据恢复装置所在电子设备的硬件结构图。在硬件层面,该设备包括处理器402、内部总线404、网络接口406、内存408以及非易失性存储器410,当然还可能包括其他业务所需要的硬件。本说明书一个或多个实施例可以基于软件方式来实现,比如由处理器402从非易失性存储器410中读取对应的计算机程序到内存408中然后运行。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
请参见图5,图5是一示例性的实施例示出的一种数据恢复装置的框图。该数据恢复装置可以应用于图4所示的电子设备中,以实现本说明书的技术方案。其中,所述数据恢复装置可以应用于与采用混合存储架构的存储设备对应的虚拟缓存设备;其中,所述混合存储架构包括支持覆盖式写入数据的第一存储介质和支持擦除式写入数据的第二存储介质。所述数据恢复装置可以包括:
同步单元502,用于响应于所述存储设备满足IO模式的切换条件,将所述第二存储介质中存储的脏索引、以及与所述脏索引对应的脏数据同步至内存中;其中,所述脏索引为与其对应的数据未回写至所述第一存储介质的索引;所述脏数据为未回写至所述第一存储介质的数据;
切换单元504,用于响应于将所述第二存储介质中存储的所述脏索引以及所述脏数据同步至内存中完成,将当前的IO模式由第二存储介质缓存模式切换为内存缓存模式;
回写单元506,用于在所述IO模式为内存缓存模式的情况下,基于内存中存储的脏索引,将内存中存储的脏数据回写至所述第一存储介质。
在本实施例中,所述同步单元502,具体用于:
检测内存的可用容量是否达到预设容量;
如果达到预设容量,则将所述第二存储介质中存储的脏索引、以及与所述脏索引对应的脏数据同步至内存中;
如果未达到预设容量,则将所述第二存储介质中存储的所述脏数据同步至所述第一存储介质中;
所述切换单元504,还用于响应于将所述第二存储介质中存储的所述脏数据同步至所述第一存储介质中完成,将当前的IO模式由第二存储介质缓存模式切换为数据透传模式。
在本实施例中,所述IO模式的切换条件包括以下示出的任一条件:
将请求写入所述存储设备的数据存储至所述第二存储介质失败;
将所述第二存储介质中存储的脏数据回写至所述第一存储介质失败;
检测到所述第二存储介质的剩余寿命低于预设阈值。
在本实施例中,所述第二存储介质中存储了第一索引树;所述第一索引树中包括的索引,用于指示与其对应的数据在所述第二存储介质中的存储地址,以及用于指示与其对应的数据在所述第一存储介质中的存储地址;
所述同步单元502,具体用于:
遍历所述第二存储介质中存储的第一索引树,读取出所述第一索引树包括的脏索引;
根据所述脏索引指示的与其对应的数据在所述第二存储介质中的存储地址,读取出所述第二存储介质中存储的与所述脏索引对应的脏数据,并将读取出的所述脏数据写入至内存;
根据所述脏数据在内存中的存储地址、以及所述脏索引指示的与其对应的数据在所述第一存储介质中的存储地址,重新生成与所述脏数据对应的脏索引,并将重新生成的所述脏索引插入至内存中存储的第二索引树;其中,所述第二索引树中包括的索引,用于指示与其对应的数据在内存中的存储地址,以及用于指示与其对应的数据在所述第一存储介质中的存储地址。
在本实施例中,所述回写单元506,具体用于:
遍历内存中存储的所述第二索引树,读取出所述第二索引树包括的脏索引;
根据所述第二索引树包括的脏索引指示的与其对应的数据在内存中的存储地址,读取出内存中存储的与所述脏索引对应的脏数据,并将读取出的所述脏数据写入至所述脏索引指示的与其对应的数据在所述第一存储介质中的存储地址;
在将所述脏数据写入至所述第一存储介质中后,将内存中存储的所述脏索引更新为干净索引,以完成将内存中存储的所述脏数据回写至所述第一存储介质;其中,所述干净索引为与其对应的数据已回写至所述第一存储介质的索引。
在本实施例中,所述同步单元502,具体用于:
遍历所述第二存储介质中存储的第一索引树,读取出所述第一索引树包括的脏索引;
根据所述脏索引指示的与其对应的数据在所述第二存储介质中的存储地址,读取出所述第二存储介质中存储的与所述脏索引对应的脏数据,并将读取出的所述脏数据写入至所述脏索引指示的与其对应的数据在所述第一存储介质中的存储地址。
在本实施例中,所述第一索引树和/或所述第二索引树,为采用B+树数据架构的索引树。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例只是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。
Claims (9)
1.一种数据恢复方法,其特征在于,应用于与采用混合存储架构的存储设备对应的虚拟缓存设备;其中,所述混合存储架构包括支持覆盖式写入数据的第一存储介质和支持擦除式写入数据的第二存储介质;所述方法包括:
响应于所述存储设备满足IO模式的切换条件,将所述第二存储介质中存储的脏索引、以及与所述脏索引对应的脏数据同步至内存中;其中,所述脏索引为与其对应的数据未回写至所述第一存储介质的索引;所述脏数据为未回写至所述第一存储介质的数据;
响应于将所述第二存储介质中存储的所述脏索引以及所述脏数据同步至内存中完成,将当前的IO模式由第二存储介质缓存模式切换为内存缓存模式;
在所述IO模式为内存缓存模式的情况下,基于内存中存储的脏索引,将内存中存储的脏数据回写至所述第一存储介质;
其中,在当前的IO模式为第二存储介质缓存模式的情况下,所述IO模式的切换条件包括以下示出的任一条件:
将请求写入所述存储设备的数据存储至所述第二存储介质失败;
将所述第二存储介质中存储的脏数据回写至所述第一存储介质失败;
检测到所述第二存储介质的剩余寿命低于预设阈值。
2.根据权利要求1所述的方法,其特征在于,在将所述第二存储介质中存储的脏索引、以及与所述脏索引对应的脏数据同步至内存中之前,所述方法还包括:
检测内存的可用容量是否达到预设容量;
如果达到预设容量,则将所述第二存储介质中存储的脏索引、以及与所述脏索引对应的脏数据同步至内存中;
如果未达到预设容量,则将所述第二存储介质中存储的所述脏数据同步至所述第一存储介质中;
响应于将所述第二存储介质中存储的所述脏数据同步至所述第一存储介质中完成,将当前的IO模式由第二存储介质缓存模式切换为数据透传模式。
3.根据权利要求2所述的方法,其特征在于,所述第二存储介质中存储了第一索引树;所述第一索引树中包括的索引,用于指示与其对应的数据在所述第二存储介质中的存储地址,以及用于指示与其对应的数据在所述第一存储介质中的存储地址;
所述将所述第二存储介质中存储的脏索引、以及与所述脏索引对应的脏数据同步至内存中,包括:
遍历所述第二存储介质中存储的第一索引树,读取出所述第一索引树包括的脏索引;
根据所述脏索引指示的与其对应的数据在所述第二存储介质中的存储地址,读取出所述第二存储介质中存储的与所述脏索引对应的脏数据,并将读取出的所述脏数据写入至内存;
根据所述脏数据在内存中的存储地址、以及所述脏索引指示的与其对应的数据在所述第一存储介质中的存储地址,重新生成与所述脏数据对应的脏索引,并将重新生成的所述脏索引插入至内存中存储的第二索引树;其中,所述第二索引树中包括的索引,用于指示与其对应的数据在内存中的存储地址,以及用于指示与其对应的数据在所述第一存储介质中的存储地址。
4.根据权利要求3所述的方法,其特征在于,所述基于内存中存储的脏索引,将内存中存储的脏数据回写至所述第一存储介质,包括:
遍历内存中存储的所述第二索引树,读取出所述第二索引树包括的脏索引;
根据所述第二索引树包括的脏索引指示的与其对应的数据在内存中的存储地址,读取出内存中存储的与所述脏索引对应的脏数据,并将读取出的所述脏数据写入至所述脏索引指示的与其对应的数据在所述第一存储介质中的存储地址;
在将所述脏数据写入至所述第一存储介质中后,将内存中存储的所述脏索引更新为干净索引,以完成将内存中存储的所述脏数据回写至所述第一存储介质;其中,所述干净索引为与其对应的数据已回写至所述第一存储介质的索引。
5.根据权利要求3所述的方法,其特征在于,所述将所述第二存储介质中存储的所述脏数据同步至所述第一存储介质中,包括:
遍历所述第二存储介质中存储的第一索引树,读取出所述第一索引树包括的脏索引;
根据所述脏索引指示的与其对应的数据在所述第二存储介质中的存储地址,读取出所述第二存储介质中存储的与所述脏索引对应的脏数据,并将读取出的所述脏数据写入至所述脏索引指示的与其对应的数据在所述第一存储介质中的存储地址。
6.根据权利要求3所述的方法,其特征在于,所述第一索引树和/或所述第二索引树,为采用B+树数据结构的索引树。
7.一种数据恢复装置,其特征在于,应用于与采用混合存储架构的存储设备对应的虚拟缓存设备;其中,所述混合存储架构包括支持覆盖式写入数据的第一存储介质和支持擦除式写入数据的第二存储介质;所述装置包括:
同步单元,用于响应于所述存储设备满足IO模式的切换条件,将所述第二存储介质中存储的脏索引、以及与所述脏索引对应的脏数据同步至内存中;其中,所述脏索引为与其对应的数据未回写至所述第一存储介质的索引;所述脏数据为未回写至所述第一存储介质的数据;
切换单元,用于响应于将所述第二存储介质中存储的所述脏索引以及所述脏数据同步至内存中完成,将当前的IO模式由第二存储介质缓存模式切换为内存缓存模式;
回写单元,用于在所述IO模式为内存缓存模式的情况下,基于内存中存储的脏索引,将内存中存储的脏数据回写至所述第一存储介质;
其中,在当前的IO模式为第二存储介质缓存模式的情况下,所述IO模式的切换条件包括以下示出的任一条件:
将请求写入所述存储设备的数据存储至所述第二存储介质失败;
将所述第二存储介质中存储的脏数据回写至所述第一存储介质失败;
检测到所述第二存储介质的剩余寿命低于预设阈值。
8.一种电子设备,其特征在于,包括通信接口、处理器、存储器和总线,所述通信接口、所述处理器和所述存储器之间通过总线相互连接;
所述存储器中存储机器可读指令,所述处理器通过调用所述机器可读指令,执行权利要求1至6任一项所述的方法。
9.一种机器可读存储介质,其特征在于,所述机器可读存储介质存储有机器可读指令,所述机器可读指令在被处理器调用和执行时,实现权利要求1至6任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210825561.XA CN115016740B (zh) | 2022-07-14 | 2022-07-14 | 一种数据恢复方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210825561.XA CN115016740B (zh) | 2022-07-14 | 2022-07-14 | 一种数据恢复方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115016740A CN115016740A (zh) | 2022-09-06 |
CN115016740B true CN115016740B (zh) | 2022-11-18 |
Family
ID=83080572
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210825561.XA Active CN115016740B (zh) | 2022-07-14 | 2022-07-14 | 一种数据恢复方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115016740B (zh) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113778338A (zh) * | 2021-09-13 | 2021-12-10 | 北京东方金信科技股份有限公司 | 分布式存储数据读取效率优化方法、系统、设备和介质 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH04328657A (ja) * | 1991-04-30 | 1992-11-17 | Toshiba Corp | キャッシュメモリ |
US7231497B2 (en) * | 2004-06-15 | 2007-06-12 | Intel Corporation | Merging write-back and write-through cache policies |
US9430386B2 (en) * | 2013-03-15 | 2016-08-30 | Bitmicro Networks, Inc. | Multi-leveled cache management in a hybrid storage system |
CN103150128A (zh) * | 2013-03-25 | 2013-06-12 | 中国人民解放军国防科学技术大学 | 基于ssd和磁盘的可靠混合存储系统实现方法 |
JP2015111334A (ja) * | 2013-12-06 | 2015-06-18 | 富士通株式会社 | ストレージ制御装置、ストレージ制御プログラム、およびストレージ制御方法 |
CN104268102A (zh) * | 2014-10-10 | 2015-01-07 | 浪潮集团有限公司 | 一种存储服务器采用混合方式写缓存的方法 |
CN106201911A (zh) * | 2015-05-05 | 2016-12-07 | 苏州携云信息科技有限公司 | 一种基于固态硬盘的缓存加速方法 |
CN107239319B (zh) * | 2016-03-29 | 2021-05-28 | 阿里巴巴集团控股有限公司 | 一种虚拟机的数据存储方法和装置 |
US11061585B1 (en) * | 2017-10-19 | 2021-07-13 | EMC IP Holding Company, LLC | Integration of NVMe device with DRAM cache system and method |
CN109683824B (zh) * | 2018-12-20 | 2022-06-10 | 广东浪潮大数据研究有限公司 | 一种san双控存储系统的节点管理方法及相关装置 |
CN112799595B (zh) * | 2021-02-02 | 2023-06-23 | 联想(北京)有限公司 | 数据处理方法、设备及存储介质 |
-
2022
- 2022-07-14 CN CN202210825561.XA patent/CN115016740B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113778338A (zh) * | 2021-09-13 | 2021-12-10 | 北京东方金信科技股份有限公司 | 分布式存储数据读取效率优化方法、系统、设备和介质 |
Also Published As
Publication number | Publication date |
---|---|
CN115016740A (zh) | 2022-09-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108804031B (zh) | 最佳记录查找 | |
CN105843551B (zh) | 高性能和大容量储存重复删除中的数据完整性和损耗电阻 | |
US8595451B2 (en) | Managing a storage cache utilizing externally assigned cache priority tags | |
CN108268219B (zh) | 一种处理io请求的方法及装置 | |
US9053075B2 (en) | Storage control device and method for controlling storages | |
US9767015B1 (en) | Enhanced operating system integrity using non-volatile system memory | |
CN107329704B (zh) | 一种缓存镜像方法及控制器 | |
CN109902034B (zh) | 快照创建方法、装置、电子设备及机器可读存储介质 | |
CN105897859B (zh) | 一种存储系统 | |
US11698808B2 (en) | System and method of selectively restoring a computer system to an operational state | |
US11169968B2 (en) | Region-integrated data deduplication implementing a multi-lifetime duplicate finder | |
CN111309245B (zh) | 一种分层存储写入方法和装置、读取方法和装置及系统 | |
CN114265670B (zh) | 一种内存块整理方法、介质及计算设备 | |
US9262089B2 (en) | Use of flash cache to improve tiered migration performance | |
CN111026333A (zh) | 访问请求处理方法、处理装置、电子设备及存储介质 | |
US20220253243A1 (en) | Technique for improving operations log indexing | |
US11010091B2 (en) | Multi-tier storage | |
CN115016740B (zh) | 一种数据恢复方法、装置、电子设备及存储介质 | |
CN117149062A (zh) | 一种磁带损坏数据的处理方法以及计算装置 | |
JP7277754B2 (ja) | ストレージシステム、ストレージ制御装置およびプログラム | |
US11079951B2 (en) | Multi-tier storage and mirrored volumes | |
CN114706536B (zh) | 一种元数据管理方法、装置、电子设备及可读存储介质 | |
US11586360B2 (en) | Hybrid memory mirroring using storage class memory | |
CN107122264B (zh) | 海量数据容灾备份方法 | |
US11755419B2 (en) | Utilizing spare network nodes for deduplication fingerprints database |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |