CN109726036B - 一种存储系统中的数据重构方法和装置 - Google Patents

一种存储系统中的数据重构方法和装置 Download PDF

Info

Publication number
CN109726036B
CN109726036B CN201811392192.XA CN201811392192A CN109726036B CN 109726036 B CN109726036 B CN 109726036B CN 201811392192 A CN201811392192 A CN 201811392192A CN 109726036 B CN109726036 B CN 109726036B
Authority
CN
China
Prior art keywords
hard disk
stripe
data
fault
strip
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
Application number
CN201811392192.XA
Other languages
English (en)
Other versions
CN109726036A (zh
Inventor
王英
赵小宝
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201811392192.XA priority Critical patent/CN109726036B/zh
Publication of CN109726036A publication Critical patent/CN109726036A/zh
Priority to PCT/CN2019/103242 priority patent/WO2020103512A1/zh
Application granted granted Critical
Publication of CN109726036B publication Critical patent/CN109726036B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes

Abstract

一种存储系统中的数据重构方案,所述存储系统包括一个或多个存储节点,所述一个或者多个存储节点包括多个硬盘,分条的条带分散存储在所述多个硬盘中,每个条带存储于一个所述硬盘,当所述多个硬盘中出现故障硬盘后,确定所述分条所包含的目标条带,其中,所述目标条带分布在所述故障硬盘中,并且所述分条可以被读出;判断所述故障硬盘发生故障之后所述目标条带是否是最近一次更新的数据;当所述故障硬盘发生故障之后所述目标条带中的数据是最近一次更新的数据时,将所述目标条带中的数据作为重构数据发送给所述故障硬盘的替代硬盘进行存储。

Description

一种存储系统中的数据重构方法和装置
技术领域
本发明涉及存储领域,特别有关于数据重构技术。
背景技术
大数据时代,数据存储可靠保存性成为研究的热点。纠删码(erasure coding,EC)和多副本(multi-copy)是常见的数据冗余保护方式。
多副本是把相同的数据保存多份,只要不是所有副本都丢失,数据就不会丢失。副本的数量越多,则存储资源的实际利用率越底。N副本的硬盘利用率是1/n。
纠删码是另外一种数据保护方法,对n个数据条带(data stip)进行冗余编码,生成m 个校验条带(parity stip),这n+m个条带组成一个分条(stripe)。为了提高可靠性,可以把这n+m个条带分散存储在不同的硬盘上。当发生数据丢失时(例如:某个硬盘发生故障),只要丢失条带的个数不大于m,就可以用n个条带(这n个条带都是未丢失的)对已丢失的条带进行重构。纠删码的存储资源利用率是n/(n+m)。
由于纠删码比多副本存储具有更高的存储资源利用率和更低的冗余度,因此在存储领域得到非常的应用。然而,基于纠删码的数据重构,需要读出n个条带才能完成重构计算。当某个硬盘故障时,故障硬盘上的所有分条都需要进行重构,那么就需要对位于n个硬盘的条带进行读取,然后按照EC重构算法计算出丢失的条带。可以看出,重构数据产生的读带宽和计算量被成倍的放大,严重降低了存储系统的性能。当n的数量越大,这个问题越突出。
因此,当某个硬盘出现故障时,如何提高重构性能是一项亟需解决的课题。
发明内容
第一方面,提供一种存储系统中的数据重构方法,所述存储系统包括一个或多个存储节点,所述一个或者多个存储节点包括多个硬盘,分条的条带分散存储在所述多个硬盘中,每个条带存储于一个所述硬盘,所述方法包括:当所述多个硬盘中出现故障硬盘后,确定所述分条所包含的目标条带,其中,所述目标条带分布在所述故障硬盘中,并且所述分条可以被读出;判断所述故障硬盘发生故障之后所述目标条带是否是最近一次更新的数据;当所述故障硬盘发生故障之后所述目标条带中的数据是最近一次更新的数据时,将所述目标条带中的数据作为重构数据发送给所述故障硬盘的替代硬盘。
应用该方法,目标条带中的数据作为重构数据发送给所述故障硬盘的替代硬盘,这样就完成了目标条带的重构。和通过纠删码重构相比,重构速度快、资源消耗少。
第一方面的第一种可能实现方案中,判断所述故障硬盘发生故障之后所述目标条带是否是最近一次更新的数据,具体包括:获得所述目标条带版本号,获得所述分条版本号,判断所述目标条带版本号和所述分条版本号一致;其中,当所述目标条带版本号和所述分条版本号一致时,所述故障硬盘发生故障之后所述目标条带中的数据是最近一次更新的数据。
该方案提出了一种检测是否是最近一次更新数据的具体实现方案。
第二种可能实现方案中,在第一方面的第一种可能实现方案中基础上:其中,所述分条中包括N各数据条带和M个校验条带,获得所述分条版本号具体包括:获取M+1个条带的版本号,当获取的M+1个条带的版本号一致,则把获取的M+1个条带的版本号作为所述分条版本号。
该方案提出了一种获得分条版本号的具体实现方案。
第三种可能实现方案中,在第一方面的第一种可能实现方案中基础上:在获得所述分条的版本号,以及获得所述故障硬盘中目标条带版本号之前,还包括:故障硬盘所在的目标存储节点检测到所述故障硬盘的故障。
该方案提出了一种发现硬盘故障的具体实现方案。
第四种可能实现方案中,在第三种可能实现方案的基础上:检测到所述故障硬盘的故障之后,还包括:隔离所述故障硬盘;以隔离的方式导入被隔离的所述故障硬盘。
该方案提出了一种发现硬盘故障后,如何处理故障硬盘的具体实现方案。
第五种可能实现方案中,在第一方面的第一种可能实现方案中基础上:当所述多个硬盘中出现故障硬盘之后,还包括:在所述故障硬盘所涉及的LUN中,用所述替代硬盘代替所述故障硬盘。
该方案提出了LUN管理方案。
第六种可能实现方案中,在第一方面的第一种可能实现方案中基础上,进一步包括:当所述故障硬盘发生故障之后所述目标条带中的数据不是最近一次更新的数据时,通过纠删码算法重构生成所述目标分条的重构数据发送给所述故障硬盘的替代硬盘。
该方案提出了一种不用复制进行条带重构,而是应纠删码(EC)进行条带重构的方案。
第二方面,提供一种数据重构装置,用于对存储系统中的条带进行重构,所述存储系统包括一个或多个存储节点,所述一个或者多个存储节点包括多个硬盘,分条的条带分散存储在所述多个硬盘中,每个条带存储于一个所述硬盘,包括:确定模块,用于当所述多个硬盘中出现故障硬盘后,确定所述分条所包含的目标条带,其中,所述目标条带分布在所述故障硬盘中,并且所述分条可以被读出;判断模块,用于在所述故障硬盘发生故障之后,判断所述目标条带是否是最近一次更新的数据;重构模块,用于当所述故障硬盘发生故障之后,并且所述目标条带中的数据是最近一次更新的数据时,将所述目标条带中的数据作为重构数据发送给所述故障硬盘的替代硬盘。
第二方面的可能实现以及对应的有益效果,与第一方面的可能实现以及效果相同。
第三方面,提供一种数据重构装置,所述数据重构装置包括处理器和存储器,所述处理器和所述存储器通信,所述存储装置和多个硬盘通信,所述存储器用于存储程序,所述处理器用于通过执行所述程序执行下述方法:当所述多个硬盘中出现故障硬盘后,确定所述分条所包含的目标条带,其中,所述目标条带分布在所述故障硬盘中,并且所述分条可以被读出;判断所述故障硬盘发生故障之后所述目标条带是否是最近一次更新的数据;当所述故障硬盘发生故障之后所述目标条带中的数据是最近一次更新的数据时,将所述目标条带中的数据作为重构数据发送给所述故障硬盘的替代硬盘。
第三方面的可能实现以及对应的有益效果,与第一方面的可能实现以及效果相同。
附图说明
图1是一种存储系统实施例的架构图;
图2是一种存储系统实施例的架构图;
图3是分条在硬盘中的分布情况示意图;
图4是硬盘故障后分条在硬盘中的分布情况示意图;
图5是条带重构之后分条在硬盘中的分布情况示意图;
图6重构方法实施例流程图;
图7是重构装置拓扑图;
图8是重构装置拓扑图。
具体实施方式
下面将结合附图,对本发明实施例进行描述。本发明实施例中,“目标”用于指代一个非特定的描述对象。例如“目标条带”是任意一个条带,目标分条是任意一个分条。
本发明实施例中,即使硬盘发生了故障,但是硬盘的部分数据可以被正常读出,因此通过直接复制的方式重构条带。从而减少了通过EC重构的条带数量,具有整体上提高了存储系统重构数据的效率等优势。
参见图1本发明实施例的存储系统的架构图。存储系统包括控制器和硬盘,控制器500 对硬盘100、硬盘200、硬盘300和硬盘400进行管理,这些硬盘共同组成一个阵列(array)。在这种架构下,可以把整个存储系统看做一个存储节点;或者把控制器500单独作为存储节点,存储节点外接硬盘。控制器也称为存储控制器。
参见图2,是本发明实施例的另外一种架构。存储系统包括于服务器10、服务器20、服务器30和服务器40,四个硬盘(硬盘100、硬盘200、硬盘300和硬盘400)位于不同的服务器。在这种架构下,可以把每个服务器看做一个存储节点。下面的实施例以图2的架构为例进行说明,但是同样适用于图1的架构。硬盘可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如光盘)、或者半导体介质(例如固态硬盘)等。存储系统还可以包括管理节点50 和重构节点60。其中,管理节点50和重构节点60,可以是专用的节点,也可以由服务器兼任。
参见图3,数据以条带方式存储在存储系统中,每个分条包括多个条带,同一个分条的条带分散存储在不同硬盘中,同一个分条的条带之间具有纠删码(EC)校验关系。
具体而言,分条1的条带分别是条带11、条带12、条带13和条带14,这四个条带存储在硬盘100、硬盘200、硬盘300和硬盘400中。分条2的条带包括:条带21、条带22和条带23,这三个条带分别存储在硬盘100、硬盘200和硬盘300中。分条3的条带分布情况和分条1相同。
在一些情况下,同一个分条的多个条带可以位于相同的硬盘;在一些情况下,同一个分条的多个条带分别位于不同的硬盘;在一些情况下,同一个分条的多个条带分别位于不同的服务器;在另外一些情况下,同一个多个分条可以位于同一个服务器,但是不能位于同一个硬盘;在还有一些情况下,同一个分条的多个条带可以位于同一个硬盘。这几种情况提供了不同的数据可靠性保障。
当硬盘出现损坏(例如磁盘出现坏道、或者固态硬盘出现坏块)时,会引起硬盘中的一部分数据无法读出。当硬盘中中无法被正常读出的范围达到一定程度后,就把这个硬盘定义为故障硬盘。如图4所示,硬盘100出现了被损坏的区域41,区域41内所存储的数据无法被读出,因此磁盘检测软件把磁盘100诊断为故障硬盘。磁盘100的条带11的存储区域和区域41存在重叠部分,因此条带11的数据无法被正常读出。
在检测出硬盘100故障后,需要对硬盘100的数据进行重构。一种重构方案包括如下步骤:(1)对硬盘100进行隔离;(2)用新硬盘500替换硬盘100;对硬盘100的所有条带进行重构:把条带12、条带13和条带14读取到重构服务器中,从而按照EC重构算法计算出条带11′;读取条带22、条带23,从而按照EC重构算法计算出条带21′;读取条带32、条带 33和条带34,从而按照EC重构算法计算出条带31′。可以看出,这个重构的过程需要多次读取位于硬盘200、硬盘300和硬盘400的数据,因此读取的数据量较大。此外,还需要把硬盘100中所有的条带都通过EC算法重构出来,以便获得条带11′、条带21′和条带31′,EC 重构操作这也带来了大量的计算量。重构后条带分布情况参考图5。
本发明提供另外一种实施例,由于硬盘100只是部分存储空间损坏导致该空间中存储的数据(例如条带11的数据)丢失,但其他存储空间中存储的数据(例如条带21和条带31的数据)并没有损坏,因此可以直接使用条带21重构条带21′,使用条带31重构条带31′。重构后的结果参考图5。在这种实施方式中,对损坏的条带(条带11)可以仍然采用上述的EC算法进行重构。对没有损坏的条带(条带21、条带31)不再使用EC算法进行重构,而是采用复制的方式进行重构,和上述通过EC算法进行重构相比,通过复制进行重构减少了重构的计算量和数据读取量,从而提高了重构的效率。下面对具体的重构过程进行介绍,请参见图6。
步骤11,目标存储节点检测到硬盘故障。
在图4的架构中,目标存储节点是故障硬盘100所在的服务器10。存储节点例如是服务器、存储控制器、存储控制器与硬盘的组合、计算机、笔记本电脑。
存储节点的处理器通过光纤(fiber channel,FC)协议或者小型计算机系统接口(small computer system interface,SCSI)协议与位于本地的硬盘通信。或者存储节点通过网络(例如因特网或者以太网)与远端的硬盘通信。硬盘在发生故障后,把故障上报给存储节点的硬盘管理程序。在一些情况下,存储节点运行检测程序主动对硬盘故障进行检测,这两种情况我们都称为存储节点检测到硬盘故障。
步骤12,所述目标存储节点对故障硬盘进行隔离。
当坏道的数量达到一定阈值时(例如磁道损坏达到30%),可以认为磁盘出现故障。需要对硬盘进行隔离。
隔离之后,所述目标存储节点不再读、写故障硬盘。隔离可以是逻辑上的操作,因此,硬盘可以仍然处于上电状态。
步骤13,所述目标存储节点把故障硬盘以隔离的形式导入。
隔离的方式导入是指故障硬盘可以被所述目标存储节点读出数据。但是不加入故障硬盘原本所涉及的逻辑单元号(logic unit number,LUN)。
需要说明的是,步骤12和步骤13是可选步骤,不是必须的。
步骤14,所述目标存储节点通知管理节点对故障硬盘进行更新。所述管理节点收到所述目标存储节点的通知后,在所述故障硬盘所涉及的LUN中,用新硬盘替换所述故障硬盘。
具体而言:把故障硬盘从故障硬盘所在的逻辑单元号(logic unit number,LUN)中删除,把新硬盘加入所述故障硬盘所在的LUN。
此外,所述管理节点还可以记录换盘信息,所述换盘信息中描述了新盘ID和旧盘ID(旧盘ID也就是所述故障硬盘的ID)。
进一步的,所述管理节点还发送通知消息给重构节点,以便通知重构节点进行数据重构。
LUN描述了分条在硬盘间的分布情况,LUN所跨越的硬盘和分条相同,把数据写入LUN就是把数据以分条的形式写入LUN所对应的磁盘。因此,在逻辑上可以把LUN理解为分条的容器,LUN并不是真实的存储空间,因此可以没有大小的概念。每个分条和一个LUN对应,每个LUN可以对应一个或者多个分条。对于同一个LUN中多个分条,数据条带和校验条带的数量(冗余比)相同。如果LUN所在的硬盘位于单个存储节点中,那么LUN的范围局限于单个存储节点;如果LUN所在的硬盘位于多个存储节点,那么LUN相应的分布于多个存储节点。
步骤15,对分条版本号和故障硬盘中条带版本号进行比较。如果二者一致,则故障硬盘中的条带可信;如果不一致,则故障硬盘中的条带不可信。该步骤可以由重构节点执行。
需要说明的是,硬盘中的已有分条和条带各自具有版本号这个参数,下面对分条版本号、条带版本号的原理进行介绍。版本号用于指示数据写入的先后顺序,版本号越新说明说明数据写入的时间越短,版本号越旧说明数据写入的时间越长。本实施例只是以版本号为例进行说明,其他可以用于指示数据写入的先后顺序的参数也在本实施例的保护范围之内。
在把数据以分条的形式存储在硬盘的过程中,分条拥有版本号。分条由条带构成,每个条带都继承了条带所属分条的版本号。因此,在理论上,属于同一个分条的多个条带的条带版本号相同。然而,在实际操作中,可能一部分条带写成功,另外一部分条带没有写成功。或者,在对分条的数据进行更新时,可能有一部分条带更新成功,对于更新成功的条带,条带版本号也随之更新,更新后和最新的条带版本号一致;而另外一部分条带由于发生意外而没有更新成功,对于没有更新成功的条带,条带版本号仍然保持旧的分条版本号不变。
下面对版本号的更新进行举例。1个3MB的文件(或者文件的一部分)被拆分成3个1MB 的数据条带,对这三个数据条带进行异或运算生成1个1M的校验条带,这4个条带共同组成一个分条,并且对分条赋予版本号V11,把版本号为V1的条带存储到4个硬盘中,每个条带位于一个硬盘,这4个条带的版本号也是V11。在后续某个时刻,对分条进行更新(被更新的可以是分条中所有条带的数据,也可以是一部分条带的数据),为了避免和更新前的分条混淆,更新后的分条被赋予新的版本号V12;相应的,所述4个条带的版本号也被需要更新为V12,如果有某个条带的版本号没有更新成功,那么这个版本号没有更新成功的条带的版本号保留为V11。版本号保存在条带的元数据中,条带的元数据可以和条带保存在一起;在一些情况下也可以分开保存,例如条带和条带对应的元数据位于不同的硬盘。
在图1的架构中,目标存储节点、管理节点、重构节点是同一个设备,这个设备可以是控制器500和硬盘100、硬盘200、硬盘300和硬盘400组成的系统,或者是控制器500。
由此可见,通过比较版本号可以判断条带是不是最新版本的数据。如果条带版本号与这个条带所在分条的分条版本号一致,那么说明这个条带是最新的版本条带,是可信的;如果不一致,说明这个分条不是最新版本或者数据错误或者版本不是最新,不可信。
由于在故障硬盘中,条带和条带的元数据可以保存在一起,因此二者可以同时读出来,一次性获取条带和条带的版本号,从条带的版本号中获得条带版本号。此外,也可以不读取条带,单独读取位于故障硬盘中的条带的元数据,从中获得条带的版本号。当要读取某个硬盘上的条带时,读取命令可以携带{存储节点IP、盘ID、分条的标识}这三元信息。其中存储节点IP是待读硬盘所在存储节点的IP地址,盘ID是待读硬盘的ID;分条标识,是待读盘中待读条带所在的分条的标识。当硬盘中的条带数量不超过1个时,由这三元信息就可以定位到具体的条带,从而读取出条带。需要说明的是,当待读硬盘位于所述重构节点时,可以不必携带存储节点IP。当需要单独获得条带的元数据或者条带版本号时,同样可以通过所述三元信息实现。
分条版本号的获取方式可以有多种。例如:对冗余比为N+M(N个数据条带,M个校验条带),读取M+1个条带的版本号(不包括位于故障硬盘的条带的版本号),如果这M+1个条带的版本号一致,说明这M+1个条带的版本号是最新的版本号,因此可以把这M+1个条带的版本号作为分条版本号。需要说明的是,由于存储系统布局的不同,读取M+1个条带版本号所涉及的服务器数量也不同。当存储系统仅包含一个存储节点,这意味着N+M个条带全部分布在同一个存储节点中,那么读取M+1个条带的版本号也只涉及这一个存储节点。当N+M个条带分别位于不同的存储节点,那么读取M+1个条带的版本号就涉及到读取M+1个存储节点的数据。同一个分条的条带在物理上的不同分布,可以提供不同的可靠性等级。当N+M个条带分别位于不同的存储节点(例如:每个条带和分布式存储系统中的存储节点一一对应),可以带来较高的数据可靠性;当N+M个条带位于不同的硬盘,并且部分或者全部硬盘位于相同的存储节点(例如:所有条带位于同一个存储阵列中,每个条带和一个硬盘一一对应),可以带来一定的可靠性,但可靠性比前一种方式低;当N+M个条带中允许部份条带位于同一个硬盘,则数据可靠性更低。
此外,获取分条版本号还有另外一种方法,每次更新数据的时候,把最新的分条版本号预先存放起来,这个预存的版本号可以作为分条版本号。
步骤16,如果故障硬盘中的条带可信,可以把这个条带直接发送给步骤14中提及的新硬盘进行存储,完成对这个条带的重构。如果在步骤15中已经读取了这个条带,那么直接把已经读取到的条带发送给新硬盘即可。重构成功后,条带所在的分条重新变得完整,因此也可以认为分条重构成功。
步骤17,如果故障硬盘中条带的版本号和这个条带所述分条的版本号不一致。则意味着故障硬盘中的条带不可用。可以沿用现有技术的方案对故障硬盘中的条带进行重构,即:对于故障条带所在的分条,读出N个条带,并且保证这个N个条带的版本号一致,然后使用EC 算法重构出故障硬盘中的条带,把重构出的硬盘发送给新硬盘进行存储,完成对分条的重构。
步骤18,所述存储节点剔除所述故障硬盘。被剔除后的故障硬盘下线,不再能够被所述存储节点读或者写,我们称之为“踢盘”。
需要说明的是,步骤15和16以单个分条进行举例介绍了数据重构的详细过程。如果故障硬盘中有多个分条需要重构。对这多个分条,可以分别使用步骤16的方法进行判断;然后按照步骤17的方法:对版本号一致的分条(命名为第一分条),直接拷贝到新硬盘完成重构;对于版本号不一致的分条(命名为第二分条),使用EC算法重构。这样就完成了多个分条的重构。
一个LUN对应有至少一个分条,对LUN中所有分条进行重构就完成了LUN的重构。
故障硬盘涉及一个或者多个LUN,例如图1中分条1和分条2的冗余比不同,因此它们必然属于不同的LUN。对故障硬盘中所有LUN完成重构后再移除故障硬盘,就完成了整个故障硬盘的重构。
根据数据恢复的目的不同,踢盘可以发生在分条重构成功之后,或者LUN重构成功之后,或者所有LUN重构成功之后。
参见图7,本发明还提供一种数据重构装置的实施例。数据重构装置70用于对存储系统(未图示)中的条带进行重构,所述存储系统包括一个或多个存储节点(未图示),所述一个或者多个存储节点包括硬盘100、硬盘200、硬盘300和硬盘400。分条的条带分散存储在所述多个硬盘中,每个条带存储于一个所述硬盘,数据重构装置70位于所述存储系统之内或者所述存储系统之外,数据重构装置70可以是软件程序或者是硬件。由于数据重构装置可以执行上述方法实施例,因此下面仅简单介绍,对于重复部分不做详细说明。
所述重构装置70包括:确定模块701,用于当所述多个硬盘中出现故障硬盘后,确定所述分条所包含的目标条带,其中,所述目标条带分布在所述故障硬盘中,并且所述分条可以被读出;判断模块702,用于在所述故障硬盘发生故障之后,判断所述目标条带是否是最近一次更新的数据;重构模块703,用于当所述故障硬盘发生故障之后,并且所述目标条带中的数据是最近一次更新的数据时,将所述目标条带中的数据作为重构数据发送给所述故障硬盘的替代硬盘。
其中,所述判断模块702具体用于:获得所述目标条带版本号,获得所述分条版本号,判断所述目标条带版本号和所述分条版本号一致;其中,当所述目标条带版本号和所述分条版本号一致时,所述故障硬盘发生故障之后所述目标条带中的数据是最近一次更新的数据。
其中,所述分条中包括N各数据条带和M个校验条带,所述判断模块702获得所述分条版本号具体包括:所述判断模块获取M+1个条带的版本号,当获取的M+1个条带的版本号一致,则把获取的M+1个条带的版本号作为所述分条版本号。
在获得所述分条的版本号,以及获得所述故障硬盘中目标条带版本号之前,还包括:故障硬盘所在的目标存储节点检测到所述故障硬盘的故障。
所述重构装置70还包括隔离模块704,所述隔离模块704用于:检测到所述故障硬盘的故障之后,隔离所述故障硬盘;以及还用于:以隔离的方式导入被隔离的所述故障硬盘。
所述数据重构装置还包括硬盘管理模块705,所述硬盘管理模块用于:当所述多个硬盘中出现故障硬盘之后,在所述故障硬盘所涉及的LUN中,用所述替代硬盘代替所述故障硬盘。
所述重构模块还用于:当所述故障硬盘发生故障之后所述目标条带中的数据不是最近一次更新的数据时,通过纠删码算法重构生成所述目标分条的重构数据发送给所述故障硬盘的替代硬盘。
参见图8,本发明还提供另外一种数据重构装置的实施例。数据重构装置80是一种硬件,包括处理器801和存储器802,所述处理器801和所述存储器通信802通过系统总线连接,所述数据重构装置通过网络或者PCIe等接口与硬盘(或者硬盘所在的存储节点) 通信,所述存储器802用于存储程序,所述处理器用于通过执行所述程序执行下述方法。
当所述多个硬盘(硬盘100、硬盘200、硬盘300和硬盘400)中出现故障硬盘后,确定所述分条所包含的目标条带,其中,所述目标条带分布在所述故障硬盘中,并且所述分条可以被读出;判断所述故障硬盘发生故障之后所述目标条带是否是最近一次更新的数据;当所述故障硬盘发生故障之后所述目标条带中的数据是最近一次更新的数据时,将所述目标条带中的数据作为重构数据发送给所述故障硬盘的替代硬盘。由于该方法在前面的方法实施例中已经有具体介绍,这里不再赘述。
以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者替换其中部分技术特征;而这些修改或者替换,并不使相应技术方案脱离权利要求的保护范围。

Claims (7)

1.一种存储系统中的数据重构方法,其特征在于,所述存储系统包括一个或多个存储节点,所述一个或多个存储节点包括多个硬盘,分条的条带分散存储在所述多个硬盘中,每个条带存储于一个所述硬盘,所述方法包括:
当所述多个硬盘中出现故障硬盘后,确定所述分条所包含的目标条带,其中,所述目标条带分布在所述故障硬盘中,并且所述分条可以被读出,每个分条包括多个条带,同一个分条的条带分散存储在不同硬盘中,其中,同一个分条的条带之间具有纠删码校验关系;
判断所述故障硬盘发生故障之后所述目标条带是否是最近一次更新的数据;
当所述故障硬盘发生故障之后所述目标条带中的数据是最近一次更新的数据时,将所述目标条带中的数据作为重构数据发送给所述故障硬盘的替代硬盘;
其中,判断所述故障硬盘发生故障之后所述目标条带是否是最近一次更新的数据,具体包括:
获得所述目标条带版本号,获得所述分条版本号,判断所述目标条带版本号和所述分条版本号一致;其中,当所述目标条带版本号和所述分条版本号一致时,所述故障硬盘发生故障之后所述目标条带中的数据是最近一次更新的数据;
其中,版本号用于指示数据写入的先后顺序,版本号越新说明说明数据写入的时间越短,版本号越旧说明数据写入的时间越长;在把数据以分条的形式存储在硬盘的过程中,分条拥有版本号,分条由条带构成,每个条带都继承了条带所属分条的版本号,属于同一个分条的多个条带的条带版本号相同,在对分条的数据进行更新时,当有一部分条带更新成功,对于更新成功的条带,条带版本号也随之更新,更新后和最新的条带版本号一致;而另外一部分条带由于发生意外而没有更新成功,对于没有更新成功的条带,条带版本号仍然保持旧的分条版本号不变;
其中,所述分条中包括N个数据条带和M个校验条带,获得所述分条版本号具体包括:
获取M+1个条带的版本号,当获取的M+1个条带的版本号一致,则把获取的M+1个条带的版本号作为所述分条版本号;
其中,在获得所述分条的版本号,以及获得所述故障硬盘中目标条带版本号之前,还包括:故障硬盘所在的目标存储节点检测到所述故障硬盘的故障;
其中,检测到所述故障硬盘的故障之后,还包括:隔离所述故障硬盘,其中,隔离后的故障硬盘不能被故障硬盘所在存储节点访问;以隔离的方式导入被隔离的所述故障硬盘,其中,被导入后的所述故障硬盘能够被所述故障硬盘所在存储节点访问,被导入后的所述故障硬盘不属于逻辑单元号(LUN)。
2.根据权利要求1所述的方法,当所述多个硬盘中出现故障硬盘之后,还包括:
在所述故障硬盘所涉及的LUN中,用所述替代硬盘代替所述故障硬盘。
3.根据权利要求1所述的方法,进一步包括:
当所述故障硬盘发生故障之后所述目标条带中的数据不是最近一次更新的数据时,通过纠删码算法重构生成所述目标分条的重构数据发送给所述故障硬盘的替代硬盘。
4.一种数据重构装置,用于对存储系统中的条带进行重构,所述存储系统包括一个或多个存储节点,所述一个或多个存储节点包括多个硬盘,分条的条带分散存储在所述多个硬盘中,每个条带存储于一个所述硬盘,包括:
确定模块,用于当所述多个硬盘中出现故障硬盘后,确定所述分条所包含的目标条带,其中,所述目标条带分布在所述故障硬盘中,并且所述分条可以被读出,每个分条包括多个条带,同一个分条的条带分散存储在不同硬盘中,其中,同一个分条的条带之间具有纠删码校验关系;
判断模块,用于在所述故障硬盘发生故障之后,判断所述目标条带是否是最近一次更新的数据;
重构模块,用于当所述故障硬盘发生故障之后,并且所述目标条带中的数据是最近一次更新的数据时,将所述目标条带中的数据作为重构数据发送给所述故障硬盘的替代硬盘;
其中,所述判断模块具体用于:
获得所述目标条带版本号,获得所述分条版本号,判断所述目标条带版本号和所述分条版本号一致;其中,当所述目标条带版本号和所述分条版本号一致时,所述故障硬盘发生故障之后所述目标条带中的数据是最近一次更新的数据;
其中,版本号用于指示数据写入的先后顺序,版本号越新说明说明数据写入的时间越短,版本号越旧说明数据写入的时间越长;在把数据以分条的形式存储在硬盘的过程中,分条拥有版本号,分条由条带构成,每个条带都继承了条带所属分条的版本号,属于同一个分条的多个条带的条带版本号相同,在对分条的数据进行更新时,当有一部分条带更新成功,对于更新成功的条带,条带版本号也随之更新,更新后和最新的条带版本号一致;而另外一部分条带由于发生意外而没有更新成功,对于没有更新成功的条带,条带版本号仍然保持旧的分条版本号不变;
其中,所述分条中包括N个数据条带和M个校验条带,所述判断模块获得所述分条版本号具体包括:所述判断模块获取M+1个条带的版本号,当获取的M+1个条带的版本号一致,则把获取的M+1个条带的版本号作为所述分条版本号;
其中,还包括隔离模块,其中:
所述隔离模块用于:检测到所述故障硬盘的故障之后,隔离所述故障硬盘,隔离后的故障硬盘不能被故障硬盘所在存储节点访问;
所述隔离模块还用于:以隔离的方式导入被隔离的所述故障硬盘,其中,被导入后的所述故障硬盘能够被所述故障硬盘所在存储节点访问,被导入后的所述故障硬盘不属于逻辑单元号(LUN)。
5.根据权利要求4所述的数据重构装置,所述数据重构装置还包括硬盘管理模块,所述硬盘管理模块用于:
当所述多个硬盘中出现故障硬盘之后,在所述故障硬盘所涉及的LUN中,用所述替代硬盘代替所述故障硬盘。
6.根据权利要求4所述的数据重构装置,所述重构模块还用于:
当所述故障硬盘发生故障之后所述目标条带中的数据不是最近一次更新的数据时,通过纠删码算法重构生成所述目标分条的重构数据发送给所述故障硬盘的替代硬盘。
7.一种数据重构装置,所述数据重构装置包括处理器和存储器,所述处理器和所述存储器通信,所述存储器和多个硬盘通信,所述存储器用于存储程序,所述处理器用于通过执行所述程序执行下述方法:
当所述多个硬盘中出现故障硬盘后,确定分条所包含的目标条带,其中,所述目标条带分布在所述故障硬盘中,并且所述分条可以被读出,每个分条包括多个条带,同一个分条的条带分散存储在不同硬盘中,其中,同一个分条的条带之间具有纠删码校验关系;
判断所述故障硬盘发生故障之后所述目标条带是否是最近一次更新的数据;
当所述故障硬盘发生故障之后所述目标条带中的数据是最近一次更新的数据时,将所述目标条带中的数据作为重构数据发送给所述故障硬盘的替代硬盘;
其中,判断所述故障硬盘发生故障之后所述目标条带是否是最近一次更新的数据,具体包括:
获得所述目标条带版本号,获得所述分条版本号,判断所述目标条带版本号和所述分条版本号一致;其中,当所述目标条带版本号和所述分条版本号一致时,所述故障硬盘发生故障之后所述目标条带中的数据是最近一次更新的数据;
其中,版本号用于指示数据写入的先后顺序,版本号越新说明说明数据写入的时间越短,版本号越旧说明数据写入的时间越长;在把数据以分条的形式存储在硬盘的过程中,分条拥有版本号,分条由条带构成,每个条带都继承了条带所属分条的版本号,属于同一个分条的多个条带的条带版本号相同,在对分条的数据进行更新时,当有一部分条带更新成功,对于更新成功的条带,条带版本号也随之更新,更新后和最新的条带版本号一致;而另外一部分条带由于发生意外而没有更新成功,对于没有更新成功的条带,条带版本号仍然保持旧的分条版本号不变;
其中,所述分条中包括N个数据条带和M个校验条带,获得所述分条版本号具体包括:获取M+1个条带的版本号,当获取的M+1个条带的版本号一致,则把获取的M+1个条带的版本号作为所述分条版本号;
其中,在获得所述分条的版本号,以及获得所述故障硬盘中目标条带版本号之前,还包括:故障硬盘所在的目标存储节点检测到所述故障硬盘的故障;
其中,检测到所述故障硬盘的故障之后,还包括:隔离所述故障硬盘,其中,隔离后的故障硬盘不能被故障硬盘所在存储节点访问;以隔离的方式导入被隔离的所述故障硬盘,其中,被导入后的所述故障硬盘能够被所述故障硬盘所在存储节点访问,被导入后的所述故障硬盘不属于逻辑单元号(LUN)。
CN201811392192.XA 2018-11-21 2018-11-21 一种存储系统中的数据重构方法和装置 Active CN109726036B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201811392192.XA CN109726036B (zh) 2018-11-21 2018-11-21 一种存储系统中的数据重构方法和装置
PCT/CN2019/103242 WO2020103512A1 (zh) 2018-11-21 2019-08-29 一种存储系统中的数据重构方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811392192.XA CN109726036B (zh) 2018-11-21 2018-11-21 一种存储系统中的数据重构方法和装置

Publications (2)

Publication Number Publication Date
CN109726036A CN109726036A (zh) 2019-05-07
CN109726036B true CN109726036B (zh) 2021-08-20

Family

ID=66295093

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811392192.XA Active CN109726036B (zh) 2018-11-21 2018-11-21 一种存储系统中的数据重构方法和装置

Country Status (2)

Country Link
CN (1) CN109726036B (zh)
WO (1) WO2020103512A1 (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109726036B (zh) * 2018-11-21 2021-08-20 华为技术有限公司 一种存储系统中的数据重构方法和装置
CN111399766B (zh) * 2020-01-08 2021-10-22 华为技术有限公司 存储系统中的数据存储方法、数据读取方法、装置及系统
CN111488124A (zh) * 2020-04-08 2020-08-04 深信服科技股份有限公司 一种数据更新方法、装置、电子设备及存储介质
CN115712390B (zh) * 2022-11-14 2023-05-09 安超云软件有限公司 可用数据条带分片数确定方法及系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7827350B1 (en) * 2007-04-27 2010-11-02 Netapp, Inc. Method and system for promoting a snapshot in a distributed file system
CN105183590A (zh) * 2015-08-31 2015-12-23 安徽欧迈特数字技术有限责任公司 一种磁盘阵列的容错处理方法
CN105183583A (zh) * 2015-07-31 2015-12-23 浪潮电子信息产业股份有限公司 一种磁盘阵列的数据重建的方法及一种磁盘阵列系统
CN105426483A (zh) * 2015-11-19 2016-03-23 华为技术有限公司 一种基于分布式系统的文件读取方法及装置
CN107908499A (zh) * 2017-11-02 2018-04-13 华为技术有限公司 一种数据校验方法及装置

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2933733A4 (en) * 2013-12-31 2016-05-11 Huawei Tech Co Ltd DATA PROCESSING METHOD AND DEVICE IN A DISTRIBUTED FILE STORAGE SYSTEM
CN109445687B (zh) * 2015-09-30 2022-04-26 华为技术有限公司 一种数据存储方法以及协议服务器
US9841908B1 (en) * 2016-06-30 2017-12-12 Western Digital Technologies, Inc. Declustered array of storage devices with chunk groups and support for multiple erasure schemes
CN106933707B (zh) * 2017-03-15 2020-11-06 李经纬 基于raid技术的数据存储设备数据恢复方法及系统
CN109726036B (zh) * 2018-11-21 2021-08-20 华为技术有限公司 一种存储系统中的数据重构方法和装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7827350B1 (en) * 2007-04-27 2010-11-02 Netapp, Inc. Method and system for promoting a snapshot in a distributed file system
CN105183583A (zh) * 2015-07-31 2015-12-23 浪潮电子信息产业股份有限公司 一种磁盘阵列的数据重建的方法及一种磁盘阵列系统
CN105183590A (zh) * 2015-08-31 2015-12-23 安徽欧迈特数字技术有限责任公司 一种磁盘阵列的容错处理方法
CN105426483A (zh) * 2015-11-19 2016-03-23 华为技术有限公司 一种基于分布式系统的文件读取方法及装置
CN107908499A (zh) * 2017-11-02 2018-04-13 华为技术有限公司 一种数据校验方法及装置

Also Published As

Publication number Publication date
CN109726036A (zh) 2019-05-07
WO2020103512A1 (zh) 2020-05-28

Similar Documents

Publication Publication Date Title
CN109726036B (zh) 一种存储系统中的数据重构方法和装置
US10452501B2 (en) Copying data from mirrored storage to auxiliary storage arrays co-located with primary storage arrays
CN102929750B (zh) 非易失性介质肮脏区段跟踪
US8843447B2 (en) Resilient distributed replicated data storage system
US11307776B2 (en) Method for accessing distributed storage system, related apparatus, and related system
CN106776130B (zh) 一种日志恢复方法、存储装置和存储节点
CN109582213B (zh) 数据重构方法及装置、数据存储系统
CN111124264B (zh) 用于重建数据的方法、设备和计算机程序产品
US9529674B2 (en) Storage device management of unrecoverable logical block addresses for RAID data regeneration
CN111104293A (zh) 用于支持盘故障预测的方法、设备和计算机程序产品
CN111104051B (zh) 用于管理存储系统的方法、设备和计算机程序产品
CN106959912B (zh) 磁盘检测方法及装置
CN108141229A (zh) 损坏数据的高效检测
US10606490B2 (en) Storage control device and storage control method for detecting storage device in potential fault state
JP6540334B2 (ja) システム、情報処理装置、および情報処理方法
CN114416665B (zh) 一种数据一致性检测和修复的方法、装置及介质
CN113377569A (zh) 用于恢复数据的方法、设备和计算机程序产品
CN116204137B (zh) 基于dpu的分布式存储系统、控制方法、装置及设备
CN104205097A (zh) 一种去重方法装置与系统
US11115056B2 (en) Location selection based on erasure code techniques
CN102662609B (zh) 视频访问的方法及装置
WO2021043246A1 (zh) 数据读取方法及装置
US11055190B1 (en) System and method for facilitating storage system operation with global mapping to provide maintenance without a service interrupt
US10747610B2 (en) Leveraging distributed metadata to achieve file specific data scrubbing
US10592349B2 (en) Storage control device and storage apparatus

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