一种改进的写时拷贝快照方法及系统
技术领域
本申请涉及计算机数据存储技术领域,尤其涉及一种改进的写时拷贝快照方法及系统。
背景技术
信息技术的加速发展,使得企业的关键业务数据的规模日益膨胀,企业不仅要求存储容量越来越大,对数据安全的要求以及响应要求也越来越高。随着存储应用需求的提高,用户需要在线的备份和保护数据。快照(Snapshot)技术是一种有效地在线数据保护方法,能够快速的实现在线数据备份。快照是指定数据集合的一个完全可用拷贝,该拷贝包括指定数据集合在某个时间点的映像。指定数据集合称为源卷,某个时间点的映像称为快照卷。
目前的快照技术主要有两种:写时拷贝(COW,Copy-On-Write)和重定向写(ROW,Redirect-On-Write)。其中写时拷贝技术在创建快照时,不进行任何数据拷贝,仅需为源数据区初始化快照引用指针索引,标识该时间点的数据实际所处位置,瞬间即可完成创建写时拷贝快照。因此,写时拷贝技术占用空间小,创建速度快,且对源数据区访问性能影响较小,广泛应用于各种快照系统中。
写时拷贝技术按指定大小单元将源数据区划分为若干数据块(chunk),数据块是快照处理数据的基本单位。写时拷贝的原理如下:创建写时拷贝快照后,当源卷收到写数据请求时,存储系统首先查找快照引用指针索引,判断源卷待修改的数据块是否建立了引用指针,若该数据块未建立引用指针,则先将该数据块拷贝到快照卷,并建立该数据块的引用指针,然后更新源卷数据块;若该数据块已经建立了引用指针,则表示该数据块已经拷贝到快照数据区,可直接更新该数据块。这样快照数据区就备份了源卷快照后所有的更改数据,即生成了源卷在快照创建时间点的映像。
独立冗余磁盘阵列系统(RAID)是一种把多块独立的磁盘按不同的方式组合起来形成一个磁盘组(逻辑卷),从而提供比单个磁盘更高的存储性能和提供数据冗余保护的技术。RAID技术的原理,就是把数据和相对应的奇偶校验信息以条带的形式存储到组成RAID系统的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID系统的一个磁盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。
现有的写时拷贝快照的实现流程如图1所示,其中涉及的模块交互如图2所示。现有的写时拷贝快照的实现流程包括:
步骤101:快照模块201接收到第一写IO时,先把第一写IO放在等待队列;
步骤102:快照模块201生成用于读取写IO所对应的源卷的原有数据的第一读IO,下发所述第一读IO到缓存模块202,缓存模块202将第一读IO下发到RAID模块203,RAID模块203从源卷204读取数据返回给缓存模块202,缓存模块202再将所述数据返回给快照模块201;
步骤103:快照模块201生成将读取的数据写入快照卷205的第二写IO,下发第二写IO到缓存模块202,由缓存模块202将第二写IO下发到RAID模块203,最后由RAID模块203将数据写入快照卷205,然后将写成功消息返回给缓存模块202,由缓存模块202返回给快照模块201;
步骤104:快照模块201将放在等待队列的第一写IO下发到缓存模块202,由缓存模块202下发到RAID模块203,最后由RAID模块203写入源卷204。
步骤105:RAID模块203将写成功消息返回给缓存模块202,由缓存模块202返回给快照模块201。
至此,一个快照IO的业务全部完成,继续下一个快照IO业务。
现有的写时拷贝快照方法中,当有快照业务时,存储系统需要先将新接收到的数据所对应的源卷原有的数据读出来,然后将源卷原有的数据写入快照卷,再将新接收到的数据写入源卷,这样,每进行一次写时拷贝操作,需要一个读IO和两个写IO,IO数量增多,流程复杂,需要多个模块之间多次交互,响应时间很慢,快照性能难以提高。
发明内容
本申请提供了一种改进的写时拷贝快照方法及系统,减少了模块之间的交互,可以极大提升快照性能。
本申请实施例提供的一种改进的写时拷贝快照方法,快照涉及的源卷和快照卷均由独立冗余磁盘阵列RAID实现,该方法包括:
A、接收到针对源卷的写IO后,根据写IO所在源卷的RAID类型,使用相对应的RAID算法,定位该写IO对应的条带;
B、判断该条带是否已建立快照,若是执行步骤D,否则执行步骤C;
C、使用读改写的方式将所述整个条带的数据读取出来写入快照卷,并将写IO的数据写入源卷,然后结束本次快照IO;
D、将写IO的数据写入源卷。
较佳地,步骤C以及步骤D之后,进一步包括:返回写成功消息。
本申请实施例还提供了一种快照系统,包括:快照模块、缓存模块、RAID模块、源卷和快照卷,快照模块用于接收针对源卷的写IO,并将写IO下发到缓存模块,以及接收来自缓存模块的写成功消息;
缓存模块用于将快照模块下发的写IO下发到RAID模块,以及将RAID模块返回的写成功消息发送到快照模块;
RAID模块用于接收缓存模块下发的写IO,根据写IO所在源卷的RAID类型,使用相对应的RAID算法,定位该写IO对应的条带,判断该条带是否已建立快照,若是,使用读改写的方式将所述整个条带的数据读取出来写入快照卷,并将写IO的数据写入源卷;否则将写IO的数据写入源卷;当数据写入源卷后,将写成功消息返回给缓存模块。
本申请实施例还提供了一种改进的写时拷贝快照方法,该方法由如前所述的快照系统实现,包括如下步骤:
快照模块接收针对源卷的写IO,并将写IO下发到缓存模块;缓存模块将快照模块下发的写IO下发到RAID模块;
RAID模块用于接收缓存模块下发的写IO,根据写IO所在源卷的RAID类型,使用相对应的RAID算法,定位该写IO对应的条带,判断该条带是否已建立快照,若是,使用读改写的方式将所述整个条带的数据读取出来写入快照卷,并将写IO的数据写入源卷;否则将写IO的数据写入源卷;当数据写入源卷后,将写成功消息返回给缓存模块;
缓存模块将RAID模块返回的写成功消息发送到快照模块。
从以上技术方案可以看出,利用RAID系统中读改写的特点生成快照,只需要执行一个写IO,IO数量减少,多个模块之间只需要一次交互,流程简洁,大部分的工作在RAID模块内即可完成,大大的提高了快照性能。
附图说明
图1为现有的写时拷贝快照的实现流程示意图;
图2为现有的写时拷贝快照实现过程中模块交互示意图;
图3为本申请实施例提供的写时拷贝快照的实现流程示意图;
图4为本申请实施例提供的写时拷贝快照实现过程中模块交互示意图。
具体实施方式
为使本申请技术方案的技术原理、特点以及技术效果更加清楚,以下结合具体实施例对本申请技术方案进行详细阐述。
在RAID系统中,写操作分为:整条写、重构写和读改写。
整条写:条带上的所有数据段(segment)都更新,不需要额外的读写操作,写性能最好。
重构写:当需要写入的磁盘数目超过阵列磁盘的一半时采取该方式,包括:
(1)从条带中不需要修改的数据段中读取原来的数据,再和本条带中所有需要修改的数据段上的新数据一起计算XOR校验值;
(2)将新数据以及新的XOR校验值一起写入条带。
例如:
数据盘为8块,某个时刻一个IO只更新了一个条带的6个数据段,剩余两个没有更新。在重构写模式下,会将没有更新的两个数据段的数据读出,和需要更行的前6个数据段计算出校验数据,然后新数据和校验信息一起写入磁盘。
读改写:
当需要写入的磁盘数目不超过一半时采取该方式,包括:
(1)从需要修改的segment中读取旧数据,再从条带上读取旧的奇偶校验值;
(2)根据旧数据、旧校验值和需要修改的数据段上的新数据计算这个条带上的新校验值;
(3)写入新的数据和校验值。
从读改写的原理可以看出,读改写本身就包含了读取条带原有数据的操作,因此可以利用该读操作来生成快照。本申请实施例提出的改进的写时拷贝快照方法,快照涉及的源卷和快照卷均由独立冗余磁盘阵列RAID实现,其基本设计思想是:
A、接收到针对源卷的写IO后,根据写IO所在源卷的RAID类型,使用相对应的RAID算法,定位该写IO对应的条带;
B、判断该条带是否已建立快照,若是执行步骤D,否则执行步骤C;
C、使用读改写的方式将所述整个条带的数据读取出来写入快照卷,并将写IO的数据写入源卷,然后结束本次快照IO;
D、将写IO的数据写入源卷。该步骤不限定写操作的具体方式,根据IO的情况选择效率最高的写入方式即可。
这样,快照模块只需要执行一个写IO,IO数量减少,多个模块之间只需要一次交互,流程简洁,大部分的工作在RAID模块内即可完成,大大的提高了快照性能。
本申请实施例提供的写时拷贝快照的实现流程如图3所示,其中涉及的模块交互如图4所示。该写时拷贝快照的实现流程包括:
步骤301:快照模块201接收到针对源卷的写IO时,将写IO下发到缓存模块202,由缓存模块202下发到RAID模块203;
步骤302:RAID模块203根据写IO所在源卷的RAID类型,使用相对应的RAID算法,定位该写IO对应的条带。
步骤303:RAID模块203判断该条带是否已建立快照,若是,执行步骤305,否则执行步骤304。
步骤304:RAID模块203使用读改写的方式将所述整个条带的数据读取出来写入快照卷205,并将写IO的数据写入源卷204,然后执行步骤306。
现有的读改写是从条带中不需要修改的数据段中读取原来的数据,而实际上读取整个条带的数据与读取条带的部分数据的机器开销基本是一样的
步骤305:RAID模块203将写IO的数据写入源卷204。
步骤306:RAID模块203将写成功消息返回给缓存模块202,由缓存模块202返回给快照模块201。
至此一个快照IO的业务全部完成,继续下一个快照IO业务。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请的保护范围,凡在本申请技术方案的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。