数据恢复方法及相关设备与流程

文档序号:20997070发布日期:2020-06-05 22:17阅读:220来源:国知局
数据恢复方法及相关设备与流程

本申请要求于2019年11月04日提交的申请号为201911065652.2、申请名称为“一种缓存数据保护和回复方法及装置”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。

本申请涉及计算机存储技术领域,特别涉及一种数据恢复方法及相关设备。



背景技术:

独立磁盘冗余阵列(redundantarrayofindependentdisks,raid)系统包括多个磁盘组成的磁盘集合,这些磁盘作为一个整体对外提供存储功能。当raid系统无法对外提供存储功能时,即当raid系统处于失效状态时,需要对raid系统进行恢复,恢复正常工作状态的raid系统才可对外提供存储功能。

现有技术中,为了便于对raid系统中的磁盘进行管理,raid系统还可以包括一个raid控制器。raid系统处于失效状态可能有两种场景,第一种场景是raid系统中的一个或多个磁盘发生故障导致raid系统无法对外提供存储功能,在该场景中,将发生故障的磁盘更换掉,即可实现对失效的raid系统的恢复。第二种场景是raid系统包括的raid控制器发生故障导致raid系统无法对外提供存储功能,在该场景中更换raid控制器即可实现对失效的raid的恢复。

上述raid控制器中还配置有一个缓存区(cache),该缓存区用于缓存处理器从raid系统的磁盘中读取或即将写入raid系统的磁盘的数据。此时,在上述第一种场景中,为了避免更换的新的磁盘与raid控制器中的缓存区中的数据不兼容,在恢复磁盘之前,需先将缓存区中的数据清除,从而导致缓存区中的数据丢失。在上述第二种场景中,直接更换新的raid控制器,同样导致原来的缓存区中的数据丢失。



技术实现要素:

本申请提供了一种数据恢复的方法及相关设备,可以避免数据恢复的过程中导致缓存区中的数据丢失。该技术方案如下:

第一方面,本申请提供了一种数据恢复方法,该方法应用于raid控制器,该raid控制器与多个磁盘连接,这多个磁盘中每个磁盘中配置有数据区和安全区,该raid控制器中配置有缓存区,在该方法中:获取第一指令,第一指令用于指示raid控制器所在的raid系统失效,其中,raid系统失效是指多个磁盘中发生故障的磁盘的数量大于允许数量;将缓存区中的第一缓存数据存储至这多个磁盘中未发生故障的第一磁盘的安全区。

在本申请中,为了避免恢复失效的raid系统的过程中导致缓存区中的数据丢失,在磁盘中配置有安全区,该安全区用于在raid系统失效后,对raid控制器的缓存区中的数据进行备份。因此,在获取到用于指示raid系统失效的第一指令的情况下,便可将缓存区中的数据备份至安全区。如此,后续在raid系统恢复正常工作后,便可从安全区中获取已经备份的缓存区中的数据,以避免由于缓存区中的数据丢失而出现操作系统无法启动或用户数据丢失等问题。

根据第一方面,在本申请的一种可能的实现方式中,在该方法中,还可以获取第二指令,第二指令用于指示raid系统恢复正常工作,其中,raid系统恢复正常工作是指恢复故障磁盘后这多个磁盘中存在故障的磁盘的数量小于或等于允许数量。此时,则从第一磁盘的安全区中获取第一缓存数据;将第一缓存数据存储至恢复磁盘后的多个磁盘中的数据区。

在获取到用于指示raid系统恢复正常工作的第二指令之后,便可对已经备份的缓存区中的数据进行恢复,以避免由于缓存区中的数据丢失而出现操作系统无法启动或用户数据丢失等问题。

根据第一方面,在本申请的另一种可能的实现方式中,在该方法中,在上述将第一缓存数据存储至恢复磁盘后的多个磁盘中的数据区之前,还可以获取恢复磁盘后缓存区中的第二缓存数据;当第一缓存数据和第二缓存数据一致时,执行将第一缓存数据存储至恢复磁盘后的多个磁盘中的数据区的操作。

针对由于磁盘出现故障而导致raid系统失效的场景,由于恢复磁盘后可能会出现磁盘中数据与原缓存区中的数据不兼容的情况,因此,在本申请中,在该失效场景中,缓存区中的数据在恢复磁盘之前不清除,以便于根据恢复磁盘后的缓存区中的数据(也即是上述第二缓存数据)和备份的缓存区中的数据(也即是上述第一缓存数据)之间的一致性,来考虑是否将第一缓存数据落盘。具体地,在恢复后的磁盘中的数据与第一缓存数据不冲突的情况下,可以直接落盘第一缓存数据,以提高恢复第一缓存数据的效率。

根据第一方面,在本申请的另一种可能的实现方式中,当第二缓存数据和第一缓存数据不一致时,可以向管理员端发送缓存数据落盘提示信息,该缓存数据落盘提示信息用于提示是否将第一缓存数据落盘;当接收到确认消息时,执行将第一缓存数据存储至恢复磁盘后的多个磁盘中的数据区的操作,该确认消息用于指示将第一缓存数据写入恢复磁盘后的多个磁盘中的数据区。

根据第一方面,在本申请的另一种可能的实现方式中,向管理员端发送缓存数据落盘提示信息之后,还可以接收舍弃消息,该舍弃消息用于指示清除第一缓存数据。

在本申请中,恢复磁盘后的缓存区中的数据与第一缓存数据不一致的情况下,表明恢复后的磁盘中的数据与第一缓存数据冲突,此时,为了避免误删数据,则可以根据用户的提示来确定是否丢弃第一缓存数据。

根据第一方面,在本申请的另一种可能的实现方式中,从第一磁盘的安全区中获取第一缓存数据之后,还可以清除第一磁盘的安全区中存储的第一缓存数据。

由于安全区是用于备份失效的raid系统的raid控制器中的缓存区中的数据,为了便于下一次出现失效时能够及时备份缓存区中的数据,可以清除第一磁盘的安全区中存储的第一缓存数据。也即是,在每次恢复第一缓存数据之后,均及时清除安全区中的数据。这样后续再次出现失效时,便可直接在清零的安全区中继续备份缓存区中的数据。

根据第一方面,在本申请的另一种可能的实现方式中,多个磁盘中配置的安全区的总容量大于或等于缓存区的容量,以保证各个安全区中能够存储缓存区中的数据。

根据第一方面,在本申请的另一种可能的实现方式中,每个磁盘中配置的安全区对应的地址区间位于同一磁盘中配置的数据区对应的地址区间之后,以确保数据区的连续性。

第二方面,本申请提供了一种数据恢复方法,该方法应用于计算机系统,该计算机系统中配置有raid控制器与多个磁盘。这多个磁盘中每个磁盘中配置有数据区和安全区,该raid控制器中配置有缓存区,在该方法中:获取第一指令,第一指令用于指示raid控制器所在的raid系统失效,其中,raid系统失效是指是指raid控制器发生故障;将缓存区中的第一缓存数据存储至这多个磁盘中的安全区。

在本申请中,为了避免恢复失效的raid系统的过程中导致缓存区中的数据丢失,在磁盘中配置有安全区,该安全区用于在raid系统失效后,对raid控制器的缓存区中的数据进行备份。因此,在获取到用于指示raid系统失效的第一指令的情况下,便可将缓存区中的数据备份至安全区。如此,后续在raid系统恢复正常工作后,便可从安全区中获取已经备份的缓存区中的数据,以避免由于缓存区中的数据丢失而出现操作系统无法启动或用户数据丢失等问题。

根据第二方面,在本申请的一种可能的实现方式中,在该方法中,还可以获取第二指令,第二指令用于指示raid系统恢复正常工作,其中,raid系统恢复正常工作是指发生故障的raid控制器已被更换。此时,则从第一磁盘的安全区中获取第一缓存数据;将第一缓存数据存储至更换raid控制器后的多个磁盘中的数据区。

在获取到用于指示raid系统恢复正常工作的第二指令之后,便可对已经备份的缓存区中的数据进行恢复,以避免由于缓存区中的数据丢失而出现操作系统无法启动或用户数据丢失等问题。

根据第二方面,在本申请的一种可能的实现方式中,上述将第一缓存数据存储至更换raid控制器后的多个磁盘中的数据区的实现方式可以为:将第一缓存数据写入更换后的raid控制器中的缓存区;在检测到缓存区数据落盘指令的情况下,将更换后的raid控制器中的缓存区中的数据写入更换raid控制器后的多个磁盘中的数据区。

如果是由于raid控制器发生故障而导致raid系统失效,此时,更换raid控制器后,也即是在raid系统恢复正常工作后,由于更换后的raid控制器中也配置有缓存区,因此可以将第一缓存数据写入更换后的raid控制器中的缓存区中,以便于后续在检测到缓存区数据落盘指令的情况下,将更换后的raid控制器中的缓存区中的数据写入更换raid控制器后的磁盘中的数据区。也即是,针对raid控制器出现故障的失效场景,可以先将第一缓存数据恢复至更换后的raid控制器的缓存区中,后续再统一恢复至数据区,以实现数据的批量写入,从而提升了数据写入的速度。

第三方面,提供了一种raid控制器,该raid控制器具有实现上述第一方面提供的数据恢复方法行为的功能。该raid控制器包括至少一个模块,该至少一个模块用于实现第一方面所述的数据恢复方法。

第四方面,提供了一种计算机系统,该计算机系统具有实现上述第二方面提供的数据恢复方法行为的功能。该计算机系统包括至少一个模块,该至少一个模块用于实现第二方面所述的数据恢复方法。

第五方面,提供了一种电子设备,该电子设备的结构中包括处理器和存储器,该存储器用于存储支持电子设备执行上述第一方面或第二方面所述的数据恢复的方法的程序,以及存储用于实现第一方面或第二方面所述的数据恢复的方法所涉及的数据。该处理器被配置为用于执行该存储器中存储的程序。该存储设备的操作装置还可以包括通信总线,该通信总线用于该处理器与存储器之间建立连接。

第六方面,提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行第一方面或第二方面所述的数据恢复的方法。

第七方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行第一方面或第二方面所述的数据恢复的方法。

附图说明

图1是本申请实施例提供的一种计算机系统的架构图;

图2是本申请实施例提供的一种引入安全区的磁盘的空间变化示意图;

图3是本申请实施例提供的一种数据恢复的方法流程图;

图4是本申请实施例提供的一种由于磁盘故障而导致raid系统失效的数据备份过程示意图;

图5是本申请实施例提供的一种由于磁盘故障而导致raid系统失效的数据恢复过程示意图;

图6是本申请实施例提供的另一种数据恢复的方法流程图;

图7是本申请实施例提供的另一种数据恢复过程示意图;

图8是本申请实施例提供的一种raid控制器的结构示意图;

图9是本申请实施例提供的一种电子设备的结构示意图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。

应当理解的是,本文提及的“多个”是指两个或两个以上。在本申请的描述中,除非另有说明,“/”表示或的意思,例如,a/b可以表示a或b;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,为了便于清楚描述本申请实施例的技术方案,在本申请的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。

在对本申请实施例进行解释说明之前,先对本申请实施例涉及的应用场景进行解释说明。

由于现代数据中心业务量的与日俱增,单台服务器上需要运行的数据也日益增多。当单个磁盘在容量和安全性上不足以支持服务器上的系统业务时,就需要将多个磁盘联合起来,对外作为一个可见的磁盘来使用,才可满足服务器的实际需要。磁盘组,就是将一组物理磁盘集合起来,作为一个整体对外体现,是虚拟磁盘的基础。虚拟磁盘,即使用磁盘组划分出来的连续的数据存储单元,相当于一个个独立的磁盘,通过一定的配置,使其具有较单个物理磁盘更大的容量,及更高的安全性和数据冗余性。

在raid技术中,利用虚拟化存储技术把多个硬盘组合起来,成为一个或多个硬盘阵列组,目的提升性能或数据冗余或是两者同时提升。

目前,raid系统配置有raid控制器。raid控制器中配置有缓存区(cache)。缓存区也称为高速缓存区。缓存区可以是静态随机存取存储器(staticrandomaccessmemory,sram)等访问速度较快的ram。

raid控制器通过缓存区对数据进行预读和回写,从而保障和提升读写性能。缓存区的大小通常为128mb~1gb不等。

采用预读方式的raid控制器,从磁盘中读取所需数据时,会把后续数据同时读出放在缓存区中,用户随后访问这些数据时可以在缓存区中命中,将减少磁盘寻道操作,从而节省响应时间,提高了数据读取速度。

采用回写方式的raid控制器,需要向磁盘写数据时,会先将数据写入缓存区中。当写入的数据积累到一定程度,raid控制器才将数据写入到磁盘中。这样不但实现了数据的批量写入,而且提升了数据写入的速度。

另外,raid控制器中的缓存区本身无法保障数据持久性。raid控制器异常掉电情况下会造成缓存区中的数据丢失。为了提供缓存区中的数据掉电保护能力,raid控制器通过超级电池供电,等待系统恢复供电后再把缓存区数据刷写到磁盘中。或者通过超级电容供电,将缓存区数据写入非易失性存储介质中,确保异常掉电情况下缓存区数据不丢。

容错是指在子系统出现磁盘错误或磁盘故障时,可以保证数据完整性和数据处理能力。服务器厂商通常使用raid控制器通过冗余的磁盘组在raid1、5、6、10、50、60上实现此功能。其中,raid1、5、6、10、50、60分别用于指示不同类型的raid,关于不同类型的raid的详细说明可以参考相关技术,本申请实施例对此不做过多说明。

需要说明的是,对于任一类型的raid,当出现故障的磁盘的个数不超过允许数量时,可以通过其他磁盘对发生故障中的磁盘中的数据进行恢复。当出现故障的磁盘的个数超过允许数量时,则不能通过其他磁盘对发生故障中的磁盘中的数据进行恢复。因此,每个类型的raid都有允许出现故障的磁盘的数量。

比如,在raid1中,由于数据镜像存储于成对的磁盘上,因此在成对的磁盘中的一个产生错误或损坏等故障时,不会造成数据丢失,也即是,raid1中允许1个磁盘存在故障。同理,在raid5中,允许1个磁盘故障;在raid6中,允许2个磁盘故障。

为了后续便于说明,在此对raid1和raid5进行解释说明。

在raid1中,将数据完全一致地分别写到工作磁盘和镜像磁盘,它的磁盘空间利用率为50%。如果工作磁盘发生故障,系统自动从镜像磁盘读取数据,从而不会影响用户工作。

在raid5中,数据以块为单位分布到各个磁盘上。raid5不对数据进行备份,而是把数据和与其相对应的奇偶校验信息存储到组成raid5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当raid5的一个磁盘损坏后,可利用剩下的磁盘中的数据和数据相应的奇偶校验信息去恢复被损坏的数据。

另外,raid状态分为在线(online)、降级(degrade)、失效(offline)。以raid5为例,由于raid5的允许数量为1,因此,正常情况(也即是没有磁盘发生故障)下raid状态为在线状态,1个磁盘故障情况下raid状态为降级状态,2个及以上磁盘故障情况下raid状态为失效状态。raid状态在失效状态的情况下,缓存区中的数据暂停写入磁盘,待raid状态恢复成降级状态或在线状态后,保留的缓存区中的数据将写入磁盘。由于降级状态下的raid可以继续进行数据存储,因此,可以将降级状态和在线状态统称为正常工作状态。

由于raid状态为失效状态后,缓存区中的数据暂停写入硬盘,此时,如何保护和恢复缓存区中的数据成为关键。

目前raid系统失效的原因有多种,因此对应的恢复操作也有差异:

1、对于多盘故障导致raid系统失效的场景,此时通过离线的磁盘重新加入raid系统中的磁盘组的方式即可实现恢复操作。这种场景下,raid控制器为了避免缓存区中的数据和新加入的磁盘数据不兼容,通常会要求清除缓存区中的数据才能导入磁盘的外部配置,从而导致缓存区中的数据丢失。也即是,raid控制器在raid系统失效后无法确认raid控制器的缓存区中的数据和磁盘数据是否兼容,为了保证系统的稳定性,在恢复raid系统的操作中需要清除缓存区中的数据,从而造成数据丢失。

2、raid控制器故障导致raid系统失效的场景,此时通过更换raid控制器即可实现恢复操作。但是直接更换raid控制器同样造成缓存区中的数据丢失。

在上述两种raid系统失效的场景中,即使raid状态恢复为在线或降级状态,由于缓存区中的数据已经丢失,因此也可能会遇到操作系统文件损坏导致操作系统无法启动、用户数据系统文件损坏导致数据丢失等问题,带来重大影响。因此,在恢复失效的raid系统的场景中,还需对缓存区中的数据进行备份,以便于后续对备份的数据进行恢复。本申请实施例提供的恢复失效的raid系统的方法就可以实现该技术效果。

为了后续便于说明,先对本申请实施例提供的用于实现数据恢复的方法的系统进行解释说明。

图1是本申请实施例提供的一种计算机系统的架构图。如图1所示,该系统100包括计算机装置101、raid控制器102和多个磁盘103。其中,raid控制器102和多个磁盘103构成本申请实施例提供的raid系统。

如图1所示,计算机装置101与raid控制器102之间进行通信,raid控制器102与任一磁盘103之间进行通信。其中,计算机装置101用于向raid控制器102发送读请求或写请求。raid控制器102用于根据读请求从磁盘103中读取数据或者根据写请求向磁盘103中写入数据。

如图1所示,raid控制器中配置有缓存区(cache)和对缓存区供电的电池或电容。电池或电容用于在raid控制器掉电时,向缓存区供电,以避免缓存区中的数据由于raid控制器掉电而丢失。

如图1所示,对于任一磁盘,该磁盘包括数据区、安全区和配置区。其中,数据区用于存储计算机装置101中的操作系统向磁盘中写入的数据。该数据区还可以称为用户数据区。安全区用于存储raid控制器的缓存区中的数据,以实现对raid控制器的缓存区中的数据的备份。配置区用于存储相应磁盘的raid配置信息,该raid配置信息可以包括磁盘所属的raid的类型、raid控制器型号等信息。

其中,配置区一般占用磁盘最后的512mb~1gb空间,传统的磁盘中除了配置区之外其他区域为数据区。本申请在数据区划分一部分空间作为备份缓存区中的数据的安全区。引入安全区的磁盘的空间变化过程如图2所示。

为了保证安全区中能够存储缓存区中的数据,每个磁盘中的安全区的容量(该容量还可以称为空间大小)可以和raid控制器中缓存区的容量保持一致。可选地,如果缓存区中的数据是分布式存储在不同的安全区中,此时,可以将安全区容量的限制条件设置为多个磁盘中配置的安全区的总容量大于或等于缓存区的容量;或者,为了进一步确保计算机系统的稳定性,还可以将安全区容量的限制条件设置为,当计算机系统中有不超过允许个数的磁盘发生故障时,剩下的磁盘中配置的安全区的总容量大于或等于缓存区的容量。

因此,在一种可能的实现方式中,raid控制器配置安全区的过程可以为:获取缓存区的容量,根据缓存区的容量配置每个磁盘中安全区的容量。此外,还根据raid的类型配置每个磁盘的配置区的容量,除了安全区和配置区之外剩下的容量可作为数据区的容量。

另外,如图1所示,对于任一磁盘,在数据区划分一部分空间作为备份缓存区中的数据的安全区时,该磁盘中的安全区的空间位置通常选择数据区的最后空间,以确保数据区的连续性。也即是,每个磁盘中配置的安全区对应的地址区间位于同一磁盘中配置的数据区对应的地址区间之后。

可选地,每个磁盘中配置的安全区对应的地址区间还可以位于同一磁盘中配置的数据区对应的地址区间之前,只需要保证每个磁盘中的数据区是完整的即可。也即是,本申请实施例并不限定安全区在磁盘中的具体位置。

此外,如图1所示,raid控制器还包括数据备份模块和数据恢复模块。数据备份模块用于将缓存区中的数据备份至磁盘的安全区。数据恢复模块将磁盘的安全区中备份的数据恢复至缓存区。通过数据备份模块和数据恢复模块可以实现本申请实施例提供的数据恢复的方法。另外,关于数据备份模块和数据恢复模块的具体功能将在下述实施例中详细说明,在此先不展开说明。

另外,图1是以5个磁盘组成的raid5这种类型的raid进行举例说明,这5个磁盘分别标记为磁盘1、磁盘2、磁盘3、磁盘4和磁盘5。需要说明的是,图1中的磁盘数量和raid5架构仅为叙述方便,本申请不对系统所采用的raid类型以及所包括的磁盘数量进行限制。

接下来对本申请实施例提供的数据恢复的方法进行解释说明。

图3是本申请实施例提供的一种数据恢复的方法流程图,应用于图1所示的系统中。如图3所示,该方法包括如下步骤:

步骤301:获取第一指令,该第一指令用于指示raid控制器所在的raid系统失效。

基于上述内容可知,raid控制器可以在两种场景中获取到第一指令。一种失效场景是raid系统中的磁盘发生故障。此时,raid系统失效是指多个磁盘中发生故障的磁盘的数量大于允许数量。该允许数量即为raid系统中允许发生故障的磁盘的数量。

比如,对于raid5这种类型的raid,由于允许发生故障的磁盘的数量为1,因此,当raid中有1个磁盘发生故障时,此时,raid控制器不会检测到第一指令。当raid中有2个磁盘发生故障时,发生故障的磁盘的数量超过了允许数量1,此时,raid控制器将检测到第一指令。

对于raid5这种类型的raid,如图4所示,当磁盘2发生故障时,此时raid处于降级状态,仍然可以正常工作。当磁盘3也发生故障时,raid系统将无法正常工作,也即是无法对外提供存储功能,此时计算机装置中的操作系统的写请求将不会下发。这种情况下,raid控制器将检测到第一指令。

又比如,对于raid6这种类型的raid,由于允许发生故障的磁盘的数量为2,因此,当raid中有1或2个磁盘发生故障时,此时,raid控制器不会检测到第一指令。当raid中有3个磁盘发生故障时,发生故障的磁盘的数量超过了允许数量2,此时,raid控制器将检测到第一指令。

需要说明的是,raid控制器中的磁盘发生故障可以是指该磁盘掉线,也可以是指该磁盘返回的数据有误。无论哪种情况,raid控制器均可以通过与该磁盘之间的接口反馈的信号来确定磁盘是否发生故障。

另一种失效场景是raid系统中的raid控制器发生故障。其中,raid控制器发生故障可以是指raid控制器中某一硬件无法响应或者是其他原因导致的raid控制器无法正常进行数据处理,这种场景下,raid控制器中用于管理各个模块的控制中心如果还正常工作,此时raid控制器中的控制中心将生成该第一指令。另外,如果raid控制器发生故障时,整个raid控制器都无法正常工作,此时,可以通过计算机装置来生成该第一指令,以通过下述步骤302对第一缓存数据进行备份。

步骤302:将缓存区中的第一缓存数据存储至多个磁盘中未发生故障的第一磁盘的安全区。

在本申请实施例中,为了避免恢复失效的raid系统的过程中导致缓存区中的数据丢失,因此,在通过步骤301获取到第一指令时,raid控制器便可通过步骤302对缓存区中的数据进行备份。如图1所示,步骤302具体实现可以通过raid控制器中的数据备份模块来实现。

此外,为了能够灵活对磁盘中的安全区进行管理,raid控制器中还配置有用于启用安全区的接口,该接口可以为逻辑接口。因此,当通过步骤301获取到第一指令时,raid控制器可以先通过该接口确定启用安全区,然后再通过步骤302来备份第一缓存数据。

由步骤301可知,raid系统失效可能是由于磁盘发生故障导致的,因此,为了保证第一缓存数据能够成功备份至磁盘,需要将第一缓存数据存储至多个磁盘中未发生故障的第一磁盘的安全区。该第一磁盘还可以称为有效磁盘。其中,第一磁盘可以包括一个或多个磁盘。

对于由于磁盘发生故障导致的raid系统失效,此时,第一磁盘是指多个磁盘中没有发生的故障。比如,对于图1所示的raid5这种类型的raid,假设是磁盘2和磁盘3发生故障,此时,第一磁盘是指磁盘1、磁盘4和磁盘5中的一个或者多个磁盘。

对于由于raid控制器发生故障导致的raid系统失效,此时,第一磁盘是指raid系统中本来就包括的多个磁盘。比如,对于图1所示的raid5这种类型的raid,这种场景下,第一磁盘包括磁盘1、磁盘2、磁盘3、磁盘4和磁盘5中的一个或多个磁盘。

此外,在步骤301中,将第一缓存数据存储至多个磁盘中的第一磁盘的安全区可以是指从各个第一磁盘中选择的一个第一磁盘来存储第一缓存数据。此时,第一缓存数据是备份在一个磁盘的安全区的。

可选地,为了提高写入第一缓存数据的效率,也可以采用分布式存储的方式来备份第一缓存数据。也即是,将第一缓存数据划分成多个数据块,然后按照一定的规则将这多个数据块分布存储在多个第一磁盘中。如图4所示,当前第一磁盘为3个,为图1中的磁盘1、磁盘4和磁盘5,采用分布式存储可以将第一缓存数据划分成数据块分别存储在磁盘1、磁盘4和磁盘5中。比如,第一缓存数据划分之后的多个数据块为7个,分别标记为数据块1、数据块2、数据块3、数据块4、数据块5、数据块6、数据块7。此时按照磁盘1、磁盘4和磁盘5顺序依次向每个磁盘中写入一个数据块,最终将数据块1、数据块4、数据块7存储至磁盘1。将数据块2、数据块5存储至磁盘4。将数据块3、数据块6存储至磁盘5。

另外,在将第一缓存数据存储至安全区时,还可以通过增加校验机制的方式来存储第一缓存数据。也即是,在存储第一缓存数据时,还可以存储针对第一缓存数据的校验信息。以便于第一缓存数据中部分数据丢失时,可以通过校验信息对第一缓存数据进行恢复。关于通过增加校验机制的方式来存储第一缓存数据的具体实现方式在此就不再详细说明。

通过图3所示的实施例,可以实现在raid系统失效的情况下,对缓存区中的数据进行备份,以避免后续恢复raid系统过程中,缓存区中的数据出现丢失。

图3所示的实施例用于解释说明在raid系统失效的情况下,如何对缓存区中的数据进行备份。当失效的raid系统恢复正常工作时,便可通过备份的数据对缓存区中的数据进行恢复。下述实施例用于对该过程进行详细解释说明。此外,如图1所示,下述实施例可以通过raid控制器中的数据恢复模块来实现。

图6是本申请实施例提供的另一种数据恢复的方法流程图,用于对通过备份的数据对缓存区中的数据进行恢复的过程进行解释说明。如图6所示,该方法包括如下步骤:

步骤601:获取第二指令,第二指令用于指示raid系统恢复正常工作。

通过上述步骤302可以实现对第一缓存数据的备份。由于第一缓存数据已经备份,因此,技术人员可以直接对失效的raid系统进行恢复,以使失效的raid系统恢复正常工作。因此,当raid系统恢复正常工作时,raid控制器将获取到步骤601中的第二指令。其中,技术人员可以通过恢复发生故障的磁盘或更换发生故障的raid控制器来恢复失效的raid系统,具体方式根据失效的场景来确定。也即是,步骤601中的raid恢复正常工作是指恢复故障磁盘后多个磁盘中存在故障的磁盘的数量小于或等于步骤301中的允许数量,或者,是指发生故障的raid控制器已被更换。

对于由于磁盘出现故障而导致raid系统失效的场景,技术人员可以通过恢复磁盘来恢复raid系统。由于这种场景下的raid系统失效是指多个磁盘中发生故障的磁盘的数量大于允许数量,因此,这种场景下raid系统恢复正常工作是指恢复磁盘后多个磁盘中存在故障的磁盘的数量小于或等于该允许数量。

其中,磁盘出现故障的原因有多种可能,例如磁盘存在坏块导致读写操作失败,从而被raid控制器踢出raid组。此时技术人员可以通过重新插拔磁盘后,该磁盘如果被raid控制器重新正常识别为带有raid配置的磁盘,进一步导入磁盘的raid配置即可恢复raid组。技术人员也可以将存在坏块的磁盘中的数据全盘镜像到新的磁盘,再将新的磁盘插入raid控制器尝试恢复。

此外,对于多个磁盘出现故障导致raid系统失效的情况,由于最后发生故障的磁盘中可能记录有当前需要的数据,因此在恢复磁盘时可以按照出现故障的时间距离当前时间从近到远的顺序进行恢复,以便于后续操作系统能够获取到需要的数据。也即是,先恢复后发生故障的磁盘,再恢复先发生故障的磁盘,直至发生故障的磁盘的数量小于或等于该允许数量。

比如,对于图1所示的raid5这种类型的raid,如图4所示,假设由于磁盘2和磁盘3出现故障而导致raid系统失效,且磁盘3是最后出现故障的磁盘。因此,如图5所示,在恢复磁盘时,先对磁盘3进行恢复。在恢复磁盘3之后,此时raid系统的状态由失效状态转换为降级状态,raid系统恢复正常工作。

步骤602:从第一磁盘的安全区中获取第一缓存数据。

恢复正常工作后,raid控制器便可获取预先备份的第一缓存数据,以通过下述步骤对第一缓存数据进行恢复。其中,raid控制器获取预先备份的第一缓存数据的具体实现方式和图3所示的实施例中存储第一缓存数据的方式有关,在此不再详细说明。

比如,对于图4所示的分布式存储第一缓存数据的方式,如图5所示,由于第一缓存数据分布式存储在磁盘1、磁盘4和磁盘5中,因此,数据恢复模块可以从磁盘1、磁盘4以及磁盘5中获取第一缓存数据。

步骤603:对第一缓存数据进行恢复。

对于不同的失效场景,可以通过不同的方式将第一缓存数据存储至恢复正常工作的raid系统中的磁盘的数据区,具体实现方式详见下述说明。

针对由于磁盘出现故障而导致raid系统失效的场景,由于恢复磁盘后可能会出现磁盘中数据与原缓存区中的数据不兼容的情况,因此,在本申请实施例中,在该场景中,缓存区中的数据在恢复磁盘之前不清除,以便于后续根据缓存区中的数据和第一缓存数据是否一致来确定是否将第一缓存数据落盘。

此时,步骤603的实现方式可以为:获取恢复磁盘后缓存区中的第二缓存数据;当第二缓存数据和第一缓存数据一致时,将第一缓存数据存储至恢复磁盘后的多个磁盘中的数据区。

在获取到恢复磁盘后缓存区中的第二缓存数据后,便可判断第一缓存数据和第二缓存数据是否一致,如果第二缓存数据和第一缓存数据一致,表明恢复后的磁盘中的数据与第一缓存数据不冲突,此时则可以将第一缓存数据写入恢复磁盘后的多个磁盘中没有故障的磁盘的数据区。

相应地,如果第二缓存数据和第一缓存数据不一致,表明恢复后的磁盘中的数据与第一缓存数据冲突,此时可以生成缓存数据落盘提示信息,缓存数据落盘提示信息用于提示是否将第一缓存数据落盘;向管理员端发送缓存数据落盘提示信息;如果接收到管理员端发送的确认消息,该确定消息用于指示将第一缓存数据存储至恢复正常工作后的多个磁盘中的数据区,此时则将第一缓存数据落盘。

也即是,在恢复后的磁盘中的数据与第一缓存数据不冲突的情况下,直接恢复第一缓存数据。在恢复后的磁盘中的数据与第一缓存数据冲突的情况下,在用户提示可以落盘的情况下才恢复第一缓存数据。

此外,在上述恢复后的磁盘中的数据与第一缓存数据冲突的情况下,在向管理员端发送缓存数据落盘提示信息后,如果接收到管理员端发送的舍弃消息,该舍弃消息用于指示清除第一缓存数据,此时则清除第一缓存数据。也即是,在恢复后的磁盘中的数据与第一缓存数据冲突的情况下,如果用户指示无需落盘,此时则无需对第一缓存数据进行恢复。

上述数据恢复过程可以通过图7所示的数据恢复示意图来实现。如图7所示,数据恢复过程可以包括以下几个步骤:

步骤701:获取安全区中的第一缓存数据。

步骤702:获取缓存区中的第二缓存数据。

步骤703:判断第一缓存数据和第二缓存数据是否一致。

步骤704:如果第一缓存数据和第二缓存数据一致,则将第一缓存数据写入磁盘。

步骤705:如果第一缓存数据和和第二缓存数据不一致,则提示用户是否将第一缓存数据落盘。

步骤706:如果用户确认需要落盘第一缓存数据,则将第一缓存数据写入磁盘。

步骤707:如果用户确认无需落盘第一缓存数据,则清除第一缓存数据。

关于图7所示的数据恢复示意图中的各个步骤已在上述步骤601至步骤603中进行了详细说明,在此就不再重复说明了。

其中,raid控制器中可以配置外部接口。该外部接口用于和管理员端连接,以实现上述raid控制器与管理员端之间的通信。

可选地,在对于由于磁盘故障而导致raid系统失效的场景中,raid控制器也可以强制将第一缓存数据直接写入磁盘,而不判断恢复后的磁盘中的数据与第一缓存数据是否存在冲突。也即是,在获取到第一缓存数据之后,直接将第一缓存数据存储至恢复故障磁盘后的多个磁盘中的数据区。

上述是针对由于磁盘出现故障而导致raid系统失效的场景来解释说明如何恢复第一缓存数据。可选地,如果是由于raid控制器发生故障而导致raid系统失效,此时,更换raid控制器后,也即是在raid系统恢复正常工作后,在获取到第一缓存数据之后,可以将第一缓存数据存储至恢复正常工作后的多个磁盘中的数据区。由于更换后的raid控制器中也配置有缓存区,因此将第一缓存数据存储至恢复正常工作后的多个磁盘中的数据区的实现方式可以为:raid控制器将第一缓存数据写入更换后的raid控制器中的缓存区中,以便于后续在检测到缓存区数据落盘指令的情况下,将更换后的raid控制器中的缓存区中的数据写入更换raid控制器后的raid中磁盘中的数据区。

其中,缓存区数据落盘指令可以由控制器自动触发。比如,raid控制器可以周期性地生成该缓存区数据落盘指令。或者,也可以在检测到缓存区中的数据的大小超过阈值时,生成该缓存区数据落盘指令。

此外,在通过上述步骤601和步骤603对安全区中的第一缓存数据进行恢复之后,为了便于下一次出现失效时能够及时备份缓存区中的数据,可以清除一个或多个有效磁盘的安全区中存储的第一缓存数据。也即是,在每次恢复第一缓存数据之后,均及时清除安全区中的数据。这样后续再次出现失效时,便可直接在清零的安全区中继续备份缓存区中的数据。

可选地,在通过上述步骤601和步骤603对安全区中的第一缓存数据进行恢复之后,也可以不清除安全区中的数据。这种情况下,可以直接采用覆盖的方式继续向安全区中写入本次备份的数据。但是,为了避免在后续恢复数据时能够准确获取到本次备份的数据,而不是安全区中存储的全部数据,在本次向安全区中存储备份数据时,需要对本次存储数据的起始位置和终止位置进行标记。

在图6所示的实施例中,由于在数据恢复之前,已经对缓存区中的数据进行了备份,因此在失效的raid恢复正常工作后,便可通过上述实施例来实现缓存区中的数据的恢复。

图8是本申请实施例提供的一种raid控制器的结构示意图。raid控制器和多个磁盘连接,这多个磁盘的每个磁盘中配置有数据区和安全区,raid控制器中配置有缓存区。如图8所示,该raid控制器800包括:

获取模块801,用于获取第一指令,第一指令用于指示raid控制器所在的raid系统失效,其中,raid系统失效是指多个磁盘中发生故障的磁盘的数量大于允许数量。具体实现方式可以参考图3实施例中的步骤301。

存储模块802,用于将缓存区中的第一缓存数据存储至多个磁盘中未发生故障的第一磁盘的安全区。具体实现方式可以参考图3实施例中的步骤302。

可选地,

获取模块,还用于获取第二指令,第二指令用于指示raid系统恢复正常工作,其中,raid系统恢复正常工作是指恢复故障磁盘后多个磁盘中存在故障的磁盘的数量小于或等于允许数量。具体实现方式可以参考图6实施例中的步骤601。

获取模块,还用于从第一磁盘的安全区中获取第一缓存数据。具体实现方式可以参考图6实施例中的步骤602以及图7实施例中的步骤701。

存储模块,还用于将第一缓存数据存储至恢复磁盘后的多个磁盘中的数据区。具体实现方式可以参考图6实施例中的步骤603以及图7实施例中的步骤702至步骤706。

可选地,获取模块,还用于获取恢复磁盘后缓存区中的第二缓存数据;具体实现方式可以参考图7实施例中的步骤702。

存储模块,还用于当第一缓存数据和第二缓存数据一致时,将第一缓存数据存储至恢复磁盘后的多个磁盘中的数据区。具体实现方式可以参考图7实施例中的步骤704。

可选地,raid控制器还包括:

发送模块,用于当第二缓存数据和第一缓存数据不一致时,向管理员端发送缓存数据落盘提示信息,缓存数据落盘提示信息用于提示是否将第一缓存数据落盘;具体实现方式可以参考图7实施例中的步骤705。

存储模块,还用于当接收到确认消息时,执行将第一缓存数据存储至恢复磁盘后的多个磁盘中的数据区的操作。该确认消息用于指示将第一缓存数据存储至恢复正常工作后的多个磁盘中的数据区。具体实现方式可以参考图7实施例中的步骤706。

可选地,该raid控制器还包括接收模块,用于接收舍弃消息,舍弃消息用于指示清除第一缓存数据。具体实现方式可以参考图7实施例中的步骤707。

可选地,多个磁盘中配置的安全区的总容量大于或等于缓存区的容量,以保证各个安全区中能够存储缓存区中的数据。

可选地,每个磁盘中配置的安全区对应的地址区间位于同一磁盘中配置的数据区对应的地址区间之后,以确保数据区的连续性。

在本申请中,为了避免恢复失效的raid系统的过程中导致缓存区中的数据丢失,在磁盘中配置有安全区,该安全区用于在恢复失效的raid系统的过程中,对raid控制器的缓存区中的数据进行备份。因此,在检测到用于指示raid系统失效的第一指令的情况下,便可将缓存区中的数据备份至安全区,然后再对raid系统进行恢复。如此,后续在raid系统恢复正常工作后,便可从安全区中获取已经备份的缓存区中的数据,以避免由于缓存区中的数据丢失而出现操作系统无法启动或用户数据丢失等问题。

需要说明的是:上述实施例提供的raid控制器在数据恢复时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的raid控制器与数据恢复的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。

图9是本申请实施例提供的一种电子设备的结构示意图。上述实施例中的raid控制器或计算机装置均可以通过图9所示的电子设备来实现。参见图9,该电子设备包括至少一个处理器901,通信总线902、存储器903以及至少一个通信接口904。

处理器901可以是一个通用中央处理器(centralprocessingunit,cpu)、特定应用集成电路(application-specificintegratedcircuit,asic)或一个或多个用于控制本申请方案程序执行的集成电路。

通信总线902可包括一通路,在上述组件之间传送信息。

存储器903可以是只读存储器(read-onlymemory,rom)或可存储静态信息和指令的其它类型的静态存储设备,随机存取存储器(randomaccessmemory,ram)或者可存储信息和指令的其它类型的动态存储设备,也可以是电可擦可编程只读存储器(electricallyerasableprogrammableread-onlymemory,eeprom)、只读光盘(compactdiscread-onlymemory,cd-rom)或其它光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘或者其它磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其它介质,但不限于此。存储器903可以是独立存在,通过通信总线902与处理器901相连接。存储器903也可以和处理器901集成在一起。

其中,存储器903用于存储执行本申请方案的程序代码,并由处理器901来控制执行。处理器901用于执行存储器903中存储的程序代码。程序代码中可以包括一个或多个软件模块。上述raid控制器可以通过处理器901以及存储器903中的程序代码中的一个或多个软件模块,来确定用于开发应用的数据。这一个或多个软件模块可以为图8中的任一模块。

通信接口904,使用任何收发器一类的装置,用于与其它设备或通信网络通信,如以太网,无线接入网(radioaccessnetwork,ran),无线局域网(wirelesslocalareanetworks,wlan)等。

在具体实现中,作为一种实施例,电子设备可以包括多个处理器,例如图9中所示的处理器901和处理器905。这些处理器中的每一个可以是一个单核(single-cpu)处理器,也可以是一个多核(multi-cpu)处理器。这里的处理器可以指一个或多个设备、电路、和/或用于处理数据(例如计算机程序指令)的处理核。

上述的电子设备可以是一个通用电子设备或者是一个专用电子设备。在具体实现中,电子设备可以是台式机、便携式电脑、网络服务器、掌上电脑(personaldigitalassistant,pda)、移动手机、平板电脑、无线终端设备、通信设备或者嵌入式设备。本申请实施例不限定电子设备的类型。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意结合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如:同轴电缆、光纤、数据用户线(digitalsubscriberline,dsl))或无线(例如:红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如:软盘、硬盘、磁带)、光介质(例如:数字通用光盘(digitalversatiledisc,dvd))、或者半导体介质(例如:固态硬盘(solidstatedisk,ssd))等。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

以上所述为本申请提供的实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1