一种双控存储设备的掉电保护的方法及装置与流程

文档序号:11829551阅读:345来源:国知局
一种双控存储设备的掉电保护的方法及装置与流程

本发明涉及计算机领域,特别是涉及一种双控存储设备的掉电保护的方法及装置。



背景技术:

内存是高性能的存储介质,利用内存做缓存可以提高系统的性能,缩短IO路径,将用户访问的IO缓存在内存中,当用户下次访问时,就可以直接从内存中获取数据,而不用去性能低的硬盘中读取数据。但在掉电时,内存中的数据会丢失。由于内存缓存能给系统带来性能的提升,但又存在掉电丢失数据的风险,所以需要设计掉电保护机制来实现性能的提升的同时,又保证数据的可靠性。

现有技术中,提供了一种硬件掉电保护方案,这种方法是在设备上提供备用电池/超级电容,在设备掉电的时候,利用电池/超级电容给内存和复杂可编程逻辑器件(Complex Programmable Logic Device,CPLD)供电,系统中央处理器(Central Processing Unit,CPU)不供电,利用CPLD或基本输入输出系统(Basic Input Output System,BIOS)将内存中的数据拷贝到闪存中,但是这种方案,需要硬件支持掉电保护功能。

此外,现有技术中还提供了一种双控掉电保护方案。这种方案中两个控制器之间的缓存需要保证数据的一致性。然而在异常掉电时,两个控制器之间的内存可能存在数据不一致的情况,此时,当系统来电后,如何判断以哪个控制器作为数据恢复的标准成为至关重要的问题。已有的方案是只考虑一端控制器宕机后,另一端接管控制器,记下标志位,在异常掉电时,正常控制器进入掉电保护,然后两端控制器都正常上电,通过标志位来判断从哪个控制器进行数 据恢复。但是该方案只考虑了故障切换或者单控场景下的数据一致性,没有考虑双控同时异常掉电时,如何判断以哪个控制器作为数据恢复的标准。

此外,对于内存数据的保护,现有技术中也提供了两种方案,其一是通过非易失存储介质做高速缓存(cache)来避免掉电内存中的数据丢失。但是这种方案的成本高,且闪存做cache,闪存的写次数限制和寿命是问题。其二是通过内存空间的方式实现cache。内存空间是在系统的IO流程中间,增加一个cache模块,cache模块需要的内存都是通过动态申请或者静态申请得到,cache模块再通过哈希函数(hash)或者二叉树的方式将这些内存页以链表的方式关联。利用内存空间实现的cache模块,在发生异常掉电时,需要通过hash、二叉树或者链表的方式查找cache中需要保护的用户数据,造成了掉电保护的巨大时间开销。



技术实现要素:

本发明实施例提供一种双控存储设备的掉电保护方法及装置,用以解决现有技术中存在的掉电保护过程费时且可能无法正确恢复数据的问题。

本发明实施例提供的具体技术方案如下:

一种双控存储设备的掉电保护的方法,包括:

当检测到备用电池开始向主板供电时,主板上的CPU将内存设置为只读模式,将两个控制器内存盘中的掉电保护开始标志位置为第一指定值,将所述两个控制器内存盘中的所有虚拟内存盘中的数据存入对应的闪存中,以及将掉电保护完成标志位置为第二指定值,其中,每个控制器内存盘包括预设数目的虚拟内存盘;

当系统供电恢复时,CPU启动系统,CPU对所述两个控制器内存盘中的所述掉电保护开始标志位和所述掉电保护完成标志位进行检测,当CPU检测到所述两个控制器内存盘中所述掉电保护开始标志位当前被置为第一指定值,以及所述掉电保护完成标志位被置为第二指定值时,确定所述两个控制器内存 盘在启动之前均发生异常掉电;

CPU针对所述两个控制器内存盘中划分的各个虚拟内存盘,分别判断每一组虚拟内存盘中包含的两个虚拟内存盘的标记控制器序号是否一致,其中,每一组虚拟内存盘包括分别归属于两个控制器内存盘的两个虚拟内存盘;所述标记控制器序号是指一组虚拟内存盘中与独立磁盘冗余阵列RAID绑定的虚拟内存盘所在控制器内存盘的序号;

每确定一组虚拟内存盘中包含的两个虚拟内存盘的标记控制器序号一致时,CPU进一步在所述一组虚拟内存盘中,确定归属于所述标记控制器序号对应的控制器内存盘中的虚拟内存盘,并将闪存中对应所述虚拟内存盘保存的数据,恢复至所述标记控制器序号对应的控制器内存盘中的虚拟内存盘内,直至全部数据恢复完毕。

因此,掉电保护时,将控制器内存盘中虚拟内存盘的对应的数据写入闪存,缩短掉电保护的时间,提高掉电的效率。在数据恢复过程中,由于双端控制器在掉电那一时刻缓存数据可能不一致,本发明中,虚拟内存盘的标记控制器序号,会随着控制器内存盘和绑定RAID的切换而变更,通过判断超级块中各个虚拟内存盘的标记控制器序号,来选择内存盘恢复数据所在的控制器。针对这种判断方法,可以更加准确的判断出各个虚拟内存盘中用户数据的新旧。

较佳的,进一步包括:

待全部数据恢复完毕后,CPU分别针对所述两个控制器内存盘中的每一个虚拟内存盘中恢复的数据进行分析,获得每一个虚拟内存盘中的元数据,所述元数据用于描述用户数据的状态;

根据获得的每一个虚拟内存盘中的元数据,分别确定每一个虚拟内存盘中需要写入硬盘的第一数据部分,并将每一个虚拟内存盘对应的第一数据部分写入硬盘的对应位置;

待写入完毕后,清空所述掉电保护开始标志位和所述掉电保护完成标志位的当前取值。

较佳的,进一步包括:

每确定存在一组虚拟内存盘中的两个虚拟内存盘的的标记控制器序号不一致时,CPU进一步确定所述一组虚拟内存盘中,位于指定的主控制器内存盘的虚拟内存盘,并将闪存中对应所述指定的主控制器内存盘的虚拟内存盘保存的数据,恢复至所述指定的主控制器内存盘的虚拟内存盘内。

较佳的,在将掉电保护完成标志位置为第二指定值之后,进一步包括:

CPU检测系统供电是否恢复,若确定系统供电未恢复时,确定将系统关闭,否则重新启动系统。

因此,掉电保护结束后,通过判断电源情况,确定系统重启还是关机。当系统重新来电后,进行重启操作,保证业务的继续运行;当系统未来电时,进行关机操作,减少电池供电,延长电池使用寿命。

较佳的,进一步包括:

若CPU将掉电保护开始标志位置为第一指定值后,检测到第一控制器内存盘宕机,则将第二控制器内存盘中的所有虚拟内存盘中的数据存入对应的闪存中,并将掉电保护完成标志位置为第二指定值;

当系统供电恢复时,CPU启动系统,当CPU检测到所述第二控制器内存盘中的所述掉电保护开始标志位当前被置为第一指定值,以及所述掉电保护完成标志位被置为第二指定值时,确定所述第二控制器内存盘在启动之前发生异常掉电;

CPU分别确定所述第二控制器内存盘中的每一个虚拟内存盘,并将闪存中对应所述第二控制器内存盘中每一个虚拟内存盘保存的数据,恢复至相应的所述第二控制器内存盘中每一个虚拟内存盘内,直至全部数据恢复完毕。

较佳的,当系统供电恢复时,CPU启动系统,CPU对所述两个控制器内存盘中的所述掉电保护开始标志位和所述掉电保护完成标志位进行检测,进一步包括:

当系统供电恢复时,CPU启动系统,CPU对所述两个控制器内存盘中的 所述掉电保护开始标志位和所述掉电保护完成标志位进行检测,当CPU只检测到一个控制器内存盘中所述掉电保护开始标志位当前被置为第一指定值,以及所述掉电保护完成标志位被置为第二指定值时,则确定所述一个控制器内存盘在启动之前发生异常掉电;

CPU分别确定所述一个控制器内存盘中的每一个虚拟内存盘,并将闪存中对应所述一个控制器内存盘中每一个虚拟内存盘保存的数据,恢复至相应的所述一个控制器内存盘中每一个虚拟内存盘内,直至全部数据恢复完毕。

较佳的,进一步包括:

在检测到备用电池开始向主板供电之前,CPU将系统内的两个控制器内存盘分割成若干块虚拟内存盘;

分别在每一组虚拟内存盘中,选取归属于指定控制器内存盘的一个虚拟内存盘与一个RAID进行绑定,并对应每一组虚拟内存盘中的两个虚拟内存盘均记录相应的指定控制器内存盘的标记控制器序号。

较佳的,进一步包括:

在检测到备用电池开始向主板供电之前,若CPU接收到写入用户数据的请求,CPU确定所述请求对应的一组虚拟内存盘,以及将所述用户数据写入所述一组虚拟内存盘中与所述一个RAID绑定的一个虚拟内存盘内,写入完毕后,再将所述用户数据镜像写入所述一组虚拟内存盘内的另一虚拟内存盘内。

较佳的,进一步包括:

在检测到备用电池开始向主板供电之前,若CPU检测到非自身管辖的另一个控制器内存盘发生故障,则通知发生故障的所述另一个控制器内存盘中已与RAID绑定的每一个虚拟内存盘解除绑定,并通知自身管辖的控制器内存盘中分别与所述每一个虚拟内存盘归属于同一组的各个虚拟内存盘与对应的RAID建立绑定关系,以及更新每一组虚拟内存盘的标记控制器序号。

一种双控存储设备的掉电保护的装置,包括:

掉电保护单元,用于当检测到备用电池开始向主板供电时,将内存设置为 只读模式,将两个控制器内存盘中的掉电保护开始标志位置为第一指定值,将所述两个控制器内存盘中的所有虚拟内存盘中的数据存入对应的闪存中,以及将掉电保护完成标志位置为第二指定值,其中,每个控制器内存盘包括预设数目的虚拟内存盘;

数据恢复单元,用于当系统供电恢复时,启动系统,对所述两个控制器内存盘中的所述掉电保护开始标志位和所述掉电保护完成标志位进行检测,当检测到所述两个控制器内存盘中所述掉电保护开始标志位当前被置为第一指定值,以及所述掉电保护完成标志位被置为第二指定值时,确定所述两个控制器内存盘在启动之前均发生异常掉电;

以及针对所述两个控制器内存盘中划分的各个虚拟内存盘,分别判断每一组虚拟内存盘中包含的两个虚拟内存盘的标记控制器序号是否一致,其中,每一组虚拟内存盘包括分别归属于两个控制器内存盘的两个虚拟内存盘;所述标记控制器序号是指一组虚拟内存盘中与独立磁盘冗余阵列RAID绑定的虚拟内存盘所在控制器内存盘的序号;每确定一组虚拟内存盘中包含的两个虚拟内存盘的标记控制器序号一致时,进一步在所述一组虚拟内存盘中,确定归属于所述标记控制器序号对应的控制器内存盘中的虚拟内存盘,并将闪存中对应所述虚拟内存盘保存的数据,恢复至所述标记控制器序号对应的控制器内存盘中的虚拟内存盘内,直至全部数据恢复完毕。

因此,掉电保护时,将控制器内存盘中虚拟内存盘的对应的数据写入闪存,缩短掉电保护的时间,提高掉电的效率。在数据恢复过程中,由于双端控制器在掉电那一时刻缓存数据可能不一致,本发明中,虚拟内存盘的标记控制器序号,会随着控制器内存盘和绑定RAID的切换而变更,通过判断超级块中各个虚拟内存盘的标记控制器序号,来选择内存盘恢复数据所在的控制器。针对这种判断方法,可以更加准确的判断出各个虚拟内存盘中用户数据的新旧。

较佳的,进一步包括:

数据处理单元,用于待全部数据恢复完毕后,分别针对所述两个控制器内 存盘中的每一个虚拟内存盘中恢复的数据进行分析,获得每一个虚拟内存盘中的元数据,所述元数据用于描述用户数据的状态;

根据获得的每一个虚拟内存盘中的元数据,分别确定每一个虚拟内存盘中需要写入硬盘的第一数据部分,并将每一个虚拟内存盘对应的第一数据部分写入硬盘的对应位置;

待写入完毕后,清空所述掉电保护开始标志位和所述掉电保护完成标志位的当前取值。

较佳的,所述数据恢复单元进一步用于:

每确定存在一组虚拟内存盘中的两个虚拟内存盘的的标记控制器序号不一致时,进一步确定所述一组虚拟内存盘中,位于指定的主控制器内存盘的虚拟内存盘,并将闪存中对应所述指定的主控制器内存盘的虚拟内存盘保存的数据,恢复至所述指定的主控制器内存盘的虚拟内存盘内。

较佳的,在将掉电保护完成标志位置为第二指定值之后,进一步包括:

供电判断单元,用于检测系统供电是否恢复,若确定系统供电未恢复时,确定将系统关闭,否则重新启动系统。

因此,掉电保护结束后,通过判断电源情况,确定系统重启还是关机。当系统重新来电后,进行重启操作,保证业务的继续运行;当系统未来电时,进行关机操作,减少电池供电,延长电池使用寿命。

较佳的,所述掉电保护单元和所述数据恢复单元进一步用于:

所述掉电保护单元,用于若将掉电保护开始标志位置为第一指定值后,检测到第一控制器内存盘宕机,则将第二控制器内存盘中的所有虚拟内存盘中的数据存入对应的闪存中,并将掉电保护完成标志位置为第二指定值;

所述数据恢复单元,用于当系统供电恢复时,启动系统,当检测到所述第二控制器内存盘中的所述掉电保护开始标志位当前被置为第一指定值,以及所述掉电保护完成标志位被置为第二指定值时,确定所述第二控制器内存盘在启动之前发生异常掉电;

以及分别确定所述第二控制器内存盘中的每一个虚拟内存盘,并将闪存中对应所述第二控制器内存盘中每一个虚拟内存盘保存的数据,恢复至相应的所述第二控制器内存盘中每一个虚拟内存盘内,直至全部数据恢复完毕。

较佳的,当系统供电恢复时,启动系统,对所述两个控制器内存盘中的所述掉电保护开始标志位和所述掉电保护完成标志位进行检测,所述数据恢复单元,进一步用于:

当系统供电恢复时,启动系统,对所述两个控制器内存盘中的所述掉电保护开始标志位和所述掉电保护完成标志位进行检测,当只检测到一个控制器内存盘中所述掉电保护开始标志位当前被置为第一指定值,以及所述掉电保护完成标志位被置为第二指定值时,则确定所述一个控制器内存盘在启动之前发生异常掉电;

分别确定所述一个控制器内存盘中的每一个虚拟内存盘,并将闪存中对应所述一个控制器内存盘中每一个虚拟内存盘保存的数据,恢复至相应的所述一个控制器内存盘中每一个虚拟内存盘内,直至全部数据恢复完毕。

较佳的,进一步包括:

绑定单元,用于在检测到备用电池开始向主板供电之前,将系统内的两个控制器内存盘分割成若干块虚拟内存盘;

分别在每一组虚拟内存盘中,选取归属于指定控制器内存盘的一个虚拟内存盘与一个RAID进行绑定,并对应每一组虚拟内存盘中的两个虚拟内存盘均记录相应的指定控制器内存盘的标记控制器序号。

较佳的,进一步包括:

写入单元,用于在检测到备用电池开始向主板供电之前,若接收到写入用户数据的请求,确定所述请求对应的一组虚拟内存盘,以及将所述用户数据写入所述一组虚拟内存盘中与所述一个RAID绑定的一个虚拟内存盘内,写入完毕后,再将所述用户数据镜像写入所述一组虚拟内存盘内的另一虚拟内存盘内。

较佳的,进一步包括:

故障切换单元,用于在检测到备用电池开始向主板供电之前,若检测到非自身管辖的另一个控制器内存盘发生故障,则通知发生故障的所述另一个控制器内存盘中已与RAID绑定的每一个虚拟内存盘解除绑定,并通知自身管辖的控制器内存盘中分别与所述每一个虚拟内存盘归属于同一组的各个虚拟内存盘与对应的RAID建立绑定关系,以及更新每一组虚拟内存盘的标记控制器序号。

附图说明

图1为本发明实施例中的双控制器内存盘数据分布图;

图2为本发明实施例中的双控存储设备的掉电保护的概述流程图;

图3为本发明实施例中的双控存储设备的掉电保护的结构示意图。

具体实施方式

为了解决现有技术中存在的掉电保护过程费时且可能无法正确恢复数据的问题,本发明提供了一种双控存储设备的掉电保护的方法及装置,该方法为:当检测到备用电池开始向主板供电时,主板上的CPU将内存设置为只读模式,将两个控制器内存盘中的掉电保护开始标志位置为第一指定值,将两个控制器内存盘中的所有虚拟内存盘中的数据存入对应的闪存中,以及将掉电保护完成标志位置为第二指定值,其中,每个控制器内存盘包括预设数目的虚拟内存盘;当系统供电恢复时,CPU启动系统,CPU对两个控制器内存盘中的掉电保护开始标志位和掉电保护完成标志位进行检测,当CPU检测到两个控制器内存盘中掉电保护开始标志位当前被置为第一指定值,以及掉电保护完成标志位被置为第二指定值时,确定两个控制器内存盘在启动之前均发生异常掉电;CPU针对两个控制器内存盘中划分的各个虚拟内存盘,分别判断每一组虚拟内存盘中包含的两个虚拟内存盘的标记控制器序号是否一致,其中,每一组虚拟内存 盘包括分别归属于两个控制器内存盘的两个虚拟内存盘;标记控制器序号是指一组虚拟内存盘中与独立磁盘冗余阵列RAID绑定的虚拟内存盘所在控制器内存盘的序号;每确定一组虚拟内存盘中包含的两个虚拟内存盘的标记控制器序号一致时,CPU进一步在一组虚拟内存盘中,确定归属于标记控制器序号对应的控制器内存盘中的虚拟内存盘,并将闪存中对应虚拟内存盘保存的数据,恢复至标记控制器序号对应的控制器内存盘中的虚拟内存盘内,直至全部数据恢复完毕。

下面结合附图对本发明优选的实施方式进行详细说明。

现有技术中,大部分都是基于内存空间实现cache功能,利用内存空间实现的cache模块,在发生异常掉电时,需要通过hash、二叉树或者链表的方式查找cache中需要保护的用户数据,非常耗时且影响掉电保护效率。

本发明中,内存中的高速缓存cache采用控制器内存盘的方式实现。CPU将系统中的一块虚拟盘、dev、cachedisk等中的一种作为控制器内存盘,并将系统内的两个控制器内存盘分割成若干块虚拟内存盘,提供给raid充当cache功能。

参阅图1所示,在控制器内存盘的最前面保存着整块控制器内存盘的全局超级块,至少记录控制器内存盘中存放的虚拟内存盘的数量,每个虚拟内存盘存放在整块控制器内存盘中的偏移和大小,以及掉电保护开始标志位和掉电保护完成标志位。

这里提供给raid充当cache功能是指,分别在每一组虚拟内存盘中,选取归属于指定控制器内存盘的一个虚拟内存盘与一个RAID进行绑定,并对应每一组虚拟内存盘中的两个虚拟内存盘均记录相应的指定控制器内存盘的标记控制器序号。其中,每一组虚拟内存盘包括分别归属于两个控制器内存盘的两个虚拟内存盘,标记控制器序号是指一组虚拟内存盘中与独立磁盘冗余阵列RAID绑定的虚拟内存盘所在控制器内存盘的序号。这里的一个虚拟内存盘只能绑定一个raid,一个raid也只能与一个虚拟内存盘绑定。

例如,创建RAID的设备节点为/dev/md1,将该RAID与控制器内存盘1的虚拟内存盘1绑定,此时虚拟内存盘1的标记控制器序号是1,并且控制器内存盘2中的虚拟内存盘1的标记控制器序号也是1。

由于每一个raid具有不同的属性,可能是raid5,也可能是raid6,条带大小也不相同。因此,虚拟内存盘可以根据其绑定的raid属性,修改自身的大小和容量等属性。虚拟内存盘又分为三个区域,分别是超级块,元数据区和用户数据缓存区。其中,参阅图1所示,超级块记录着虚拟内存盘的属性,至少包括虚拟内存盘的有效性,用户数据是否脏和活动控制器序号;元数据区存放着用户数据的元数据;用户数据缓存区存放着用户数据。

虚拟内存盘中的用户数据存放在内存盘的固定区域,即用户数据缓存区;而确定用户数据的元数据,也存放在内存盘的固定区域,即元数据区。这样虚拟内存盘的所有有效数据都存放在虚拟内存盘的固定区域。当系统发生异常掉电时,只需要将所有虚拟内存盘中的所有数据写入闪存中,省略了在掉电过程中搜索数据的过程,极大地提高了掉电保护的效率,省时省力。

当CPU接收到写入用户数据的请求,CPU确定该请求对应的一组虚拟内存盘,以及将用户数据写入一组虚拟内存盘中与一个RAID绑定的一个虚拟内存盘内,写入完毕后,再将用户数据镜像写入一组虚拟内存盘内的另一虚拟内存盘内。

这里需要指出,两个控制器之间的缓存是单端镜像,双端控制器能同时接收CPU写入用户数据的请求,但同一时刻在双控系统中RAID只会存在一端,双端的IO数据都会汇聚到RAID所绑定的控制器上,再统一写入磁盘,这样既保证了写入磁盘数据的连续性,也保证了网络链路的带宽,同时做到了硬件冗余。

此外,若CPU检测到一个控制器内存盘发生故障时,例如,控制器内存盘1宕机或控制器内存盘1组成磁盘的物理端口链路PHY故障失效时,与控制器内存盘2对应的CPU通知发生故障的控制器内存盘1中已与RAID绑定 的每一个虚拟内存盘解除绑定,并通知控制器内存盘2中,与控制器内存盘1中已于RAID绑定的每一个虚拟内存盘归属于同一组的各个虚拟内存盘,与对应的RAID建立绑定关系,以及更新每一组虚拟内存盘的标记控制器序号。

本发明有别于其他掉电保护方案,其他方案是通过硬件实现掉电保护方案,本发明是通过软件实现掉电保护,不需要设备支持硬件C2F(cache to flash:掉电后,内存数据拷贝到flash)功能。

本发明实施例中,参阅图2所示,双控存储设备的掉电保护的具体过程为:

步骤200:当检测到备用电池开始向主板供电时,主板上的CPU将内存设置为只读模式,将两个控制器内存盘中的掉电保护开始标志位置为第一指定值,将两个控制器内存盘中的所有虚拟内存盘中的数据存入对应的闪存中,以及将掉电保护完成标志位置为第二指定值。

其中,每个CPU对应一个控制器内存盘,每个控制器内存盘包括预设数目的虚拟内存盘。

每个主板上有一个控制器内存盘作为内存中的高速缓存。

当检测到备用电池开始向主板供电时,触发中断,并在全局标志位置指定值,例如1。系统其它模块及驱动检测到掉电全局标志位后,阻塞线程运行或休眠,屏蔽一切设备掉电带来的错误事件。内存盘设备驱动根据全局标志位,拒绝所有后续的写请求IO,设置为只读模式,保证双端数据的一致性。

在将掉电保护完成标志位置为第二指定值之后,CPU检测系统供电是否恢复,确定供电未恢复时,确定将系统关闭,若检测到供电恢复则重新启动系统。

因此,掉电保护结束后,通过判断电源情况,确定系统重启还是关机。当系统重新来电后,进行重启操作,保证业务的继续运行;当系统未来电时,进行关机操作,减少电池供电,延长电池使用寿命。

步骤210:当系统供电恢复时,CPU启动系统,CPU对两个控制器内存盘中的掉电保护开始标志位和掉电保护完成标志位进行检测,当CPU检测到两个控制器内存盘中掉电保护开始标志位当前被置为第一指定值,以及掉电保护 完成标志位被置为第二指定值时,确定两个控制器内存盘在启动之前均发生异常掉电。

若CPU检测到两个控制器内存盘中掉电保护开始标志位当前被置为第一指定值,而掉电保护完成标志位被置不为第二指定值时,CPU记录掉电保护告警日志,并通知用户。

步骤220:CPU针对两个控制器内存盘中划分的各个虚拟内存盘,分别判断每一组虚拟内存盘中包含的两个虚拟内存盘的标记控制器序号是否一致。

步骤230:每确定一组虚拟内存盘中包含的两个虚拟内存盘的标记控制器序号一致时,CPU进一步在一组虚拟内存盘中,确定归属于标记控制器序号对应的控制器内存盘中的虚拟内存盘,并将闪存中对应虚拟内存盘保存的数据,恢复至标记控制器序号对应的控制器内存盘中的虚拟内存盘内,直至全部数据恢复完毕。

此外,还有三种数据恢复的场景:

其一,对双端控制器内存盘进行掉电保护,在数据恢复过程中,确定两个控制器内存盘在启动之前均发生异常掉电。每确定存在一组虚拟内存盘中的两个虚拟内存盘的的标记控制器序号不一致时,CPU进一步确定一组虚拟内存盘中,位于指定的主控制器内存盘的虚拟内存盘,并将闪存中对应指定的主控制器内存盘的虚拟内存盘保存的数据,恢复至指定的主控制器内存盘的虚拟内存盘内。

其二,若CPU将掉电保护开始标志位置为第一指定值后,检测到第一控制器内存盘宕机,则将第二控制器内存盘中的所有虚拟内存盘中的数据存入对应的闪存中,并将掉电保护完成标志位置为第二指定值。当系统供电恢复时,CPU启动系统,当CPU检测到第二控制器内存盘中的掉电保护开始标志位当前被置为第一指定值,以及掉电保护完成标志位被置为第二指定值时,确定第二控制器内存盘在启动之前发生异常掉电。CPU分别确定第二控制器内存盘中的每一个虚拟内存盘对应的一组虚拟内存盘,并将闪存中对应第二控制器内存 盘中每一个虚拟内存盘保存的数据,恢复至相应第二控制器内存盘中每一个虚拟内存盘内,直至全部数据恢复完毕。

其三,对双端控制器内存盘进行掉电保护,当系统供电恢复时,CPU启动系统,CPU对两个控制器内存盘中的掉电保护开始标志位和掉电保护完成标志位进行检测,当CPU只检测到一个控制器内存盘中掉电保护开始标志位当前被置为第一指定值,以及掉电保护完成标志位被置为第二指定值时,则确定一个控制器内存盘在启动之前发生异常掉电。CPU分别确定一个控制器内存盘中的每一个虚拟内存盘,并将闪存中对应一个控制器内存盘中每一个虚拟内存盘保存的数据,恢复至相应的一个控制器内存盘中每一个虚拟内存盘内,直至全部数据恢复完毕。这种情况可能是因为一个控制器内存盘完成了掉电保护,而另一个控制器内存盘没有完成掉电保护,例如,数据保护未完成等情况,此时,根据完成掉电保护的控制器内存盘回复数据。

进一步地,待全部数据恢复完毕后,分别针对两个控制器内存盘中的每一个虚拟内存盘中恢复的数据进行分析,获得每一个虚拟内存盘中的元数据,元数据用于描述用户数据的状态,其中,用户数据状态可以是脏数据,干净数据或无效数据。根据获得的每一个虚拟内存盘中的元数据,分别确定每一个虚拟内存盘中需要写入硬盘的第一数据部分,即脏数据,并将每一个虚拟内存盘对应的脏数据写入硬盘的对应位置。待写入完毕后,清空掉电保护开始标志位和掉电保护完成标志位的当前取值。假如数据恢复过程中,再次发生异常掉电,则不进行掉电保护,下次来电后,重新进行数据恢复;

双控制器发生掉电保护,双控制器中都存放着缓存镜像,两者在正常情况下数据是一致的,但在一些场景或某一时刻下,数据是不一致的,比如一台控制器故障、缓存镜像链路断开、双端写缓存数据只完成了一方、交替启动、故障切换等场景下发生异常掉电时,两端数据可能不是一致的。

下面以三个具体实施例说明双控掉电保护的具体过程。

实施例1:创建RAID的设备节点为/dev/md1,将该RAID与控制器内存 盘1的虚拟内存盘1绑定,此时虚拟内存盘1的标记控制器序号是1,并且控制器内存盘2中的虚拟内存盘1的标记控制器序号也是1。创建RAID的设备节点为/dev/md2,将该RAID与控制器内存盘2的虚拟内存盘2绑定,此时虚拟内存盘2的标记控制器序号是2,并且控制器内存盘1中的虚拟内存盘2的标记控制器序号也是2。

此时发生异常掉电,两个CPU都进入掉电保护。每个CPU将掉电保护开始标志位置为第一指定值1后,将对应的控制器内存盘中的所有虚拟内存盘中的数据存入对应的闪存中,并将掉电保护完成标志位置为第二指定值1。待两个CPU掉电保护完成时,检测系统是否回复供电,若是,则重新启动系统,否则,系统关机。

当系统供电恢复时,系统自动开机,两个CPU分别对各自的控制器内存盘中的掉电保护开始标志位和掉电保护完成标志位进行检测,并互相通知各自的检测结果,当控制器内存盘1和控制器内存盘2中的掉电保护开始标志位当前被置为第一指定值1,以及掉电保护完成标志位被置为第二指定值1时,确定双端控制器在启动之前都发生异常掉电。

进一步地,分别判断每一组虚拟内存盘中包含的两个虚拟内存盘的标记控制器序号是否一致。当对于虚拟内存盘组1中包含的两个虚拟内存盘的标记控制器序号一致时,即两个控制器内存盘中对应的两个虚拟内存盘1的标记控制器序号均为1时,第一CPU进一步在虚拟内存盘组1中,确定归属于标记控制器序号对应的虚拟内存盘为控制器内存盘1中的虚拟内存盘1,并将闪存中对应控制器内存盘1中的虚拟内存盘1保存的数据,恢复至控制器内存盘1中的虚拟内存盘1内。当对于虚拟内存盘组2中包含的两个虚拟内存盘的标记控制器序号一致时,即两个控制器内存盘中对应的两个虚拟内存盘2的标记控制器序号均为2时,第二CPU进一步在虚拟内存盘组2中,确定归属于标记控制器序号对应的虚拟内存盘为控制器内存盘2中的虚拟内存盘2,并将闪存中对应控制器内存盘2中的虚拟内存盘2保存的数据,恢复至控制器内存盘2中 的虚拟内存盘2内,直至全部数据恢复完毕。

若对于虚拟内存盘组1中包含的两个虚拟内存盘的标记控制器序号不一致时,即两个控制器内存盘中对应的两个虚拟内存盘1的标记控制器序号一个为1,一个为2,假设控制器内存盘1为主控制器内存盘,则第一CPU进一步确定自身为主控制器内存盘,并将闪存中对应所述指定的主控制器内存盘1的虚拟内存盘1保存的数据,恢复至所述指定的主控制器内存盘1的虚拟内存盘内1。

实施例2:创建RAID的设备节点为/dev/md1,将该RAID与控制器内存盘1的虚拟内存盘1绑定,此时虚拟内存盘1的标记控制器序号是1,并且控制器内存盘2中的虚拟内存盘1的标记控制器序号也是1。

当控制器内存盘1宕机时,控制器内存盘2接管控制器内存盘1的业务,在控制器内存盘2中启动/dev/md1,利用控制器内存盘2中的虚拟内存盘1加载绑定/dev/md1,同时修改控制器内存盘2中的虚拟内存盘1的标记控制器序号为2。

针对上述的场景,由于控制器内存盘1已经宕机,若此时发生异常掉电,控制器内存盘2可能完成故障切换,也可能未完成故障切换,所以控制器内存盘2中虚拟内存盘1的标记控制器序号可能是1或2,但是由于控制器内存盘1已经宕机,所以只有控制器内存盘2会进入掉电保护。若此时发生异常掉电,则第二CPU将掉电保护开始标志位置为第一指定值后,检测到控制器内存盘1宕机,则将控制器内存盘2中的所有虚拟内存盘中的数据存入对应的闪存中,并将掉电保护完成标志位置为第二指定值。

当系统供电恢复时,当第二CPU检测到控制器内存盘2中的掉电保护开始标志位当前被置为第一指定值,以及掉电保护完成标志位被置为第二指定值时,确定控制器内存盘2在启动之前发生异常掉电。第二CPU分别确定控制器内存盘2中的每一个虚拟内存盘,并将闪存中对应控制器内存盘2中每一个虚拟内存盘保存的数据,恢复至相应的控制器内存盘2中每一个虚拟内存盘内, 直至全部数据恢复完毕。

实施例3:创建RAID的设备节点为/dev/md1,将该RAID与控制器内存盘1的虚拟内存盘1绑定,此时虚拟内存盘1的标记控制器序号是1,并且控制器内存盘2中的虚拟内存盘1的标记控制器序号也是1。

控制器内存盘1中的/dev/md1,组成磁盘的PHY(物理端口链路)故障失效,即连接磁盘线损坏,数据无法写到磁盘中,因此/dev/md1失效。假如控制器内存盘2中RAID组成磁盘物理链路正常,进行RAID故障切换操作。

具体切换过程为:对应控制器内存盘2的第二CPU指示控制器内存盘1解绑虚拟内存盘1和/dev/md1的绑定关系,并设置控制器内存盘1的/dev/md1为不激活状态。启动/dev/md1,利用控制器内存盘2中的虚拟内存盘1加载绑定/dev/md1,同时修改控制器内存盘2中的虚拟内存盘1的标记控制器序号为2。并将该属性同时写入控制器内存盘1的虚拟内存盘1的超级块中。

针对上述场景,若系统在切换结束后异常掉电,根据两端标记控制器序号可以准确的定位到从控制器内存盘2进行数据恢复。

综上可知,若在切换过程中发生异常掉电,各个虚拟内存盘的标记控制器序号也是不确定的。此时系统发生异常掉电双端控制器内存盘都会发生掉电保护。针对这种情况,由于故障切换过程中,不接收写请求,所以双端控制器内存盘之间的数据是一致的,针对这种情况,每确定存在一组虚拟内存盘中的两个虚拟内存盘的的标记控制器序号不一致时,对应主控制器内存盘的CPU则进一步确定将闪存中对应自身的控制器内存盘的虚拟内存盘保存的数据,恢复至自身的控制器内存盘的虚拟内存盘内。

参阅图3所示,双控存储设备的掉电保护的装置,包括:

掉电保护单元30,用于当检测到备用电池开始向主板供电时,将内存设置为只读模式,将两个控制器内存盘中的掉电保护开始标志位置为第一指定值,将两个控制器内存盘中的所有虚拟内存盘中的数据存入对应的闪存中,以及将掉电保护完成标志位置为第二指定值,其中,每个控制器内存盘包括预设数目 的虚拟内存盘;

数据恢复单元31,用于当系统供电恢复时,启动系统,对两个控制器内存盘中的掉电保护开始标志位和掉电保护完成标志位进行检测,当检测到两个控制器内存盘中掉电保护开始标志位当前被置为第一指定值,以及掉电保护完成标志位被置为第二指定值时,确定两个控制器内存盘在启动之前均发生异常掉电;

以及针对两个控制器内存盘中划分的各个虚拟内存盘,分别判断每一组虚拟内存盘中包含的两个虚拟内存盘的标记控制器序号是否一致,其中,每一组虚拟内存盘包括分别归属于两个控制器内存盘的两个虚拟内存盘;标记控制器序号是指一组虚拟内存盘中与独立磁盘冗余阵列RAID绑定的虚拟内存盘所在控制器内存盘的序号;每确定一组虚拟内存盘中包含的两个虚拟内存盘的标记控制器序号一致时,进一步在一组虚拟内存盘中,确定归属于标记控制器序号对应的控制器内存盘中的虚拟内存盘,并将闪存中对应虚拟内存盘保存的数据,恢复至标记控制器序号对应的控制器内存盘中的虚拟内存盘内,直至全部数据恢复完毕。

较佳的,进一步包括:

数据处理单元32,用于待全部数据恢复完毕后,分别针对两个控制器内存盘中的每一个虚拟内存盘中恢复的数据进行分析,获得每一个虚拟内存盘中的元数据,元数据用于描述用户数据的状态;

根据获得的每一个虚拟内存盘中的元数据,分别确定每一个虚拟内存盘中需要写入硬盘的第一数据部分,并将每一个虚拟内存盘对应的第一数据部分写入硬盘的对应位置;

待写入完毕后,清空掉电保护开始标志位和掉电保护完成标志位的当前取值。

较佳的,数据恢复单元31进一步用于:

每确定存在一组虚拟内存盘中的两个虚拟内存盘的的标记控制器序号不 一致时,进一步确定一组虚拟内存盘中,位于指定的主控制器内存盘的虚拟内存盘,并将闪存中对应指定的主控制器内存盘的虚拟内存盘保存的数据,恢复至指定的主控制器内存盘的虚拟内存盘内。

较佳的,在将掉电保护完成标志位置为第二指定值之后,进一步包括:

供电判断单元33,用于检测系统供电是否恢复,若确定系统供电未恢复时,确定将系统关闭,否则重新启动系统。

较佳的,掉电保护单元30和数据恢复单元31进一步用于:

掉电保护单元30,用于若将掉电保护开始标志位置为第一指定值后,检测到第一控制器内存盘宕机,则将第二控制器内存盘中的所有虚拟内存盘中的数据存入对应的闪存中,并将掉电保护完成标志位置为第二指定值;

数据恢复单元31,用于当系统供电恢复时,启动系统,当检测到第二控制器内存盘中的掉电保护开始标志位当前被置为第一指定值,以及掉电保护完成标志位被置为第二指定值时,确定第二控制器内存盘在启动之前发生异常掉电;

以及分别确定第二控制器内存盘中的每一个虚拟内存盘,并将闪存中对应第二控制器内存盘中每一个虚拟内存盘保存的数据,恢复至相应的第二控制器内存盘中每一个虚拟内存盘内,直至全部数据恢复完毕。

较佳的,当系统供电恢复时,启动系统,对两个控制器内存盘中的掉电保护开始标志位和掉电保护完成标志位进行检测,数据恢复单元31,进一步用于:

当系统供电恢复时,启动系统,对两个控制器内存盘中的掉电保护开始标志位和掉电保护完成标志位进行检测,当只检测到一个控制器内存盘中掉电保护开始标志位当前被置为第一指定值,以及掉电保护完成标志位被置为第二指定值时,则确定一个控制器内存盘在启动之前发生异常掉电;

分别确定一个控制器内存盘中的每一个虚拟内存盘,并将闪存中对应一个控制器内存盘中每一个虚拟内存盘保存的数据,恢复至相应的一个控制器内存盘中每一个虚拟内存盘内,直至全部数据恢复完毕。

较佳的,进一步包括:

绑定单元34,用于在检测到备用电池开始向主板供电之前,将系统内的两个控制器内存盘分割成若干块虚拟内存盘;

分别在每一组虚拟内存盘中,选取归属于指定控制器内存盘的一个虚拟内存盘与一个RAID进行绑定,并对应每一组虚拟内存盘中的两个虚拟内存盘均记录相应的指定控制器内存盘的标记控制器序号。

较佳的,进一步包括:

写入单元35,用于在检测到备用电池开始向主板供电之前,若接收到写入用户数据的请求,确定请求对应的一组虚拟内存盘,以及将用户数据写入一组虚拟内存盘中与一个RAID绑定的一个虚拟内存盘内,写入完毕后,再将用户数据镜像写入一组虚拟内存盘内的另一虚拟内存盘内。

较佳的,进一步包括:

故障切换单元36,用于在检测到备用电池开始向主板供电之前,若检测到非自身管辖的另一个控制器内存盘发生故障,则通知发生故障的另一个控制器内存盘中已与RAID绑定的每一个虚拟内存盘解除绑定,并通知自身管辖的控制器内存盘中分别与每一个虚拟内存盘归属于同一组的各个虚拟内存盘与对应的RAID建立绑定关系,以及更新每一组虚拟内存盘的标记控制器序号。

综上所述,本发明利用内存盘的方式实现cache,有利于提升掉电保护和数据恢复的效率。掉电保护时,将控制器内存盘中虚拟内存盘的对应的数据写入闪存,缩短掉电保护的时间,提高掉电的效率。在数据恢复过程中,由于双端控制器在掉电那一时刻缓存数据可能不一致,本发明中,虚拟内存盘的标记控制器序号,会随着控制器内存盘和绑定RAID的切换而变更,通过判断超级块中各个虚拟内存盘的标记控制器序号,来选择内存盘恢复数据所在的控制器。针对这种判断方法,可以更加准确的判断出各个虚拟内存盘中用户数据的新旧。

此外,掉电保护结束后,通过判断电源情况,确定系统重启还是关机。当 系统重新来电后,进行重启操作,保证业务的继续运行;当系统未来电时,进行关机操作,减少电池供电,延长电池使用寿命。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱 离本发明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

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