磁盘热插拔管理方法以及装置与流程

文档序号:20874875发布日期:2020-05-26 16:21阅读:990来源:国知局
磁盘热插拔管理方法以及装置与流程

本发明涉及计算机技术领域,具体来说,涉及一种磁盘热插拔管理方法以及装置。



背景技术:

随着计算机技术的快速发展,庞大的网络资源通过服务器的处理、转化,最终储存在磁盘上,对于建立在磁盘阵列基础之上的高性能服务器,高可靠的管理磁盘插拔,快速的处理磁盘上线离线,成为计算机高可靠的分配数据、存储数据、实现系统高性能、高稳定性的首要条件。

从linux2.6开始,因动态管理硬件设别、自定义设备命名规则的优势,udev代替了devfs作为linux默认设备管理工具。本文针对数据存储的安全性、一致性,对udev触发结果进行处理分析,减小误操作或电路问题对磁盘的影响,以提升系统的稳定性。

许多新技术被提出用来管理硬件设备、监控磁盘上下线。udev是linux内核2.6提出的设备管理器,udev取代了之前的devfs和hotplug。当硬件设备发生插拔动作时,内核通过netlink向用户空间发送硬件设备信息,udev通过监听捕获到硬件信息后,在linux系统的/dev目录下创建或删除设备名称。

在系统长时间高i/o负载的情况下,会有链路闪断的现象发生,udev监控磁盘插拔是最常见的磁盘管理方法,但是该方法对于磁盘链路闪断这样的瞬时故障没有可靠的判断方案。其中,链路闪断是指磁盘控制器高压力下发生reset(重置),造成获取不到该控制器上磁盘信息。一旦有链路闪断故障发生,就会出现全部磁盘瞬间下线再上线的现象,造成系统数据不一致;同时磁盘插拔会伴随的数据链路不稳定,在短时间内会造成持续的udev事件触发,如果短时间内进行多个磁盘插拔,会产生的大量udev事件,从而阻塞socket通道,系统无法获取到后续的磁盘插拔事件,造成磁盘插拔事件丢失。



技术实现要素:

针对相关技术中的上述问题,本发明提出一种磁盘热插拔管理方法以及装置,能够不直接从udev工具中获取插拔盘数据,可以避免产生udev事件丢失。

本发明的技术方案是这样实现的:

根据本发明的一个方面,提供了一种磁盘热插拔管理方法,包括:

生成用于处理udev事件job的线程;

记录udev事件产生的次数;

定时查询所记录的udev事件产生的次数,当所记录的udev事件产生的次数不为零时,生成一个job投递到线程上;

在将job投递到线程上之后,线程收集所有在位磁盘信息。

在一个实施例中,磁盘热插拔管理方法还包括:生成计数器和定时器,其中,通过计数器来记录udev事件产生的次数,并且通过定时器定时查询计数器记录的udev事件产生的次数。

在一个实施例中,磁盘热插拔管理方法还包括:维护一个磁盘序列,其中,将首次收集到的磁盘信息作为初始磁盘序列;将首次之后的每次收集的磁盘序列与所维护的磁盘序列进行对比,并根据对比结果来判断是否有磁盘被插拔。

在一个实施例中,磁盘热插拔管理方法还包括:使用扫描命令来扫描硬件设备,其中,当收集磁盘脚没有获取到一个磁盘的信息、扫描命令获取到一个磁盘的信息时,判断一个磁盘为在位。

在一个实施例中,磁盘热插拔管理方法还包括:将所记录的udev事件产生的次数加一,并且生成一个job投递给线程以重新执行收集磁盘脚本。

根据本发明的另一方面,提供了一种磁盘热插拔管理装置,包括:

线程模块,用于生成用于处理udev事件job的线程;

计数器,用于记录udev事件产生的次数;

定时器,用于定时查询所记录的udev事件产生的次数,当所记录的udev事件产生的次数不为零时,生成一个job投递到线程上,在将job投递到线程上之后,线程收集所有在位磁盘信息。

在一个实施例中,磁盘热插拔管理装置还包括:磁盘序列模块,用于维护一个磁盘序列,其中,将首次收集到的磁盘信息作为初始磁盘序列;判断模块,用于将首次之后的每次收集的磁盘序列与所维护的磁盘序列进行对比,并根据对比结果来判断是否有磁盘被插拔。

在一个实施例中,磁盘热插拔管理装置还包括:扫描模块,用于使用扫描命令来扫描硬件设备,其中,当收集磁盘脚没有获取到一个磁盘的信息、扫描命令获取到一个磁盘的信息时,判断一个磁盘为在位。

在一个实施例中,计数器还用于在判断一个磁盘在位之后,将所记录的udev事件产生的次数加一,并且生成一个job投递给线程以重新执行收集磁盘脚本。

本发明的技术方案,只记录udev事件是否产生,即只记录是否有插拔盘事件产生,使用脚本来获取磁盘信息,而不直接从udev工具中获取插拔盘数据,从而可以避免产生udev事件丢失。能够解决现有技术中udev工具无法解决udev事件丢失的问题;

本发明的技术方案,还提供了磁盘对比过滤方法,来增强udev工具对链路闪断的抵抗力。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是根据本发明实施例的磁盘热插拔管理方法的流程图;

图2是根据本发明实施例的磁盘热插拔管理方法的流程图;

图3是根据本发明实施例的插拔盘磁盘列表对比的示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本发明保护的范围。

为解决磁盘插拔,短时间内产生的大量udev事件,阻塞信道通道,造成udev事件丢失这个问题,本文提出udev延时集中处理的思想。图1是根据本发明实施例的磁盘热插拔管理方法的流程图。如图1所示,根据本发明实施例磁盘热插拔管理方法可以包括以下步骤:

s101,生成用于处理udev事件的线程。应理解,udev是一种linux内核2提出的设备管理器,当硬件设备发生插拔动作时,内核用户空间发送硬件设备信息,udev通过监听捕获到硬件信息后,在linux系统的/dev目录下创建或删除设备名称。

s102,记录udev事件产生的次数。

s103,定时查询所记录的udev事件产生的次数,当所记录的udev事件产生的次数不为零时,生成一个job并投递到线程上。

s104,在将job投递到线程上之后,线程收集所有在位磁盘信息。

本发明的上述技术方案,采用这种思想:只记录udev事件是否产生,即只记录是否有插拔盘事件产生,使用脚本来获取磁盘信息,而不直接从udev工具中获取插拔盘数据,从而可以避免产生udev事件丢失。能够解决现有技术中udev工具无法解决udev事件丢失的问题。

在一些实施例中,在步骤s101处,还可以生成计数器和定时器。并且,通过计数器来记录udev事件产生的次数,并且通过定时器定时查询计数器记录的udev事件产生的次数。如图2所示,在这样的实施例中,系统中生成一个查询udev定时器和一个处理udev事件job的线程,使用一个计数器来记录udev事件产生的次数,定时器会定时的(例如10s)检查这个计数器记录的udev事件数量,若计数器不为0,则会生成一个job投递到处理udev事件job的线程上,该线程再调用脚本收集所有在位磁盘信息。在其他实施例中,也可以采用其他可实施的方式来记录和查询udev事件产生的次数。

另一方面,linux可以通过定义一个udev规则来产生匹配设备属性的设备文件,这些设备属性可以是内核设备名称、总线路径、厂商名称、序列号或者磁盘大小等等,通过这些属性我们可以获取到磁盘的属性信息,但是只通过udev事件,并不能完全确定磁盘是否真的被拔掉,因为链路闪断也可能触发udev事件产生,但是此时磁盘并未被拔出。

为解决上述问题,本发明还提供了磁盘对比过滤方法,来增强udev工具对链路闪断的抵抗力。具体的,在系统内维护一个磁盘序列,以首次收集到的磁盘信息为蓝本(即初始磁盘序列)作为系统维护的磁盘序列,将以后每次运行收集脚本获取到磁盘序列和系统内维护的磁盘序列进行对比,来判断是否有磁盘被插拔。如图3所示,可以通过sg_scan命令(扫描命令)来扫描硬件设备,通过该命令可以判断磁盘是否在位,过滤其他异常产生的系统误判。因此当判断有磁盘被拔出时,使用sg_scan命令可以判断是否该磁盘真的被拔除,而不是因为链路闪断产生的误报。例如,当收集磁盘脚本没有获取到磁盘1的信息,但是使用sg_scan命令此时可以获取到该盘的信息,此时则认为是由于链路闪断造成该盘的丢失,因此将不会删除该盘在系统内的数据。然后,继续判断其他盘是否被删除。同时,还会对udev事件计数器进行加一操作,重新生成一个job投递给处理udev事件的线程,重新执行收集磁盘脚本。从而,可以保证磁盘在位信息的真实可靠。

综上所述,在磁盘热插拔的情况下,本发明提出了udev延时集中处理和磁盘对比过滤两种思想方法,使得磁盘信息可靠性、数据可靠性、系统稳定性等方面都得到了一定的提升。

现有技术中原始的udev方法和本发明提出的udev延时集中处理方法在对于udev事件丢失这个问题处理能力,以及对链路闪断的抵抗能力,如表1所示:

表1两种方法对udev事件丢失的抵抗能力对比

原始的udev方法无法处理udev事件丢失的问题。如果有块磁盘被拔除,但是该盘被拔的udev事件因为信道阻塞(指udev接收socket传输过来的硬件信息的缓存满了,无法接收后续的硬件信息)而丢失掉,系统就无法获取到这块盘被拔除的信息,会导致系统数据出错,系统稳定性较差。而udev延时集中处理方法可以很好的解决这种问题,保障系统稳定性。

原始的udev方法无法处理链路闪断这种情况。当系统长时间处于高i/o负载发生链路闪断时,原始udev方法会将系统内的全部盘删除,这样会严重影响服务器内数据的安全性。本发明通过采用磁盘对比过滤方法可以更可靠的判断该盘没有获取到是链路闪断造成还是拔盘产生的,更好的保障了数据的安全性。

根据本发明的另一方面,提供了一种磁盘热插拔管理装置,包括:

线程模块,用于生成用于处理udev事件job的线程;

计数器,用于记录udev事件产生的次数;

定时器,用于定时查询所记录的udev事件产生的次数,当所记录的udev事件产生的次数不为零时,生成一个job投递到线程上,在将job投递到线程上之后,线程收集所有在位磁盘信息。

在一个实施例中,磁盘热插拔管理装置还包括:磁盘序列模块,用于维护一个磁盘序列,其中,将首次收集到的磁盘信息作为初始磁盘序列;判断模块,用于将首次之后的每次收集的磁盘序列与所维护的磁盘序列进行对比,并根据对比结果来判断是否有磁盘被插拔。

在一个实施例中,磁盘热插拔管理装置还包括:扫描模块,用于使用扫描命令来扫描硬件设备,其中,当收集磁盘脚没有获取到一个磁盘的信息、扫描命令获取到一个磁盘的信息时,判断一个磁盘为在位。

在一个实施例中,计数器还用于在判断一个磁盘在位之后,将所记录的udev事件产生的次数加一,并且生成一个job投递给线程以重新执行收集磁盘脚本。

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

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