SCSI中端到端校验能解决数据完整性问题吗?

这两天总能遇到一些数据完整性问题。例如系统的暴力关机致使元数据信息的损坏,硬件问题致使元数据和数据的损坏。这些问题的发生很难定位和避免,为此有人提出是否采用端到端的技术方案就能解决数据完整性问题呢?在此,我对这种技术解决方案进行了一些思考,认为端到端的解决方案不能从根本上解决data corruption问题,可是能够很好的避免错误数据写入磁盘或者读出交给应用。异步

首先,什么是端到端的数据校验解决方案?其实从这个名称咱们也能够很容易的推断出这种解决方案的技术思路:
 

 

在应用层发送数据的时候,为每一个sector计算CRC校验和信息,而后将带有校验信息的数据包发送至disk。Disk 在接受到数据包以后,磁盘从新计算校验和信息,而且和接受到的校验和信息作比较,若是发现错误,那么磁盘认在整个IO path上存在错误,返回IO操做失败。经过这种方法,应用层能够很明确的知道一次IO请求是否存在问题,若是操做成功,那么磁盘上的数据必然是正确的。目前,主要有两种端到端校验方案:一种是DIF,主要是从HBA至磁盘之间进行数据校验;另外一种是DIX,从应用层至磁盘进行整个IO Path链路的数据校验,上图描述的就是DIX。
 
从技术思路上来看,这种解决方案实际上就是前馈校验。在通讯系统中,这种技术被大量应用,而且接收端在发现错误的时候可以从纠错码中恢复出数据。在没有这种技术支撑的状况下,存储应用中为了保证数据写入的可靠性,在数据写完成以后还须要经过读操做来验证数据的正确性。后者是反馈校验方法。从这点上来看,SCSI端到端校验有必定的优点,采用前馈的方式,在不太影响IO性能的状况下,能够提升数据读写的完整性。
 
但仔细分析,这种解决方案有必定的弊端:
 
1,为了提升IO的吞吐量,写操做每每采用异步方式。在这种状况下,即便磁盘发现数据错误,可是应用以及失去错误处理的机会。因此,异步写操做会对这种技术产生必定影响。端到端的解决方案一开始是Oracle提出来的,我就在想是否是Oracle只是采用这种技术保护数据的元数据操做呢?由于元数据的更新每每是同步的。
 
2,端到端的校验只能保护应用数据的完整性,可是,没法解决目的地址错误致使的data corruption的问题。例如,因为HBA Firmware等问题致使数据包路由目的地址发生错误,本该写到LBA0位置的数据包被写到了LBA1的位置,在这种状况下,端到端的校验根本没有办法发现这个问题,从而一样致使数据完整性问题。在这种状况下,反馈系统比前馈系统更有优点,经过反馈读操做可能会发现上述问题。
 
3,端到端的解决方案初看比较简单,可是,实际上涉及的模块很是多。应用层首先须要支持这样的功能,HBA一样须要支持,而且在硬件上须要支持更加复杂的Scatter Gather DMA功能,并且须要将磁盘提供的520字节扇区映射到512字节和8字节校验。磁盘厂商须要支持这样的功能,须要进行数据的CRC计算。若是硬件RAID厂商想要用这种解决方案,那么RAID一样须要支持这种标准。所以,一个端到端数据校验的解决方案将会涉及到不少层面上的问题,并非很容易进行推广的技术。
 
我的认为端到端校验起码能够解决应用数据在传输过程当中的数据完整性问题,比目前开环系统而言是一大进步。所以,这种技术值得关注和采用。
相关文章
相关标签/搜索