具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例涉及的术语“磁盘”和“硬盘”具有基本相同含义。磁盘是通过磁性进行读写功能的设备磁盘,其可为非易失性存储介质,断电后保存的文件不会丢失。硬盘是将磁盘的储存片装到硬质金属盒子里可以得到更好的保护。
本发明实施例涉及的磁盘重构,是对磁盘上数据的重建或恢复。恢复的数据可以被写入目标磁盘。目标磁盘可以是指定的备份磁盘或任何可用的空闲磁盘。本发明实施例提供的各种磁盘重构方法和装置,可应用于包含多个成员磁盘的磁盘组,例如RAID组。该磁盘组用于分布存储整数个数据块以及这些数据块形成的整数个校验数据。在该磁盘组中,如果需要对某磁盘进行重构,可以利用磁盘组中剩余磁盘的数据恢复该磁盘的数据,从而实现磁盘重构。
本发明实施例提供的“磁盘组”,又称作磁盘阵列,可以是基于软件的阵列也可以是基于硬件的阵列。特别的,软阵列通过软件程序并由计算机的中央处理单元(CenterProcessingUnit,CPU)提供运行能力所成。例如,基于软件的阵列通过网络操作系统自身提供的磁盘管理功能将连接的普通小型计算机系统接口(SmallComputerSystemInterface,SCSI)卡上的多块硬盘配置成逻辑盘,组成阵列。基于软件的阵列可以提供数据冗余功能。基于硬件的阵列是使用专门的磁盘阵列卡来实现的。基于硬件的阵列能够提供在线扩容、动态修改阵列级别、自动数据恢复、驱动器漫游、超高速缓冲等功能。它能提供性能、数据保护、可靠性、可用性和可管理性的解决方案。阵列卡专用的处理单元来进行操作,它的性能远远高于常规非阵列硬盘,并且更安全更稳定。
本发明各实施例提供的磁盘组或磁盘阵列可以采用RAID技术,RAID可以是基于软件的也可以是基于硬件的。本发明实施例可以应用于各种RAID组合方式,用RAID级别标识,例如RAID-0,RAID-1,RAID-1E,RAID-5,RAID-6,RAID-7,RAID-10,RAID-50。不同的RAID级别可以满足性能和安全的多种需要。各种RAID级别所需磁盘的数目和存储方式为公众所知,不再赘述。
RAID组中,每一个成员磁盘包含数量相等的区块,跨越RAID组中所有成员磁盘的对齐区块称为条带。如图4所示为一种RAID组数据存储形式。图6A中RAID组划分成N个条带,每一个条带对应4个区块,3个区块存储3个数据块的数据,1个区块存储该条带3个区块的校验数据。每个数据块承载数据比特或字节的大小可以根据存储装置或系统设置,可以通过本地或远程控制接口进行设置。如图6A所示,一组数据块D1,D2,......,D3N+3以及这些数据块形成的校验数据P1,P2,......,PN分布存储到RAID组600的多个成员磁盘601-604中。值得注意的是,RAID组包含的成员磁盘数不仅限于图示的4个,成员磁盘的数量可以根据RAID级别的基本需要以及客户需要确定。本发明实施例数据存储方式不仅限于图6A所示,可以包括现有各种RAID级别的存储方式。
在本发明的一个实施例中,当RAID组中第一成员磁盘故障,如成员磁盘604发生故障,步骤S101中,确定RAID组中第一成员磁盘之外的第二成员磁盘存在不可读区域。步骤S103中,可以根据RAID组中该成员磁盘604以外的第二成员磁盘601-603的数据恢复第一成员磁盘的数据,并将恢复的数据存储到目标磁盘605。步骤S105中,在第一成员磁盘的故障恢复前,用包含恢复的数据的目标磁盘替换第一成员磁盘作为RAID组的成员磁盘。步骤S107中,在第一成员磁盘故障恢复后,用恢复的第一成员磁盘完成相应的重构处理。
如果发现第二成员磁盘存在不可读区域,对第一成员磁盘的第一区域进行重构操作,可以不对第一成员磁盘的第二区域进行重构操作。第一区域对应第二成员磁盘的区域可读,第二区域对应第二成员磁盘的不可读区域。这里的重构操作包括数据恢复处理。在目标磁盘上可以为第二区域预留磁盘空间,保证目标磁盘和第二成员磁盘之间的区块对应关系和第一成员磁盘与第二成员磁盘之间区块对应关系保持一致,即不改变区块对应关系,以降低目标磁盘作为成员磁盘使用过程中存储和数据处理复杂性。在为第二区域预留的磁盘空间上可以不进行坏块标记。
在第一成员磁盘故障恢复后,可以用恢复的第一成员磁盘替换目标磁盘作为RAID组的成员磁盘。采用这种方式,可以不考虑第二成员磁盘是否存在不可读区域,即不管第二成员磁盘是否存在不可读区域,在故障恢复后都能保证系统数据的完整性和安全性。当然这种方式在第二成员磁盘存在不可读区域的情况,可以有效解决目标磁盘上存在部分数据丢失的问题。
在本发明一个实施例中,在第二成员磁盘存在不可读区域的情况,第一成员磁盘故障恢复后可以不需要将目标磁盘替换回恢复的第一成员磁盘。相应的,可以将恢复的第一成员磁盘上与第二成员磁盘不可读区域对应的第二区域的数据存储到目标磁盘。这样,可以实现重构后磁盘数据的完整性,而且可以进一步减少磁盘切换带来的时间延迟。
图2A所示为故障恢复后需要切换回原来磁盘的一个实现过程。图2A所示的磁盘重构方法应用于包含多个成员磁盘的RAID组的存储装置或存储系统。对RAID组中存在故障的第一成员磁盘进行重构的处理包括:
S201a、确定RAID组中第一成员磁盘之外的第二成员磁盘存在不可读区域。
S203a、根据第二成员磁盘的数据恢复第一磁盘的第一区域的数据,并将恢复的数据存储到目标磁盘,其中,所述第一区域对应的第二成员磁盘的区域可读。
S205a、在第一成员磁盘故障恢复前,用包含恢复的数据的目标磁盘替换第一成员磁盘作为RAID组的成员磁盘。
S207a、在第一成员磁盘故障恢复后,用恢复后的第一成员磁盘替换目标磁盘作为RAID组的成员磁盘。
步骤S201a中,可以根据第二成员磁盘的状态检测结果确定第二成员磁盘是否存在不可读区域,状态检测结果用于指示条带和/或区块的可读性检测结果。步骤S203a中,可以根据状态检测结果确定第一区域。状态检测结果可以包含可读区域和/或不可读区域的记录,知道可读区域即可确定不可读区域。
状态检测结果可以用条带标识符和/或区块标识符来识别。具体的,条带标识符和/或区块标识符也可以用存储地址表示,例如,条带标识符可以是条带编号或条带地址(条带的首地址和/或尾地址),区块标识符可以是区块编号或区块地址(区块的首地址和/或尾地址)。状态检测结果可以是存储在存储器中的历史数据,例如包含该不可读区域记录的日志;也可以是通过对第二成员磁盘执行状态检测获得。
状态检测结果可以是故障发生前已经获得的历史数据,也可以是故障发生后对第二成员磁盘启动磁盘状态检测获得的数据。可以按区域扫描,如果第二成员磁盘均可读,其所对应的第一成员磁盘的区域可读。或者是,先确定了第二成员磁盘上存在不可读区域,根据第二成员磁盘的不可读区域确定第一成员磁盘的第二区域,第一成员磁盘剩下的区域即为第一区域。在本发明的实施例中,可以包括对第一成员磁盘的故障是否可恢复的判断操作,该操作可以通过检测磁盘故障原因实现。磁盘故障原因包括磁盘离线、磁盘物理介质故障等一个或多个原因。例如,可以检测RAID组中第一成员磁盘所在槽位的槽位状态,在步骤S201a之前对第一成员磁盘执行槽位状态检测,如果槽位状态检测结果指示该第一成员磁盘不在位,则判断第一成员磁盘可恢复。
在本发明的实施例中,还可以包括对第一成员磁盘的故障是否已恢复的判断操作,该操作可以通过检测磁盘在位状态、磁盘的身份信息、磁盘物理介质完整性等一个或多个内容实现。在重构的过程中,第一成员磁盘是否可恢复的判断操作可以通过检测第一成员磁盘的槽位状态、第一成员磁盘的身份等确定,另外,还可以结合第一成员磁盘的物理介质完整性进行判断。这样可以有效解决故障磁盘误操作拔出或接触不良导致磁盘无法被检测。例如,通过磁盘诊断确定某磁盘的故障是由于物理介质故障导致的,则判定该故障磁盘不可恢复。通常,在某个磁盘所在槽位没有接入新盘,该磁盘被插回的可能性较大,则可以判定该磁盘可恢复。
图2B所示为故障恢复后不需要切换回原来磁盘的一个实现过程。图2B所示的磁盘重构方法应用于包含多个成员磁盘的RAID组的存储装置或存储系统。当RAID组中第一磁盘存在故障时,重构处理方法包括:
S201b、确定RAID组中第一成员磁盘之外的第二成员磁盘存在不可读区域。
S203b、利用第二成员磁盘的数据恢复第一成员磁盘的第一区域的数据,并将恢复的数据保存到目标磁盘,其中,第一成员磁盘的第一区域对应的第二成员磁盘的区域可读。
S205b、在第一成员磁盘故障恢复前,用包含恢复的数据的目标磁盘替换第一成员磁盘作为RAID组的成员磁盘。
S207b、在第一成员磁盘故障恢复后,将恢复的第一成员磁盘的第二区域的数据存储到目标磁盘,第二区域对应第二成员磁盘的不可读区域。
步骤S201b中确定第二成员磁盘是否存在不可读区域的操作可以采用和步骤S201a相同或类似操作,步骤S203b中确定第一区域的操作可以采用和步骤S203a相同或类似操作,不再赘述。
本发明另一实施例提供一种磁盘重构方法,应用于包含多个成员磁盘的RAID组的存储装置或存储系统。如图3所示,当RAID组中第一成员磁盘存在故障时,重构处理方法包括:
S301、判断第一成员磁盘是否可恢复,若第一成员磁盘可恢复,执行S303;若第一成员磁盘不可恢复,执行S306。
其中,第一成员磁盘是否可恢复的判断操作可以通过检测磁盘故障原因实现,该操作可以通过检测磁盘故障原因实现。磁盘故障原因包括磁盘离线、磁盘物理介质故障等一个或多个原因。例如,对第一成员磁盘执行槽位状态检测,如果槽位状态检测结果指示该第一成员磁盘不在位,则判断第一成员磁盘可恢复。若第一成员磁盘是由于误操作导致盘被拔出,且该第一成员磁盘所在槽位没有接入新盘,该第一成员磁盘被插回的可能性较大,则可以判定第一成员磁盘可恢复;或第一成员磁盘是被拔出,且该第一成员磁盘所在槽位接入了新盘,则判定该第一成员磁盘不可恢复;或该第一成员磁盘是由于物理介质故障导致的,则判定该第一成员磁盘不可恢复。
S303、根据RAID组中第一成员磁盘以外的第二成员磁盘的数据恢复第一成员磁盘的数据,将恢复的数据存储到目标磁盘。
该目标磁盘可以是任意可用的空闲磁盘。在存储数据前,可以对目标磁盘的磁盘空间划分成多个区域,划分的多个区域保持和第一成员磁盘的多个区域对应,以保证恢复的每一个区域的数据能够存储到目标磁盘相应的区域。当然,划分区域不是必须的,例如,可以按照数据块分布规则顺序存储。
具体的,如图6A所示,一组连续的数据块和这些数据块形成的校验块分布存储于RAID组的多个成员磁盘。这些存储数据块和校验块的磁盘区域被称为区块,至少一组跨越多个成员磁盘的区块可以形成条带。
示例性的,利用第二成员磁盘上数据块和校验块的分布关系恢复出第一成员磁盘的数据。当第二成员磁盘上存在不可读区域,如存在坏道,第一成员磁盘上与不可读区域对应的区域的数据不可恢复,不对该对应的区域进行重构处理,例如在目标磁盘不进行坏块标记。如图6B所示,第一成员磁盘(磁盘4)发生故障,当检测到的第二成员磁盘(磁盘1-3)中磁盘1的区域j不可读,其对应第一成员磁盘的区域m,不对区域m进行重构处理,即不进行数据恢复计算处理;在目标磁盘上对应的区域n也不进行坏块标记。区域j、区域m和区域n可用区块标识符和/或条带标识符识别。
S304、在第一成员磁盘故障恢复前,用包含恢复的数据的目标磁盘替换第一成员磁盘作为RAID组的成员磁盘。
在本实施例中,目标磁盘作为RAID组临时的成员磁盘,可以在RAID组成员磁盘表和RAID组区域映射关系表中新增一条记录,暂时不删除第一成员磁盘的记录,可以用解激活状态表示。或者创建临时的RAID组成员磁盘表和临时的RAID组区域映射表。把原来的RAID组成员磁盘表和原来的RAID组区域映射关系表解激活,待故障恢复后重新激活。
示例性的,RAID可以应用于通过存储区域网络(StorageAreaNetwork,SAN)将高速服务器与高速存储设备的高速互联的网络环境中。其中,高速存储设备可以为基于RAID的存储装置或系统,这就使得物理上的远距离存储变得容易便捷,提高了数据的可靠性和安全性。例如,可以应用在对数据安全性和存储性能要求很高的企业当中。
譬如在企业商务数据或运营商数据的存储和备份管理的网络环境中,目标磁盘接替故障磁盘后,目标磁盘可以为其他设备提供业务访问服务,从而实现数据的快速备份,快速地恢复用户的业务,以保证企业商务数据远程传输和远程存储的安全性和稳定性。
S305、在第一成员磁盘故障恢复后,用恢复的第一成员磁盘完成磁盘重构处理。步骤S305可以有多种实现方式,例如,在第一成员磁盘故障恢复后,用恢复的第一成员磁盘替换目标磁盘作为RAID组的成员磁盘以完成磁盘重构处理。
完成磁盘重构处理后,删除或解激活目标磁盘作为RIAD组的成员磁盘的记录。另一方面,恢复第一成员磁盘作为RAID组成员的记录,即重新激活该第一成员磁盘。如果步骤S304中是在RAID组成员磁盘表和RAID组区域映射关系表中新增一条记录,在步骤S305中将新增的记录删除,重新激活原来地第一成员磁盘的记录。如果步骤S304中是创建临时的RAID组成员磁盘表和临时的RAID组区域映射表,在步骤S305中将临时的RAID组成员磁盘表和临时的RAID组区域映射表删除,重新使用原来的RAID组成员磁盘表和原来的RAID组区域映射关系表。
在步骤S303中,如果第二成员磁盘存在不可读区域,能够恢复的数据包含第一成员磁盘的第一区域的数据,第一区域对应第二成员磁盘的区域均可读。在第一成员磁盘故障恢复后,将恢复的第一成员磁盘的第二区域的数据存储到目标磁盘,第二区域对应第二成员磁盘的不可读区域。参考图6B所示,将恢复的第一成员磁盘的区域m的数据存储到目标磁盘的区域n。
第一成员磁盘故障是否恢复可参照上文所述。当该第一成员磁盘的故障恢复后,如第一成员磁盘插回其所在RAID组的槽位,将目标磁盘替换为恢复后的第一成员磁盘。这样防止了在重构时由于第二成员盘数据存在不可读区域而引起第一成员磁盘的数据丢失,在第一成员磁盘故障恢复后可以保证第一成员磁盘数据的完整性,进而保证RAID组的数据完整性和安全性。另一方面,用恢复后的第一成员磁盘替换目标磁盘,可以保持RAID组原有的数据处理模式,恢复该RAID组出现故障之前的数据存储状态。
S306、根据RAID组中第一成员磁盘之外的第二成员磁盘的数据恢复第一成员磁盘的数据,并将恢复的数据存储到目标磁盘。
在步骤S306执行的过程中,第二成员磁盘可能存在不可读区域,在目标磁盘上与不可读区域对应的区域可以被标记为坏块,也可以保持空闲,不写入任何数据,或者是可以用固定的值进行填充以便于系统识别。
如图6C所示,第一成员磁盘(磁盘4)发生故障,当检测到的第二成员磁盘(磁盘1-3)中磁盘1的区域j不可读,其对应第一成员磁盘的区域m;在目标磁盘上对应的区域n进行坏块标记。区域j、区域m和区域n可用区块标识符和/或条带标识符识别。当然,区域n上也可以采用固定值填充或保持空闲。
具体的,步骤S306可以包括如下几个子步骤:
S306a、判断第二成员磁盘是否存在不可读区域;如果第二成员磁盘存在不可读区域,执行步骤S306b,如果第二成员磁盘不存在不可读区域,执行步骤S306c。
S306b、根据第二成员磁盘的数据恢复第一成员磁盘的第一区域的数据,并将恢复的数据存储到目标磁盘,其中,在目标磁盘上与第一成员磁盘的第二区域对应的区域标记坏块或不写入数据,第一区域对应的第二成员的区域可读,第二区域对应的第二成员磁盘的不可读区域。
S306c、根据第二成员磁盘的数据恢复第一成员磁盘的数据,并将恢复的数据存储到目标磁盘。
S307、用包含恢复的数据的目标磁盘替换第一成员磁盘作为RAID组的成员磁盘。可以将第一成员磁盘从RAID组移除,不考虑第一成员磁盘的故障是否恢复。
将该第一成员磁盘从该RAID组中移除,如删除第一成员磁盘作为RAID组的成员磁盘的记录,用目标磁盘的信息刷新RAID组区域映射关系表,这样,可以防止后续其他成员盘出现故障,成员信息不准确带来的失效。
这样,当第一成员磁盘的故障可恢复时,RAID组可以保持其原有的数据存储状态,RAID组数据不丢失;当第一成员磁盘的故障不可恢复,根据第二成员磁盘可读区域的数据恢复第一成员磁盘的第一区域的数据,至多丢失第一成员磁盘第二区域的数据,其中,第一区域对应的第二成员磁盘的区域均可能,第二区域对应第二成员的不可读区域。通过RAID组中成员磁盘的状态智能选择重构方式,可以平衡RAID组数据完整性和不可读区域导致重构时间浪费的问题,能够减少RAID组重构后数据的丢失,甚至实现不丢失,并且能够快速恢复用户的业务。
图4为本发明另一实施例的方法流程图。图4所示方法与图3类似,主要区别在于,根据第一成员磁盘的故障是否可恢复以及第二成员磁盘是否存在不可读区域的判断结果选择不同的重构方式:
第一重构方式,应用于在第一成员磁盘的故障可恢复以及第二成员磁盘存在不可读区域的情况。第一重构方式的处理包括:步骤S403中,根据第二成员磁盘的数据恢复第一成员磁盘的数据,将恢复的数据存储到目标磁盘;步骤S404中,在第一成员磁盘故障恢复前,用包含恢复的数据的目标磁盘替换第一成员磁盘作为RAID组的成员磁盘;步骤S405中,在第一成员磁盘故障恢复后,用恢复的第一成员磁盘完成磁盘重构处理。
步骤S405中,在第一成员磁盘故障恢复后,可以用恢复后的第一成员磁盘替换目标磁盘作为RAID组的成员磁盘以完成磁盘重构处理。
步骤S403中恢复的数据包括第一成员磁盘第一区域的数据,第一区域对应的第二成员磁盘的区域均可读。步骤S405中,在第一成员磁盘故障恢复后,可以将第一成员磁盘第二区域的数据存储到目标磁盘以完成磁盘重构处理,第二区域对应第二成员磁盘的不可读区域。
第二重构方式,应用于第一成员磁盘的故障不可恢复以及第二成员磁盘存在不可读区域的情况。第二重构方式的处理包括:步骤S406b中,根据第二成员磁盘的数据恢复第一成员磁盘的第一区域的数据,将恢复的数据存储到目标磁盘,其中,在目标磁盘上与第一成员磁盘的第二区域对应的区域标记坏块或不写入数据,第一区域对应的第二成员磁盘的区域可读,第二区域对应第二成员磁盘的不可区域。步骤S407中,用包含恢复的数据的目标磁盘替换第一成员磁盘作为RAID组的成员磁盘。
第三重构方式,应用于第二成员磁盘不存在不可读区域的情况。第三重构方式的处理包括:步骤S406c中,根据第二成员磁盘的数据恢复第一成员磁盘的数据,并将恢复的数据存储到目标磁盘。步骤S407中,用包含恢复的数据的目标磁盘替换第一成员磁盘作为RAID组的成员磁盘。
图5为本发明另一实施例的方法流程图,图5所示的方法和图4类似。当RAID组中第一成员磁盘故障时,具体处理过程包括:
S501、判断RAID组中第二成员磁盘是否存在不可读区域,如果存在不可读区域,执行步骤S502,如果不存在不可读区域,执行步骤S506c。第二成员磁盘为RAID组中发生故障的第一成员磁盘以外的其他成员磁盘。
S502、判断第一成员磁盘的故障是否可恢复,如果可恢复,执行步骤S503,如果不可恢复,执行步骤S506b。
S503、根据第二成员磁盘的数据恢复第一成员磁盘的数据,将恢复的数据存储到目标磁盘。
S504、在第一成员磁盘故障恢复前,用包含恢复的数据的目标磁盘替换第一成员磁盘作为RAID组的成员磁盘。
S505、在第一成员磁盘故障恢复后,用恢复的第一成员磁盘完成磁盘重构处理。
一方面,在第一成员磁盘故障恢复后,可以用恢复的第一成员磁盘替换目标磁盘作为RAID组的成员磁盘以完成磁盘重构处理。
另一方面,在第一成员磁盘故障恢复后,可以将用恢复的第一成员磁盘的第二区域的数据存储到目标磁盘相应区域以完成磁盘重构处理。其中,第二区域对应第二成员磁盘的不可读区域。
S506b、根据第二成员磁盘的数据恢复第一成员磁盘的第一区域的数据,将恢复的数据存储到目标磁盘,其中,在目标磁盘上与第一成员磁盘的第二区域对应的区域标记坏块或不写入数据,第一区域对应的第二成员磁盘的区域可读。完成S506b的操作后,执行步骤S507。
S506c、根据第二成员磁盘的数据恢复第一成员磁盘的数据,并将恢复的数据存储到目标磁盘。完成S506c的操作后,执行步骤S507。
S507、用包含恢复的数据的目标磁盘替换第一成员磁盘作为RAID组的成员磁盘。
如图7所示为本发明实施例提供一种装置700,用于实现磁盘重构。装置700耦合到包含一个或多个RAID组,每一个RAID组包含多个成员磁盘。装置700包括:
数据获取单元703,用于根据RAID组中第一成员磁盘以外的第二成员磁盘的数据恢复第一成员磁盘的数据。
写处理单元704,用于将数据获取单元703恢复的数据写入目标磁盘。
重构控制单元702,用于在第一成员磁盘故障恢复前,将RAID组的成员磁盘从第一成员磁盘切换到包含恢复的数据的目标磁盘,并在第一成员磁盘故障恢复后,根据恢复的第一成员磁盘完成重构处理。
重构控制单元702可以在第一成员磁盘故障恢复后,将RAID组的成员磁盘从包含恢复的数据的目标磁盘切换到恢复的第一成员磁盘。重构控制单元702也可以指示数据获取单元703在第一成员磁盘故障恢复后,获取第一成员磁盘的第二区域的数据,以及指示写处理单元704将第二区域的数据存储到目标磁盘对应区域。第二区域对应第二成员磁盘的不可读区域。
重构控制单元702在判断第一成员磁盘的故障可恢复的情况选择在第一成员磁盘故障恢复后,将RAID组的成员磁盘从包含恢复的数据的目标磁盘切换到恢复的第一成员磁盘的第一重构方式。
重构控制单元702在判断第一成员磁盘的故障不可恢复的情况选择不考虑故障是否恢复的情况,在完成第一成员磁盘到目标磁盘的重构后将第一成员磁盘从RAID组删除的第二重构方式。
重构控制单元702还可以结合第一成员磁盘的故障可恢复性检测结果和第二成员磁盘是否存在不可读区域的检测结果进行重构方式选择。
具体的,重构控制单元702可以包含故障状态管理单元7022,其用于实现第一成员磁盘的故障状态管理。故障状态管理单元7022可以获得第一成员磁盘的故障原因,故障是否已恢复等信息,故障原因可以包含不在位、磁盘介质故障等一个或多个。
重构控制单元702还可以包含磁盘可读性检测单元7021,用于获得RAID组成员磁盘的可读性检测结果,包括获得第二成员磁盘的可读性检测结果。
重构控制单元702可以包含磁盘管理单元7023,用于管理RAID组成员磁盘,包括维护成员磁盘信息、负责成员磁盘变更或切换管理、磁盘可读区域和/或不可读区域管理、磁盘重构方式选择等一个或多个方面。
重构控制单元702还可以包含处理单元7024,负责根据故障管理单元7022、磁盘可读性检测单元7021、磁盘管理单元7023等一个或多个单元的信息或指令控制数据获取单元703和写入控制单元704的操作。例如,处理单元7024根据第二成员磁盘的可读性检测结果控制数据获取单元703的数据恢复过程,以便于数据获取单元703根据第二成员磁盘可读区域的数据恢复第一成员磁盘第一区域的数据,第一区域对应第二成员磁盘的区域可读,阻止数据获取单元703对第一成员磁盘的第二区域进行重构,第二区域对应第二成员磁盘的不可读区域。处理单元7024还可以根据磁盘可读性检测结果指示写处理单元704不在目标磁盘上与第二区域对应的区域写入数据或标记坏块。具体的,处理单元7024可以根据需要执行上述方法流程的一个或多个操作。
如图8所示为本发明实施例提供一种装置800,包括:
重构方式选择单元801,用于判断RAID组中发生故障的第一成员磁盘是否可恢复,如果第一成员磁盘的故障可恢复选择软重构方式,如果第一成员磁盘的故障不可恢复选择硬重构方式。
软重构单元802,用于在软重构方式下,根据RAID组中第一成员磁盘以外的第二成员磁盘的数据恢复第一成员磁盘的数据,并将恢复的数据存储到目标磁盘,在第一成员磁盘故障恢复前,用包含恢复的数据的目标磁盘替换第一成员磁盘作为RAID组的成员磁盘,在第一成员磁盘故障恢复后,用恢复后的第一成员磁盘替换包含恢复的数据的目标磁盘作为RAID组的成员磁盘。其中,如果第二成员磁盘存在不可读区域,可以仅恢复第一成员磁盘的第一区域的数据,而对第一成员磁盘的第二区域不进行重构或数据恢复处理。其中,第一区域对应的第二成员磁盘的区域均可读,第二区域对应第二成员磁盘的不可读区域。
硬重构单元805,用于在硬重构方式下,根据RAID组中第一成员磁盘以外的第二成员磁盘的数据恢复第一成员磁盘的数据,并将恢复的数据存储到目标磁盘,在完成恢复的数据存储后,用包含恢复的数据的目标磁盘替换第一成员磁盘作为RAID组的成员磁盘,将第一成员磁盘从RAID组移除以完成磁盘重构。第一成员磁盘故障恢复后维持目标磁盘作为RAID组的成员磁盘。其中,如果第二成员磁盘存在不可读区域,可以仅恢复第一成员磁盘的第一区域的数据,而对第一成员磁盘的第二区域不进行重构或数据恢复处理。其中,第一区域对应的第二成员磁盘的区域均可读,第二区域对应第二成员磁盘的不可读区域。。
软重构单元802可以包括:
数据获取单元8021,用于根据第二成员磁盘的数据恢复第一成员磁盘的数据。在第二成员磁盘存在不可读区域时,数据获取单元8021可以根据第二成员磁盘可读区域的数据获取第一成员磁盘的第一区域的数据,第一区域对应的第二成员磁盘的区域均可读。数据获取单元8021获取的数据可以缓存到与装置800耦合的缓存器中,该缓存器可以是外部连接到装置800,也可以是集成到装置800中。
写处理单元8023,用于控制将恢复的数据存储到目标磁盘相应区域
重构控制单元8024,用于在目标磁盘中完成对第一成员磁盘的所有可恢复数据的存储后,用包含恢复的数据的目标磁盘替换第一成员磁盘作为RAID组的成员磁盘;以及在第一成员磁盘故障恢复后,用恢复后的第一成员磁盘替换包含恢复的数据的目标磁盘作为RAID组的成员磁盘。
硬重构单元805可以包括:
数据获取单元8051,用于根据第二成员盘的数据恢复第一成员磁盘的数据。恢复数据的方式可以采用第二成员磁盘中数据块和校验块的分布进行冗余计算获得。如果第第二成员磁盘存在不可读区域,数据获取单元8051可以仅根据第二成员磁盘可读区域的数据获取第一成员磁盘的第一区域的数据,第一区域对应第二成员磁盘的区域均可读,而对第一成员磁盘的第二区域不进行数据恢复处理,第二区域对应第二成员磁盘的不可读区域。
写处理单元8053,用于将数据获取单元8051恢复的数据存储到目标磁盘相应区域。
硬重构单元805可以包括坏块标记单元8052,用于在第二成员磁盘存在不可读区域时,在目标磁盘中将与第二成员盘的不可读区域对应的区域标记为坏块,目标磁盘中标记坏块处不写入数据。
硬重构单元805也可以不包含坏块标记单元8052,而是采用一个固定值作为第一成员磁盘的第二区域的数据写入目标磁盘中与第二区域对应的区域。当然,与第二区域对应的区域也可以不写入任何数据。
重构控制单元8054还可以在目标磁盘中完成对第一成员磁盘所有可恢复数据的存储后,将目标盘作为成员磁盘加入RAID组中,并将第一成员磁盘从RAID组中移除。重构控制单元8054可以更新RAID组磁盘成员信息。
图9A和9B为本发明实施例提供的应用系统910a和910b的架构示意图。
图9A中,系统900a包括一个或多个存储装置或存储系统,如图装置910a,其通过光纤通道(FiberChannel,FC)网络或网际互联协议(InternetProtocol,IP)网络或IP网络905连接到主机901a、901b,数据库902等网络设备。图9A示意性显示了2个主机901a和901b,实际系统中可以包括更多类似主机,这些主机可以是完成各种功能的服务器,如网络服务器(webserver)、文件服务器、业务服务器等。数据库902提供存储文件的内容索引、访问地址信息、用户信息等。
装置910a能够实现磁盘重构功能,提供磁盘重构功能的部件主要包括:
存储控制器912a,通过一个或多个磁盘适配器913a连接到多个磁盘。其中,至少部分磁盘可以形成RAID组,如RAID组915a和915b。至少部分磁盘用作空闲磁盘,如磁盘916a和916b,其可以用作磁盘重构的目标磁盘。RAID组可以是基于软件的RAID组,也可以是基于硬件的RAID组。
磁盘适配器913a是独立磁盘冗余阵列RAID组和目标磁盘的接口,提供输入和输出适配功能,其可以作为RAID组和其它组件(如存储控制器912、缓存器)的中介。
存储控制器912a,耦合到RAID组,用于完成RAID组的控制,能够完成的控制操作包括磁盘重构控制操作。
存储控制器912a可执行如下操作:当RAID组中第一成员磁盘故障,根据RAID组中第一成员磁盘以外的第二成员磁盘恢复第一成员磁盘的数据,并将恢复的数据存储到目标磁盘;在第一成员磁盘的故障恢复前,用包含恢复的数据的目标磁盘替换第一成员磁盘作为RAID组的成员磁盘;在第一成员磁盘故障恢复后,根据恢复后的第一成员磁盘进行相应的处理。
本发明实施例至少提供两种重构方式。第一成员磁盘故障恢复后,需要从目标磁盘切换回恢复的第一成员磁盘的重构方式被称作第一重构方式。第一成员磁盘故障恢复后,不需要从目标磁盘切换回恢复的第一成员磁盘的重构方式被称作第二重构方式。当然,在实施例中,也可以包含其他重构方式。
存储控制器912a可在第一成员磁盘故障恢复后,用恢复的第一成员磁盘替换包含恢复的数据的目标磁盘作为RAID组的成员磁盘。
存储控制器912a可在第一成员磁盘故障恢复后,将恢复的第一成员磁盘的第二区域的数据存储到目标磁盘相应区域,第二区域对应第二成员磁盘的不可读区域。该操作可以在第二成员磁盘存在不可读区域情况下执行。
第一重构方式和第二重构方式可以由存储控制器912a选择。存储控制器912a可以基于第一成员磁盘的故障是否可恢复的判断结果进行选择,如果可以恢复选择第一重构方式,即需要切换回恢复的第一成员磁盘,如果不可以恢复选择第二重构方式,即不需要切换回恢复的第一成员磁盘。
存储控制器912a可以获得磁盘成员信息、磁盘区域信息、指示磁盘状态是否可恢复的信息、指示磁盘可读性检测结果的信息、指示数据块和校验块分布的信息或规则等至少部分信息,用作磁盘重构控制处理。存储控制器912a可以从自身包含的存储器获得上述信息,也可以从连接其上的存储器获得上述信息。
存储控制器912a可基于指示磁盘状态是否可恢复的信息判断发生故障的第一成员磁盘的故障是否可恢复。存储控制器912a可基于指示磁盘可读性检测结果的信息判断第二成员磁盘是否存在不可读区域。存储控制器912a可以基于RAID组中第二成员磁盘的数据恢复第一成员磁盘的数据,并将恢复的数据存储到目标磁盘的操作。磁盘区域信息可以包括磁盘条带或磁盘区块信息。数据恢复处理可基于指示数据块和校验块分布的信息或规则进行。
存储控制器912a典型的是一个RAID控制器,通过执行存储于一计算机可读取存储介质中的程序,执行本发明上述各种磁盘重构的方法。
如图9A示例,装置910a还可以包括如下部件:
一个或多个通信适配器,如通信适配器911a和911b,这些通信适配器作为FC网络或IP网络的网络适配器,通过FC网络或IP网络与网络设备,如主机901和数据库902等通信。
一个或多个缓存器,如缓存器914,可以作为缓存RAID组(RAID组915a或915b)与空闲磁盘(磁盘916a或916b)中间的数据,也可以缓存RAID组和其他网络设备之间的数据。
管理控制器917,可以通过用户的管理接口对装置910a实现管理。
存储器918,可以负责装置910b的系统参数的存储。
总线桥接器919a,可以提供一系列数据总线、控制总线,分别实现部件之间的数据和控制指令交互。总线桥接器919a也可以包含功率总线,通过功率总线为各部件供电。
具体的,存储控制器912可以对图1到图3所示方法部分和全部处理步骤实现控制。
图9B提供的系统900b和900a类似,包括装置910b,其与装置910a类似的存储装置或存储系统,其通过FC网络905a和/或IP网络905b连接到主机901a、901b,数据库902等网络设备。
装置910b包括如下部件:
存储控制器912b,通过一个或多个磁盘适配器913b连接到多个磁盘。其中,至少部分磁盘可以形成RAID组,如RAID组915a和915b。至少部分磁盘用作空闲磁盘,如磁盘916a和916b,其可以用作磁盘重构的目标磁盘。RAID组可以是基于软件的RAID组,也可以是基于硬件的RAID组。
磁盘适配器913b是独立磁盘冗余阵列RAID组和目标磁盘的接口,提供输入和输出适配功能,其可以作为RAID组和存储控制器912b的中介。
存储控制器912a的基本功能和图9A的存储控制器912a完成的基本功能相同,不再赘述。
如图9B示例,还可以包括如下至少一个部件:
一个或多个缓存器,如缓存器914,可以作为缓存RAID组(RAID组915a或915b)与空闲磁盘(磁盘916a或916b)中间的数据,也可以缓存RAID组和其他网络设备的之间的数据。
管理控制器917,可以通过用户的管理接口对装置910a实现管理。
耦合到存储控制器912b的一个或多个存储器,如存储器918a和918b。存储器918a主要负责装置910b的系统参数的存储,存储器918b可以提供RAID组控制所需的信息,具体参见存储控制器912a控制涉及的信息。
总线桥接器919b,可以提供一系列数据总线、控制总线,分别实现部件之间的数据和控制指令交互。总线桥接器919b也可以包含功率总线,通过功率总线为各部件供电。
在图9B的图示中,存储控制器912a、磁盘适配器913a可以集成到一起,形成磁盘重构装置920。磁盘重构装置920还可以集成存储器918b。存储器918b可以用于存储磁盘成员信息、磁盘区域信息、指示磁盘状态是否可恢复的信息、指示磁盘可读性检测结果的信息等至少部分信息。存储器918b中以RAID组成员磁盘表形式存储磁盘成员信息,以RAID组区域映射表形式存储磁盘区域信息。存储器918b可以存储执行完成本发明至少一种方法的计算机可读程序,以便于装置910b中的一个或多个处理器(未示出)能够执行该计算机可读程序完成磁盘重构,这些处理器可以集成在控制器920内部,也可以通过接口连接到控制器920。
一个或多个通信适配器,如通信适配器911a和911b。在图9B中,通信适配器911a和911b分别是FC通信适配器和IP通信适配器。
在本申请所提供的几个实施例中,应该理解到,所揭露方法和设备,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
另外,在本发明各个实施例中的中,各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理包括,也可以两个或两个以上单元集成在一个单元中。且上述的各单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:U盘、移动硬盘、只读存储器(ReadOnlyMemory,简称ROM)、随机存取存储器(RandomAccessMemory,简称RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。