一种保存小型计算机系统接口访问错误的方法及装置的制作方法

文档序号:6426627阅读:130来源:国知局
专利名称:一种保存小型计算机系统接口访问错误的方法及装置的制作方法
技术领域
本发明涉及存储技术领域,尤其涉及Linux系统中一种保存小型计算机系统接口 (SCSI)访问错误的方法及装置。
背景技术
目前,随着网络和通信技术的发展,在云存储、电信网络和互联网等应用中, 需要存储大量的数据,并且需要对存储的数据进行连续不间断的访问,这种情况下,一般使用具备大存储量、较高的数据吞吐量和低成本的采用小型计算机系统接口(Small Computer System Interface, SCSI)的存储设备,例如采用 SCSI 的 SATA (Serial Advanced Technology Attachment,串行高级技术附件)磁盘作为存储设备。由于需要对存储设备进行连续不间断的访问,这就难免会发生SCSI访问错误,及时准确的识别并处理发生的SCSI访问错误,才能保障数据安全,并保持业务的稳定性和可靠性。现有技术中,针对SCSI访问错误有两种处理方式一种是在文件系统中统计发生 SCSI访问错误的次数和频率,据此判断存储设备发生故障的程度,并采取相应的处理措施, 由于在文件系统层将所有的SCSI错误都统一为输入输出错误,因此无法获知SCSI访问错误的具体错误类型,也就不能针对该具体错误类型采取有针对性的措施;另一种是在系统日志中会记录每次发生的SCSI访问错误,通过解析系统日志中记录的SCSI访问错误可以获得SCSI访问错误的具体错误类型,但是,由于系统日志没有固定的格式,系统日志中易出现丢失数据的现象,并且由于系统日志中除了记录SCSI访问错误信息之外,还可以记录大量其他信息,例如,系统日志中还包括登录相关信息、打印信息等,因此,系统日志文件较大,这就为在系统日志中定位SCSI访问错误信息造成一定的困难,容易出现误判。综上所述,需要寻求一种获取SCSI访问错误信息的方法,能够准确快速的获取 SCSI访问错误信息,以根据该SCSI访问错误信息快速确定存储设备的故障类型,并采取相应的处理措施。

发明内容
本发明提供一种保存SCSI访问错误的方法及装置,能够及时保存SCSI错误信息, 并使得应用系统基于保存的SCSI错误信息准确快速的获取SCSI错误信息,以根据该SCSI 错误信息快速确定存储设备的故障类型,并采取相应的处理措施。本发明实施例提供的具体技术方案如下—种保存小型计算机系统接口 SCSI访问错误的方法,包括磁盘驱动向SCSI设备下发SCSI命令后,接收SCSI设备返回的响应消息;根据所述响应消息判定所述SCSI设备处理所述SCSI命令时出现SCSI错误,获取所述响应消息中携带的SCSI设备标识和错误报文,所述错误报文中至少包括错误代码;解析所述错误报文生成相应的错误信息,按照所述SCSI设备标识保存所述错误信息至预设的SCSI错误存储区域。
一种保存小型计算机系统接口 SCSI访问错误的装置,包括第一处理单元,用于磁盘驱动向SCSI设备下发SCSI命令后,接收SCSI设备返回的响应消息;第二处理单元,用于根据所述响应消息判定所述SCSI设备处理所述SCSI命令时出现SCSI错误,获取所述响应消息中携带的SCSI设备标识和错误报文,所述错误报文中至少包括错误代码;第三处理单元,用于解析所述错误报文生成相应的错误信息,按照所述SCSI设备标识保存所述错误信息至预设的SCSI错误存储区域。基于上述技术方案,本发明实施例中,磁盘驱动向SCSI设备下发SCSI命令后,接收SCSI设备返回的响应消息,根据该响应消息判定SCSI设备处理SCSI命令时出现SCSI错误,获取响应消息中携带的SCSI设备标识和错误报文,该错误报文中至少包括错误代码, 解析该错误报文生成相应的错误信息,按照SCSI设备标识保存错误信息至预设的SCSI错误存储区域。从而能够及时保存SCSI错误信息,使得应用系统能够基于保存的SCSI错误信息准确快速的获取SCSI错误信息,以根据该SCSI错误信息快速确定存储设备的故障类型,并采取相应的处理措施。


图1为本实施例中保存SCSI访问错误的装置结构图;图2为本实施例中保存SCSI访问错误的方法流程图;图3为本实施例中保存SCSI访问错误的系统架构图;图4为本实施例中对SCSI访问错误进行修复的示意图;图5为本实施例中另一对SCSI访问错误进行修复的示意图。
具体实施例方式为了及时保存SCSI错误信息,以使得应用系统基于保存的SCSI错误信息准确快速的获取SCSI错误信息,进一步根据该SCSI错误信息快速确定存储设备的故障类型,并采取相应的处理措施,本发明实施例中提供了一种保存SCSI访问错误的方法及装置。该方法为磁盘驱动向SCSI设备下发SCSI命令后,接收SCSI设备返回的响应消息,根据该响应消息判定SCSI设备处理SCSI命令时出现SCSI错误,获取该响应消息中携带的SCSI设备标识和错误报文,该错误报文中至少包括错误代码,解析错误报文生成相应的错误信息,按照 SCSI设备标识保存错误信息至预设的SCSI错误存储区域。下面结合附图对本发明优选的实施方式进行详细说明。如附图1所示,本发明实施例中,保存小型计算机系统接口 SCSI访问错误的装置主要包括以下处理单元第一处理单元101,用于磁盘驱动向SCSI设备下发SCSI命令后,接收SCSI设备返回的响应消息;第二处理单元102,用于根据响应消息判定SCSI设备处理SCSI命令时出现SCSI 错误,获取响应消息中携带的SCSI设备标识和错误报文,该错误报文中至少包括错误代码;
第三处理单元103,用于解析错误报文生成相应的错误信息,按照SCSI设备标识保存错误信息至预设的SCSI错误存储区域。本实施例中,保存SCSI访问错误的装置可以设置于磁盘驱动层。基于上述系统架构,如附图2所示,本发明实施例中,保存SCSI访问错误的详细方法流程如下步骤201 磁盘驱动向SCSI设备下发SCSI命令后,接收SCSI设备返回的响应消
肩、ο本发明实施例中,以底层操作系统为Linux操作系统为例进行说明,上层应用系统向磁盘驱动下发读或写命令后,由磁盘驱动解析该命令后向相应的SCSI设备下发SCSI 命令,并接收SCSI设备针对SCSI命令返回的响应消息,该响应消息中携带处理成功或失败的处理结果信息,对该响应进行解析后,将该处理结果信息返回给上层应用系统。步骤202 根据响应消息判定SCSI设备处理SCSI命令时出现SCSI错误,获取响应消息中携带的SCSI设备标识和错误报文,该错误报文中至少包括错误代码。其中,错误报文中根据实际需要还可以包括错误发生的扇区号、错误子类型等信肩、ο实际应用中,根据响应消息判断出现SCSI错误时,解析错误报文获得错误信息后调用磁盘驱动注册的回调函数,在该回调函数中实现对错误信息的保存,并在保存完毕后进行回调函数的默认处理。步骤203 解析错误报文生成相应的错误信息,按照SCSI设备标识保存错误信息至预设的SCSI错误存储区域。本实施例中,接收上层应用系统下发的返回设备标识对应的错误信息的消息,从 SCSI错误存储区域获取SCSI设备标识对应的错误信息,发送给上层应用系统。较佳地,从 SCSI错误存储区域获取SCSI设备标识对应的错误信息后,清除SCSI错误存储区域中SCSI 设备标识对应的错误信息。较佳地,错误报文中还包括出现SCSI错误的扇区号。在解析错误报文生成的错误信息中包含错误代码和错误发生的扇区号,在上层应用系统获取错误信息后,可以根据错误信息中包含的错误代码确定错误类型,并进一步根据扇区号定位SCSI设备发生故障的具体位置,以便于对磁盘损坏扇区进行修复,例如便于磁盘损坏扇区进行物理修复和数据修复。实际应用中,接收上层应用系统下发的消息时,对该消息进行判断,若确定为返回设备标识对应的错误信息的消息,则基于SCSI错误存储区域获取SCSI设备标识对应的错误信息,并返回给上层应用系统;若确定为清除设备标识对应的错误信息的消息,则基于 SCSI错误存储区域清除SCSI设备标识对应的错误信息。例如,在接收上层应用系统下发的消息时,若判断该消息为返回磁盘A对应的错误信息的消息,则基于磁盘A的错误存储区域获取获取错误信息;若判断该消息为清除磁盘A对应的错误信息的消息,则清除磁盘A的错误存储区域中的错误信息。本实施例中,基于SCSI设备标识,保存错误信息至预设的SCSI错误存储区域,具体为在每个SCSI设备中分别预设相应的SCSI错误存储区域,基于SCSI设备标识,保存错误信息至相应的SCSI设备中预设的SCSI错误存储区域中;或者,在任意一个SCSI设备中预设每个SCSI设备的错误存储区域,并将SCSI设备标识作为相应的错误存储区域的标识, 将错误信息保存至与SCSI设备标识相应的错误存储区域中。例如,SCSI设备包含磁盘A、 磁盘B和磁盘C,在设定SCSI错误存储区域时,可以在磁盘Α、磁盘B和磁盘C中分别预设相应的错误存储区域,也可以在磁盘A中分别以A、B、C为标识预设相应的错误存储区域。实际应用中,可以针对SCSI设备设定相应的结构体数组,该结构体数组的每个元素相应保存一条错误信息,可以根据需要设定每个元素包含的内容,例如,结构体数组中的每个元素中可以包含错误代码、错误类型、错误扇区号、错误子类型等。当结构体数组中保存的错误信息的个数达到结构体数组的容量极限时,对于后续的错误信息不再保存,而是直接丢弃,直至清除结构体数组中保存的错误信息后,再保存进行SCSI访问产生的新的错 T^fn 息。下面通过一个具体的实施例对本发明实施例提供的保存SCSI错误的方法进行进一步详细说明。如附图3所示的系统,该系统中包含四个SCSI磁盘设备,并且该系统采用Linux 操作系统。其中,四个SCSI磁盘依次为磁盘A、磁盘B、磁盘C和磁盘D,在Linux操作系统中依次表现为设备文件/dev/sda、/dev/sdb、/dev/sdc和/dev/sdd,并且每个磁盘都创建有XFS文件系统,依次安装至目录/mnt/a、/mnt/b、/mnt/c和/mnt/d。假设磁盘A上保存有文件filel,即在目录/mnt/a下存在filel,大小为10MB。上层应用系统针对filel发起读入1MB的数据请求,该请求经XFS文件系统处理后转化为读入SCSI磁盘A的10000 12047扇区数据的请求,并由磁盘驱动生成相应的SCSI命令发送给SCSI磁盘A。磁盘A在读取10010扇区时出现了 SCSI错误,且错误类型为介质错误(medium error),错误子类型为不可恢复读错误(unrecoverd read error),生成相应的响应消息并发送给磁盘驱动,磁盘驱动根据响应消息判断出现SCSI错误,进一步根据响应消息获知SCSI错误出现在磁盘 A,根据响应消息中携带的错误报文获知错误代码以及错误类型为介质错误,错误子类型为不可恢复读错误,且错误发生的扇区号为10010,然后调用磁盘驱动注册的回调函数,将根据响应消息获得的错误信息保存至预设存储区域对应的结构体数组中,该结构体数组中的每个元素为结构体类型数据,将从响应消息中获得的错误信息形成结构体类型数据后,作为一个元素保存至磁盘A对应的结构体数组中。磁盘驱动在获知发生SCSI错误的同时,告知磁盘A的XFS文件系统发生输入输出错误。上层应用系统从XFS文件系统中获得输入输出错误的返回值时,通过Linux设备控制接口打开/dev/sda,并向其发送获取所有SCSI设备的错误信息的消息,该消息通过设备控制接口发送至磁盘驱动,并从磁盘A的错误存储区域中获取错误信息。应用系统根据获得的错误信息获知错误类型为介质错误,子类型为不可恢复读错误,错误发生的扇区号为 10010,并据此判断10010扇区已经损坏,上层应用系统根据实际情况可以采取具体的处理方式,例如,删除磁盘A的filel ;或者标识磁盘A的filel已经损坏,不再读取该文件;或者,从另一个磁盘或位置读取10010扇区对应的副本,对filel进行修复,如附图4所示;或者,向10010扇区写零使其重新映射,如附图5所示。基于上述技术方案,本发明实施例中,磁盘驱动向SCSI设备下发SCSI命令后,接收SCSI设备返回的响应消息,根据该响应消息判定SCSI设备处理SCSI命令时出现SCSI错误,获取响应消息中携带的SCSI设备标识和错误报文,该错误报文中至少包括错误代码,解析该错误报文生成相应的错误信息,按照SCSI设备标识保存错误信息至预设的SCSI错误存储区域。从而能够及时保存SCSI错误信息,使得应用系统能够基于保存的SCSI错误信息准确快速的获取SCSI错误信息,以根据该SCSI错误信息快速确定存储设备的故障类型,并采取相应的处理措施。并且,本发明实施例中,错误信息还可以包括扇区号,从而能够准确定位错误发生的具体位置,以便于对SCSI设备的损坏扇区进行修复,提高修复的准确性以及修复效率。 显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
权利要求
1.一种保存小型计算机系统接口 SCSI访问错误的方法,其特征在于,包括磁盘驱动向SCSI设备下发SCSI命令后,接收SCSI设备返回的响应消息;根据所述响应消息判定所述SCSI设备处理所述SCSI命令时出现SCSI错误,获取所述响应消息中携带的SCSI设备标识和错误报文,所述错误报文中至少包括错误代码;解析所述错误报文生成相应的错误信息,按照所述SCSI设备标识保存所述错误信息至预设的SCSI错误存储区域。
2.如权利要求1所述的方法,其特征在于,所述错误报文中还包括出现SCSI错误的扇区号。
3.如权利要求1或2所述的方法,其特征在于,解析所述错误报文生成错误信息,按照所述SCSI设备标识保存所述错误信息至预设的SCSI错误存储区域后,包括接收上层应用系统下发的返回所述设备标识对应的错误信息的消息,从所述SCSI错误存储区域获取所述SCSI设备标识对应的错误信息,发送给所述上层应用系统。
4.如权利要求3所述的方法,其特征在于,所述接收上层应用系统下发的返回所述设备标识对应的错误信息的消息,从所述SCSI错误存储区域获取所述SCSI设备标识对应的错误信息后,包括清除所述SCSI错误存储区域中所述SCSI设备标识对应的错误信息。
5.如权利要求4所述的方法,其特征在于,按照所述SCSI设备标识保存所述错误信息至预设的SCSI错误存储区域,包括在每个SCSI设备中分别预设相应的SCSI错误存储区域,按照所述SCSI设备标识确定相应的SCSI设备,保存所述错误信息至该SCSI设备对应的SCSI错误存储区域中;或者,在任意一个SCSI设备中预设每个SCSI设备的错误存储区域,并将SCSI设备标识作为相应的错误存储区域的标识,将所述错误报文保存至与SCSI设备标识相应的错误存储区域中。
6.一种保存小型计算机系统接口 SCSI访问错误的装置,其特征在于,包括第一处理单元,用于磁盘驱动向SCSI设备下发SCSI命令后,接收SCSI设备返回的响应消息;第二处理单元,用于根据所述响应消息判定所述SCSI设备处理所述SCSI命令时出现 SCSI错误,获取所述响应消息中携带的SCSI设备标识和错误报文,所述错误报文中至少包括错误代码;第三处理单元,用于解析所述错误报文生成相应的错误信息,按照所述SCSI设备标识保存所述错误信息至预设的SCSI错误存储区域。
7.如权利要求6所述的装置,其特征在于,所述错误报文中还包括出现SCSI错误的扇区号。
8.如权利要求6或7所述的装置,其特征在于,所述第三处理单元解析所述错误报文生成错误信息,按照所述SCSI设备标识保存所述错误信息至预设的SCSI错误存储区域后,还用于接收上层应用系统下发的返回所述设备标识对应的错误信息的消息,从所述SCSI错误存储区域获取所述SCSI设备标识对应的错误信息,发送给所述上层应用系统。
9.如权利要求8所述的装置,其特征在于,所述第三处理单元从所述SCSI错误存储区域获取所述SCSI设备标识对应的错误信息后,还用于清除所述SCSI错误存储区域中所述 SCSI设备标识对应的错误信息。
10.如权利要求9所述的装置,其特征在于,所述第三处理单元按照所述SCSI设备标识保存所述错误信息至预设的SCSI错误存储区域,具体为在每个SCSI设备中分别预设相应的SCSI错误存储区域,按照所述SCSI设备标识确定相应的SCSI设备,保存所述错误信息至该SCSI设备对应的SCSI错误存储区域中; 或者,在任意一个SCSI设备中预设每个SCSI设备的错误存储区域,并将SCSI设备标识作为相应的错误存储区域的标识,将所述错误报文保存至与SCSI设备标识相应的错误存储区域中。
全文摘要
本发明公开了一种保存SCSI访问错误的方法及装置,能够及时保存SCSI错误信息,并使得应用系统基于保存的SCSI错误信息准确快速的获取SCSI错误信息,以根据该SCSI错误信息快速确定存储设备的故障类型,并采取相应的处理措施。该方法为磁盘驱动向SCSI设备下发SCSI命令后,接收SCSI设备返回的响应消息,根据该响应消息判定SCSI设备处理SCSI命令时出现SCSI错误,获取响应消息中携带的SCSI设备标识和错误报文,该错误报文中至少包括错误代码,解析错误报文生成相应的错误信息,按照SCSI设备标识保存错误信息至预设的SCSI错误存储区域。本发明同时公开了一种保存SCSI访问错误的装置。
文档编号G06F11/34GK102222033SQ201110165849
公开日2011年10月19日 申请日期2011年6月20日 优先权日2011年6月20日
发明者何抗洪, 彭杰, 韩盛中 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1