数据恢复方法、存储设备和存储系统的制作方法
【专利摘要】本发明实施例提供了一种数据恢复方法,包括:确定所述存储设备的磁盘中发生故障的第一Chunk;将所述第一Chunk的空间属性设置为不能被访问的状态;在所述存储设备的存储空间中查找空闲的第二Chunk,所述第二Chunk的空间属性没有被设置为不能被访问的状态;恢复所述第一Chunk中存储的数据;将所述恢复出的数据写入所述第二Chunk中。可以在存储设备发生局部故障时,保证数据的可靠性。
【专利说明】数据恢复方法、存储设备和存储系统
【技术领域】
[0001]本发明涉及存储技术,尤其涉及一种数据恢复方法、存储设备和存储系统。
【背景技术】
[0002]独立磁盘冗余数组(RedundantArray of Independent Disks,RAID),又称廉价磁盘冗余数组(Redundant Array of Inexpensive Disks, RAID),简称硬盘阵列。其基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵、容量巨大的硬盘。根据选择的版本不同,RAID比单颗硬盘有以下方面的好处:增强数据集成度,增强容错功能,增加处理量或容量。另外,磁盘阵列对于电脑来说,看起来就像一个单独的硬盘或逻辑存储单元。传统的RAID技术是在硬盘间实现的,以RAID5为例,要实现RAID5技术至少需要三颗硬盘,将数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据发生损坏后,可以利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。
[0003]在实现块虚拟化技术以后,可以将硬盘划分为细粒度的数据块(Chunk,以下简称CK),然后在多个CK之间实现RAID,而由多个CK按照指定RAID类型组成的逻辑空间就是一个数据块组(Chunk Group,以下简称CKG)。当CKG中的一个CK发生故障时,可以利用RAID技术将发生故障的CK中存储的数据恢复出来。但是在数据恢复之前,主机仍然会对发生故障的CK进行数据访问,磁介质损坏的区域会发生物理扩散,由此会造成发生故障的区域增大,或者对磁头造成损坏,最终都可能导致该CK所属的磁盘全盘故障,影响数据的可靠性。
【发明内容】
[0004]本发明实施例提供了 一种数据恢复方法、存储设备和存储系统,当存储设备发生局部故障时,可以保证数据可靠性。
[0005]第一方面,本发明实施例提供一种数据恢复方法,应用于存储设备中,所述存储设备包含多个磁盘,每个磁盘的存储空间被划分为多个数据块Chunk,包括:
[0006]确定所述存储设备的磁盘中发生故障的第一 Chunk ;
[0007]将所述第一 Chunk的空间属性设置为不能被访问的状态;
[0008]在所述存储设备的存储空间中查找空闲的第二 Chunk,所述第二 Chunk的空间属性没有被设置为不能被访问的状态;
[0009]恢复所述第一 Chunk中存储的数据;
[0010]将所述恢复出的数据写入所述第二 Chunk中。
[0011]在第一方面的第一种可能的实现方式中,还包括:
[0012]接收主机发送的读数据请求,所述读数据请求包括读取地址和数据长度;
[0013]根据所述读取地址和数据长度,确定待读取的Chunk是所述第一 Chunk ;
[0014]确定所述第一 Chunk的空间属性被设置为不能被访问的状态;
[0015]恢复所述第一 Chunk中存储的数据;[0016]将所述恢复出的数据发送给所述主机。
[0017]在第一方面的第二种可能的实现方式中,还包括:
[0018]接收主机发送的写数据请求,所述写数据请求包括待写入数据、写入地址和数据长度;
[0019]根据所述写入地址和所述数据长度,确定待写入的Chunk是所述第一 Chunk ;
[0020]确定所述第一 Chunk的空间属性被设置为不能被访问的状态;
[0021]将所述待写入数据写入所述第一 Chunk所在的数据块组CKG中未发生故障的Chunk 中 ο
[0022]在第一方面的第三种可能的实现方式中,在确定所述存储设备的磁盘中发生故障的第一 Chunk之前,还包括:
[0023]接收主机发送的数据访问请求,所述数据访问请求包括读数据请求或写数据请求或数据修改请求;
[0024]执行所述数据访问请求;
[0025]接收所述数据访问请求执行错误的响应请求,所述响应请求包括错误码,所述错误码用于指示所述存储设备的磁盘发生局部故障。
[0026]在第一方面的第四种可能的实现方式中,还包括:将所述CKG与所述第一 Chunk的对应关系修改为所述CKG与第二 Chunk的对应关系。
[0027]第二方面,本发明实施例提供一种存储设备,包括多个磁盘和控制器,其中每个磁盘的存储空间被划分为多个数据块Chunk,其特征在于,所述控制器包括:
[0028]故障确定模块,用于确定所述存储设备的磁盘中发生故障的第一 Chunk ;
[0029]空间管理模块,用于将所述第一 Chunk的空间属性设置为不能被访问的状态;
[0030]数据管理模块,用于在所述存储设备的存储空间中查找空闲的第二 Chunk,所述第
二Chunk的空间属性没有被设置为不能被访问的状态;恢复所述第一Chunk中存储的数据;将所述恢复出的数据写入所述第二 Chunk中。
[0031]在第二方面的第一种可能的实现方式中,
[0032]所述数据管理模块,还用于接收主机发送的读数据请求,所述读数据请求包括读取地址和数据长度;根据所述读取地址和数据长度,确定待读取的Chunk是所述第一Chunk,并且所述第一 Chunk的空间属性被设置为不能被访问的状态;恢复所述第一 Chunk中存储的数据;将所述恢复出的数据发送给所述主机。
[0033]在第二方面的第二种可能的实现方式中,
[0034]所述数据管理模块,还用于接收主机发送的写数据请求,所述写数据请求包括待写入数据、写入地址和数据长度;根据所述写入地址和所述数据长度,确定待写入的Chunk是所述第一 Chunk,并且所述第一 Chunk的空间属性被设置为不能被访问的状态;将所述待写入数据写入所述第一 Chunk所在的数据块组CKG中未发生故障的Chunk中。
[0035]在第二方面的第三种可能的实现方式中,
[0036]所述数据管理模块,还用于接收主机发送的数据访问请求,所述数据访问请求包括读数据请求或写数据请求;执行所述数据访问请求;接收所述数据访问请求执行错误的响应请求,所述响应请求包括错误码,所述错误码用于指示所述存储设备的磁盘发生局部故障。[0037]在第二方面的第四种可能的实现方式中,
[0038]所述空间管理模块,还用于将所述CKG与所述第一 Chunk的对应关系修改为所述CKG与第二 Chunk的对应关系。
[0039]第三方面,本发明实施例提供一种存储系统,包括第二方面所述的存储设备和主机;所述主机用于向所述存储设备发送数据访问请求,所述数据访问请求包括读数据请求或写数据请求或数据修改请求。
[0040]第四方面,本发明实施例提供一种存储设备,包括:处理器、存储器和通信总线;
[0041]其中,所述处理器和所述存储器通过所述通信总线进行通信;
[0042]所述存储器用于保存程序;
[0043]所述处理器用于执行所述程序,以实现:
[0044]确定所述存储设备的磁盘中发生故障的第一 Chunk ;将所述第一 Chunk的空间属性设置为不能被访问的状态;在所述存储设备的存储空间中查找空闲的第二 Chunk,所述第二 Chunk的空间属性没有被设置为不能被访问的状态;恢复所述第一 Chunk中存储的数据;将所述恢复出的数据写入所述第二 Chunk中。
[0045]在第四方面的第一种可能的实现方式中,所述处理器,还用于接收主机发送的读数据请求,所述读数据请求包括读取地址和数据长度;根据所述读取地址和数据长度,确定待读取的Chunk是所述第一 Chunk ;确定所述第一 Chunk的空间属性被设置为不能被访问的状态;恢复所述第一 Chunk中存储的数据;将所述恢复出的数据发送给所述主机。
[0046]在第四方面的第二种可能的实现方式中,
[0047]所述处理器,还用于接收主机发送的写数据请求,所述写数据请求包括待写入数据、写入地址和数据长度;根据所述写入地址和所述数据长度,确定待写入的Chunk是所述第一 Chunk ;确定所述第一 Chunk的空间属性被设置为不能被访问的状态;将所述待写入数据写入所述第一 Chunk所在的数据块组CKG中未发生故障的Chunk中。
[0048]在第四方面的第三种可能的实现方式中,
[0049]所述处理器,还用于接收主机发送的数据访问请求,所述数据访问请求包括读数据请求或写数据请求或数据修改请求;执行所述数据访问请求;接收所述数据访问请求执行错误的响应请求,所述响应请求包括错误码,所述错误码用于指示所述存储设备的磁盘发生局部故障。
[0050]在第四方面的第四种可能的实现方式中,所述处理器,还用于将所述CKG与所述第一 Chunk的对应关系修改为所述CKG与第二 Chunk的对应关系。
[0051]本发明实施例,当存储设备发生局部故障时,确定出发生故障的第一 CK,将所述第一 CK的空间属性设置为不可访问的状态,因此所述第一 CK将不再被继续访问,损坏的区域也不会扩大,当查找到空闲的第二 CK时,可以将第一 CK中存储的数据恢复到第二 CK中,保证了数据可靠性,另外,由于第一 CK损坏的区域不会扩大,只需要将第一 CK中存储的数据恢复到第二 CK,提高了数据恢复的效率。
【专利附图】
【附图说明】
[0052]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0053]图1为本发明实施例提供的一种数据恢复方法的应用网络架构示意图;
[0054]图2为本发明实施例提供的一种数据恢复方法的流程图;
[0055]图3A为本发明实施例提供的又一种数据恢复方法的流程图;
[0056]图3B为本发明实施例提供的一种读数据方法的流程图;
[0057]图3C为本发明实施例提供的一种写数据方法的流程图;
[0058]图4为本发明实施例提供的一种数据恢复方法中查找发生故障的数据块的示意图;
[0059]图5为本发明实施例提供的一种存储设备的结构示意图;
[0060]图6为本发明实施例提供的一种存储系统的结构示意图;
[0061]图7为本发明实施例提供的又一种存储设备的结构示意图。
【具体实施方式】
[0062]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0063]本发明实施例提供的数据恢复方法可以在存储系统上实现。图1为本发明实施例提供的一种数据恢复方法的系统架构示意图,如图1所示,该存储系统包括主机、连接设备和存储设备。
[0064]主机可以包括当前技术已知的任何计算设备,如服务器、台式计算机等等。在主机内部,安装有操作系统以及其他应用程序。
[0065]连接设备可以包括当前技术已知的存储设备和主机之间的任何接口,如光纤交换机,或者其他现有的交换机。
[0066]存储设备可以包括当前技术已知的存储设备,如独立磁盘冗余阵列(RedundantArrays of Independent Disks, RAID)、磁盘族(Just a Bunch Of Disks, JBOD)、直接存取存储器(Direct Access Storage Device, DASD)的一个或多个互连的磁盘驱动器,诸如磁带库、一个或多个存储单元的磁带存储设备。
[0067]所述存储设备包含控制器和多个磁盘,每个磁盘被划分为细粒度的尺寸相同的数据块(Chunk,以下简称CK),然后在多个CK之间实现RAID,而由多个CK按照指定RAID类型组成的逻辑空间就是一个数据块组(Chunk Group,以下简称CKG)。一个CKG所包含的各个CK必须属于不同磁盘。
[0068]控制器相当于所述存储设备的处理器,安装有操作系统和其他软件程序,不同的软件程序可以视作一个处理模块,具有不同的功能。例如,数据管理模块用于处理IO请求,或者对磁盘中的数据进行其他处理;空间管理模块用于修改存储设备中保存的元数据等
坐寸O
[0069]如图2所示,本发明实施例提供的一种数据恢复方法,本方法的执行主体可以是存储设备的控制器。[0070]S202:确定所述存储设备的磁盘中发生故障的第一 CK ;
[0071]当所述存储设备执行数据访问请求收到指示所述存储设备的磁盘发生局部故障的错误码时,可以通过数据访问请求中的访问地址和数据长度(Length),在所述存储设备保存的元数据中进行查询并经过计算,确定发生故障的第一CK。其中,访问地址包括逻辑单元号(Logic Unit Number,以下简称为LUN)的标识(例如,ID号)以及逻辑块地址(LogicBlock Address,以下简称为LBA)。这里的访问LUN ID是指主机LUN的ID。元数据为描述数据的数据,主要是描述数据属性的信息,用来支持如指示存储位置、历史数据、资源查找、文件纪录等功能。元数据可以保存在所述存储设备的任意磁盘上,也可以保存在所述存储设备的专门用于存储元数据的磁盘上。
[0072]关于如何确定所述存储设备中发生故障的第一CK,将在图3A和图4所示的实施例中进行详细描述。
[0073]S203:将所述第一 CK的空间属性设置为不能被访问的状态。
[0074]元数据中保存有CK的各种属性信息,例如空间属性、时间属性、用户权限属性等等。具体的,控制器中的空间管理模块可以将所述第一CK的空间属性设置为不能被访问的状态,例如将其空间属性修改为disable。需要说明的是,disable为本发明实施例中对CK的空间属性新增的状态。一旦所述第一 CK的空间属性设置为不能被访问的状态,所述第一CK中存储的数据将不能被直接访问,例如,不能被直接读取或修改,同样的,也不能将其他数据写入所述第一 CK中。在本发明中,不能被访问的状态,也可以称为不可访问或不能访问的状态。
[0075]在现有技术中,当CK发生故障时,在该CK中存储的数据恢复出来之前,该CK还会继续被访问,由此产生的物理反应会造成发生故障的区域扩大,最终可能导致该CK所在的硬盘全盘故障。而本发明实施例中,将所述第一 CK的空间属性设置为不能被访问的状态,使得第一 CK不再被继续访问,因此可以防止发生故障的区域扩大。
[0076]S204:在所述存储设备的存储空间中查找空闲的第二 CK ;
[0077]具体的,可以利用选盘算法在所述存储设备的存储空间中进行查找。存储设备的存储空间是指存储设备中的所有磁盘的存储空间。举例来说,在本发明实施例中,可以在所述存储设备的热备空间中进行查找。热备空间是各个磁盘中预留的用于数据恢复的存储空间。查找的第二CK可以属于存储设备中现有的磁盘中的热备空间,当现有的磁盘中的热备空间不足时,也可以将新插入所述存储设备的磁盘的所有空间作为热备空间。如果是现有的磁盘中的热备空间,须满足所述第二 CK所属的磁盘不同于所述CKG包含的未发生故障的CK所属的磁盘。其目的是保证一个CKG所包含的各个CK分别属于不同的磁盘,从而防止一个磁盘发生故障或者掉电时两个CK的数据都丢失的情况。
[0078]需要说明的是,所述查找到的第二 CK应该是空闲的,并且其空间属性没有被设置为不能被访问的状态。因此在查找第二 CK时,需要检查所述第二 CK的空间属性是否被设置为不能被访问的状态。另外,本发明实施例中的第二 CK是空闲的是指所述第二 CK中没有存储数据。
[0079]可以理解的是,当第一 CK的空间属性设置为不能被访问的状态之后,第一 CK中存储的数据不能被访问,那么第一 CK也不能作为所述CKG的一部分,提供数据冗余的功能,因此第一 CK所属磁盘的热备空间也可以提供第二 CK用于恢复第一 CK中的数据,由此仍然可以保证所述CKG包含的各个CK分别属于不同的磁盘。
[0080]S205:恢复所述第一 CK中存储的数据。
[0081]由上面的描述可知,在所述存储设备中,多个CK之间实现RAID,而由多个CK按照指定RAID类型组成的逻辑空间就是一个CKG。在本发明一个较优的实施例中,所述RAID类型可以是RAID5或者RAID6,当然并不限于此。以RAID5为例,要实现RAID5技术至少需要三个CK,将数据和相对应的奇偶校验信息存储到组成RAID5的各个CK上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个CK存储的数据发生损坏后,可以利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。因此,可以利用该CKG中未发生故障的CK中存储数据恢复出所述第一 CK中存储的数据。如果是采用RAID6技术则至少需要四个CK。
[0082]S206:将所述恢复出的数据写入所述第二 CK中。
[0083]本发明实施例,当存储设备发生局部故障时,确定出发生故障的第一 CK,将所述第一 CK的空间属性设置为不可访问的状态,因此所述第一 CK将不再被继续访问,损坏的区域也不会扩大,当查找到空闲的第二 CK,并且第二 CK的空间属性没有被设置为不可访问的状态时,可以将第一 CK中存储的数据恢复到第二 CK中,保证了数据可靠性。另外,由于第一CK损坏的区域不会扩大,只需要将第一 CK中存储的数据恢复到第二 CK,提高了数据恢复的效率。
[0084]下面将结合图3A对上述实施例进行详细说明。
[0085]S301:接收主机发送的数据访问请求。
[0086]这里的数据访问请求可以是写数据请求,也可以是读数据请求,也可以是数据修改请求,当所述数据访问请求是写数据请求或数据修改请求时,该请求包括待写入数据、访问地址和数据长度;当所述数据访问请求是读数据请求时,该请求包括访问地址和数据长度。这里的访问地址是指LUN ID和LBA。
[0087]S302:执行所述数据访问请求。
[0088]存储设备接收到主机发送的数据访问请求之后,将执行该数据访问请求,具体的,当所述数据访问请求是写数据请求或数据修改请求时,根据访问地址和数据长度将待写入数据写入LBA对应的存储空间中;当所述数据访问请求是读数据请求时,根据访问地址和数据长度从LBA对应的存储空间中读取数据。
[0089]S303:接收指示所述存储设备的磁盘发生局部故障的错误码。
[0090]所述存储设备包含控制器和多个磁盘,局部故障是指存储设备中的某个磁盘因为碰撞、磁头摩损等原因导致磁盘盘面出现较小面积的物理性损坏,譬如划伤、掉磁等,导致产生该受损区域所包含的数据不可修复。
[0091]具体的,判断所述存储设备中的磁盘是否发生局部故障,可以通过执行数据访问请求时是否接收到指示局部故障的错误码来确定。当控制器发送数据访问请求给磁盘时,如果访问成功,磁盘将发送给控制器访问成功的响应,如果访问失败,并且访问失败是由于磁盘发生局部故障造成的,将发送指示磁盘发生局部故障的错误码给控制器。
[0092]S304:根据所述访问地址和数据长度,在所述存储设备中保存的所述访问地址和CKG的对应关系中进行查询,并根据所述访问地址和数据长度进行计算,获得发生故障的CKG的信息。[0093]具体的查询过程请参考图4:
[0094]主机发送给存储设备的数据访问请求中包含LUN ID,这里的LUN ID是指主机LUN的ID,主机LUN是存储设备映射给主机的一段逻辑空间,例如主机的C盘或D盘,一旦LUNID确定,那么主机LUN也就确定了。
[0095]通常情况下,主机LUN和设备逻辑单元(Device LUN)是一一对应的关系,因此一旦主机LUN确定,也就唯一确定了 Device LUN。
[0096]而Device LUN是由多个逻辑卷(Logic Volume,LV)组成(图4中以3个LV为例),LV是存储设备上位于Device LUN下层的一段逻辑空间。在本发明实施例中,可以根据所述访问地址和Length在Device LUN与LV的对应关系中查询并计算,获得LV的ID、LV的LBA和LV的Length,由此确定出发生故障的LV。Extent (可以简写为Ext)是数据分层迁移单元,也称逻辑空间分配单元,一个LV的逻辑空间来自于多个Extent,可以根据LV的ID、LV的LBA和LV的Length在LV与Extent的对应关系中查询并计算,获得Extent的ID、Extent的LBA和Extent的Length,由此确定出发生故障的Extent。
[0097]一个Extent属于一个CKG,但它们之间并非--对应的关系,一个Extent可以是
一个CKG的一部分,也就是说,一个CKG可以划分为多个Extent。在本发明实施例中,可以根据Extent的ID、Extent的LBA和Extent的Length在Extent和CKG的对应关系中查询并计算,获得发生故障 的CKG的信息,包括CKG的ID、CKG的LBA和CKG的Length,由此确定出发生故障的CKG。
[0098]S305:根据CKG的ID、CKG的LBA和CKG的Length,在所述CKG与CK的对应关系中进行查询并计算,获得所述CKG中发生故障的第一 CK。
[0099]由图4可知,根据CKG ID、CKG的LBA和CKG的Length,可以在CKG与CK的对应关系中查询并计算,获得发生故障的CK的ID。
[0100]S306:将所述第一 CK的空间属性设置为不能被访问的状态。
[0101]具体的设置方式,请参考图2所示的实施例。
[0102]需要说明的是,当所述第一 CK的空间属性设置为不能被访问的状态,所述第一 CK中存储的数据虽然不能直接被访问,但仍然可以以其他方式读取。
[0103]例如,存储设备收到主机发送的读数据请求后,如果所述读取请求所要访问的存储区域正好是所述第一 CK所包含的区域,则查询元数据中所述第一 CK的信息,发现所述第一 CK的空间属性被设置为不可访问的状态,因此不能直接从所述第一 CK中获取数据。此时,可以查询所述第一 CK所在的CKG,利用CKG中未发生故障的CK中存储的数据恢复该数据,并发送给主机。
[0104]S307:在所述存储设备的存储空间中查找空闲的第二 CK,所述第二 CK的空间属性没有被设置为不能被访问的状态。
[0105]第二 CK所属的磁盘不同于CKG中未发生故障的磁盘。具体的查找方式与步骤204类似,这里不再赘述。
[0106]步骤307和306没有先后顺序的区别。
[0107]S308:在所述存储设备中保存的CKG与CK的对应关系中查找所述第一 CK所在的CKG。
[0108]这里的查找方式可以是根据第一 CK的标识在CKG和CK的对应关系中进行查找,也可以是在步骤304中的元数据中进行回溯。
[0109]CKG和CK的对应关系可以如下表所示:
【权利要求】
1.一种数据恢复方法,应用于存储设备中,所述存储设备包含多个磁盘,每个磁盘的存储空间被划分为多个数据块Chunk,其特征在于,所述方法包括: 确定所述存储设备的磁盘中发生故障的第一 Chunk ; 将所述第一 Chunk的空间属性设置为不能被访问的状态; 在所述存储设备的存储空间中查找空闲的第二 Chunk,所述第二 Chunk的空间属性没有被设置为不能被访问的状态; 恢复所述第一 Chunk中存储的数据; 将所述恢复出的数据写入所述第二 Chunk中。
2.根据权利要求1所述的方法,其特征在于,还包括: 接收主机发送的读数据请求,所述读数据请求包括读取地址和数据长度; 根据所述读取地址和数据长度,确定待读取的Chunk是所述第一 Chunk ; 确定所述第一 Chunk的空间属性被设置为不能被访问的状态; 恢复所述第一 Chunk中存储的数据; 将所述恢复出的数据发送给所述主机。
3.根据权利要求1所述的方法,其特征在于,还包括: 接收主机发送的写数据请求`,所述写数据请求包括待写入数据、写入地址和数据长度; 根据所述写入地址和所述数据长度,确定待写入的Chunk是所述第一 Chunk ; 确定所述第一 Chunk的空间属性被设置为不能被访问的状态; 将所述待写入数据写入所述第一 Chunk所在的数据块组CKG中未发生故障的Chunk中。
4.根据权利要求1所述的方法,其特征在于,在确定所述存储设备的磁盘中发生故障的第一 Chunk之前,还包括: 接收主机发送的数据访问请求,所述数据访问请求包括读数据请求或写数据请求或数据修改请求; 执行所述数据访问请求; 接收所述数据访问请求执行错误的响应请求,所述响应请求包括错误码,所述错误码用于指示所述存储设备的磁盘发生局部故障。
5.根据权利要求4所述的方法,其特征在于,所述数据访问请求包括访问地址和数据长度; 所述确定所述存储设备的磁盘中发生故障的第一 Chunk包括: 根据所述访问地址和数据长度,在所述存储设备保存的所述访问地址与数据块组CKG的对应关系中进行查询和计算,获得发生故障的CKG的信息; 根据所述CKG的信息,在所述存储设备保存的所述CKG与chunk的对应关系中进行查询并计算,获得所述CKG中发生故障的第一 Chunk。
6.根据权利要求1-5任一所述的方法,其特征在于,所述方法还包括:将所述CKG与所述第一 Chunk的对应关系修改为所述CKG与第二 Chunk的对应关系。
7.一种存储设备,包括多个磁盘和控制器,其中每个磁盘的存储空间被划分为多个数据块Chunk,其特征在于,所述控制器包括:故障确定模块,用于确定所述存储设备的磁盘中发生故障的第一 Chunk ; 空间管理模块,用于将所述第一 Chunk的空间属性设置为不能被访问的状态; 数据管理模块,用于在所述存储设备的存储空间中查找空闲的第二 Chunk,所述第二Chunk的空间属性没有被设置为不能被访问的状态;恢复所述第一 Chunk中存储的数据;将所述恢复出的数据写入所述第二 Chunk中。
8.根据权利要求7所述的存储设备,其特征在于, 所述数据管理模块,还用于接收主机发送的读数据请求,所述读数据请求包括读取地址和数据长度;根据所述读取地址和数据长度,确定待读取的Chunk是所述第一 Chunk,并且所述第一 Chunk的空间属性被设置为不能被访问的状态;恢复所述第一 Chunk中存储的数据;将所述恢复出的数据发送给所述主机。
9.根据权利要求7所述的存储设备,其特征在于, 所述数据管理模块,还用于接收主机发送的写数据请求,所述写数据请求包括待写入数据、写入地址和数据长度;根据所述写入地址和所述数据长度,确定待写入的Chunk是所述第一 Chunk,并且所述第一 Chunk的空间属性被设置为不能被访问的状态;将所述待写入数据写入所述第一 Chunk所在的数据块组CKG中未发生故障的Chunk中。
10.根据权利要求7所述的存储设备,其特征在于,所述数据管理模块,还用于接收主机发送的数据访问请求,所述数据访问请求包括读数据请求或写数据请求;执行所述数据访问请求;接收所述数据访问请求执行错误的响应请求,所述响应请求包括错误码,所述错误码用于指示所述存储设备的磁盘发生局部故障。
11.根据权利要求10所述的存储设备,其特征在于,所述数据访问请求包括访问地址和数据长度; 所述故障确定模块具体用于,根据所述访问地址和数据长度,在所述存储设备保存的所述访问地址与数据块组CKG的对应关系中进行查询,并根据所述访问地址和所述数据长度进行计算,获得发生故障的CKG的信息,所述CKG包含至少三个Chunk,每个Chunk属于不同的磁盘;根据所述CKG的信息,在所述存储设备中保存的所述CKG与chunk的对应关系中进行查询并计算,获得所述CKG中发生故障的第一 Chunk。
12.根据权利要求11所述的存储设备,其特征在于, 所述空间管理模块,还用于将所述CKG与所述第一 Chunk的对应关系修改为所述CKG与第二 Chunk的对应关系。
13.一种存储系统,其特征在于,包括权利要求7-12任一权利要求所述的存储设备和主机; 所述主机,用于向所述存储设备发送数据访问请求,所述数据访问请求包括读数据请求或写数据请求或数据修改请求。
14.一种存储设备,其特征在于,包括:处理器、存储器和通信总线; 其中,所述处理器和所述存储器通过所述通信总线进行通信; 所述存储器用于保存程序; 所述处理器用于执行所述程序,以实现: 确定所述存储设备的磁盘中发生故障的第一 Chunk ;将所述第一 Chunk的空间属性设置为不能被访问的状态;在所述存储设备的存储空间中查找空闲的第二 Chunk,所述第二Chunk的空间属性没有被设置为不能被访问的状态;恢复所述第一 Chunk中存储的数据;将所述恢复出的数据写入所述第二 Chunk中。
15.根据权利要求14所述的存储设备,其特征在于, 所述处理器,还用于接收主机发送的读数据请求,所述读数据请求包括读取地址和数据长度;根据所述读取地址和数据长度,确定待读取的Chunk是所述第一 Chunk ;确定所述第一 Chunk的空间属性被设置为不能被访问的状态;恢复所述第一 Chunk中存储的数据;将所述恢复出的数据发送给所述主机。
16.根据权利要求14所述的存储设备,其特征在于, 所述处理器,还用于接收主机发送的写数据请求,所述写数据请求包括待写入数据、写入地址和数据长度;根据所述写入地址和所述数据长度,确定待写入的Chunk是所述第一Chunk ;确定所述第一 Chunk的空间属性被设置为不能被访问的状态;将所述待写入数据写入所述第一 Chunk所在的数据块组CKG中未发生故障的Chunk中。
17.根据权利要求14所述的存储设备,其特征在于, 所述处理器,还用于接收主机发送的数据访问请求,所述数据访问请求包括读数据请求或写数据请求或数据修改请求;执行所述数据访问请求;接收所述数据访问请求执行错误的响应请求,所述响应请求包括错误码,所述错误码用于指示所述存储设备的磁盘发生局部故障。
18.根据权利要求17所述的存储设备,其特征在于,所述数据访问请求包括访问地址和数据长度; 所述处理器,具体用于根据所述访问地址和数据长度,在所述存储设备保存的所述访问地址与数据块组CKG的对应关系中进行查询和计算,获得发生故障的CKG的信息;根据所述CKG的信息,在所述存储设备中保存的所述CKG与chunk的对应关系中进行查询并计算,获得所述CKG中发生故障的第一Chunk。
19.根据权利要求14-18任一所述的存储设备,其特征在于,所述处理器,还用于将所述CKG与所述第一 Chunk的对应关系修改为所述CKG与第二 Chunk的对应关系。
【文档编号】G06F11/14GK103534688SQ201380000749
【公开日】2014年1月22日 申请日期:2013年5月29日 优先权日:2013年5月29日
【发明者】雷延钊 申请人:华为技术有限公司