CN113051104B - 基于纠删码的磁盘间数据恢复方法及相关装置 - Google Patents
基于纠删码的磁盘间数据恢复方法及相关装置 Download PDFInfo
- Publication number
- CN113051104B CN113051104B CN202110263137.6A CN202110263137A CN113051104B CN 113051104 B CN113051104 B CN 113051104B CN 202110263137 A CN202110263137 A CN 202110263137A CN 113051104 B CN113051104 B CN 113051104B
- Authority
- CN
- China
- Prior art keywords
- data block
- data
- block
- recovered
- state
- 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
- 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
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/085—Error detection or correction by redundancy in data representation, e.g. by using checking codes using codes with inherent redundancy, e.g. n-out-of-m codes
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例提供一种基于纠删码的磁盘间数据恢复方法及相关装置,本申请中,将数据文件划分为多个分组,每个分组包括多个数据块。为了能够提高数据恢复的效率,准确的识别出哪些数据块需要恢复,哪些数据块无需恢复,本申请实施例中,为不同的数据块增设了用于指示相应数据块是否异常的状态标识,基于状态标识识别出可恢复的数据块进行恢复操作。此外,本申请还能够实现恢复速率控制以避免恢复数据影响正常业务。
Description
技术领域
本申请涉及互联网技术领域,特别涉及一种基于纠删码的磁盘间数据恢复方法及相关装置。
背景技术
在分布式云存储***中,纠删码冗余技术以较高的容错性能和较大的空间利用率逐步取代副本冗余技术来保证数据的可靠性。为了应对数据异常情况,相关技术大多从以下几方面来优化存储***,如包括存储节点的选取、异常节点重连复用和数据存储。相关技术中缺少一种有效的磁盘间数据恢复方法。
发明内容
本申请的目的是提供一种基于纠删码的磁盘间数据恢复方法及相关装置用于解决相关技术中缺少一种有效的磁盘间数据恢复方法的问题。
第一方面,本申请提供一种基于纠删码的磁盘间数据恢复方法,数据文件包括多个分组,每个分组包括多个数据块,且各所述数据块关联有用于描述当前状态的状态标识,所述状态标识用于指示所述数据块是否异常,所述方法包括:
基于状态标识,筛选出待恢复数据块;
基于纠删码反变换,对所述待恢复数据块进行恢复处理。
在一些实施例中,所述数据块的状态包括:初始状态、写数据状态、损坏状态、下线状态、正常状态;
所述方法还包括:
响应于创建所述数据块,设置所述数据块的状态标识指示为所述初始状态;
响应于将所述数据块写入磁盘,设置所述数据块的状态标识指示为所述写数据状态;
满足以下任一正常条件,则设置所述数据块的状态标识指示为所述正常状态:处于写数据状态的所述数据块成功写入磁盘、损坏的数据块被成功恢复、下线的数据块重新上线、下线的数据块被成功恢复、处于初始状态的数据块被成功恢复;
响应于所述数据块处于所述正常状态时所述数据块所在的磁盘下线,设置所述数据块的状态标识指示为所述下线状态;
满足以下任一损坏条件,则设置所述数据块的状态标识指示为所述损坏状态:所述数据块未成功写入磁盘、所述数据块在处于写数据状态时所述数据块所在磁盘下线、所述数据块处于所述正常状态时所述数据块损坏。
在一些实施例中,所述基于状态标识,筛选出待恢复数据块之前,所述方法还包括:
将出现异常的数据块的数据块标识添加到异常块集合;
所述基于状态标识,筛选出待恢复数据块,包括:
对所述异常块集合中任一数据块标识对应的异常块,若所述异常块不满足以下任一不可恢复条件,则将所述异常块确定为所述待恢复数据块:
所述异常块的状态标识指示为处于写数据状态;
所述异常块所在的分组中存在至少一个数据块的状态标识指示为写数据状态;
所述异常块所在分组下处于正常状态的数据块个数小于所述n;
工作正常的磁盘个数不足指定数量。
在一些实施例中,所述基于纠删码反变换,对所述待恢复数据块进行恢复处理之前,所述方法还包括:
将所述待恢复数据块添加到待恢复块集合;
响应于所述待恢复块集合中添加待恢复数据块的消息,执行所述基于纠删码反变换,对所述待恢复数据块进行恢复处理。
在一些实施例中,所述基于纠删码反变换,对所述待恢复数据块进行恢复处理之前,所述方法还包括:
检测所述待恢复数据块是否满足执行恢复操作的条件;
若满足执行恢复操作的条件,则为所述待恢复数据块确定恢复块;
所述基于纠删码反变换,对所述待恢复数据块进行恢复处理,包括:
基于纠删码反变换,将所述待恢复数据块的数据内容恢复到所述恢复块中。
在一些实施例中,所述检测所述待恢复数据块是否满足执行恢复操作的条件,包括:
满足以下任一无需恢复条件,则确定所述待恢复数据块不满足执行恢复操作的条件,否则,确定所述待恢复数据块满足执行恢复操作的条件:
所述待恢复数据块所在磁盘正在执行上线操作或下线操作;
所述待恢复数据块的状态标识指示为正常状态;
所述待恢复数据块的存储块中不存在数据内容;
所述待恢复数据块的磁盘正常,且所述待恢复数据块的状态标识指示为下线状态。
在一些实施例中,所述为所述待恢复数据块确定恢复块,包括:
若所述待恢复数据块所在磁盘的用于存储所述待恢复数据块的原存储块可用,则将所述原存储块作为所述恢复块;
若所述原存储块不可用,则在新的磁盘为所述待恢复数据块申请目标存储块作为所述恢复块。
在一些实施例中,确定所述待恢复数据块所在磁盘的所述原存储块是否可用,包括:
若所述待恢复数据块的磁盘正常且所述待恢复数据块处于损坏状态则确定所述原存储块可用;
若满足以下任一异常条件,则确定所述原存储块不可用:
所述待恢复数据块的磁盘正常且所述待恢复数据块的状态标识指示为初始状态或写数据状态;
所述待恢复数据块的磁盘异常。
在一些实施例中,所述基于纠删码反变换,对所述待恢复数据块进行恢复处理,包括:
若恢复操作处于活动状态则按条带读取所述待恢复数据块所在分组的正常数据块,若所述恢复操作处于休眠状态,则休眠结束后按条带读取所述待恢复数据块所在分组的正常数据块;所述恢复操作是否处于休眠状态为预先基于恢复速率控制策略确定的;所述恢复速率控制策略用于使得恢复操作的执行优先级低于读写正常业务数据的操作优先级;
对获取的所述正常数据块进行纠删码反变换,得到所述待恢复数据块的数据内容;
将所述待恢复数据块的数据内容写入磁盘。
在一些实施例中,基于所述恢复速率控制策略确定所述恢复操作是否处于休眠状态,包括:
响应于向磁盘中写入恢复数据的写请求,获取所述写请求中携带的待写入数据流量,并确定所述待写入数据流量与写流量累加值的累加和;所述写流量累加值用于记录持续未休眠时间段内的写流量和;
若空闲时长与单位时间写入速率阈值的乘积大于所述累加和,则确定所述恢复操作处于活动状态;
若所述乘积小于所述累加和,则确定所述恢复操作处于休眠状态,且所述休眠时长为超额部分所占用的写时长;所述超额部分为所述乘积与所述累加和的差额部分数据。
第二方面,本申请提供一种基于纠删码的磁盘间数据恢复装置,数据文件包括多个分组,每个分组包括多个数据块,且各所述数据块关联有用于描述当前状态的状态标识,所述状态标识用于指示所述数据块是否异常,所述装置包括:
待恢复块筛选模块,用于基于状态标识,筛选出待恢复数据块;
恢复模块,用于基于纠删码反变换,对所述待恢复数据块进行恢复处理。
在一些实施例中,所述数据块的状态包括:初始状态、写数据状态、损坏状态、下线状态、正常状态;
所述装置还包括:
状态标识维护模块,用于响应于创建所述数据块,设置所述数据块的状态标识指示为所述初始状态;
响应于将所述数据块写入磁盘,设置所述数据块的状态标识指示为所述写数据状态;
满足以下任一正常条件,则设置所述数据块的状态标识指示为所述正常状态:处于写数据状态的所述数据块成功写入磁盘、损坏的数据块被成功恢复、下线的数据块重新上线、下线的数据块被成功恢复、处于初始状态的数据块被成功恢复;
响应于所述数据块处于所述正常状态时所述数据块所在的磁盘下线,设置所述数据块的状态标识指示为所述下线状态;
满足以下任一损坏条件,则设置所述数据块的状态标识指示为所述损坏状态:所述数据块未成功写入磁盘、所述数据块在处于写数据状态时所述数据块所在磁盘下线、所述数据块处于所述正常状态时所述数据块损坏。
在一些实施例中,在所述恢复模块基于状态标识,筛选出待恢复数据块之前,所述装置还包括:
异常块集合维护模块,用于将出现异常的数据块的数据块标识添加到异常块集合;
所述恢复模块,具体用于:
对所述异常块集合中任一数据块标识对应的异常块,若所述异常块不满足以下任一不可恢复条件,则将所述异常块确定为所述待恢复数据块:
所述异常块的状态标识指示为处于写数据状态;
所述异常块所在的分组中存在至少一个数据块的状态标识指示为写数据状态;
所述异常块所在分组下处于正常状态的数据块个数小于所述n;
工作正常的磁盘个数不足指定数量。
在一些实施例中,在所述恢复模块基于纠删码反变换,对所述待恢复数据块进行恢复处理之前,所述装置还包括:
待恢复块集合维护模块,用于将所述待恢复数据块添加到待恢复块集合;
恢复模块具体用于响应于所述待恢复块集合中添加待恢复数据块的消息,执行所述基于纠删码反变换,对所述待恢复数据块进行恢复处理。
在一些实施例中,在所述恢复模块基于纠删码反变换,对所述待恢复数据块进行恢复处理之前,所述装置还包括:
恢复操作条件检测模块,用于检测所述待恢复数据块是否满足执行恢复操作的条件;
恢复块确定模块,用于若满足执行恢复操作的条件,则为所述待恢复数据块确定恢复块;
所述恢复模块,具体用于:基于纠删码反变换,将所述待恢复数据块的数据内容恢复到所述恢复块中。
在一些实施例中,所述恢复操作条件检测模块,具体用于:
满足以下任一无需恢复条件,则确定所述待恢复数据块不满足执行恢复操作的条件,否则,确定所述待恢复数据块满足执行恢复操作的条件:
所述待恢复数据块所在磁盘正在执行上线操作或下线操作;
所述待恢复数据块的状态标识指示为正常状态;
所述待恢复数据块的存储块中不存在数据内容;
所述待恢复数据块的磁盘正常,且所述待恢复数据块的状态标识指示为下线状态。
在一些实施例中,所述恢复块确定模块,具体用于:
若所述待恢复数据块所在磁盘的用于存储所述待恢复数据块的原存储块可用,则将所述原存储块作为所述恢复块;
若所述原存储块不可用,则在新的磁盘为所述待恢复数据块申请目标存储块作为所述恢复块。
在一些实施例中,所述装置还包括:
原存储块检测模块,用于基于以下方法确定所述待恢复数据块所在磁盘的所述原存储块是否可用:
若所述待恢复数据块的磁盘正常且所述待恢复数据块处于损坏状态则确定所述原存储块可用;
若满足以下任一异常条件,则确定所述原存储块不可用:
所述待恢复数据块的磁盘正常且所述待恢复数据块的状态标识指示为初始状态或写数据状态;
所述待恢复数据块的磁盘异常。
在一些实施例中,所述恢复模块,具体用于:
若恢复操作处于活动状态则按条带读取所述待恢复数据块所在分组的正常数据块,若所述恢复操作处于休眠状态,则休眠结束后按条带读取所述待恢复数据块所在分组的正常数据块;所述恢复操作是否处于休眠状态为预先基于恢复速率控制策略确定的;所述恢复速率控制策略用于使得恢复操作的执行优先级低于读写正常业务数据的操作优先级;
对获取的所述正常数据块进行纠删码反变换,得到所述待恢复数据块的数据内容;
将所述待恢复数据块的数据内容写入磁盘。
在一些实施例中,所述装置还包括:
速率控制模块,用于基于所述恢复速率控制策略确定所述恢复操作是否处于休眠状态,包括:
响应于向磁盘中写入恢复数据的写请求,获取所述写请求中携带的待写入数据流量,并确定所述待写入数据流量与写流量累加值的累加和;所述写流量累加值用于记录持续未休眠时间段内的写流量和;
若空闲时长与单位时间写入速率阈值的乘积大于所述累加和,则确定所述恢复操作处于活动状态;
若所述乘积小于所述累加和,则确定所述恢复操作处于休眠状态,且所述休眠时长为超额部分所占用的写时长;所述超额部分为所述乘积与所述累加和的差额部分数据。
第三方面,本申请另一实施例还提供了一种电子设备,包括至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行本申请实施例提供的任一基于纠删码的磁盘间数据恢复方法。
第四方面,本申请另一实施例还提供了一种计算机存储介质,其中,所述计算机存储介质存储有计算机程序,所述计算机程序用于使计算机执行本申请实施例中的任一基于纠删码的磁盘间数据恢复方法。
本申请的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请而了解。本申请的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,显而易见地,下面所介绍的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为根据本申请一个实施例的一个存储节点的示意图;
图2为根据本申请一个实施例的数据划分示意图;
图3为根据本申请一个实施例的数据块的状态切换示意图;
图4为根据本申请一个实施例的基于纠删码的磁盘间数据恢复方法流程示意图;
图5为根据本申请另一个实施例的基于纠删码的磁盘间数据恢复方法流程示意图;
图6为根据本申请又一个实施例的基于纠删码的磁盘间数据恢复方法流程示意图;
图7为根据本申请一个实施例的***快照一示意图;
图8为根据本申请一个实施例的数据写入的示意图;
图9为根据本申请一个实施例的数据写入的另一示意图;
图10为根据本申请一个实施例的数据恢复的一示意图;
图11为根据本申请一个实施例的数据写入的又一示意图;
图12为根据本申请一个实施例的数据恢复的另一示意图;
图13为根据本申请一个实施例的基于纠删码的磁盘间数据恢复装置示意图;
图14为根据本申请一个实施例的电子设备的示意图。
具体实施方式
为了使本领域普通人员更好地理解本申请的技术方案,下面将结合附图,对本申请实施例中的技术方案进行清楚、完整地描述。
需要说明的是,本申请的说明书和权利要求书的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
为了能够有效的进行磁盘间的数据恢复。本申请提出了一种基于纠删码的磁盘间数据恢复方法及相关装置。为了便于理解本申请实施例提供的基于纠删码的磁盘间数据恢复方法,下面结合附图对该方法的发明构思进行说明。
一种典型的单存储节点的示意图如图1所示,通常情况下一个服务器(主机)下面挂了许多磁盘。每个磁盘可与主机连接。本申请实施例中可基于纠删码冗余技术将需要存储的数据存储到不同磁盘中以便于有需要时进行数据恢复。
通常情况下磁盘坏了或数据异常时需要恢复数据,如果对整个磁盘的全量数据进行回复无疑导致恢复数据量大。为了能够提高数据回复效率,如图2所示为本申请实施例提供的数据文件分块示意图。即本申请实施例中将数据文件划分为多个分组(Object),每个分组包括多个数据块,如包括n+m个数据块(Block),其中n是纠删编码中的数据块个数、m是校验块个数,n和m均为正整数,这样可实现基于纠删码冗余技术对数据文件进行存储和恢复。为了能够提高数据恢复的效率,准确的识别出哪些数据块需要恢复,哪些数据块无需恢复,本申请实施例中,为不同的数据块增设了用于指示相应数据块是否异常的状态标识,实时维护各数据块的状态标识有利于能够准确的定位到异常的可恢复数据块进行恢复操作。如图2所示,每个数据块包括多个条带,本申请实施例中进行数据恢复时,可基于条带对每个数据块进行恢复操作。
本申请实施例中基于状态标识能够准确定位到异常数据块中的哪些数据块可以恢复哪些数据块无法恢复,有效识别可恢复的数据块,提高恢复的针对性,避免对不可恢复数据块的恢复操作带来的无效恢复导致的资源浪费,可实现数据块粒度的磁盘间数据恢复控制,提高数据恢复的针对性和效率。
此外,在数据恢复过程中,还可以基于数据块的状态标识,识别出原本需要恢复的数据块中不需要恢复的数据块,进一步提高恢复操作的效率。如有些数据块随磁盘下线了,在恢复这些数据块的过程中,随着磁盘上线有些待恢复数据块又能够正常提供服务了,这样的数据块可以不再进行恢复处理。
此外,数据恢复也需要占用CPU和内存资源,而正常业务的进行也需要占用CPU和内存资源,如果因为大量恢复数据导致正常业务数据阻塞会得不偿失,故此,本申请实施例还提出了速率控制策略,能够保证正常业务的进行的同时,对恢复速率进行合理控制。
本申请实施例提供了一种状态标识的定义和维护策略,以便于基于状态标识进行数据恢复。在一些实施例中,本申请实施例中数据块的状态可包括:初始状态、写数据状态、损坏状态、下线状态、正常状态等。当然,具体实施时,状态标识可基于实际业务需求增加或减少,均适用于本申请实施例。
为了能够实现对不同状态的维护,本申请实施例标识维护策略可分情况进行:
当一个数据块被创建时,该数据块为初始状态。通常一个数据块被创建后,需要写入数据,那么当向磁盘写入数据时,该数据块为写数据状态。写数据结果会有写失败和写成功,当写成功时,相应的数据块会更新为正常状态。当写失败,或者写数据过程中该数据块所在磁盘有可能下线则相应的该数据块会处于损坏状态。当然,因为业务需要,处于正常状态的数据块也会再次写入数据,则相应的正常状态的数据块也会因为写入数据变更为写数据块状态;
除了以上情况会出现损坏状态,处于正常状态的数据块也可能因为各种原因不可用,此时,正常的数据块也会更新为损坏状态;
在一些可能的情况下,数据块所在磁盘会下线,当正常的数据块随磁盘下线时,该数据块状态会更新为下线状态,其他状态的数据块随磁盘下线其状态可不变。
下线状态的数据块如果损坏,则相应的可以通过恢复操作来恢复该数据块,相应的下线状态的数据块可恢复为正常状态。
下线状态的数据块如果没损坏,可随磁盘重新上线后,直接恢复为正常状态。
一些异常情况下,初始状态的数据块也需要恢复,当成功恢复后可更新为正常状态。
综上所述,对数据库的维护操作如图3所示可实施为:
响应于创建数据块,设置数据块的状态标识指示为初始状态。
响应于将数据块写入磁盘,设置数据块的状态标识指示为写数据状态。
满足以下任一正常条件,则设置数据块的状态标识指示为正常状态,其中,各正常条件构成的集合包括:处于写数据状态的数据块成功写入磁盘、损坏的数据块被成功恢复、下线的数据块重新上线、下线的数据块被成功恢复、处于初始状态的数据块被成功恢复。
响应于数据块处于正常状态时数据块所在的磁盘下线,设置数据块的状态标识指示为下线状态。
满足以下任一损坏条件,则设置数据块的状态标识指示为损坏状态:其中各损坏条件构成的集合包括:数据块未成功写入磁盘、数据块在处于写数据状态时数据块所在磁盘下线、数据块处于正常状态时数据块损坏。
基于以上的标识维护机制,可以及时的实现对数据块状态的维护。基于状态标识能够及时了解各个数据块的状态,由此对于正常的数据块可以不需要恢复。
当出现异常情况时,例如对某个或某些数据块的读写操作出现问题时,这些块会被识别为异常块。可理解为业务逻辑出错时,相应的数据块可作为异常数据块。本申请实施例中为了有针对性的进行数据恢复,避免对无法恢复的数据块进行恢复操作带来的资源消耗,如图4所示,数据恢复方法流程可包括:
在步骤401中,基于状态标识,筛选出待恢复数据块。
在一些实施例中,可从异常数据块中筛选出待恢复数据块。为了便于实现断点恢复,本申请实施例中引入了异常块集合和待恢复块集合。这两种集合均可以实现为数据表的形式。
当识别到异常块的时候可以将该异常块的数据块标识添加到异常块集合。该数据块的标识可实施为disk id-file id-object id-block id,即磁盘标识-文件标识-分组标识-块标识。由此可唯一定位到一个数据块。当然,其他的能够唯一标识一个数据块的标记方法也适用于本申请实施例。
从异常块集合中筛选出的能够恢复的异常块作为待恢复数据块,存放到恢复块集合中,并从异常块集合中删掉待恢复数据块的标识。执行恢复操作时,可以对恢复块集合中的待恢复数据块进行恢复操作。成功恢复的数据块将从恢复块集中删掉。由此,当服务器断电或服务器进程重启时候,可以基于恢复块集合确定哪些数据块需要恢复。无需重新确定需要恢复的待恢复数据块。
在一些可能的实施例中,可以基于以下方法识别哪些异常块为待恢复数据块,可实施为:对异常块集合中任一数据块标识对应的异常块,若异常块不满足以下任一不可恢复条件,则将异常块确定为待恢复数据块,其中,各不可恢复条件包括:
1)、异常块的状态标识指示为处于写数据状态;
也即,当异常块处于写数据状态,则其相应的数据可能没有写完,无法恢复。
2)、异常块所在的分组中存在至少一个数据块的状态标识指示为写数据状态;
也即,当异常块所在分组存在写数据块状态的数据块时,需要恢复该异常块的数据不完整,也无法恢复。
3)、异常块所在分组下处于正常状态的数据块个数小于n;
也即,当异常块所在分组正常快数据较少时,需要恢复该异常块的数据不足,无法恢复。
4)、工作正常的磁盘个数不足指定数量如n个。也即,正常磁盘个数不足,无法执行对该异常块的恢复操作。
此外,当一个异常块的状态标识指示为正常状态时,说明出错原因不在于该数据块,可能是其它原因引起的,故此,该异常块可从异常块集合中删掉,如果该异常块同时存在于恢复块集合中,该异常块也可以从恢复块集合中删掉。
在确定出待恢复数据块之后,可以在步骤402中,基于纠删码反变换,对待恢复数据块进行恢复处理。
由于对每个待恢复数据块进行恢复时,其状态可能产生变更,引起需要恢复的条件也可能消失,导致有些块无需进行恢复操作。故此,本申请实施例中,在对待恢复数据块进行恢复处理之前,可以先检测一下该待恢复数据块是否满足执行恢复操作的条件,如满足则继续执行恢复操作,如不满足则该异常数据块则无需恢复,可根据实际情况重新确定该待恢复数据块是否可作为正常块处理。若可作为正常数据块,则将该待恢复数据块状态标识更新为正常状态,若不可以作为正常块,则可稍后重新尝试恢复。
由此,本申请实施例,能够在对每个待恢复数据块进行恢复之前,检查一下是否需要恢复该数据块,避免后续的恢复操作带来的资源消耗。
在一些实施例中,检测待恢复数据块是否满足执行恢复操作的条件,可实施为,若该待恢复数据块满足以下任一无需恢复条件,则确定待恢复数据块不满足执行恢复操作的条件,否则,确定待恢复数据块满足执行恢复操作的条件:
无需恢复条件1)、待恢复数据块所在磁盘正在执行上线操作或下线操作。
也即,当待恢复数据块所在磁盘正在执行上下线操作的过程中,不对该数据块进行恢复操作,因为磁盘上下线过程中去操作磁盘得到的结果是不确定的。故需要等待下次再恢复该待恢复数据块。
无需恢复条件2)、待恢复数据块的状态标识指示为正常状态;
也即,若该待恢复数据块的为正常状态,则说明该数据块是正常的无需恢复。
无需恢复条件3)、待恢复数据块的存储块中不存在数据内容;
不存在数据内容的情况例如该待恢复数据块中条带数为0,则说明该数据块没有数据内容需要恢复。则无需执行后续的恢复操作。
无需恢复条件4)、待恢复数据块的磁盘正常,且待恢复数据块的状态标识指示为下线状态。
磁盘的上下线状态和数据块的状态是独立的,故此在该情况下,说明该数据块是在正常情况下随磁盘下线而变更为下线状态的,该数据块在磁盘上线后可重置为正常状态,故此无需恢复。
由此,基于以上的检测方法,能够准确的识别需要执行后续恢复操作的数据块实现有针对性的恢复。
在一些实施例中,当需要恢复时,待恢复数据块的恢复数据需要重新写入磁盘,由此,将恢复数据写入哪个磁盘的哪个存储区域也影响着恢复操作能否顺利进行。为了能够顺利的恢复数据,本申请实施例中,可以事先为待恢复数据块确定恢复块,该恢复块可能在待恢复数据块的原磁盘上,也可以在新的磁盘上,可以根据实际情况确定在哪个磁盘上,只要能够成功写入恢复数据即可。本申请实施例中提供的确定恢复块的方案可实施为:
若待恢复数据块所在磁盘的用于存储待恢复数据块的原存储块可用,则将原存储块作为恢复块;
若原存储块不可用,则在新的磁盘为待恢复数据块申请目标存储块作为恢复块。
关于如何确定原存储块是否可用,本申请实施例可实施为:若待恢复数据块的磁盘正常且待恢复数据块处于损坏状态则确定原存储块可用;
若满足以下任一异常条件,则确定原存储块不可用:
异常条件1)、待恢复数据块的磁盘正常且待恢复数据块的状态标识指示为初始状态或写数据状态;
异常条件2)、待恢复数据块的磁盘异常。
综上,从恢复块集合中确定待恢复数据之后,执行的恢复操作流程可由单独的数据恢复线程进行,如图5所示,包括以下步骤:
在步骤501中,接收待恢复数据块的恢复请求。
该恢复请求例如是扫描恢复块集合确定的,若该集合中存在需要恢复的异常块,则会触发恢复请求给数据恢复线程。线程对该集合中的异常块可逐一进行恢复。当然实施时,可并行执行多个数据恢复线程,则可以实现同时对多个异常块的恢复。
在步骤502中,判断待恢复数据块所在磁盘是否正在执行上线操作或下线操作,若是,则结束恢复操作,若否则执行步骤503。
步骤503,判断待恢复数据块的状态标识是否指示为正常状态,若是则结束恢复操作,若否则执行步骤504。
步骤504,判断待恢复数据块的已使用条带数是否为0,若是则结束恢复操作,若否则执行步骤505。
需要说明的是以上步骤502-步骤504中各判断操作的先后顺序可不限定,接步骤502-步骤504各自的执行先后顺序可为任意顺序。
步骤505,判断待恢复数据块所在磁盘是否正常,若正常则执行步骤506,若不正常则执行步骤508。
步骤506,判断待恢复数据块的状态标识是否指示为下线状态,若是,则结束恢复操作,若否,则执行步骤507。
步骤507,判断待恢复数据块的状态标识是否指示为初始状态或写数据状态,若是则执行步骤508,若否则执行步骤509。
其中,步骤506和步骤507的执行顺序不受限。
步骤508,为待恢复数据块重新选择一块磁盘,并在重新选择的磁盘上申请一个目标存储块作为恢复块。
也即,当原磁盘正常但是待恢复数据块处于写数据状态或初始状态时,说明原磁盘可能存在其他影响恢复的问题,需要重新选择一块磁盘进行恢复。
步骤509,删除待恢复数据块所在原磁盘上的原存储块内的数据。
步骤510,判断原存储块内的数据是否成功删除,若是则执行步骤511,若否,则执行步骤508。
步骤511,将原存储块作为恢复块。
步骤512,对待恢复数据块按条带拉取该待恢复数据块所在分组中的正常块的数据。
步骤513,基于拉取的正常块的数据进行纠删码反变换,得到待恢复数据块的数据内容。
在步骤514中,将待恢复数据块的数据内容写入恢复块。
在步骤515中,判断待恢复数据库的所有条带是否恢复完成,若是结束操作,若否返回执行步骤512。
由图5所示的流程可知,一些判断操作容易执行,对待恢复数据块的恢复操作中条带数据拉起,纠删码反变换以及写入恢复的数据,将会占用更多的资源,如CPU资源和内存资源等。为了能够降低恢复操作对资源的占用对正常业务的影响,本申请实施例中,提出了速率控制策略用于保证正常业务的进行。该速率控制策略使得恢复操作的执行优先级低于读写正常业务数据的操作优先级。速率控制策略能够通过速率控制,适当的暂停恢复操作,保证正常业务的执行。
也即,在步骤512之前,本申请实施例中,如图5所示,还包括以下步骤:
在步骤5121中,判断是否处于休眠状态,若处于休眠状态则执行步骤602,若处于活动状态则执行步骤,512。
步骤5122,等待休眠结束,然后执行步骤512。
在一些实施例中,可以先设定流量阈值,该流量阈值可以是固定值,也可以是一个可变化的值。例如,该流量阈值可随着历史恢复操作的恢复数据量动态调整,如设置基准流量Fbase,基准流量可以为磁盘带宽流量上限,获取上一个单位周期内正常业务读写流量和(标记为Fsum),用基准流量Fbase减去Fsum作为流量阈值Funit。
实施时,速率控制策略的可实施为按每个统计周期(如1s),如果累积恢复流量小于基准流量,则可以进行恢复数据的写操作;如果超过则睡眠写操作。睡眠实现,可以为超过流量部分所对应的时间。而正常业务的读写流量则通过改变基准流量,从而影响数据恢复的速度。由此,平衡正常业务的读写和恢复数据的读写。
一种可能的实施方法,如图6所示,速率控制策略确定是否处于休眠状态可实施为:
在步骤601中,响应于向磁盘中写入恢复数据的写请求,获取所述写请求中携带的待写入数据流量,并确定所述待写入数据流量与写流量累加值的累加和;所述写流量累加值用于记录持续未休眠时间段内的写流量和。
其中,空闲时长,为上次休眠起始时间点与当前时间的差值。
步骤602,若空闲时长与单位时间写入速率阈值的乘积大于所述累加和,则确定所述恢复操作处于活动状态;
步骤603,若所述乘积小于所述累加和,则确定所述恢复操作处于休眠状态,且所述休眠时长为超额部分所占用的写时长;所述超额部分为所述乘积与所述累加和的差额部分数据。
为便于理解,如图7所示,为一种确定是否休眠的示意图。其中,Tlast是上次计算流量和Flast的起始时间,Flast为自Tlast开始时累积的流量和(即步骤601中的写流量累加值),Fnow为本次恢复的流量和(即步骤601中的待写入数据流量),Tnow为当前时间,若(Funit*Tdelta)>Flast+Fnow,则说明流量过小,未达到额定流量,无须休眠,同时更新Flast和Tlast,新的Flast即Flast`等于Flast加上Fnow,新的Tlast即Tlast`为原来的Tlast,见图7所示。
在另一个实施例中,(Funit*Tdelta)<Flast+Fnow,则说明流量过大,则需要进行休眠,休眠时长为(Flast+Fnow-Funit*Tdelta)/Funit,同时更新Flast和Tlast,这时将新的Flast即Flast`更新为0,将新的Tlast即Tlast`更新为Tsleep,见图7所示。
综上所述,为了实现有效的数据恢复,***运行快照如图8所示。该***中可包括:
数据读写线程,用于执行业务逻辑执行正常的任务读写操作,当数据读写线程报错,定位到异常块时,将异常块加入到异常表。
数据巡检线程,用于周期性或不定期的对数据块进行巡检,它所做的主要工作是不断的扫描元数据,并将元数据和磁盘上的块的数据进行比对,如果发现不一致则进行相应的修正操作。如,发现某个块元数据存在,而底层数据不存在,则将该块加入异常表进行恢复。若底层数据多出来某个块,则将底层数据进行删除以保证和元数据一致。
磁盘离线扫描线程,用于扫描磁盘的在线状态,确定哪些磁盘离线,哪些磁盘在线,以及哪些磁盘正在上下线。磁盘扫描线程主要是不断的扫描磁盘,如果发现有磁盘下线,则将元数据中对应磁盘的那些块按照图3所示进行状态转换,并且将下线磁盘中的这些块放入异常表里面。
异常表扫描线程,用于扫描异常表中哪些异常块可恢复,有可恢复的异常块时,将其添加到恢复表。异常表扫描线程不断扫描异常表,并且对表中的每一个块按照前述的规则进行判断,如果发现块能够恢复,则将该块移动到恢复表;如果不能恢复,则跳过,等下一个周期再来判断。
恢复表扫描线程用于扫描恢复表,当恢复表中存在待恢复数据块时将其交由数据恢复线程进行恢复操作。其执行的恢复操作可如图5所示。
在另一个例子上,假设纠删比是2+1(2个为数据块、1个校验块),块大小为64M,条带大小为32K则object的大小为2*64M=128M,如果写入一个128M文件。可以计算出使用的条带数目为128M/(2*32K)=2048。如果恢复按照10个条带一组进行恢复,则恢复一个块总共需要2048/10=205次纠删计算。
如果这128M的文件写入完成,可以得到***快照图可能如图9所示。其中block1和block2对应的是数据块,分别存放于磁盘1和磁盘2;block3是纠删块,存放于磁盘3。在此种情况下,如果磁盘2掉线了,则磁盘扫描线程检测到磁盘2掉线,将block2块的标识2-27429920553967-1-2存入异常表,异常表扫描线程检测到有块进入,然后判断该块是否可以恢复,如果可以恢复则将该块加入恢复表,恢复表扫描线程将该块加入恢复线程进行恢复,假设选择的一个新磁盘存储回复数据,则恢复完成更新磁盘ID为4如图10所示。
前面图9-图10的例子,从宏观角度阐述了恢复流程,下面从微观角度来阐述。首先数据文件写入时,按object进行分组纠删计算,分散存入到不同磁盘中,继续以例图9所示的场景来说明,存储过程示意图如图11所示为10个条带一组的单次纠删计算存储示意图。即图11展示了一个128M的数据文件,按照块大小64M进行分块。然后根据纠删比(2+1)分成了两个块,计算前取出前10组条带,进行纠删计算,计算完成写入到对应的磁盘中去,然后进行下一轮计算,直到所有的条带都计算完成。
假设磁盘2的数据块2需要恢复,在进行数据恢复的时候,先取出磁盘1和磁盘2中数据完整的数据块,按照写入相似的流程进行纠删反变换,然后把计算结果写入新的数据块即磁盘4的恢复块中,直到把数据块2中的所有的条带都恢复出来,则算恢复完成,如图12所示。
本申请实施例中每个磁盘可通过HBA适配卡与主机连接,不使用RAID卡。因为本申请实施例提供的数据恢复方法计算量小复杂度低,HBA卡已经足够了,不需要用到RAID卡,由此可以节省成本。
基于相同的发明构思,如图13所示,本申请实施例还提供一种基于纠删码的磁盘间数据恢复装置1300,其中数据文件包括多个分组,每个分组包括n+m个数据块,其中n是纠删编码中的数据块个数、m是校验块个数,n和m均为正整数,且各所述数据块关联有用于描述当前状态的状态标识,所述状态标识用于指示所述数据块是否异常,所述装置1300包括:
待恢复块筛选模块1301,用于基于状态标识,筛选出待恢复数据块;
恢复模块1302,用于基于纠删码反变换,对所述待恢复数据块进行恢复处理。
在一些实施例中,所述数据块的状态包括:初始状态、写数据状态、损坏状态、下线状态、正常状态;
所述装置还包括:
状态标识维护模块,用于响应于创建所述数据块,设置所述数据块的状态标识指示为所述初始状态;
响应于将所述数据块写入磁盘,设置所述数据块的状态标识指示为所述写数据状态;
满足以下任一正常条件,则设置所述数据块的状态标识指示为所述正常状态:处于写数据状态的所述数据块成功写入磁盘、损坏的数据块被成功恢复、下线的数据块重新上线、下线的数据块被成功恢复、处于初始状态的数据块被成功恢复;
响应于所述数据块处于所述正常状态时所述数据块所在的磁盘下线,设置所述数据块的状态标识指示为所述下线状态;
满足以下任一损坏条件,则设置所述数据块的状态标识指示为所述损坏状态:所述数据块未成功写入磁盘、所述数据块在处于写数据状态时所述数据块所在磁盘下线、所述数据块处于所述正常状态时所述数据块损坏。
在一些实施例中,在所述恢复模块基于状态标识,筛选出待恢复数据块之前,所述装置还包括:
异常块集合维护模块,用于将出现异常的数据块的数据块标识添加到异常块集合;
所述恢复模块,具体用于:
对所述异常块集合中任一数据块标识对应的异常块,若所述异常块不满足以下任一不可恢复条件,则将所述异常块确定为所述待恢复数据块:
所述异常块的状态标识指示为处于写数据状态;
所述异常块所在的分组中存在至少一个数据块的状态标识指示为写数据状态;
所述异常块所在分组下处于正常状态的数据块个数小于所述n;
工作正常的磁盘个数不足n+m个。
在一些实施例中,在所述恢复模块基于纠删码反变换,对所述待恢复数据块进行恢复处理之前,所述装置还包括:
待恢复块集合维护模块,用于将所述待恢复数据块添加到待恢复块集合;
恢复模块具体用于响应于所述待恢复块集合中添加待恢复数据块的消息,执行所述基于纠删码反变换,对所述待恢复数据块进行恢复处理。
在一些实施例中,在所述恢复模块基于纠删码反变换,对所述待恢复数据块进行恢复处理之前,所述装置还包括:
恢复操作条件检测模块,用于检测所述待恢复数据块是否满足执行恢复操作的条件;
恢复块确定模块,用于若满足执行恢复操作的条件,则为所述待恢复数据块确定恢复块;
所述恢复模块,具体用于:基于纠删码反变换,将所述待恢复数据块的数据内容恢复到所述恢复块中。
在一些实施例中,所述恢复操作条件检测模块,具体用于:
满足以下任一无需恢复条件,则确定所述待恢复数据块不满足执行恢复操作的条件,否则,确定所述待恢复数据块满足执行恢复操作的条件:
所述待恢复数据块所在磁盘正在执行上线操作或下线操作;
所述待恢复数据块的状态标识指示为正常状态;
所述待恢复数据块的存储块中不存在数据内容;
所述待恢复数据块的磁盘正常,且所述待恢复数据块的状态标识指示为下线状态。
在一些实施例中,所述恢复块确定模块,具体用于:
若所述待恢复数据块所在磁盘的用于存储所述待恢复数据块的原存储块可用,则将所述原存储块作为所述恢复块;
若所述原存储块不可用,则在新的磁盘为所述待恢复数据块申请目标存储块作为所述恢复块。
在一些实施例中,所述装置还包括:
原存储块检测模块,用于基于以下方法确定所述待恢复数据块所在磁盘的所述原存储块是否可用:
若所述待恢复数据块的磁盘正常且所述待恢复数据块处于损坏状态则确定所述原存储块可用;
若满足以下任一异常条件,则确定所述原存储块不可用:
所述待恢复数据块的磁盘正常且所述待恢复数据块的状态标识指示为初始状态或写数据状态;
所述待恢复数据块的磁盘异常。
在一些实施例中,所述恢复模块,具体用于:
若恢复操作处于活动状态则按条带读取所述待恢复数据块所在分组的正常数据块,若所述恢复操作处于休眠状态,则休眠结束后按条带读取所述待恢复数据块所在分组的正常数据块;所述恢复操作是否处于休眠状态为预先基于恢复速率控制策略确定的;所述恢复速率控制策略用于使得恢复操作的执行优先级低于读写正常业务数据的操作优先级;
对获取的所述正常数据块进行纠删码反变换,得到所述待恢复数据块的数据内容;
将所述待恢复数据块的数据内容写入磁盘。
在一些实施例中,所述装置还包括:
速率控制模块,用于基于所述恢复速率控制策略确定所述恢复操作是否处于休眠状态,包括:
响应于向磁盘中写入恢复数据的写请求,获取所述写请求中携带的待写入数据流量,并确定所述待写入数据流量与写流量累加值的累加和;所述写流量累加值用于记录持续未休眠时间段内的写流量和;
若空闲时长与单位时间写入速率阈值的乘积大于所述累加和,则确定所述恢复操作处于活动状态;
若所述乘积小于所述累加和,则确定所述恢复操作处于休眠状态,且所述休眠时长为超额部分所占用的写时长;所述超额部分为所述乘积与所述累加和的差额部分数据;
其中,所述空闲时长,为上次休眠起始时间点与当前时间的差值。
在介绍了本申请示例性实施方式的基于纠删码的磁盘间数据恢复方法和装置之后,接下来,介绍根据本申请的另一示例性实施方式的电子设备。
所属技术领域的技术人员能够理解,本申请的各个方面可以实现为***、方法或程序产品。因此,本申请的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“***”。
在一些可能的实施方式中,根据本申请的电子设备可以至少包括至少一个处理器、以及至少一个存储器。其中,存储器存储有程序代码,当程序代码被处理器执行时,使得处理器执行本说明书上述描述的根据本申请各种示例性实施方式的基于纠删码的磁盘间数据恢复方法中的步骤。例如,处理器可以执行如基于纠删码的磁盘间数据恢复方法中的步骤。
下面参照图14来描述根据本申请的这种实施方式的电子设备140。图14显示的电子设备140仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图14所示,电子设备140以通用电子设备的形式表现。电子设备140的组件可以包括但不限于:上述至少一个处理器141、上述至少一个存储器142、连接不同***组件(包括存储器142和处理器141)的总线143。
总线143表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器、***总线、处理器或者使用多种总线结构中的任意总线结构的局域总线。
存储器142可以包括易失性存储器形式的可读介质,例如随机存取存储器(RAM)1421和/或高速缓存存储器1422,还可以进一步包括只读存储器(ROM)1423。
存储器142还可以包括具有一组(至少一个)程序模块1424的程序/实用工具1425,这样的程序模块1424包括但不限于:操作***、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
电子设备140也可以与一个或多个外部设备144(例如键盘、指向设备等)通信,还可与一个或者多个使得用户能与电子设备140交互的设备通信,和/或与使得该电子设备140能与一个或多个其它电子设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口145进行。并且,电子设备140还可以通过网络适配器146与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器146通过总线143与用于电子设备140的其它模块通信。应当理解,尽管图中未示出,可以结合电子设备140使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理器、外部磁盘驱动阵列、RAID***、磁带驱动器以及数据备份存储***等。
在一些可能的实施方式中,本申请提供的一种界面信息切换方法的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在计算机设备上运行时,程序代码用于使计算机设备执行本说明书上述描述的根据本申请各种示例性实施方式的一种基于纠删码的磁盘间数据恢复方法中的步骤。
程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
本申请的实施方式的用于基于纠删码的磁盘间数据恢复的程序产品可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在电子设备上运行。然而,本申请的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。
可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本申请操作的程序代码,程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户电子设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户电子设备上部分在远程电子设备上执行、或者完全在远程电子设备或服务端上执行。在涉及远程电子设备的情形中,远程电子设备可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户电子设备,或者,可以连接到外部电子设备(例如利用因特网服务提供商来通过因特网连接)。
应当注意,尽管在上文详细描述中提及了装置的若干单元或子单元,但是这种划分仅仅是示例性的并非强制性的。实际上,根据本申请的实施方式,上文描述的两个或更多单元的特征和功能可以在一个单元中具体化。反之,上文描述的一个单元的特征和功能可以进一步划分为由多个单元来具体化。
此外,尽管在附图中以特定顺序描述了本申请方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
本领域内的技术人员应明白,本申请的实施例可提供为方法、***、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程图像缩放设备的处理器以产生一个机器,使得通过计算机或其他可编程图像缩放设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程图像缩放设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程图像缩放设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (12)
1.一种基于纠删码的磁盘间数据恢复方法,其特征在于,数据文件包括多个分组,每个分组包括多个数据块,且各所述数据块关联有用于描述当前状态的状态标识,所述状态标识用于指示所述数据块是否异常,所述数据块的状态包括:初始状态、写数据状态、损坏状态、下线状态、正常状态,所述方法包括:
响应于创建所述数据块,设置所述数据块的状态标识指示为所述初始状态;
响应于将所述数据块写入磁盘,设置所述数据块的状态标识指示为所述写数据状态;
满足以下任一正常条件,则设置所述数据块的状态标识指示为所述正常状态:处于写数据状态的所述数据块成功写入磁盘、损坏的数据块被成功恢复、下线的数据块重新上线、下线的数据块被成功恢复、处于初始状态的数据块被成功恢复;
响应于所述数据块处于所述正常状态时所述数据块所在的磁盘下线,设置所述数据块的状态标识指示为所述下线状态;
满足以下任一损坏条件,则设置所述数据块的状态标识指示为所述损坏状态:所述数据块未成功写入磁盘、所述数据块在处于写数据状态时所述数据块所在磁盘下线、所述数据块处于所述正常状态时所述数据块损坏;
基于状态标识,筛选出待恢复数据块;
基于纠删码反变换,对所述待恢复数据块进行恢复处理。
2.根据权利要求1所述的方法,其特征在于,所述基于状态标识,筛选出待恢复数据块之前,所述方法还包括:
将出现异常的数据块的数据块标识添加到异常块集合;
所述基于状态标识,筛选出待恢复数据块,包括:
对所述异常块集合中任一数据块标识对应的异常块,若所述异常块不满足以下任一不可恢复条件,则将所述异常块确定为所述待恢复数据块:
所述异常块的状态标识指示为处于写数据状态;
所述异常块所在的分组中存在至少一个数据块的状态标识指示为写数据状态;
所述异常块所在分组下处于正常状态的数据块个数小于所述纠删码中数据块的个数n;
工作正常的磁盘个数不足指定数量。
3.根据权利要求1所述的方法,其特征在于,所述基于纠删码反变换,对所述待恢复数据块进行恢复处理之前,所述方法还包括:
将所述待恢复数据块添加到待恢复块集合;
响应于所述待恢复块集合中添加待恢复数据块的消息,执行所述基于纠删码反变换,对所述待恢复数据块进行恢复处理。
4.根据权利要求1或3所述的方法,其特征在于,所述基于纠删码反变换,对所述待恢复数据块进行恢复处理之前,所述方法还包括:
检测所述待恢复数据块是否满足执行恢复操作的条件;
若满足执行恢复操作的条件,则为所述待恢复数据块确定恢复块;
所述基于纠删码反变换,对所述待恢复数据块进行恢复处理,包括:
基于纠删码反变换,将所述待恢复数据块的数据内容恢复到所述恢复块中。
5.根据权利要求4所述的方法,其特征在于,所述检测所述待恢复数据块是否满足执行恢复操作的条件,包括:
满足以下任一无需恢复条件,则确定所述待恢复数据块不满足执行恢复操作的条件,否则,确定所述待恢复数据块满足执行恢复操作的条件:
所述待恢复数据块所在磁盘正在执行上线操作或下线操作;
所述待恢复数据块的状态标识指示为正常状态;
所述待恢复数据块的存储块中不存在数据内容;
所述待恢复数据块的磁盘正常,且所述待恢复数据块的状态标识指示为下线状态。
6.根据权利要求4所述的方法,其特征在于,所述为所述待恢复数据块确定恢复块,包括:
若所述待恢复数据块所在磁盘的用于存储所述待恢复数据块的原存储块可用,则将所述原存储块作为所述恢复块;
若所述原存储块不可用,则在新的磁盘为所述待恢复数据块申请目标存储块作为所述恢复块。
7.根据权利要求6所述的方法,其特征在于,确定所述待恢复数据块所在磁盘的所述原存储块是否可用,包括:
若所述待恢复数据块的磁盘正常且所述待恢复数据块处于损坏状态则确定所述原存储块可用;
若满足以下任一异常条件,则确定所述原存储块不可用:
所述待恢复数据块的磁盘正常且所述待恢复数据块的状态标识指示为初始状态或写数据状态;
所述待恢复数据块的磁盘异常。
8.根据权利要求1、3、5-7中任一所述的方法,其特征在于,所述基于纠删码反变换,对所述待恢复数据块进行恢复处理,包括:
若恢复操作处于活动状态则按条带读取所述待恢复数据块所在分组的正常数据块,若所述恢复操作处于休眠状态,则休眠结束后按条带读取所述待恢复数据块所在分组的正常数据块;所述恢复操作是否处于休眠状态为预先基于恢复速率控制策略确定的;所述恢复速率控制策略用于使得恢复操作的执行优先级低于读写正常业务数据的操作优先级;
对获取的所述正常数据块进行纠删码反变换,得到所述待恢复数据块的数据内容;
将所述待恢复数据块的数据内容写入磁盘。
9.根据权利要求8所述的方法,其特征在于,基于所述恢复速率控制策略确定所述恢复操作是否处于休眠状态,包括:
响应于向磁盘中写入恢复数据的写请求,获取所述写请求中携带的待写入数据流量,并确定所述待写入数据流量与写流量累加值的累加和;所述写流量累加值用于记录持续未休眠时间段内的写流量和;
若空闲时长与单位时间写入速率阈值的乘积大于所述累加和,则确定所述恢复操作处于活动状态;
若所述乘积小于所述累加和,则确定所述恢复操作处于休眠状态,且所述休眠时长为超额部分所占用的写时长;所述超额部分为所述乘积与所述累加和的差额部分数据;
其中,所述空闲时长,为上次休眠起始时间点与当前时间的差值。
10.一种基于纠删码的磁盘间数据恢复装置,其特征在于,数据文件包括多个分组,每个分组包括多个数据块,且各所述数据块关联有用于描述当前状态的状态标识,所述状态标识用于指示所述数据块是否异常,所述数据块的状态包括:初始状态、写数据状态、损坏状态、下线状态、正常状态,所述装置包括:
待恢复块筛选模块,用于响应于创建所述数据块,设置所述数据块的状态标识指示为所述初始状态;
响应于将所述数据块写入磁盘,设置所述数据块的状态标识指示为所述写数据状态;
满足以下任一正常条件,则设置所述数据块的状态标识指示为所述正常状态:处于写数据状态的所述数据块成功写入磁盘、损坏的数据块被成功恢复、下线的数据块重新上线、下线的数据块被成功恢复、处于初始状态的数据块被成功恢复;
响应于所述数据块处于所述正常状态时所述数据块所在的磁盘下线,设置所述数据块的状态标识指示为所述下线状态;
满足以下任一损坏条件,则设置所述数据块的状态标识指示为所述损坏状态:所述数据块未成功写入磁盘、所述数据块在处于写数据状态时所述数据块所在磁盘下线、所述数据块处于所述正常状态时所述数据块损坏;
基于状态标识,筛选出待恢复数据块;
恢复模块,用于基于纠删码反变换,对所述待恢复数据块进行恢复处理。
11.一种电子设备,其特征在于,包括至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-9中任一项所述的方法。
12.一种计算机存储介质,其特征在于,所述计算机存储介质存储有计算机程序,所述计算机程序用于使计算机执行权利要求1-9中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110263137.6A CN113051104B (zh) | 2021-03-11 | 2021-03-11 | 基于纠删码的磁盘间数据恢复方法及相关装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110263137.6A CN113051104B (zh) | 2021-03-11 | 2021-03-11 | 基于纠删码的磁盘间数据恢复方法及相关装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113051104A CN113051104A (zh) | 2021-06-29 |
CN113051104B true CN113051104B (zh) | 2022-10-11 |
Family
ID=76511370
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110263137.6A Active CN113051104B (zh) | 2021-03-11 | 2021-03-11 | 基于纠删码的磁盘间数据恢复方法及相关装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113051104B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114221975B (zh) * | 2021-11-30 | 2024-01-30 | 浙江大华技术股份有限公司 | 基于smr盘的云存储数据恢复方法及装置、电子设备 |
CN114218018B (zh) * | 2022-02-18 | 2022-05-27 | 深圳佰维存储科技股份有限公司 | ***数据保护方法、装置、可读存储介质及电子设备 |
CN114415970B (zh) * | 2022-03-25 | 2022-06-17 | 北京金山云网络技术有限公司 | 分布式存储***的磁盘故障处理方法、装置及服务器 |
CN115454711A (zh) * | 2022-11-11 | 2022-12-09 | 苏州浪潮智能科技有限公司 | 一种分布式存储***中纠删数据恢复的方法、装置及介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106951340A (zh) * | 2017-03-14 | 2017-07-14 | 华中科技大学 | 一种基于局部性优先的rs纠删码数据布局方法及*** |
CN107153588A (zh) * | 2017-05-12 | 2017-09-12 | 成都优孚达信息技术有限公司 | 数据编码存储方法 |
CN107506266A (zh) * | 2017-08-30 | 2017-12-22 | 联想(北京)有限公司 | 一种数据恢复方法及*** |
CN108664351A (zh) * | 2017-03-31 | 2018-10-16 | 杭州海康威视数字技术股份有限公司 | 一种数据存储、重构、清理方法、装置及数据处理*** |
CN111444046A (zh) * | 2020-06-16 | 2020-07-24 | 北京金山云科技有限公司 | 一种数据恢复方法及分布式数据恢复*** |
CN111459710A (zh) * | 2020-03-27 | 2020-07-28 | 华中科技大学 | 感知热度与风险的纠删码内存恢复方法、设备及内存*** |
CN111679939A (zh) * | 2020-06-16 | 2020-09-18 | 江苏超流信息技术有限公司 | 数据备份方法及*** |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20200327017A1 (en) * | 2019-04-10 | 2020-10-15 | Commvault Systems, Inc. | Restore using deduplicated secondary copy data |
-
2021
- 2021-03-11 CN CN202110263137.6A patent/CN113051104B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106951340A (zh) * | 2017-03-14 | 2017-07-14 | 华中科技大学 | 一种基于局部性优先的rs纠删码数据布局方法及*** |
CN108664351A (zh) * | 2017-03-31 | 2018-10-16 | 杭州海康威视数字技术股份有限公司 | 一种数据存储、重构、清理方法、装置及数据处理*** |
CN107153588A (zh) * | 2017-05-12 | 2017-09-12 | 成都优孚达信息技术有限公司 | 数据编码存储方法 |
CN107506266A (zh) * | 2017-08-30 | 2017-12-22 | 联想(北京)有限公司 | 一种数据恢复方法及*** |
CN111459710A (zh) * | 2020-03-27 | 2020-07-28 | 华中科技大学 | 感知热度与风险的纠删码内存恢复方法、设备及内存*** |
CN111444046A (zh) * | 2020-06-16 | 2020-07-24 | 北京金山云科技有限公司 | 一种数据恢复方法及分布式数据恢复*** |
CN111679939A (zh) * | 2020-06-16 | 2020-09-18 | 江苏超流信息技术有限公司 | 数据备份方法及*** |
Non-Patent Citations (3)
Title |
---|
"PBS: An Efficient Erasu-Coded Block Storage System Based on Speculative Partial Writes";Yiming Zhang;《ACM Transactions on Storage》;20200229;第16卷(第1期);第1-25页 * |
"基于生成矩阵变换的跨数据中心纠删码写入方法";包涵;《计算机研究与发展》;20200215;第57卷(第02期);第291-305页 * |
"纠删码Erasure Code";蔡月樵;《https://zhuanlan.zhihu.com/p/69374970》;20190730;第1-12页 * |
Also Published As
Publication number | Publication date |
---|---|
CN113051104A (zh) | 2021-06-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113051104B (zh) | 基于纠删码的磁盘间数据恢复方法及相关装置 | |
US10261853B1 (en) | Dynamic replication error retry and recovery | |
US10003357B2 (en) | Systems and methods for verification of code resiliency for data storage | |
CN109614276B (zh) | 故障处理方法、装置、分布式存储***和存储介质 | |
CN109558260B (zh) | Kubernetes故障排除***、方法、设备及介质 | |
CN110750213A (zh) | 一种硬盘管理方法及装置 | |
CN111104051B (zh) | 用于管理存储***的方法、设备和计算机程序产品 | |
CN110737924B (zh) | 一种数据保护的方法和设备 | |
CN105607973B (zh) | 一种虚拟机***中设备故障处理的方法、装置及*** | |
US10852982B2 (en) | Method, system, and computer program product for managing storage system | |
US10732873B1 (en) | Timeout mode for storage devices | |
WO2017220013A1 (zh) | 业务处理方法及装置、存储介质 | |
CN111324304A (zh) | 一种基于ssd硬盘寿命预测的数据保护方法及装置 | |
CN113687790A (zh) | 数据重构方法、装置、设备及存储介质 | |
US9400723B2 (en) | Storage system and data management method | |
US20200348858A1 (en) | Method, device and computer program product | |
CN104407806A (zh) | 独立磁盘冗余阵列组硬盘信息的修改方法和装置 | |
CN116680055A (zh) | 一种异步任务处理方法、装置、计算机设备及存储介质 | |
CN115391106A (zh) | 一种备端资源池化的方法、***及装置 | |
CN114221975B (zh) | 基于smr盘的云存储数据恢复方法及装置、电子设备 | |
CN111506450A (zh) | 用于数据处理的方法、设备和计算机程序产品 | |
CN114168064A (zh) | 用于重建存储***的方法、设备和计算机程序产品 | |
CN113641298A (zh) | 数据存储方法、设备和计算机程序产品 | |
CN110287066A (zh) | 一种服务器分区迁移方法及相关装置 | |
CN115599315B (zh) | 数据处理方法、装置、***、设备及介质 |
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 |