CN103631535B - 一种实现存储池内空间分配的方法及装置 - Google Patents

一种实现存储池内空间分配的方法及装置 Download PDF

Info

Publication number
CN103631535B
CN103631535B CN201310589453.8A CN201310589453A CN103631535B CN 103631535 B CN103631535 B CN 103631535B CN 201310589453 A CN201310589453 A CN 201310589453A CN 103631535 B CN103631535 B CN 103631535B
Authority
CN
China
Prior art keywords
ckg
disk
attribute
acquiescence
raid
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
CN201310589453.8A
Other languages
English (en)
Other versions
CN103631535A (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 CN201310589453.8A priority Critical patent/CN103631535B/zh
Publication of CN103631535A publication Critical patent/CN103631535A/zh
Application granted granted Critical
Publication of CN103631535B publication Critical patent/CN103631535B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种实现存储池内空间分配的方法及装置,属于电子数据存储领域。所述方法包括:检测到存储池中出现故障盘;确定需分配的连续空间组CKG的默认的磁盘阵列RAID属性;判断所述存储池中的可用盘是否足够按照所述默认的RAID属性分配所述CKG;若所述可用盘无法按照所述默认的RAID属性分配所述CKG,则在所述可用盘中选择多个连续空间CK组成第一CKG,所述第一CKG的RAID属性与所述默认的RAID属性不同。本发明在存储池中出现故障盘,且需要分配CKG时,即使存储池中正常可用的硬盘较少、不足以按照需分配的CKG的默认RAID属性分配空间,通过改变所述默认的RAID属性,在可用盘中选择多个CK组成与需分配的CKG的默认的RAID属性不同的第一CKG,实现空间分配。

Description

一种实现存储池内空间分配的方法及装置
技术领域
本发明涉及电子数据存储领域,特别涉及一种实现存储池内空间分配的方法及装置。
背景技术
存储池中出现硬盘故障时,需要通过数据重构的方法把故障盘中的数据恢复出来保存到正常可用的硬盘上,或者需要将新的业务数据写入正常可用的硬盘上,因此需要一种有效的实现存储池内空间分配的方法,以确保数据重构及新的业务数据写入的成功。
现有技术出现故障盘后,实现存储池内空间分配的方法是:在进行数据重构时,将故障盘上的数据以CK(Chunk,硬盘上的一段连续的空间)为粒度,从其它的硬盘上寻找正常可用的CK即热备CK,并组成新的CKG(Chunk Group,多个CK组成的组,用来提供保存业务数据的空间),然后把数据从故障CKG恢复出来保存到新的CKG中。该新的CKG的RAID(Redundant Arrays ofInexpensive Disks,磁盘阵列)属性与故障盘对应的故障CKG的RAID属性相同。为了保证可靠性,该热备CK所在的硬盘和故障CKG原来的CK所在的硬盘不同;当选不到热备CK时,则从故障CKG原来的成员盘上选择可用的CK。在为新的业务分配空间时,则按照新的业务数据请求分配的CKG的属性为新的业务数据分配新的CKG,当正常可用的硬盘数不足以构成新的CKG时,不够的CK就会从故障盘上的可用的CK中选择,构成新的CKG。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
当存储空间出现故障盘,需要对存储池中故障CKG的数据重构或在存储池中写入新的业务数据时,如果存储池中正常可用的硬盘较少,则可能无法在存储池中为重构的数据或新的业务数据成功分配空间,导致数据重构或新的业务数据的写入的失败;如果从故障CKG原来的成员盘上选择可用的CK或从故障盘上选择可用的CK则会导致新的CKG性能不稳定,降低数据的可靠性。
发明内容
为了解决现有技术的问题,本发明实施例提供了一种实现存储池内空间分配的方法及装置。所述技术方案如下:
第一方面,提供了一种实现存储池内空间分配的方法,所述方法包括:检测到存储池中出现故障盘;确定需分配的连续空间组CKG的默认的磁盘阵列RAID属性;判断所述存储池中的可用盘是否足够按照所述默认的RAID属性分配所述CKG;若所述可用盘无法按照所述默认的RAID属性分配所述CKG,则在所述可用盘中选择多个连续空间CK组成第一CKG,所述第一CKG的RAID属性与所述默认的RAID属性不同。
结合第一方面,在第一方面的第一种可能的实现方式中,所述多个CK中每个CK所在的硬盘均不相同。
结合第一方面或第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述确定需分配的连续空间组CKG的默认的磁盘阵列RAID属性,包括:确定所述故障盘对应的故障连续空间组CKG;确定所述故障CKG的RAID属性为所述需分配的CKG的默认的RAID属性。
结合第一方面的第二种可能的实现方式,在第一方面的第三种可能的实现方式中,所述在所述可用盘中选择多个连续空间CK组成第一CKG,包括:判断所述存储池中除所述故障盘之外的可用盘的可用空间大小是否不低于所述故障CKG中的数据占用的空间大小;如果是,则在所述可用盘的可用空间中随机选择多个CK组成所述第一CKG;否则,将所述故障CKG中的数据读出并写入内存或指定硬盘中,在所述可用盘中选择所述故障CKG的多个成员CK组成所述第一CKG。
结合第一方面的第三种可能的实现方式,在第一方面的第四种可能的实现方式中,所述在所述可用盘的可用空间中随机选择多个CK组成第一CKG之后,所述方法还包括:将所述故障CKG中的数据写入所述第一CKG中。
结合第一方面的第三种可能的实现方式,在第一方面的第五种可能的实现方式中,所述在所述可用盘中选择所述故障CKG的多个成员CK组成所述第一CKG之后,所述方法还包括:将所述故障CKG中的数据从所述内存或指定硬盘内读出,然后写入所述第一CKG中。
结合第一方面或第一方面的第一种可能的实现方式,在第一方面的第六种可能的实现方式中,,所述确定需分配的连续空间组CKG的默认的磁盘阵列RAID属性,包括:
如果在检测到所述故障盘之前接收到新的业务数据,则确定所述新的业务数据请求分配的CKG的RAID属性为所述需分配的CKG的默认的RAID属性。
结合第一方面的第六种可能的实现方式,在第一方面的第七种可能的实现方式中,所述在所述可用盘中选择多个连续空间CK组成第一CKG,包括:在所述可用盘的可用空间中随机选择多个CK组成所述第一CKG。
结合第一方面的第七种可能的实现方式,在第一方面的第八种可能的实现方式中,在所述可用盘中选择多个连续空间CK组成第一CKG之后,所述方法还包括:将所述新的业务数据写入所述第一CKG中。
第二方面,提供了一种实现存储池内空间分配的装置,所述装置包括:故障盘检测单元,用于检测存储池中是否出现故障盘;属性确定单元,用于在所述故障盘检测单元检测到所述存储池中出现故障盘时,确定需分配的连续空间组CKG的默认的磁盘阵列RAID属性;可用盘确定单元,用于在所述属性确定单元确定所述默认的RAID属性后,判断所述存储池中的可用盘是否足够按照所述默认的RAID属性分配所述CKG;连续空间组CKG重构单元,用于在所述可用盘确定单元判断所述可用盘无法按照所述默认的RAID属性分配所述CKG之后,在所述可用盘中选择多个连续空间CK组成第一CKG,所述第一CKG的RAID属性与所述默认的RAID属性不同。
结合第二方面,在第二方面的第一种可能的实现方式中,
所述CKG重构单元,还用于从每个所述可用盘中选择一个CK组成所述第一CKG,所述第一CKG的RAID属性与所述默认的RAID属性不同。
结合第二方面或第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述属性确定单元包括:故障CKG确定模块,用于在所述故障盘检测单元检测到所述存储池中出现故障盘时,确定所述故障盘对应的故障连续空间组CKG;RAID属性确定模块,用于在所述故障CKG确定模块确定故障CKG之后,确定所述故障CKG的RAID属性为所述需分配的CKG的默认的RAID属性。
结合第二方面的第二种可能的实现方式,在第二方面的第三种可能的实现方式中,所述可用盘确定单元包括:可用空间检测模块,用于在所述RAID属性确定模块确定所述需分配的CKG的默认的RAID属性之后,判断所述存储池中的可用盘中可用空间的大小是否不低于所述故障CKG中的数据占用空间的大小;所述CKG重构单元还包括:转存模块,用于在可用空间检测模块判断所述存储池中的可用空间的大小低于所述故障CKG中的数据占用空间的大小时,将所述故障CKG中的数据读出并写入内存或指定硬盘中;CK选择模块,还用于在所述转存模块将所述故障CKG中的数据读出并写入内存或指定硬盘中之后,在所述可用盘中选择所述故障CKG的多个成员CK组成所述第一CKG;或者,还用于在可用空间检测模块判断所述存储池中的可用空间的大小不低于所述故障CKG中的数据占用空间的大小时,从所述可用盘的可用空间中随机选择多个CK组成所述第一CKG;所述第一CKG的RAID属性与所述默认的RAID属性不同。
结合第二方面的第三种可能的实现方式,在第二方面的第四种可能的实现方式中,所述装置还包括:写入单元,用于在所述CK选择单元在所述可用盘的可用空间中随机选择多个CK组成第一CKG之后,将故障CKG中的数据写入所述第一CKG中。
结合第二方面的第三种可能的实现方式,在第二方面的第五种可能的实现方式中,所述装置还包括:读取单元,用于在所述CK选择单元在所述可用盘中选择所述故障CKG的多个成员CK组成所述第一CKG之后,将所述故障CKG中的数据从所述内存或指定硬盘内读出;所述写入单元,还用于将所述读取单元读取的数据写入所述第一CKG中。
结合第二方面或第二方面的第一种可能的实现方式,在第二方面的第六种可能的实现方式中,所述装置还包括:接收单元,用于接收新的业务数据;所述属性确定单元,还用于当所述接收单元在所述故障盘检测单元在检测到所述故障盘之前接收到新的业务数据时,确定所述新的业务数据请求分配的CKG的RAID属性为所述需分配的CKG的默认的RAID属性。
结合第二方面的第六种可能的实现方式,在第二方面的第七种可能的实现方式中,所述属性确定单元,还用于确定所述新的业务数据请求分配的CKG的RAID属性为默认的RAID属性。
结合第二方面的第七种可能的实现方式,在第二方面的第八种可能的实现方式中,所述CK选择模块,还用于在所述可用盘中的可用空间中选择多个CK组成所述第一CKG,所述第一CKG的RAID属性与所述默认的RAID属性不同。
结合第二方面的第八种可能的实现方式,在第二方面的第九种可能的实现方式中,所述装置还包括:写入单元,用于在所述CK选择模块选择多个CK组成所述第一CKG之后,将所述接收单元接收的新的业务数据写入所述第一CKG中。
本发明实施例提供的技术方案带来的有益效果是:
当存储池中出现故障盘,需要数据重构或者有新业务需要空间时,即使存储池中正常可用的硬盘较少、不足以按照正常情况以默认的RAID属性分配CKG,通过改变所述默认的RAID属性,在可用盘中选择多个CK组成与需分配的CKG的默认的RAID属性不同的第一CKG,也能够实现空间分配,从而保证存储池中数据重构成功及新的业务数据的成功写入。并且,由于新的CKG的成员CK均是从可用盘中选出,因此新的CKG性能稳定,可靠性得到了提高。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例中一个存储池的结构示意图;
图2是本发明实施例一提供的实现存储池内空间分配的方法流程图;
图3是本发明实施例二提供的实现存储池内空间分配的方法流程图;
图4是本发明实施例二中存储池中有足够可用空间时为故障CKG的数据重构分配空间的示意图;
图5是本发明实施例二中存储池中无足够可用空间时为故障CKG的数据重构分配空间的示意图;
图6是本发明实施例三提供的实现存储池内空间分配的方法流程图;
图7是本发明实施例三中在存储中为新的业务数据分配空间的示意图;
图8是本发明实施例四提供的实现存储池内空间分配的装置结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
本发明实施例涉及CKG,CKG由多个CK组成,CK位于硬盘上。一个CKG中的各个CK可以位于不同的硬盘上。其中,构成CKG的各个CK可以称为CKG的成员CK,为CKG贡献了CK的硬盘称为CKG的成员盘。
CKG具有RAID属性,该RAID属性指的是RAID技术的等级。RAID技术分为几种不同的等级,分别可以提供不同的速度、安全性和性价比。根据实际情况选择适当的RAID级别可以满足用户对存储系统可用性、性能和容量的要求。常用的RAID级别有以下几种:NRAID,JBOD,RAID0,RAID1,RAID0+1(即RAID10),RAID3,RAID5等。CKG的RAID属性不同,需要的成员盘的数量也不同。
一个存储池中可以存在多个不同RAID属性的CKG。请参阅图1,在一个存储池中有4个硬盘,分别是DISK0、DISK1、DISK2和DISK3。存储池中一个RAID10属性的CKG0′(图1中虚线所示)包括4个成员盘:DISK0、DISK1、DISK2、DISK3;该CKG0′的成员CK包括:CK00、CK01、CK02和CK03。存储池一个具有RAID5属性的CKG1′(如图1中实线所示)包括3个成员盘:DISK0、DISK1和DISK2;该CKG1′的成员CK包括:CK10、CK11和CK12。
具体的,当存储池中出现故障盘之后,将故障盘之外的可使用的硬盘称为可用盘;将可用盘上尚未使用的空间称为可用空间;将与故障盘对应的CKG称为故障CKG。
实施例一
本实施例提供一种实现存储池内空间分配的方法,请参阅图2,方法流程包括:
201、检测到存储池中出现故障盘;
202、确定需分配的连续空间组CKG的默认的磁盘阵列RAID属性;
203、判断所述存储池中的可用盘是否足够按照所述默认的RAID属性分配所述CKG;
204、若所述可用盘无法按照所述默认的RAID属性分配所述CKG,则在所述可用盘中选择多个连续空间CK组成第一CKG,所述第一CKG的RAID属性与所述默认的RAID属性不同。
进一步的,在所述可用盘中分配与所述默认的RAID属性不同的第一CKG,包括:
在所述可用盘中选择多个连续空间组成所述第一CKG。
进一步的,所述多个CK中每个CK所在的硬盘均不相同。
本实施例中,在第一种场景下,所述确定需分配的连续空间组CKG的默认的磁盘阵列RAID属性,包括:
确定所述故障盘对应的故障连续空间组CKG;
确定所述故障CKG的RAID属性为所述需分配的CKG的默认的RAID属性。
进一步的,在所述可用盘中选择多个连续空间组成第一CKG,包括:
判断所述存储池中除所述故障盘之外的可用盘的可用空间大小是否不低于所述故障CKG中的数据占用的空间大小;
如果是,则在所述可用盘的可用空间中随机选择多个CK组成所述第一CKG;
否则,将所述故障CKG中的数据读出并写入内存或指定硬盘中,在所述可用盘中选择所述故障CKG的多个成员CK组成所述第一CKG。
进一步的,所述在所述可用盘的可用空间中随机选择多个CK组成第一CKG之后,所述方法还包括:
将所述故障CKG中的数据写入所述第一CKG中。
进一步的,所述在所述可用盘中选择所述故障CKG的多个成员CK组成所述第一CKG之后,所述方法还包括:
将所述故障CKG中的数据从所述内存或指定硬盘内读出,然后写入所述第一CKG中。
本实施例中,在第二种场景下,在所述检测到存储池中出现故障盘之前,所述方法还包括:
如果在检测到所述故障盘之前接收到新的业务数据,则确定所述新的业务数据请求分配的CKG的RAID属性为所述需分配的CKG的默认的RAID属性。
进一步的,所述在所述可用盘中选择多个连续空间组成第一CKG,包括:
在所述可用盘的可用空间中随机选择多个CK组成所述第一CKG。
进一步的,在在所述可用盘中选择多个连续空间CK组成第一CKG,所述方法还包括:
将所述新的业务数据写入所述第一CKG中。
具体的,可用盘是指故障盘之外的可使用的硬盘;可用空间是指可用盘上尚未使用的空间。
本实施例提供的实现存储池内空间分配的方法,当存储池中出现故障盘时,需要数据重构或者有新业务需要空间时,即使存储池中正常可用的硬盘和空间较少、不足以正常情况以默认的默认RAID属性分配CKG,通过改变所述存储池中默认的RAID属性,在可用盘中选择多个CK组成与需分配的CKG的默认的RAID属性不同的第一CKG,也能够实现空间分配,构成新的CKG(即第一CKG),从而保证存储池中数据重构成功及新的业务数据的成功写入。
实施例二
本实施例提供一种实现存储池内空间分配的方法,请参阅图3,方法流程包括:
301、检测到存储池中出现故障盘。
302、确定故障盘对应的故障连续空间组CKG。
303、确定故障CKG的RAID属性为默认的RAID属性。
304、判断所储池中的可用盘是否足够按照默认的RAID属性分配新的CKG。
305、若可用盘无法按照默认的RAID属性分配新的CKG,则判断存储池中除故障盘之外的可用盘的可用空间大小是否不低于所述故障CKG中的数据占用的空间大小;如果是,则执行步骤2041,否则执行步骤2042。
3051、在所述可用盘的可用空间中随机选择多个CK组成与默认CKR的RAID属性不同的第一CKG;
3052、将故障CKG中的数据读出并写入内存或指定硬盘中,在可用盘中选择故障CKG的多个成员CK组成与默认的CKG的RAID属性不同的第一CKG。
306、在可用盘的可用空间中随机选择多个CK组成第一CKG之后,将故障CKG中的数据写入第一CKG中。
307、在可用盘中所述故障CKG的多个成员CK组成所述第一CKG之后,将故障CKG中的数据从所述内存或指定硬盘内读出,然后写入第一CKG中。
具体的,请再次参阅图1,假设本实施例中图1的存储池中DISK3出现故障,成为故障盘。
与故障盘DISK3对应的一个故障CKG0的RAID属性为RAID10。为了将故障CKG0上的数据重构出来,默认需要按照故障CKG0的RAID属性在存储池中为故障CKG0上的数据分配一个RAID10属性的新的CKG。但是,存储池中的可用硬盘不足,不能够按照RAID10属性分配新的CKG,因此根据本实施例提供的方法,在故障盘DISK3之外的硬盘(即可用盘)上选择CK,组成与故障CKG0的RAID属性不同的CKG1(即第一CKG)。
具体的,选择CK时,可以要求每个被选择的CK所在的硬盘各不相同,即每个可用盘仅贡献出一个CK,因此能够解决硬盘压力变大的问题,使所述CK构成的新CKG中数据的读写的性能得到提高。
具体的,在选择CK组成第一CKG时,存在两种可能的情况:
第一种情况,存储池中有足够的可用空间,则在可用盘中随机选择新的CK组成CKG1(即第一CKG)。
如图4所示,DISKi(i=0、1或2)上存在足够的可用空间,但是由于属性为RAID10的CKG需要4个成员盘,其可用盘的数量不足以构成与CKG0的RAID属性相同的新的CKG,若仍然按照CKG0的属性进行数据重构,则会出现数据重构失败的情况。因此,通过新分配DISKi上的CK1i组成成员盘数为3的RAID5属性的CKG1,保证数据重构的成功。此时,CKG1的成员CK包括CK10、CK11及CK12。
需要说明的是,在保证每个被选择的CK所在的硬盘各不相同的前提下,CK的选择可以是随机的,比如,也可以选择CKNi(比如将N取值设定为2)组成3盘RAID5属性的新的CKG;并且,新的CKG的RAID属性也可以是随机的,比如,CKG1的RAID属性也可以为RAID1或RAID3等。
第二种情况,储池中的可用空间不足,在故障CKG中的可用成员盘上选择多个成员CK,构成RAID属性与故障CKG的RAID属性不同的CKG2(即第一CKG)。
如图5所示,4个硬盘上的空间都已用完,此时,可以通过分配DISKi(i=0、1或2)上的CK0i组成成员盘数为3的RAID5属性的CKG2,从而保证数据重构的成功。
CKG0的成员CK包括CK00、CK01、CK02及CK03,由于DISK3出现故障,因此DISK3上的CK03不可用,同时由于4个硬盘上的空间都已用完,因此可以分配CKG0中4,构成RAID5属性的CKG2。此时,CKG2的成员CK包括CK00、CK01、CK02。
具体的,图5中实线椭圆内为CKG2的成员CK;虚线椭圆内为CKG0的成员CK。
需要说明的是,此时选择DISKi上的CK0i,可以使数据重构操作较为简单。而CKG2的RAID属性可以是随机的。由于原有的硬盘空间都已用完,在进行数据重构时,需要在构成CKG2之前,把CKG0中原来的数据读出到内存或者其它的地方,然后在构成新的CKG2之后,再按照新的RAID属性写到CKG2上。
本实施例提供的实现存储池内空间分配的方法,当存储池中出现故障盘时,即使存储池中正常可用的硬盘和空间较少、不足以组成默认RAID属性和成员盘数量的CKG,通过改变所述默认的RAID属性,在可用盘中选择多个CK组成与需分配的CKG的默认的RAID属性不同的第一CKG,也能够实现空间分配,构成新的CKG(即第一CKG),即使可用盘中无足够的可用空间,也可以在故障CKG中的可用成员盘中选择该故障CKG的成员CK组成具有新的RAID属性的第一CKG,然后把原来的数据写到第一CKG上。为数据的重构成功提供了可能。另外,新分配的第一CKG中不再包含故障盘,而且第一CKG中的每个成员CK所在的硬盘均不同,不存在重构后某个硬盘压力过大的情况,因此重构后的CKG的可靠性及该CKG中数据读写的性能均得到了提高。
实施例三
本实施例提供了一种实现存储池内空间分配的方法。请参阅图6,方法流程包括:
601、接收新的业务数据。
602、检测到存储池中出现故障盘。
603、确定新的业务数据请求分配的CKG的RAID属性为所述默认的RAID属性。
604、判断存储池中的可用盘是否足够按照默认的RAID属性分配新的CKG。
605、若可用盘无法按照默认的RAID属性分配新的CKG,则在可用盘中分配与所述默认的RAID属性不同的第一CKG。
606、将新的业务数据写入所述第一CKG中。
具体的,选择CK时,可以要求每个被选择的CK所在的硬盘各不相同,即每个可用盘仅贡献出一个CK,因此能够解决硬盘压力变大的问题,使所述CK构成的新CKG中数据的读写的性能得到提高。
具体的,请再次参阅图1,假设本实施例中图1的存储池中DISK3出现故障,成为故障盘。
当接收到新的业务数据时,默认需要按照新的业务数据请求分配的RAID10属性分配新的CKG,但是存储池中的可用硬盘不足,不能够按照RAID10属性分配新的CKG,因此根据本实施例提供的方法,在故障盘DISK3之外的硬盘(即可用盘)上选择CK,组成与默认的RAID10属性不同的CKG3。
具体的,在故障盘DISK3之外的可用盘DISKi上选择CK组成与存储池中原有的CKG的RAID属性不同的新CKG,并且每个被选择的CK所在的硬盘均不相同。
具体的,请参阅图7,DISK3发生故障时,若仍按照新的业务数据设置的CKG的RAID属性,构成新的CKG,其可用盘的不足,容易导致新的业务数据写入失败。此时,通过新分配DISKi(i=0、1或2)上的CKNi组成成员盘数为3的RAID5属性的CKG3,保证数据重构的成功。例如,可选择CK00、CK01、CK02作为CKG3的成员盘。
具体的,在保证每个被选择的CK所在的硬盘各不相同的前提下,CK的选择可以是随机的,比如,可以选择CK1i,也可以选择CK2i。而新CKG的RAID属性也可以为RAID5、RAID1或RAID3等。
本实施例提供的实现存储池内空间分配的方法,当有新的业务数据需要写入时,若存储池中出现故障盘,即使正常可用的硬盘和空间较少、不足以按照新的业务数据请求分配的RAID属性分配新的CKG时,通过在可用盘中的可用空间中选择新的CK组成与新的业务数据请求分配的RAID属性不同的第一CKG,实现空间的分配,然后再将新的业务数据写入到第一CKG中,也能够保证存储池中数据重构成功。另外,由于第一CKG的成员CK是从可用盘即非故障盘中选出的,因此第一CKG的稳定性较好。并且由于第一CKG的每个成员CK所在的硬盘均不相同,不存在重构后某个硬盘压力过大的情况,因此第一CKG的可靠性及该第一CKG中数据读写的性能均得到了提高。
实施例四
参见图8,本实施例提供了一种实现存储池内空间分配的装置,该装置包括:
故障盘检测单元81,用于检测存储池中是否出现故障盘;
属性确定单元82,用于在所述故障盘检测单元81检测到所述存储池中出现故障盘时,确定需分配的连续空间组CKG的默认的磁盘阵列RAID属性;
可用盘确定单元83,用于在所述属性确定单元82确定所述默认的RAID属性后,判断所述存储池中的可用盘是否足够按照所述默认的RAID属性分配所述CKG;
CKG重构单元84,用于在所述可用盘确定单元83判断所述可用盘无法按照所述默认的RAID属性分配所述CKG之后,在所述可用盘中选择多个连续空间CK组成第一CKG,所述第一CKG的RAID属性与所述默认的RAID属性不同。
进一步的,CKG重构单元84,还还用于从每个所述可用盘中选择一个CK组成所述第一CKG,所述第一CKG的RAID属性与所述默认的RAID属性不同。
在本实施例的第一种场景中,属性确定单元82包括:
故障CKG确定模块,用于在所述故障盘检测单元81检测到所述存储池中出现故障盘时,确定所述故障盘对应的故障连续空间组CKG;
RAID属性确定模块,用于在所述故障CKG确定模块确定故障CKG之后,确定所述故障CKG的RAID属性为所述需分配的CKG的默认的RAID属性。
进一步的,可用盘确定单元83包括:
可用空间检测模块,用于在所述RAID属性确定模块确定所述需分配的CKG的RAID属性之后,判断所述存储池中的可用盘中可用空间的大小是否不低于所述故障CKG中的数据占用空间的大小;
所述CKG重构单元84还包括:
转存模块,用于在可用空间检测模块判断所述存储池中的可用空间的大小低于所述故障CKG中的数据占用空间的大小时,将所述故障CKG中的数据读出并写入内存或指定硬盘中;
CK选择模块,还用于在所述转存模块将所述故障CKG中的数据读出并写入内存或指定硬盘中之后,在所述可用盘中选择所述故障CKG的多个成员CK组成所述第一CKG;或者,还用于在可用空间检测模块判断所述存储池中的可用空间的大小不低于所述故障CKG中的数据占用空间的大小时,从所述可用盘的可用空间中随机选择多个CK组成所述第一CKG;;所述第一CKG的RAID属性与所述默认的RAID属性不同。
进一步的,所述装置还包括:
写入单元,用于在所述CK选择模括在所述可用盘的可用空间中随机选择多个CK组成第一CKG之后,将故障CKG中的数据写入所述第一CKG中。
进一步的,所述装置还包括:
读取单元,用于在所述CK选择模块在所述可用盘中选择所述故障CKG的多个成员CK组成所述第一CKG之后,将所述故障CKG中的数据从所述内存或指定硬盘内读出;
所述写入单元,还用于将所述读取单元读取的数据写入所述第一CKG中。
在本实施例的第二种场景中,所述装置还包括:
接收单元,用于接收新的业务数据;
所述属性确定单元82,还用于当所述接收单元在所述故障盘检测单元在检测到所述故障盘之前接收到新的业务数据时,确定所述新的业务数据请求分配的CKG的RAID属性为所述需分配的CKG的默认的RAID属性。。
进一步的,所述CK选择模块,还用于在所述可用盘的可用空间中选择多个连续空间组成CK所述第一CKG,所述第一CKG的RAID属性与所述默认的RAID属性不同。
进一步的,所述装置还包括:
写入单元,用于在所述CK选择模块选择多个CK组成所述第一CKG之后,将所述接收单元接收的新的业务数据写入所述第一CKG中。
本实施例提供的实现存储池内空间分配的装置,当存储池中出现故障盘,需要为故障CKG中的数据重构分配空间时,即使存储池中正常可用的硬盘和空间较少、不足以组成默认RAID属性和成员盘数量的CKG,通过改变所述默认的RAID属性,在可用盘中选择多个CK组成与需分配的CKG的默认的RAID属性不同的第一CKG,也能够实现空间分配,构成新的CKG(即第一CKG),即使可用盘中无足够的可用空间,也可以在故障CKG中的可用成员盘中选择该故障CKG的成员CK组成具有新的RAID属性的第一CKG,然后把原来的数据写到第一CKG上,为数据的重构成功提供了可能;当有新的业务数据需要写入,需要分配新的空间时,即使正常可用的硬盘和空间较少、不足以按照新的业务数据请求分配的RAID属性分配新的CKG时,通过在可用盘中的可用空间中选择新的CK组成与新的业务数据请求分配的RAID属性不同的第一CKG,实现空间的分配,然后再将新的业务数据写入到第一CKG中,也能够保证存储池中数据重构成功。另外,由于第一CKG的成员CK是从可用盘即非故障盘中选出的,因此第一CKG的稳定性较好。并且由于第一CKG的每个成员CK所在的硬盘均不相同,不存在重构后某个硬盘压力过大的情况,因此第一CKG的可靠性及该第一CKG中数据读写的性能均得到了提高。
需要说明的是,本发明的实施例在存储池中发现故障盘后,在为各种数据分配新的CKG时,如果判断出存储池中的可用盘无法按照所述默认的RAID属性分配新的CKG,则在所述可用盘中选择多个连续空间CK组成与默认的RAID属性不同的第一CKG;如果判断出存储池中的可用盘可以按照所述默认的RAID属性分配新的CKG,则优先按照默认的RAID属性分配新的CKG。
综上所述,本发明实施例提供的实现存储池内空间分配的方法及装置,在存储池中出现故障盘,需要数据重构或者有新业务需要空间时,即使存储池中正常可用的硬盘和空间较少、不足以按照正常情况以默认的RAID属性分配新的CKG,也可以通过改变所述存储池默认的需要分配的CKG的RAID属性构成第一CKG,保证空间分配的成功,从而能够保证存储池中数据重构及新的业务数据写入的成功。另外,由于第一CKG的成员CK是从可用盘即非故障盘中选出的,因此第一CKG的稳定性较好。并且由于第一CKG的每个成员CK所在的硬盘均不相同,因此第一CKG的可靠性及该第一CKG中数据读写的性能均得到了提高。
具体的,上述实施例提供的实现存储池内空间分配的方法及装置,也可应用于其它领域中,比如网络中数据传输中服务器根据自身负荷的大小选择不同的数据加密算法,在负荷比较大时,采用消耗比较小的加密算法。
需要说明的是:上述实施例提供的实现存储池内空间分配的装置在实现存储池内空间分配时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的实现存储池内空间分配的装置与实现存储池内空间分配的方法实施属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (17)

1.一种实现存储池内空间分配的方法,其特征在于,所述方法包括:
检测到存储池中出现故障盘;
确定需分配的连续空间组CKG的默认的磁盘阵列RAID属性,所述RAID属性指的是RAID技术的等级;
判断所述存储池中的可用盘是否足够按照所述默认的RAID属性分配所述CKG;
若所述可用盘无法按照所述默认的RAID属性分配所述CKG,则在所述可用盘中选择多个连续空间CK组成第一CKG,所述第一CKG的RAID属性与所述默认的RAID属性不同,所述多个CK中每个CK所在的硬盘均不相同。
2.根据权利要求1所述的方法,其特征在于,所述确定需分配的连续空间组CKG的默认的磁盘阵列RAID属性,包括:
确定所述故障盘对应的故障连续空间组CKG;
确定所述故障CKG的RAID属性为所述需分配的CKG的默认的RAID属性。
3.根据权利要求2所述的方法,其特征在于,所述在所述可用盘中选择多个连续空间CK组成第一CKG,包括:
判断所述存储池中除所述故障盘之外的可用盘的可用空间大小是否不低于所述故障CKG中的数据占用的空间大小;
如果是,则在所述可用盘的可用空间中随机选择多个CK组成所述第一CKG;
否则,将所述故障CKG中的数据读出并写入内存或指定硬盘中,在所述可用盘中选择所述故障CKG的多个成员CK组成所述第一CKG。
4.根据权利要求3所述的方法,其特征在于,所述在所述可用盘的可用空间中随机选择多个CK组成第一CKG之后,所述方法还包括:
将所述故障CKG中的数据写入所述第一CKG中。
5.根据权利要求3所述的方法,其特征在于,所述在所述可用盘中选择所述故障CKG的多个成员CK组成所述第一CKG之后,所述方法还包括:
将所述故障CKG中的数据从所述内存或指定硬盘内读出,然后写入所述第一CKG中。
6.根据权利要求1所述的方法,其特征在于,所述确定需分配的连续空间组CKG的默认的磁盘阵列RAID属性,包括:
如果在检测到所述故障盘之前接收到新的业务数据,则确定所述新的业务数据请求分配的CKG的RAID属性为所述需分配的CKG的默认的RAID属性。
7.根据权利要求6所述的方法,其特征在于,所述在所述可用盘中选择多个连续空间CK组成第一CKG,包括:
在所述可用盘的可用空间中随机选择多个CK组成所述第一CKG。
8.根据权利要求7所述的方法,其特征在于,在所述可用盘中选择多个连续空间CK组成第一CKG之后,所述方法还包括:
将所述新的业务数据写入所述第一CKG中。
9.一种实现存储池内空间分配的装置,其特征在于,包括:
故障盘检测单元,用于检测存储池中是否出现故障盘;
属性确定单元,用于在所述故障盘检测单元检测到所述存储池中出现故障盘时,确定需分配的连续空间组CKG的默认的磁盘阵列RAID属性,所述RAID属性指的是RAID技术的等级;
可用盘确定单元,用于在所述属性确定单元确定所述默认的RAID属性后,判断所述存储池中的可用盘是否足够按照所述默认的RAID属性分配所述CKG;
连续空间组CKG重构单元,用于在所述可用盘确定单元判断所述可用盘无法按照所述默认的RAID属性分配所述CKG之后,在所述可用盘中选择多个连续空间CK组成第一CKG,所述第一CKG的RAID属性与所述默认的RAID属 性不同,所述多个CK中每个CK所在的硬盘均不相同。
10.根据权利要求9所述的装置,其特征在于,
所述CKG重构单元,还用于从每个所述可用盘中选择一个CK组成所述第一CKG,所述第一CKG的RAID属性与所述默认的RAID属性不同。
11.根据权利要求9或10所述的装置,其特征在于,所述属性确定单元包括:
故障CKG确定模块,用于在所述故障盘检测单元检测到所述存储池中出现故障盘时,确定所述故障盘对应的故障连续空间组CKG;
RAID属性确定模块,用于在所述故障CKG确定模块确定故障CKG之后,确定所述故障CKG的RAID属性为所述需分配的CKG的默认的RAID属性。
12.根据权利要求11所述的装置,其特征在于,
所述可用盘确定单元包括:
可用空间检测模块,用于在所述RAID属性确定模块确定所述需分配的CKG的默认的RAID属性之后,判断所述存储池中的可用盘中可用空间的大小是否不低于所述故障CKG中的数据占用空间的大小;
所述CKG重构单元还包括:
转存模块,用于在可用空间检测模块判断所述存储池中的可用空间的大小低于所述故障CKG中的数据占用空间的大小时,将所述故障CKG中的数据读出并写入内存或指定硬盘中;
CK选择模块,还用于在所述转存模块将所述故障CKG中的数据读出并写入内存或指定硬盘中之后,在所述可用盘中选择所述故障CKG的多个成员CK组成所述第一CKG;或者,还用于在可用空间检测模块判断所述存储池中的可用空间的大小不低于所述故障CKG中的数据占用空间的大小时,从所述可用盘的可用空间中随机选择多个CK组成所述第一CKG;所述第一CKG的RAID属性与所述默认的RAID属性不同。
13.根据权利要求12所述的装置,其特征在于,所述装置还包括:
写入单元,用于在所述CK选择模块在所述可用盘的可用空间中随机选择多个CK组成第一CKG之后,将故障CKG中的数据写入所述第一CKG中。
14.根据权利要求12所述的装置,其特征在于,所述装置还包括:
读取单元,用于在所述CK选择模块在所述可用盘中选择所述故障CKG的多个成员CK组成所述第一CKG之后,将所述故障CKG中的数据从所述内存或指定硬盘内读出;
写入单元,还用于将所述读取单元读取的数据写入所述第一CKG中。
15.根据权利要求9或10所述的装置,其特征在于,所述装置还包括:
接收单元,用于接收新的业务数据;
所述属性确定单元,还用于当所述接收单元在所述故障盘检测单元在检测到所述故障盘之前接收到新的业务数据时,确定所述新的业务数据请求分配的CKG的RAID属性为所述需分配的CKG的默认的RAID属性。
16.如权利要求15所述的装置,其特征在于,所述CKG重构单元还包括:
CK选择模块,还用于在所述可用盘中的可用空间中选择多个CK组成所述第一CKG,所述第一CKG的RAID属性与所述默认的RAID属性不同。
17.如权利要求16所述的装置,其特征在于,所述装置还包括:
写入单元,用于在所述CK选择模块选择多个CK组成所述第一CKG之后,将所述接收单元接收的新的业务数据写入所述第一CKG中。
CN201310589453.8A 2013-11-20 2013-11-20 一种实现存储池内空间分配的方法及装置 Active CN103631535B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310589453.8A CN103631535B (zh) 2013-11-20 2013-11-20 一种实现存储池内空间分配的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310589453.8A CN103631535B (zh) 2013-11-20 2013-11-20 一种实现存储池内空间分配的方法及装置

Publications (2)

Publication Number Publication Date
CN103631535A CN103631535A (zh) 2014-03-12
CN103631535B true CN103631535B (zh) 2016-08-17

Family

ID=50212646

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310589453.8A Active CN103631535B (zh) 2013-11-20 2013-11-20 一种实现存储池内空间分配的方法及装置

Country Status (1)

Country Link
CN (1) CN103631535B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106933496B (zh) * 2015-12-31 2019-10-22 华为技术有限公司 管理raid的方法及装置
CN107562380A (zh) * 2017-08-28 2018-01-09 郑州云海信息技术有限公司 一种raid2.0的数据块分配方法及装置
CN109032521B (zh) * 2018-07-25 2019-09-10 星环信息科技(上海)有限公司 存储卷创建方法、装置、服务器及存储介质
CN109542342B (zh) * 2018-11-09 2022-04-26 锐捷网络股份有限公司 元数据管理与数据重构方法、设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1782979A (zh) * 2004-11-15 2006-06-07 国际商业机器公司 在存储系统中配置卷的方法和系统
CN101095116A (zh) * 2004-11-05 2007-12-26 数据机器人技术公司 允许各种规模存储装置的动态可扩展和可收缩的容错存储系统和方法
JP2010026812A (ja) * 2008-07-18 2010-02-04 Hitachi Computer Peripherals Co Ltd 磁気ディスク装置
CN102265265A (zh) * 2008-10-28 2011-11-30 枢轴3公司 针对raid系统中的多种故障进行保护的方法和系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101095116A (zh) * 2004-11-05 2007-12-26 数据机器人技术公司 允许各种规模存储装置的动态可扩展和可收缩的容错存储系统和方法
CN1782979A (zh) * 2004-11-15 2006-06-07 国际商业机器公司 在存储系统中配置卷的方法和系统
JP2010026812A (ja) * 2008-07-18 2010-02-04 Hitachi Computer Peripherals Co Ltd 磁気ディスク装置
CN102265265A (zh) * 2008-10-28 2011-11-30 枢轴3公司 针对raid系统中的多种故障进行保护的方法和系统

Also Published As

Publication number Publication date
CN103631535A (zh) 2014-03-12

Similar Documents

Publication Publication Date Title
US7958304B1 (en) Dynamically adapting the fault tolerance and performance characteristics of a raid-based storage system by merging and splitting raid groups
US7523356B2 (en) Storage controller and a system for recording diagnostic information
KR100490723B1 (ko) 파일 레벨 스트라이핑 장치 및 방법
US7721146B2 (en) Method and system for bad block management in RAID arrays
US9348724B2 (en) Method and apparatus for maintaining a workload service level on a converged platform
US6647460B2 (en) Storage device with I/O counter for partial data reallocation
CN103631535B (zh) 一种实现存储池内空间分配的方法及装置
US8639898B2 (en) Storage apparatus and data copy method
CN102024044A (zh) 分布式文件系统
CN102024059B (zh) 一种文件系统内实现独立磁盘冗余阵列保护的方法及装置
CN102741801B (zh) 存储控制装置和存储控制装置的控制方法
CN101510145B (zh) 一种存储系统管理方法和装置
CN103608784B (zh) 网络卷创建方法、数据存储方法、存储设备和存储系统
CN103942112A (zh) 磁盘容错方法、装置及系统
CN103699337B (zh) 一种基于独立磁盘冗余阵列raid的写控制方法及系统
US7426655B2 (en) System and method of enhancing storage array read performance using a spare storage array
US10365845B1 (en) Mapped raid restripe for improved drive utilization
CN105573681A (zh) 一种ssd盘片内部raid组建方法及系统
CN103049400A (zh) 一种磁盘重构方法及其装置
CN102088490A (zh) 数据存储方法、设备和系统
CN103534688A (zh) 数据恢复方法、存储设备和存储系统
CN112764680B (zh) 磁盘条带选择方法及存储系统
US20200133810A1 (en) Method for managing multiple disks, electronic device and computer program product
CN103246478A (zh) 一种基于软raid支持无分组式全局热备盘的磁盘阵列系统
CN108733326B (zh) 一种磁盘处理方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant