磁盘检测方法及装置与流程

文档序号:11707494阅读:277来源:国知局
磁盘检测方法及装置与流程

本申请涉及存储技术领域,尤其涉及一种磁盘检测方法及装置。



背景技术:

随着信息技术的发展,越来越多的数据被保存在磁盘中,为了提高磁盘中数据的可靠性,通常使用raid(redundantarraysofindependentdisks,独立磁盘冗余阵列)技术对磁盘中的数据进行冗余保护。然而,因为突发的震动或机械故障导致磁盘盘面被划伤,或者磁盘盘面蒙尘等因素而出现磁盘介质错误的情形不可避免地发生,当磁盘组中连续多块磁盘出现磁盘介质错误时,raid重建的速率较低,很有可能导致raid对数据的冗余保护机制失效,导致数据丢失。因此,通过及时发现磁盘介质问题并对介质错误的磁盘进行修复,可以有效地提高数据的可靠性。

在现有方案中,可以采用磁盘预检测技术对磁盘进行检测,以发现故障磁盘,并及时进行相应处理。具体地,在磁盘预检测技术中,可以预先设定磁盘检测策略,例如,设定计算机每隔预设时长对磁盘进行一次全盘读或全盘写(以下简称全盘读/写),当检测到读/写命令执行失败时,触发raid重建。

然而,在上述磁盘预检测技术中,由于对磁盘进行全盘读/写,从而导致磁盘检测过程占用系统资源,消耗磁盘的io处理性能;并且,当磁盘容量越大时,磁盘检测过程耗时越长,占用系统资源的耗时越长,越多地消耗磁盘的io处理性能;同时,在极端情况下,也可能会出现刚刚检测过的磁盘因突发性的震动或机械故障导致盘面被划伤,而出现磁盘介质错误的情形。



技术实现要素:

有鉴于此,本申请提供一种磁盘检测方法及装置,以实现尽可能及时地发现故障磁盘,提高raid的可靠性,提高数据的可靠性;同时,有效地降低磁盘检测过程对系统资源和磁盘io处理性能的消耗。

具体地,本申请是通过如下技术方案实现的:

根据本申请实施例的第一方面,提供一种磁盘检测方法,所述方法应用于存储设备的raid系统,所述存储设备预配置有至少一个raid阵列,所述raid阵列包括若干个磁盘;所述方法包括:

当接收到磁盘返回的用于表示读错误的执行结果时,确定所述磁盘中发生读错误的故障条块中的第一数据是否具有raid冗余性;

若所述第一数据具有raid冗余性,则通过所述磁盘所属raid阵列中其他磁盘上的数据计算出所述第一数据;

向所述故障条块写入所述第一数据;

若所述第一数据写入成功,则基于所述故障条块确定至少一个待检条块;

依次确定所述至少一个待检条块中的一个待检条块中的第二数据,向所述一个待检条块写入所述第二数据;

若所述第二数据写入失败,则确定所述磁盘故障。

根据本申请实施例的第二方面,提供一种磁盘检测装置,所述装置应用于存储设备的raid系统,所述存储设备预配置有至少一个raid阵列,所述raid阵列包括若干个磁盘,所述装置包括:

冗余确定单元,用于当接收到磁盘返回的用于表示读错误的执行结果时,确定所述磁盘中发生读错误的故障条块中的第一数据是否具有raid冗余性;

第一确定单元,用于若所述第一数据具有raid冗余性,则通过所述磁盘所属raid阵列中其他磁盘上的数据计算出所述第一数据;

第一写入单元,用于向所述故障条块写入所述第一数据;

待检确定单元,用于若所述第一数据写入成功,则基于所述故障条块确定至少一个待检条块;

第二确定单元,用于依次确定所述至少一个待检条块中的一个待检条块中的第二数据;

第二写入单元,用于向所述一个待检条块写入所述第二数据;

故障确定单元,用于若所述第二数据写入失败,则确定所述磁盘故障。

由上述实施例可见,raid阵列通过在实际的读操作中,接收到磁盘返回的用于表示读错误的执行结果时,进一步尝试向发生读错误的故障条块中写入该故障条块中原本的数据,在写入成功时,触发本申请提供的轻量级磁盘检测,由于轻量级磁盘检测是在实际的读操作过程后触发的,并未额外设置磁盘检测触发机制,可以实现尽可能早地发现磁盘故障,从而及时进行相应的修复,提高raid的可靠性,提高数据的可靠性;同时,由于在本申请提供的轻量级磁盘检测过程中,对指定范围的待检条块进行检测,相较于全盘检测,可以有效地降低磁盘检测过程对系统资源和磁盘io处理性能的消耗。

附图说明

图1为本申请磁盘检测方法的一个实施例流程图;

图2为本申请磁盘检测装置所在存储设备的一种硬件结构图;

图3为本申请磁盘检测装置的一个实施例框图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。

在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

raid技术是将多个独立的物理磁盘按照不同的方式组合起来,形成一个虚拟磁盘。通过采用raid技术,可以实现并行读写数据,提高了数据的存取速率,同时,raid技术运用了镜像、奇偶校验等技术对数据进行冗余保护,极大地提高了数据的可靠性。

一个raid阵列可以包含多个成员磁盘,raid阵列中的数据组织方式包括条块和条带。其中,条块是raid阵列管理存储空间的最小单位,在创建raid阵列时,将其包括的成员磁盘的存储空间按预设条块大小划分为大小相等、地址相邻的块,这些大小相等、地址相邻的块称为条块;条带是raid阵列的多个成员磁盘上位置相关的条块的集合,根据raid级别不同,raid实现方式不同,raid阵列中成员磁盘的数目不同,成员磁盘状态不同以及raid算法不同,条块中数据的raid冗余性也不同。

在raid技术中,raid阵列对读/写命令的处理是按照条带进行处理的,当raid阵列接收到上层软件下发的读/写命令后,基于该读/写命令中携带的地址确定待操作的条带,之后基于raid级别、raid算法、成员磁盘状态等因素,把该读/写命令拆分为针对该条带中一个或多个成员磁盘的对应条块的读/写命令,将拆分后的读/写命令发给相应的成员磁盘执行。后续,成员磁盘执行接收到的读/写命令,并将执行结果返回至raid阵列。

在本申请中,raid阵列可以基于其包括的成员磁盘对读命令的执行结果,进一步触发轻量级磁盘检测,这里所说的“轻量级磁盘检测”是指对成员磁盘的指定条块范围内进行检测,相较于现有的磁盘预检测技术,可以实现尽可能及时地发现故障磁盘,提高raid的可靠性,提高数据的可靠性;同时,有效地降低磁盘检测过程对系统资源和磁盘io处理性能的消耗。

如下,为了使本领域技术人员可以清楚、直观地了解本申请提供的磁盘检测方法如何实现尽可能及时地发现故障磁盘,提高raid的可靠性,提高数据的可靠性;同时,有效地降低磁盘检测过程对系统资源和磁盘io处理性能的消耗,列举下述实施例具体描述本申请所提供的磁盘检测方法。

请参见图1,为本申请磁盘检测方法的一个实施例流程图,该方法可以应用于存储设备的raid系统中的raid阵列,可以包括以下步骤:

步骤101:当接收到磁盘返回的用于表示读错误的执行结果时,确定磁盘中发生读错误的故障条块中的第一数据是否具有raid冗余性,若是,则执行步骤102,否则,执行步骤106。

当raid阵列接收到上层软件下发的读/写命令后,基于该读/写命令中携带的地址确定待操作的条带,之后基于raid级别、raid算法、成员磁盘状态等因素,把该读/写命令拆分为针对该条带中一个或多个成员磁盘的对应条块的读/写命令,将拆分后的读/写命令发给相应的成员磁盘执行。后续,成员磁盘执行接收到的读/写命令,如果某个成员磁盘中待读/写条块故障,那么,该成员磁盘可以向raid阵列返回用于表示读/写错误的执行结果。

在本申请中,当raid阵列接收到磁盘返回的用于表示读错误的执行结果时,并不直接将该磁盘确定为故障磁盘,而是可以基于磁盘坏扇区重映射机制,尝试对该磁盘进行修复,根据修复的结果进一步确定该磁盘是否不可用,即磁盘是否故障。

具体地,通常情况下,磁盘出厂时,磁盘生产厂家就在磁盘中保留一部分扇区,该部分扇区对磁盘的使用者不可见,磁盘可以将该部分扇区作为备用扇区,当磁盘发生写错误时,磁盘可以自动将发生写错误的坏扇区映射到备用扇区,即将指向该坏扇区的地址替换成指向备用扇区的地址,后续,磁盘可以重新向已映射完成的备用扇区中写入数据,后续也将不再访问坏扇区。基于上述所描述的磁盘坏扇区重映射机制,上层软件并不会感知到磁盘发生写错误,从而认为磁盘正常,后续,直至磁盘的备用扇区用完时,上层软件才可以感知到磁盘发生写错误,从而确定磁盘故障。那么,在本申请中,当raid阵列接收到磁盘返回的用于表示读错误的执行结果时,可以进一步向该磁盘中发生读错误的故障条块中写入数据,根据数据的写入结果可以尽可能准确地确定该磁盘是否故障。

需要说明的是,为了避免影响数据的可靠性,当向故障条块中写入数据时,可以向故障条块中写入该故障条块中原本的数据。基于此,当raid阵列接收到磁盘返回的用于表示读错误的执行结果时,可以进一步确定该磁盘中发生读错误的故障条块中的数据是否具有raid冗余性,这里所说的“故障条块中的数据是否具有raid冗余性”是指,故障条块中的数据是否可由与该故障条块位于同一条带的其他成员磁盘中的对应条块中的数据计算得出。需要说明的是,为了描述方便,本申请中将故障条块中的数据称为第一数据。

随着raid级别不同,磁盘阵列中数据的存储方式也不同,因此,可以基于不同的raid级别以及成员磁盘状态,采用不同的raid算法确定故障条块中的数据是否具有raid冗余性,具体针对不同raid级别的raid算法,本领域技术人员可以参见现有技术中的相关描述,本申请对此不做详述。

在本申请中,当确定故障条块中的第一数据具有raid冗余性时,即可以继续执行后续向该故障条块中写入数据的流程,即可以继续执行步骤102;当确定故障条块中的第一数据不具有冗余性时,即无法确定故障条块中的第一数据,基于上述描述,则无法执行后续向该故障条块中写入数据的流程,此时可以进一步执行步骤106。

步骤102:通过磁盘所属raid阵列中其他磁盘上的数据计算得出第一数据。

随着raid级别不同,磁盘阵列中数据的存储方式也不同,那么,可以根据raid级别以及成员磁盘状态,确定具体的raid算法,从而基于该raid算法,通过与故障条块位于同一条带的其他成员磁盘中的对应条块中的数据计算得出故障条块中的第一数据,具体针对不同raid级别的raid算法,本领域技术人员可以参见现有技术中的相关描述,本申请对此不做详述。

步骤103:向故障条块中写入第一数据,若第一数据写入失败,则执行步骤106;若第一数据写入成功,则执行步骤104。

基于上述所描述的磁盘坏扇区重映射机制,若第一数据写入失败,则可以认为该磁盘中已不存在备用扇区,从而可以确定该磁盘已不可用,此时,可以继续执行步骤106。

若第一数据写入成功,则可以认为该磁盘中还有剩余的备用扇区,并且,在向故障条块写入第一数据的过程中,已触发了磁盘坏扇区重映射,即该磁盘已自动进行了修复,该磁盘仍可用。

至此,该磁盘已自修复成功,并且上层软件未感知到磁盘进行自修复的过程,仍可以继续对磁盘进行数据读写操作。但此时磁盘中存在故障条块已成为不可避免的实际情况,并且基于磁盘介质错误的特性,即因为突发的震动或磁盘机械故障导致磁盘盘面被划伤、灰尘等因素出现的磁盘介质错误,在物理上具有延续性,即故障条块的相邻条块也为故障条块的概率较大,磁盘中很可能存在不止一个故障条块。

基于此,本申请在执行完步骤103,当第一数据写入成功后,触发本申请提出的轻量磁盘检测机制,以实现尽可能及时地发现磁盘故障,从而及时进行相应的修复,提高raid的可靠性,提高数据的可靠性。具体的,在执行完步骤103,当第一数据写入成功后,执行步骤104。

步骤104:基于故障条块确定至少一个待检条块。

基于上述所描述的磁盘介质错误的特性,本申请中,可以基于发生读错误的故障条块确定至少一个待检条块。

具体的,在本申请中,可以预先设置一个偏移量,该偏移量可以以容量大小为单位,也可以以条块个数为单位,基于该偏移量,从故障条块处进行偏移,得到至少一个待检条块。

在一实施例中,若该偏移量以容量大小为单位,需要说明的是,该偏移量可以为条块大小的整数倍,例如,假设条块大小为32kb,偏移量可以设置为64kb。据此,当偏移量以容量大小为单位时,也可以将偏移量转换为以条块个数为单位,例如,偏移量为64kb时,可以等同于偏移量为2个条块。

假设故障条块为条块3(起始条块为条块0),则可以基于该偏移量(2个条块),以故障条块为中心,分别进行前后偏移,得到4个待检条块,分别为条块1、条块2,以及条块4和条块5。

需要说明的是,若基于该预设的偏移量,以故障条块为中心分别进行前后偏移时,若不存在足够的可偏移条块,可以基于实际偏移情况,确定待检条块。例如,假设故障条块为条块0,该故障条块前并无其它条块,则可以仅基于偏移量,从条块0向后进行偏移,得到2个待检条块,分别为条块1、条块2。又例如,假设故障条块为条块1,该故障条块前只有一个条块,则可以基于偏移量,从条块1处向前偏移1个条块,向后偏移2个条块,得到3个待检条块,分别为条块0、条块2,以及条块3。

上述仅仅作为举例,其它情形本申请不再一一进行描述。

步骤105:依次确定至少一个待检条块中的一个待检条块中的第二数据,向该一个待检条块中写入第二数据,若第二数据写入失败,则执行步骤106。

基于与上述所描述的向故障条块中写入故障条块中原本的第一数据同样的考虑,即为了保证数据的可靠性,本申请中,在对待检条块进行检测的过程中,可以首先确定待检条块中的数据,向该待检条块写入待检条块中原本的数据。需要说明的是,为了描述方便,本申请中将待检条块中的数据称为第二数据。

本申请中,可以依次对步骤104中得到的至少一个待检条块进行处理。例如,假设步骤104中得到3个待检条块,分别为条块0、条块2,以及条块3,则可以首先确定条块0中的第二数据,之后,向条块0中写入第二数据,若第二数据写入失败,则执行步骤106。

具体地,在一个可选的实现方式中,可以首先确定条块0中的第二数据是否具有raid冗余性,若该条块0中的第二数据具有raid冗余性,可以继续基于raid算法,通过与条块0位于同一条带的其他成员磁盘中的对应条块中的数据计算得出条块0中的第二数据,之后,向条块0写入该第二数据,若该第二数据写入失败,则执行步骤106。

此外,若该条块0中的第二数据不具有raid冗余性,可以继续执行步骤106。

此外,在上述过程中,若条块0中的第二数据写入成功,则可以继续计算得出条块2中的第二数据,之后,向条块2中写入该第二数据,直至成功向条块3写入条块3中原本的第二数据时,可以认为磁盘正常。

在另一个可选的实现方式中,可以首先读取条块0中的第二数据,若条块0中的第二数据读取失败,再确定条块0中的第二数据是否具有raid冗余性。

此外,若条块0中的第二数据读取成功,则可以继续读取条块2中的第二数据,直至成功读取条块3中的第二数据时,可以认为磁盘正常。

需要说明的是,上述所描述的首先基于条块0进行检测,其次基于条块2进行检测,再次基于条块3进行检测的顺序仅仅作为举例,实际应用中,对至少一个待检条块进行检测的顺序并不作限制。

步骤106:确定磁盘故障。

由上述实施例可见,raid阵列通过在实际的读操作中,接收到磁盘返回的用于表示读错误的执行结果时,进一步尝试向发生读错误的故障条块中写入该故障条块中原本的数据,在写入成功时,触发本申请提供的轻量级磁盘检测,由于轻量级磁盘检测是在实际的读操作过程后触发的,并未额外设置磁盘检测触发机制,可以实现尽可能早地发现磁盘故障,从而及时进行相应的修复,提高raid的可靠性,提高数据的可靠性;同时,由于在本申请提供的轻量级磁盘检测过程中,对指定范围的待检条块进行检测,相较于全盘检测,可以有效地降低磁盘检测过程对系统资源和磁盘io处理性能的消耗。

与前述磁盘检测方法的实施例相对应,本申请还提供了磁盘检测装置的实施例。

本申请磁盘检测装置的实施例可以应用在存储设备,例如计算机上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在存储设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图2所示,为本申请磁盘检测装置所在存储设备的一种硬件结构图,除了图2所示的处理器21、内存22、网络接口23、以及非易失性存储器24之外,实施例中装置所在的存储设备通常根据该存储设备的实际功能,还可以包括其他硬件,对此不再赘述。

请参考图3,为本申请磁盘检测装置的一个实施例框图,该装置可以应用于存储设备的raid系统中的raid阵列,该装置可以包括:冗余确定单元31、第一确定单元32、第一写入单元33、待检确定单元34、第二确定单元35、第二写入单元36、故障确定单元37。

其中,该冗余确定单元31,可以用于当接收到磁盘返回的用于表示读错误的执行结果时,确定所述磁盘中发生读错误的故障条块中的第一数据是否具有raid冗余性;

该第一确定单元32,可以用于若所述第一数据具有raid冗余性,则通过所述磁盘所属raid阵列中其他磁盘上的数据计算出所述第一数据;

该第一写入单元33,可以用于向所述故障条块写入所述第一数据;

该待检确定单元34,可以用于若所述第一数据写入成功,则基于所述故障条块确定至少一个待检条块;

该第二确定单元35,可以用于依次确定所述至少一个待检条块中的一个待检条块中的第二数据;

该第二写入单元36,可以用于向所述一个待检条块写入所述第二数据;

该故障确定单元37,可以用于若所述第二数据写入失败,则确定所述磁盘故障。

在一实施例中,所述待检确定单元34可以具体用于:

基于预设的偏移量从所述故障条块处进行偏移,得到至少一个待检条块。

在一实施例中,所述第二确定单元35可以包括(图3中并未示出):

冗余确定子单元,用于依次确定所述至少一个待检条块中的一个待检条块中的第二数据是否具有raid冗余性;

数据确定子单元,用于若所述第二数据具有raid冗余性,则通过所述磁盘所属raid阵列中其他磁盘上的数据计算出所述第二数据。

在一实施例中,所述冗余确定子单元可以包括(图3中并未示出):

读取子单元,用于依次读取所述至少一个待检条块中的一个待检条块中的第二数据;

确定子单元,用于若所述第二数据读取失败,则确定所述第二数据具有raid冗余性。

在一实施例中,所述装置还可以包括(图3中并未示出):

读取单元,用于若所述第二数据读取成功,则继续读取另一个所述待检条块中的第二数据,直至每一个所述待检条块中的第二数据读取成功时,确定所述磁盘正常。

在一实施例中,所述故障确定单元37还可以用于:

若所述第一数据不具有raid冗余性,则确定所述磁盘故障。

在一实施例中,所述故障确定单元37还可以用于:

若所述第一数据写入失败,则确定所述磁盘故障。

上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

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

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