一种磁盘阵列数据的读写方法及并行读写方法技术

技术编号:2855503 阅读:592 留言:0更新日期:2012-04-11 18:40
本发明专利技术提供了一种磁盘阵列的数据读取方法、一种磁盘阵列的数据写方法、一种基于写数据过程中的数据读取方法、以及一种基于正常读数据过程中的数据写方法。本发明专利技术中,在读、写的过程中,使用分条单元为单元读取数据、或者写数据,以及在按照读写规则进行计算时使用分条单元为单位进行计算。并且,本发明专利技术所述基于写数据过程中的数据读取方法可以实现大写、小写、重建写或降级写的过程中的正常读或者降级读的并发,本发明专利技术所述基于正常读数据过程中的数据写方法,可以实现正常读过程中的大写、小写、重建写或降级写的并发。使用本发明专利技术,可以提高读写的速度,并尽量实现读写并发。

【技术实现步骤摘要】

本专利技术涉及磁盘阵列(RAID)的数据读写技术,特别是指。
技术介绍
磁盘阵列(RAID,Redundant Access Independent Disk)技术已作为一项成熟的技术应用于数据存储备份中。RAID5(RAID LEVEL 5)是磁盘阵列的一个标准。图1为一个由4个磁盘组成的RAID5,4个磁盘在逻辑上看作一个磁盘进行分条(Strip),本例中,分为分条0~3。对于每一个分条,其中的3个磁盘用来存放数据,另外一个磁盘用来存放该分条的校验数据,每个分条分布在每个磁盘上的数据称为分条单元(SU,Strip Unit),分条单元也可称为分段(Block/Segment)。至于分条单元的大小视系统而定,有的系统或以1KB最有效率,或以4KB,或以6KB,甚至是4MB或8MB。由于磁盘的读写是以扇区(Sector,512字节)为单位,因此,分条单元应是512字节的倍数。如图1所示的RAID5,分条0包括SU0~SU2和校验单元P,每个分条单元包含10个磁盘扇区的数据。为了方便说明,本例中将分条0包含的各个磁盘的扇区与存储的数据编号为0~29,存放校验数据的扇区与存储的校验数据编号为P0~P9,将P0~P9称为校验数据单元。下面仍以图1为例,给出了当前磁盘0故障的情况下,向扇区9、10写入数据的过程。由于磁盘0失效,该写请求可以视为拆分成如下的两个不同的“子写”请求,包括以下步骤1)对于写入新数据9的子写,包括读扇区19、读扇区29,存于缓存中;由于要写的磁盘故障,因此按照降级写(Degraded Write)算法P9=原数据19XOR原数据29XOR新数据9,生成新校验数据P9存于缓存中,其中XOR表示异或运算;将新的校验数据P9写入扇区P9;2)对于写入新数据10的子写,包括读扇区10、读扇区P0,存于缓存中;按照小写(Small Write)或者称为读-修改-写(Read-Modify-Write)算法P10=旧数据10XOR新数据10XOR P0,生成新校验数据P0,存于缓存中;将新数据10写入扇区10,将新校验数据P0写入扇区P0。分析以上的过程,由于读写是针对扇区为单位进行,因此读写比较复杂,本例中,就包括了四次对磁盘读,两次计算,三次对磁盘写步骤。另一方面,由于以扇区为单位进行读写,若所读的扇区并不连续,即使是针对一个SU的正常读(Fault-Free Read)数据,例如读扇区11、13,由于并不是针对连续扇区的读操作,也会分成两次读动作,频繁的对磁盘进行操作,影响数据的读写速度。其中,上面提到的降级写算法和小写算法为RAID5中的写技术,写技术还包括大写算法(Large Write)和重建写(Reconstruct Write)其中小写、大写、重建写为正常写(Fault-Free Write),上面提到的正常读(Fault-FreeRead)以及在后面提到的降级读(Degraded Read)算法为RAID5中的读技术,所述读写算法可以参见图2所示的读写规则算法示意图,其中图中D表示数据,P表示校验数据。RAID中的读写技术也可参见有关RAID的资料,如CMU大学(Carnegie Mellon University)1996年8月出版的《RAIDFrameBook》或者该大学1996年8月出版的《RAIDFrameA Rapid Prototyping Toolfor RAID System》对RAID结构及涉及到的读写技术进行了详细的描述。另外,不难理解当读、写命令针对同一块扇区时,可能会存在读写冲突。但是即使读、写命令并不是针对同一块扇区时,也可能会出现读写冲突。例如,对于RAID5处于降级(Degraded)状态,即RAID组存在一个磁盘失效的状态,在读取失效磁盘数据时,要通过读取其他磁盘的数据和校验数据,使用降级读算法计算出所需要的数据,因此即使存在的写命令并不是针对该失效磁盘的扇区时,也可能存在着读写冲突,造成读数据不一致。下面详细分析这种情况。仍以图1所示的RAID5为例,假设磁盘0坏掉而失效,假设当前存在着写分条0的扇区11~18的命令,同时存在读分条0的扇区0~10数据的命令。数据写入扇区11~18的过程包括以下步骤步骤1根据RAID5小写(Small Write)算法,首先读取SU1上扇区11~18的旧数据11~18_old,并从磁盘3读取出对应的旧校验数据P1~P8_old,将读取的数据存于缓存(Cache)中。步骤2将从磁盘1扇区11~18读取的旧数据及对应的旧校验数据与Cache中的要写入该扇区11~18的新数据按照小写算法(P1~P8_new)=(11~18_old)XOR(11~18_new)XOR(P1~P8_old),生成新的校验数据(P1~P8_new)。由于步骤1~2的过程并没有对磁盘进行“写”动作,以上步骤1~2也合称为写动作中的预回写或预读(Preread)步骤。步骤3将新数据11~18_new和新校验数据P1~P8_new分别回写入对应磁盘扇区,结束。从磁盘0上的扇区0~10读数据过程包括以下步骤步骤1由于磁盘0坏,采用降级读算法,读取磁盘1上扇区10~19数据、磁盘2上扇区20~29的数据、校验数据P0~P9,将读取的数据存于Cache。步骤2将步骤1读取的数据按照降级读算法(0~9)=(10~19)XOR(20~29)XOR(P0~P9)得到磁盘1扇区0~9的数据,保存在Cache上。步骤3将计算出来的数据0~9和在Cache中缓存的数据10作为要读取数据1~10,提供给用户,结束。分析上述读写步骤,读数据需要涉及读取不同磁盘SU1的10~19、SU2的20~29、以及P的P0~P9,由于是针对不同磁盘的连续扇区进行读取,因此相当于分成3个子读命令。而写操作要写SU1的11~18和P的P1~P8,也可以认为是两个子写命令。当读写同时发生时,由于到达各个磁盘上的读写子命令无法保证顺序,就可能出现读写错误,例如当读数据完成对10~19的子读命令,而尚未执行读取P0~P9子命令时,若此时写操作完成了对P1~P8的子写命令,则读数据会读出更新后的校验数据。于是,便出现降级读数据时,从磁盘1读出的数据是旧数据,而从磁盘3读出的数据中却含有更新后的校验数据,导致在将读取的数据进行异或运算时,生成的数据0~9错误。因此,为了避免读写操作的并行发生,目前对于读写的并行操作均进行加锁,并且加锁的单位为分条,这里的并行发生是指在一个操作的开始到完成之间出现另一个操作,例如写操作完成前出现读操作,或者在读操作完成前出现写操作。读写的加锁,即读数据时加锁禁止并行发生针对该分条的写操作;写数据时加锁禁止并行发生针对该分条的读操作。通过以分条为单位进行加锁,不仅可以避免针对同一块扇区的读写冲突时,也可以避免上述针对不是同一块扇区的读写冲突。并且,通过以分条单位进行加锁,当写命令出现大写、小写、降级写,或者读命令出现正常读、降级读,不论是哪种写命令和读命令都可以避免同时出现,避免读写冲突,确保了数据的读写正确。目前的加锁方法虽然保证了读写数据的正确性,但是,由于不论是哪种情况都进行加锁,使得对分条的读、写操作无法并行,影响读写操作的性能。会导致本文档来自技高网...

【技术保护点】
一种磁盘阵列RAID的数据读取方法,包括以下步骤:A、根据当前的读规则,确定出要读取的数据所在扇区;B、确定出要读取的扇区所属分条单元或校验数据单元,从磁盘读取确定出的各个分条单元和校验数据单元,存入缓存;C、判断当 前的读是否为正常读,若是,则执行步骤D;否则,根据当前的读规则,使用缓存的分条单元和校验数据单元计算生成所要读取数据所属的分条单元,存于缓存;D、从缓存中的分条单元读取出所需要的数据。

【技术特征摘要】
1.一种磁盘阵列RAID的数据读取方法,包括以下步骤A、根据当前的读规则,确定出要读取的数据所在扇区;B、确定出要读取的扇区所属分条单元或校验数据单元,从磁盘读取确定出的各个分条单元和校验数据单元,存入缓存;C、判断当前的读是否为正常读,若是,则执行步骤D;否则,根据当前的读规则,使用缓存的分条单元和校验数据单元计算生成所要读取数据所属的分条单元,存于缓存;D、从缓存中的分条单元读取出所需要的数据。2.一种磁盘阵列RAID的数据写方法,包括以下步骤A、根据当前的写规则,确定出要预读的数据所在扇区;B、确定出要预读扇区所属分条单元或校验数据单元,从磁盘读取确定出的各个分条单元及校验数据单元,存入缓存;C、将要写入的数据与缓存中对应的分条单元进行处理,生成含有要写入数据的分条单元,作为要回写的分条单元,存于缓存;D、根据当前的写规则,利用缓存的所读取出的分条单元和校验数据单元、生成的要回写的分条单元计算生成要回写的校验数据单元,存于缓存;E、将所要回写的分条单元、要回写的校验数据单元回写入相应的磁盘中。3.根据权利要求2所述的方法,其特征在于,步骤A所述根据当前的写规则,确定出要预读的数据所在扇区包括判断写为小写时,所述确定出的扇区包括将要写入的数据所对应的扇区和对应的校验数据所在扇区;判断写为大写时,所述确定出的扇区包括将要写入数据所对应的扇区;判断写为重建写时,所述确定出的扇区包括重建写的写规则所要求预读的扇区、以及将要写入数据所对应的扇区;判断写为降级写时,所述确定出的扇区包括降级写的写规则所要求预读的扇区、以及校验数据所在扇区。4.一种磁盘阵列RAID的基于写数据过程中的数据读取方法,其中,写数据包括将所要写入的数据所在分条单元读取到缓存中、运算生成含有要写入数据的分条单元和校验数据单元的预读,将生成的分条单元及校验数据单元写入磁盘的回写;所述数据读取方法包括以下步骤A、根据当前的读规则,判断缓存中是否存储有所有要读取数据所属分条单元,若是,则执行步骤C;否则,执行步骤B;B、确定出未存于缓存中的要读取数据所属的分条单元;从磁盘中读取所述确定出的分条单元,存入缓存;C、判断当前的读是否为正常读,若是,则执行步骤D;否则,根据当前的读规则,使用缓存的分...

【专利技术属性】
技术研发人员:张巍唐小松黄玉环张国彬张粤任雷鸣陈绍元
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:94[中国|深圳]

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

1