CN102222033B - 一种保存小型计算机系统接口访问错误的方法及装置 - Google Patents
一种保存小型计算机系统接口访问错误的方法及装置 Download PDFInfo
- Publication number
- CN102222033B CN102222033B CN201110165849.0A CN201110165849A CN102222033B CN 102222033 B CN102222033 B CN 102222033B CN 201110165849 A CN201110165849 A CN 201110165849A CN 102222033 B CN102222033 B CN 102222033B
- Authority
- CN
- China
- Prior art keywords
- scsi
- error
- message
- error message
- scsi device
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Abstract
本发明公开了一种保存SCSI访问错误的方法及装置,能够及时保存SCSI错误信息,并使得应用系统基于保存的SCSI错误信息准确快速的获取SCSI错误信息,以根据该SCSI错误信息快速确定存储设备的故障类型,并采取相应的处理措施。该方法为:磁盘驱动向SCSI设备下发SCSI命令后,接收SCSI设备返回的响应消息,根据该响应消息判定SCSI设备处理SCSI命令时出现SCSI错误,获取响应消息中携带的SCSI设备标识和错误报文,该错误报文中至少包括错误代码,解析错误报文生成相应的错误信息,按照SCSI设备标识保存错误信息至预设的SCSI错误存储区域。本发明同时公开了一种保存SCSI访问错误的装置。
Description
技术领域
本发明涉及存储技术领域,尤其涉及Linux系统中一种保存小型计算机系统接口(SCSI)访问错误的方法及装置。
背景技术
目前,随着网络和通信技术的发展,在云存储、电信网络和互联网等应用中,需要存储大量的数据,并且需要对存储的数据进行连续不间断的访问,这种情况下,一般使用具备大存储量、较高的数据吞吐量和低成本的采用小型计算机系统接口(Small ComputerSystem Interface,SCSI)的存储设备,例如采用SCSI的SATA(Serial AdvancedTechnology 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错误存储区域时,可以在磁盘A、磁盘B和磁盘C中分别预设相应的错误存储区域,也可以在磁盘A中分别以A、B、C为标识预设相应的错误存储区域。
实际应用中,可以针对SCSI设备设定相应的结构体数组,该结构体数组的每个元素相应保存一条错误信息,可以根据需要设定每个元素包含的内容,例如,结构体数组中的每个元素中可以包含错误代码、错误类型、错误扇区号、错误子类型等。当结构体数组中保存的错误信息的个数达到结构体数组的容量极限时,对于后续的错误信息不再保存,而是直接丢弃,直至清除结构体数组中保存的错误信息后,再保存进行SCSI访问产生的新的错误信息。
下面通过一个具体的实施例对本发明实施例提供的保存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上保存有文件file1,即在目录/mnt/a下存在file1,大小为10MB。上层应用系统针对file1发起读入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的file1;或者标识磁盘A的file1已经损坏,不再读取该文件;或者,从另一个磁盘或位置读取10010扇区对应的副本,对file1进行修复,如附图4所示;或者,向10010扇区写零使其重新映射,如附图5所示。
基于上述技术方案,本发明实施例中,磁盘驱动向SCSI设备下发SCSI命令后,接收SCSI设备返回的响应消息,根据该响应消息判定SCSI设备处理SCSI命令时出现SCSI错误,获取响应消息中携带的SCSI设备标识和错误报文,该错误报文中至少包括错误代码,解析该错误报文生成相应的错误信息,按照SCSI设备标识保存错误信息至预设的SCSI错误存储区域。从而能够及时保存SCSI错误信息,使得应用系统能够基于保存的SCSI错误信息准确快速的获取SCSI错误信息,以根据该SCSI错误信息快速确定存储设备的故障类型,并采取相应的处理措施。并且,本发明实施例中,错误信息还可以包括扇区号,从而能够准确定位错误发生的具体位置,以便于对SCSI设备的损坏扇区进行修复,提高修复的准确性以及修复效率。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
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设备标识相应的错误存储区域中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110165849.0A CN102222033B (zh) | 2011-06-20 | 2011-06-20 | 一种保存小型计算机系统接口访问错误的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110165849.0A CN102222033B (zh) | 2011-06-20 | 2011-06-20 | 一种保存小型计算机系统接口访问错误的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102222033A CN102222033A (zh) | 2011-10-19 |
CN102222033B true CN102222033B (zh) | 2017-07-11 |
Family
ID=44778589
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110165849.0A Active CN102222033B (zh) | 2011-06-20 | 2011-06-20 | 一种保存小型计算机系统接口访问错误的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102222033B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103220162B (zh) * | 2012-01-19 | 2016-08-31 | 百度在线网络技术(北京)有限公司 | 基于hdfs的scsi容错优化方法及装置 |
CN103577114B (zh) * | 2012-07-31 | 2016-08-10 | 华为技术有限公司 | 磁盘重映射方法和装置 |
CN104346233B (zh) * | 2014-10-13 | 2017-12-26 | 中国外汇交易中心 | 一种用于计算机系统的故障恢复方法及装置 |
CN105760287B (zh) * | 2016-02-19 | 2018-03-20 | 浪潮(北京)电子信息产业有限公司 | 一种计算机系统错误的预测方法及装置 |
KR20200065929A (ko) * | 2018-11-30 | 2020-06-09 | 에스케이하이닉스 주식회사 | 컨트롤러, 이를 포함하는 메모리 컨트롤러 및 이를 포함하는 저장 장치 |
CN112002370B (zh) * | 2020-07-23 | 2022-04-15 | 烽火通信科技股份有限公司 | 一种识别磁盘异常的方法、装置及分布式存储系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1805328A (zh) * | 2005-01-14 | 2006-07-19 | 英业达股份有限公司 | 在iSCSI中实现错误返回的系统及其方法 |
US7120837B1 (en) * | 2002-05-09 | 2006-10-10 | Cisco Technology, Inc. | System and method for delayed error handling |
CN1949203A (zh) * | 2006-10-27 | 2007-04-18 | 华为技术有限公司 | 小型计算机系统接口目标器的架构和数据传输方法 |
-
2011
- 2011-06-20 CN CN201110165849.0A patent/CN102222033B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7120837B1 (en) * | 2002-05-09 | 2006-10-10 | Cisco Technology, Inc. | System and method for delayed error handling |
CN1805328A (zh) * | 2005-01-14 | 2006-07-19 | 英业达股份有限公司 | 在iSCSI中实现错误返回的系统及其方法 |
CN1949203A (zh) * | 2006-10-27 | 2007-04-18 | 华为技术有限公司 | 小型计算机系统接口目标器的架构和数据传输方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102222033A (zh) | 2011-10-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102222033B (zh) | 一种保存小型计算机系统接口访问错误的方法及装置 | |
CN102929750B (zh) | 非易失性介质肮脏区段跟踪 | |
CN103309775B (zh) | 一种高可靠磁盘阵列的容错方法 | |
CN103927251B (zh) | 一种嵌入式系统的日志管理方法 | |
EP1860556A2 (en) | Storage system and control method thereof | |
US11073998B2 (en) | Method, apparatus for processing disk bad sector,and computer storage medium | |
CN103488544A (zh) | 检测慢盘的处理方法和装置 | |
JP2005301497A (ja) | ストレージ管理装置、リストア方法及びそのプログラム | |
CN104951383A (zh) | 用于监测硬盘的健康状况的方法和装置 | |
CN103647804B (zh) | 一种存储单元的数据处理方法、设备及系统 | |
EP2573689A1 (en) | Method and device for implementing redundant array of independent disk protection in file system | |
US10324794B2 (en) | Method for storage management and storage device | |
US9535619B2 (en) | Enhanced reconstruction in an array of information storage devices by physical disk reduction without losing data | |
CN109753378A (zh) | 一种内存故障的隔离方法、装置、系统及可读存储介质 | |
US20060083076A1 (en) | Data management apparatus | |
US10783042B2 (en) | System and method of assessing and managing storage device degradation | |
CN106990918A (zh) | 触发raid阵列重建的方法及装置 | |
CN103942119A (zh) | 一种存储器错误的处理方法和装置 | |
CN103049391B (zh) | 数据处理方法和设备 | |
CN111045871A (zh) | 一种硬盘坏道检测方法及系统 | |
CN111045858A (zh) | 一种坏道处理方法及系统 | |
US9524749B2 (en) | Diagnostic method and apparatus for a tape storage system | |
CN106708445A (zh) | 链路选择方法及装置 | |
CN106886471A (zh) | 一种基于linux中磁盘的读写故障检测方法及系统 | |
CN105354149A (zh) | 一种内存数据查找方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |