一种存储设备状态控制方法及装置与流程

文档序号:16427984发布日期:2018-12-28 19:55阅读:166来源:国知局
一种存储设备状态控制方法及装置与流程

本申请涉及电子技术领域,特别涉及一种存储设备状态控制方法及装置。

背景技术

在当前云环境下,基础设施的规模越来越大,后端服务器和存储介质越来越多。在这种大规模环境中,如何才能保证上线以后可以处理后端存储可能出现的各种异常?这就要在前期保证系统各模块的服务质量。但是,存储系统中有很多错误无法预料,有些可能很容易出现,有的可能几年甚至几十年也不会出现一次,这会导致在前期无法验证系统是否能够应对存储系统的错误。另外,在大规模环境下,必须到机房才能实现拔盘等操作,由于机房与工作环境通常不在一起,不太方便实现拔盘等操作。

申请内容

本申请实施例的目的在于提供一种存储设备状态控制方法及装置,能够高效便捷的控制存储设备的状态,使得在大规模环境下能够保证更可靠的服务。

为了解决上述技术问题,本申请的实施例采用了如下技术方案:一种存储设备状态控制方法,其应用于块设备驱动层,包括:

对存储设备的状态进行定义;

通过改变所述存储设备的状态对应的状态管理文件对所述存储设备注入状态;

对所述存储设备注入的状态进行处理。

作为优选,存储设备的状态包括以下中的至少一种:存储设备是否在线、存储设备是否有坏块、存储设备上的数据是否出现静默损坏和存储设备是否变慢。

作为优选,通过改变所述存储设备的状态对应的状态管理文件对所述存储设备注入状态,包括:

对块设备驱动层初始化;

响应于创建状态管理信息,创建状态管理目录;

在所述状态管理目录下创建所述状态管理文件;

对修改所述状态管理文件的处理函数进行定义;

通过修改所述处理函数对所述存储设备注入状态。

作为优选,所述状态为存储设备是否在线时,

对所述存储设备注入的状态进行处理,包括:

从请求队列中获取请求;

响应于有存储设备的离线状态注入,返回存储设备不存在;

响应于没有存储设备的离线状态注入,向存储设备发送请求。

作为优选,所述状态为存储设备是否有坏块时,

对所述存储设备注入的状态进行处理,包括:

从请求队列中获取请求;

响应于有存储设备的坏块状态注入,进行随机计算并根据计算结果判断本次请求是否涉及坏块,如果涉及则返回读写错误,如果不涉及则向存储设备发出读写指令;

响应于没有存储设备的坏块状态注入,向存储设备发出读写指令。

作为优选,所述状态为存储设备是否出现静默损坏时,

对所述存储设备注入的状态进行处理,包括:

从请求队列中获取请求;

向存储设备发出指令;

响应于成功获得指令执行结果,判断是否是读请求,如果是则判断是否有存储设备的静默损坏状态注入,如果否则结束;

如果有存储设备的静默损坏状态注入则进行随机计算并根据计算结果判断本地请求是否涉及静默损坏,如果没有存储设备的静默损坏状态注入则结束;

如果本次请求涉及静默损坏则将读取的数据进行随机的修改,如果本次请求不涉及静默损坏则结束;

响应于没有成功获得指令执行结果,则结束。

作为优选,所述状态为存储设备是否变慢时,

对所述存储设备注入的状态进行处理,包括:

从请求队列中获取请求;

响应于有存储设备的变慢状态注入,计算当前时间与请求放入队列的时间差是否超过指定延时时长,如果是则向存储设备发出请求指令,如果否则将请求放回请求队列;

响应于没有存储设备的变慢状态注入,向存储设备发出请求指令。

本申请实施例还公开了一种存储设备状态控制装置,其包括:依次电信号连接的虚拟文件系统、文件系统、通用块层、i/o调度层、块设备驱动层和存储设备;

其中,所述块设备驱动层包括:

定义模块,其配置为对存储设备的状态进行定义;

注入状态模块,其配置为通过改变所述存储设备的状态对应的状态管理文件对所述存储设备注入状态;

处理模块,其配置为对所述存储设备注入的状态进行处理。

作为优选,存储设备的状态包括以下中的至少一种:存储设备是否在线、存储设备是否有坏块、存储设备上的数据是否出现静默损坏和存储设备是否变慢。

作为优选,注入状态模块,其配置为:

对块设备驱动层初始化;

响应于创建状态管理信息,创建状态管理目录;

在所述状态管理目录下创建所述状态管理文件;

对修改所述状态管理文件的处理函数进行定义;

通过修改所述处理函数对所述存储设备注入状态。

本申请实施例的有益效果在于:能够实现方便的对大规模环境下的存储设备的状态进行控制,无需到机房对存储设备进行拔盘等操作,对存储设备注入状态并对注入的状态进行处理,可以验证上层业务系统是否能够应对,从而实现大规模环境下的服务更可靠。

附图说明

图1示出了本申请实施例的存储设备状态控制方法的流程图;

图2示出了本申请实施例的存储设备状态控制方法的s2的流程图;

图3示出了本申请第一实施例的存储设备状态控制方法的s3的流程图;

图4示出了本申请第二实施例的存储设备状态控制方法的s3的流程图;

图5示出了本申请第三实施例的存储设备状态控制方法的s3的流程图;

图6示出了本申请第四实施例的存储设备状态控制方法的s3的流程图;

图7示出了本申请实施例的存储设备状态控制装置的结构框图。

具体实施方式

此处参考附图描述本申请的各种方案以及特征。

应理解的是,可以对此处申请的实施例做出各种修改。因此,上述说明书不应该视为限制,而仅是作为实施例的范例。本领域的技术人员将想到在本申请的范围和精神内的其他修改。

包含在说明书中并构成说明书的一部分的附图示出了本申请的实施例,并且与上面给出的对本申请的大致描述以及下面给出的对实施例的详细描述一起用于解释本申请的原理。

通过下面参照附图对给定为非限制性实例的实施例的优选形式的描述,本申请的这些和其它特性将会变得显而易见。

还应当理解,尽管已经参照一些具体实例对本申请进行了描述,但本领域技术人员能够确定地实现本申请的很多其它等效形式,它们具有如权利要求所述的特征并因此都位于借此所限定的保护范围内。

当结合附图时,鉴于以下详细说明,本申请的上述和其他方面、特征和优势将变得更为显而易见。

此后参照附图描述本申请的具体实施例;然而,应当理解,所公开的实施例仅仅是本申请的实例,其可采用多种方式实施。熟知和/或重复的功能和结构并未详细描述以避免不必要或多余的细节使得本申请模糊不清。因此,本文所公开的具体的结构性和功能性细节并非意在限定,而是仅仅作为权利要求的基础和代表性基础用于教导本领域技术人员以实质上任意合适的详细结构多样地使用本申请。

本说明书可使用词组“在一种实施例中”、“在另一个实施例中”、“在又一实施例中”或“在其他实施例中”,其均可指代根据本申请的相同或不同实施例中的一个或多个。

如图1所示,本申请实施例公开了一种存储设备状态控制方法,其应用于块设备驱动层。存储设备状态控制方法包括:

s1,对存储设备的状态进行定义。

一般情况下,对存储设备的操作通常就是读和写,所以本申请的方案对存储设备的状态进行定义也主要围绕这两个方面,并且专注的是存储设备的故障状态。

存储设备的读操作的失败情况主要包括:存储设备不在线、存储设备出现坏块导致无法读出数据、存储设备上的数据由于静默损坏导致读出的数据不正确。

存储设备的写操作的失败情况主要包括:存储设备不在线、存储设备出现坏块导致无法写入数据。

另外,还存在一种情况就是存储设备响应时间过长影响上层业务的场景,本申请中将其称为存储设备变慢的状态。

针对以上情况,本申请的存储设备的状态包括以下中的至少一种:存储设备是否在线、存储设备是否有坏块、存储设备上的数据是否出现静默损坏和存储设备是否变慢。

s2,通过改变存储设备的状态对应的状态管理文件对存储设备注入状态。

其中,对存储设备注入状态的方式可以有多种,例如,通过采用伪文件系统的方式对存储设备注入状态。

s3,对存储设备注入的状态进行处理。

当存储设备注入状态后,可以通过对注入的状态进行处理,以验证上层业务系统是否能够应对。

本申请的方案中,通过对存储设备的状态进行定义,通过改变存储设备的状态对应的状态管理文件对存储设备注入状态,对存储设备注入的状态进行处理,能够实现方便的对大规模环境下的存储设备的状态进行控制,无需到机房对存储设备进行拔盘等操作,另外,对存储设备注入状态并对注入的状态进行处理,可以验证上层业务系统是否能够应对,从而实现大规模环境下的服务更可靠。

在一个实施例中,如图2所示,采用procfs的方式对存储设备注入状态,s2,通过改变存储设备的状态对应的状态管理文件对存储设备注入状态,包括:

s21,对块设备驱动层初始化;

s22,响应于创建状态管理信息,创建状态管理目录,其中,可以通过proc接口创建状态管理目录;

s23,在状态管理目录下创建状态管理文件;

s24,对修改状态管理文件的处理函数进行定义;

s25,通过修改处理函数对存储设备注入状态。

其中,每个状态管理文件可以对应块设备驱动层中的一个变量。例如,将管理存储设备是否在线的状态管理文件对应的变量定义为online,0代表存储设备在线,1代表存储设备不在线,系统可以设置默认初始值为0。将管理存储设备是否有坏块的状态管理文件对应的变量定义为badblocks,0代表存储设备没有坏块,1代表存储设备有坏块,系统可以设置默认初始值为0。将管理存储设备上的数据是否出现静默损坏的状态管理文件对应的变量定义为datadamage,0代表存储设备上的数据没有出现静默损坏,1代表存储设备上的数据出现静默损坏,系统可以设置默认初始值为0。将管理存储设备是否变慢的状态管理文件对应的变量定义为slowdisk,0代表存储设备没有变慢,1代表存储设备变慢,系统可以设置默认初始值为0。

在一个实施例中,如图3所示,存储设备的状态为存储设备是否在线时,

s3,对存储设备注入的状态进行处理,包括:

从请求队列中获取请求;

响应于有存储设备的离线状态注入,返回存储设备不存在;

响应于没有存储设备的离线状态注入,向存储设备发送请求。

对于存储设备离线(不在线)的场景,所有的请求都进行同样的处理,返回设备不存在的错误。

在一个实施例中,如图4所示,存储设备的状态为存储设备是否有坏块时,

s3,对存储设备注入的状态进行处理,包括:

从请求队列中获取请求;

响应于有存储设备的坏块状态注入,进行随机计算并根据计算结果判断本次请求是否涉及坏块,如果涉及则返回读写错误,如果不涉及则向存储设备发出读写指令;

响应于没有存储设备的坏块状态注入,向存储设备发出读写指令。

存储设备出现坏块的时候并不是所有请求都不能处理,而是只有涉及坏块的请求不能被处理,所以此流程中需要经过一定的计算,对部分请求返回坏块处理失败的结果。

在一个实施例中,如图5所示,存储设备的状态为存储设备是否出现静默损坏时,

s3,对存储设备注入的状态进行处理,包括:

从请求队列中获取请求;

向存储设备发出指令;

响应于成功获得指令执行结果,判断是否是读请求,如果是则判断是否有存储设备的静默损坏状态注入,如果否则结束;

如果有存储设备的静默损坏状态注入则进行随机计算并根据计算结果判断本地请求是否涉及静默损坏,如果没有存储设备的静默损坏状态注入则结束;

如果本次请求涉及静默损坏则将读取的数据进行随机的修改,如果本次请求不涉及静默损坏则结束;

响应于没有成功获得指令执行结果,则结束。

存储设备出现静默损坏只针对读请求进行处理,而且也不是所有读请求都会出现这种异常,所以流程中对其进行一定的随机计算,只对部分读请求返回异常的数据。

在一个实施例中,如图6所示,存储设备的状态为存储设备是否变慢时,

s3,对存储设备注入的状态进行处理,包括:

从请求队列中获取请求;

响应于有存储设备的变慢状态注入,计算当前时间与请求放入队列的时间差是否超过指定延时时长,如果是则向存储设备发出请求指令,如果否则将请求放回请求队列;

响应于没有存储设备的变慢状态注入,向存储设备发出请求指令。

存储设备变慢时需要对所有的读请求和写请求都进行一定的延时处理,延时多少合适可以在配置存储设备的变慢状态注入时同时指定延时时长。

本申请实施例还公开了一种存储设备状态控制装置,其包括:依次电信号连接的虚拟文件系统、文件系统、通用块层、i/o调度层、块设备驱动层和存储设备。文件系统可以包括ext4、xfs和btrfs等。

其中,块设备驱动层包括:

定义模块,其配置为对存储设备的状态进行定义;

注入状态模块,其配置为通过改变存储设备的状态对应的状态管理文件对存储设备注入状态;

处理模块,其配置为对存储设备注入的状态进行处理。

本申请的方案中,通过对存储设备的状态进行定义,通过改变存储设备的状态对应的状态管理文件对存储设备注入状态,对存储设备注入的状态进行处理,能够实现方便的对大规模环境下的存储设备的状态进行控制,无需到机房对存储设备进行拔盘等操作,另外,对存储设备注入状态并对注入的状态进行处理,可以验证上层业务系统是否能够应对,从而实现大规模环境下的服务更可靠。

在一个实施例中,存储设备的状态包括以下中的至少一种:存储设备是否在线、存储设备是否有坏块、存储设备上的数据是否出现静默损坏和存储设备是否变慢。

在一个实施例中,注入状态模块,其配置为:

对块设备驱动层初始化;

响应于创建状态管理信息,创建状态管理目录;

在状态管理目录下创建状态管理文件;

对修改状态管理文件的处理函数进行定义;

通过修改处理函数对存储设备注入状态。

采用procfs的方式对存储设备注入状态,其中,可以通过proc接口创建状态管理目录。

其中,每个状态管理文件可以对应块设备驱动层中的一个变量。例如,注入状态模块将管理存储设备是否在线的状态管理文件对应的变量定义为online,0代表存储设备在线,1代表存储设备不在线,系统可以设置默认初始值为0。注入状态模块将管理存储设备是否有坏块的状态管理文件对应的变量定义为badblocks,0代表存储设备没有坏块,1代表存储设备有坏块,系统可以设置默认初始值为0。注入状态模块将管理存储设备上的数据是否出现静默损坏的状态管理文件对应的变量定义为datadamage,0代表存储设备上的数据没有出现静默损坏,1代表存储设备上的数据出现静默损坏,系统可以设置默认初始值为0。注入状态模块将管理存储设备是否变慢的状态管理文件对应的变量定义为slowdisk,0代表存储设备没有变慢,1代表存储设备变慢,系统可以设置默认初始值为0。

在一个实施例中,存储设备的状态为存储设备是否在线时,

处理模块,其配置为:

从请求队列中获取请求;

响应于有存储设备的离线状态注入,返回存储设备不存在;

响应于没有存储设备的离线状态注入,向存储设备发送请求。

对于存储设备离线(不在线)的场景,所有的请求都进行同样的处理,返回设备不存在的错误。

在一个实施例中,存储设备的状态为存储设备是否有坏块时,

处理模块,其配置为:

从请求队列中获取请求;

响应于有存储设备的坏块状态注入,进行随机计算并根据计算结果判断本次请求是否涉及坏块,如果涉及则返回读写错误,如果不涉及则向存储设备发出读写指令;

响应于没有存储设备的坏块状态注入,向存储设备发出读写指令。

存储设备出现坏块的时候并不是所有请求都不能处理,而是只有涉及坏块的请求不能被处理,所以此流程中需要经过一定的计算,对部分请求返回坏块处理失败的结果。

在一个实施例中,存储设备的状态为存储设备是否出现静默损坏时,

处理模块,其配置为:

从请求队列中获取请求;

向存储设备发出指令;

响应于成功获得指令执行结果,判断是否是读请求,如果是则判断是否有存储设备的静默损坏状态注入,如果否则结束;

如果有存储设备的静默损坏状态注入则进行随机计算并根据计算结果判断本地请求是否涉及静默损坏,如果没有存储设备的静默损坏状态注入则结束;

如果本次请求涉及静默损坏则将读取的数据进行随机的修改,如果本次请求不涉及静默损坏则结束;

响应于没有成功获得指令执行结果,则结束。

存储设备出现静默损坏只针对读请求进行处理,而且也不是所有读请求都会出现这种异常,所以流程中对其进行一定的随机计算,只对部分读请求返回异常的数据。

在一个实施例中,存储设备的状态为存储设备是否变慢时,

处理模块,其配置为:

从请求队列中获取请求;

响应于有存储设备的变慢状态注入,计算当前时间与请求放入队列的时间差是否超过指定延时时长,如果是则向存储设备发出请求指令,如果否则将请求放回请求队列;

响应于没有存储设备的变慢状态注入,向存储设备发出请求指令。

存储设备变慢时需要对所有的读请求和写请求都进行一定的延时处理,延时多少合适可以在配置存储设备的变慢状态注入时同时指定延时时长。

以上实施例仅为本申请的示例性实施例,不用于限制本申请,本申请的保护范围由权利要求书限定。本领域技术人员可以在本申请的实质和保护范围内,对本申请做出各种修改或等同替换,这种修改或等同替换也应视为落在本申请的保护范围内。

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