一种基于SCSI设备的容错方法及系统技术方案

技术编号:13781481 阅读:46 留言:0更新日期:2016-10-04 18:18
本发明专利技术提供一种基于SCSI设备的容错方法及系统,所述方法包括:上层应用系统通过通用块设备层对SCSI设备提出访问请求;通用块设备层接收所述访问请求并进行处理,以及将处理结果返回给上层应用系统;上层应用系统接收所述处理结果,确定所述请求失败后构造SCSI读写命令,然后通过SG字符设备重新发起对所述SCSI设备的访问,并接收所述SCSI设备返回的响应;根据所述SCSI设备返回的响应进行错误处理。本发明专利技术提供的基于SCSI设备的容错方法及系统可以准确感知底层SCSI设备的错误,提高了硬盘利用率。

【技术实现步骤摘要】

本专利技术涉及互联网
,特别涉及一种基于SCSI设备的容错方法及系统
技术介绍
随着网络和通信技术的发展,在云存储、电信网络和互联网等应用中,需要存储大量的数据,并且需要对存储的数据进行连续不间断的访问,这种情况下,就需要使用具备大存储量、较高的数据吞吐量和低成本的采用小型计算机系统接口(Small Computer System Interface,SCSI)的存储设备。常见的SCSI设备包括硬盘,CD-ROM,DVD,磁带机等。由于需要对SCSI存储设备进行连续不间断的访问,这就难免会发生SCSI访问错误,及时准确的识别并处理发生的SCSI访问错误,才能保障数据安全,并保持业务的稳定性和可靠性。SCSI总线协议中定义了一种随命令响应返回的错误信息码,用于指示命令失败的原因或设备所处的异常状态,Linux操作系统中的SCSI驱动程序获得并处理了SCSI错误码信息。SCSI驱动程序是一种分层的架构,共分为三层:上层、中层和底层,其中对错误码进行处理在中层和上层实现,其处理方式主要有两种:重试,或者直接通知上层应用IO命令没有成功执行。在Linux操作系统下,应用从用户空间访问SCSI设备有以下几种
方式:(1)通过文件系统提供的文件访问接口进行访问;(2)通过裸设备进行访问,上层应用直接使用操作系统提供的POSIX接口对SCSI设备进行访问;(3)通过SCSI PASS THROUGH方式访问,即上层应用在用户空间直接访问Linux提供的SG字符设备,应用可以直接发CDB命令给这个SCSI设备,通过该接口,用户既可以做一些SCSI管理操作,如查询设备基本描述信息等,也可以发送读写数据命令。请参阅图1,通过文件系统或者裸设备进行访问时,都要经过内核的通用块层,当IO从底层返回时,先经过第一层回调通知中层,对于处理成功的命令,SCSI中层会调用第二次回调通知到块层,对于SCSI中层判断需要重试的命令,则会被加入块请求队列重新被处理。对于SCSI中层判断需要直接返回或超过允许重试次数的命令,通过第二次回调返回到设备访问层后,错误码会被转换成块层的EIO等错误,进而返回给用户态应用程序,用户无法感知SCSI设备具体发生了什么故障。通过SCSI PASS THROUGH方式访问时,用户态应用程序按照SCSI标准构造CDB读写命令字,通过IOCTL方式直接向SG字符设备发起请求并接收返回信息,此种方式的IO请求是同步请求,没有经过内核通用块层及其它算法的处理直接到达SCSI层,虽然读写性能不高,但每个命令都会有相应的SCSI返回码,根据返回码,可以很清楚的了解SCSI设备硬件当前的情况。现有技术的分布式存储系统一般通过文件系统接口或者内部调用裸设备接口的方式来实现对最终硬盘数据的访问,通过文件系统接口或者裸设备接口对SCSI硬盘进行IO访问时经过了通用块层,无法
获取SCSI硬盘的错误码,无法获知SCSI访问错误的具体错误类型,在硬盘出错时,无法容忍错误,只能直接将出错的硬盘踢出集群启动数据重构,或者向用户告警触发人工检查硬盘健康状态。公开号为CN103543960A的专利提供了一种存储数据的方法,将SCSI命令直接提交至底层驱动,在进入内核态后绕过通用块层,避免使用BIO接口,通过此方案中的AIO接口访问SCSI设备,在遇到硬盘错误时能够直接判断出硬盘的具体错误类型。但是其存在以下缺点:1、需要改造内核,绕过通用块层工作量较大;2、通用块层的IO调度算法以及cache机制成熟稳定,在一定程度上提高了应用程序访问SCSI设备的性能,该方案无法利用这些优势;3、只能使用AIO接口通过裸设备的方式访问,无法使用Ext4/XFS等主流文件系统,有很大局限性。公开号为CN103220162A的专利提供了一种基于HDFS的SCSI容错优化方法及装置,通过修改内核SCSI层,使SCSI层可以感知HDFS的副本策略,在SCSI中层收到底层的第一次回调时就进行处理,可以提高IO效率以及减少硬件故障率。但是,其需要修改系统内核的SCSI层,成本较高。由于硬盘出错是低概率事件,为了提高此低概率事件下的IO效率,而对整个内核SCSI层进行改造,使内核去感知HDFS上层副本策略,增加了大量成本。公开号为CN102222033A的专利提供了一种保存小型计算机系统接口访问错误的方法及装置,能够及时保存SCSI错误信息,并使得应用系统基于保存的SCSI错误信息准确快速的获取SCSI错误信
息,以根据该SCSI错误信息快速确定存储设备的故障类型。但是其是基于保存的SCSI错误信息进行判断,容易出现判断错误,同时对未保存的错误信息也无法进行准确判断。
技术实现思路
针对以上问题,本专利技术专利目的在于设计了一种基于SCSI设备的容错方法及系统,可以准确感知底层SCSI设备的错误,提高了硬盘利用率。本专利技术提供的具体技术方案如下:一种基于SCSI设备的容错方法,包括:上层应用系统通过通用块设备层对SCSI设备提出访问请求;通用块设备层接收所述访问请求并进行处理,以及将处理结果返回给上层应用系统;上层应用系统接收所述处理结果,确定所述请求失败后构造SCSI读写命令,然后通过SG字符设备重新发起对所述SCSI设备的访问,并接收所述SCSI设备返回的响应;根据所述SCSI设备返回的响应进行错误处理。本专利技术还提供一种基于SCSI设备的容错系统,包括:通用块设备模块,用于接收上层应用系统的访问请求并进行处理;判断模块,用于根据处理结果判断所述请求是成功;第一处理模块,用于在确定所述请求失败后构造SCSI读写命令,SG字符设备模块,用于重新发起对SCSI设备的访问,并接收所
述SCSI设备返回的响应;第二处理模块,用于根据所述SCSI设备返回的响应进行错误处理,以及返回上层应用系统请求结果。进一步,本专利技术所述根据所述SCSI设备返回的响应进行错误处理,进一步包括:如果所述SCSI设备返回的响应为命令执行成功,则向所述上层应用系统返回本次访问请求成功;如果所述SCSI设备返回的响应为命令执行失败,则判断所述SCSI设备返回的响应的错误类型,并根据所述错误类型进行修复。进一步,本专利技术所述根据所述错误类型进行修复,进一步包括:若所述SCSI设备返回的响应的错误类型为可通过覆盖写方式修复的读错误,则由所述上层应用系统获取冗余数据后执行覆盖写操作实现修复;若所述SCSI设备返回的响应的错误类型为可通过坏块映射方式修复的写错误,则由所述上层应用系统将写操作重定向到预留区域,并标记该数据块损坏实现修复;若所述SCSI设备返回的响应的错误类型为其它错误,则向所述上层应用系统返回具体的错误码,并记录容错失败事件。进一步,本专利技术所述确定所述处理失败后构造SCSI读写命令,进一步包括:若所述上层应用系统通过裸设备接口直接对所述通用块设备接口进行访问时,则基于本次访问的通用块设备地址构建所述SCSI读
写命令;若所述上层应用系统通过文件系统间接对所述通用块设备接口进行访问时,则调用相应的文件系统工具或接口来获取本次访问的通用块设备地址,构建所述SCSI读写命令。附图说明以下参照附图对本专利技术实施例作进一步说明,其中:图1是现本文档来自技高网
...

【技术保护点】
一种基于SCSI设备的容错方法,其特征在于,包括:上层应用系统通过通用块设备层对SCSI设备提出访问请求;通用块设备层接收所述访问请求并进行处理,以及将处理结果返回给上层应用系统;上层应用系统接收所述处理结果,确定所述请求失败后构造SCSI读写命令,然后通过SG字符设备重新发起对所述SCSI设备的访问,并接收所述SCSI设备返回的响应;根据所述SCSI设备返回的响应进行错误处理。

【技术特征摘要】
1.一种基于SCSI设备的容错方法,其特征在于,包括:上层应用系统通过通用块设备层对SCSI设备提出访问请求;通用块设备层接收所述访问请求并进行处理,以及将处理结果返回给上层应用系统;上层应用系统接收所述处理结果,确定所述请求失败后构造SCSI读写命令,然后通过SG字符设备重新发起对所述SCSI设备的访问,并接收所述SCSI设备返回的响应;根据所述SCSI设备返回的响应进行错误处理。2.根据权利要求1所述的一种基于SCSI设备的容错方法,其特征在于,所述根据所述SCSI设备返回的响应进行错误处理,进一步包括:如果所述SCSI设备返回的响应为命令执行成功,则向所述上层应用系统返回本次访问请求成功;如果所述SCSI设备返回的响应为命令执行失败,则判断所述SCSI设备返回的响应的错误类型,并根据所述错误类型进行修复。3.根据权利要求2所述的一种基于SCSI设备的容错方法,其特征在于,所述根据所述错误类型进行修复,进一步包括:若所述SCSI设备返回的响应的错误类型为可通过覆盖写方式修复的读错误,则由所述上层应用系统获取冗余数据后执行覆盖写操作实现修复;若所述SCSI设备返回的响应的错误类型为可通过坏块映射方式修复的写错误,则由所述上层应用系统将写操作重定向到预留区域,
\t并标记该数据块损坏实现修复;若所述SCSI设备返回的响应的错误类型为其它错误,则向所述上层应用系统返回具体的错误码,并记录容错失败事件。4.根据权利要求1或2所述的一种基于SCSI设备的容错方法,其特征在于,所述确定所述处理失败后构造SCSI读写命令,进一步包括:若所述上层应用系统通过裸设备接口直接对所述通用块设备接口进行访问时,则基于本次访问的通用块设备地址构建所述S...

【专利技术属性】
技术研发人员:花瑞文刘飞
申请(专利权)人:深圳市杉岩数据技术有限公司
类型:发明
国别省市:广东;44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1