图中标记为未同步的数据块位图,确定与获取的数据块位图对应的数据编号,将数据编号对应的数据块写入第一设备和第二设备中的冗余设备,将相应数据块位图修改为已同步;并获取一致性位图中标记为未同步的信息块位图,确定与获取的信息块位图对应的数据编号,将数据编号对应的信息块写入第一设备和第二设备中的冗余设备,将相应信息块位图修改为已同步。
[0050]图1流程步骤104中,所述冗余驱动单元确定出与冗余设备GUID对应的冗余设备在线之后,该方法还可以进一步包括:判断主设备和冗余设备是否处于同步状态:
[0051]如果处于同步状态,则根据主设备存储的一致性位图判断写操作命令所在块是否标记为已同步,如果不是标记为已同步,则直接向主设备写入数据完成写操作,如果是,则执行所述将向主设备写入的数据写入到冗余设备的步骤;
[0052]如果不处于同步状态,则执行所述将向主设备写入的数据写入到冗余设备。
[0053]本发明中,还可以进一步包括数据读取操作,具体地:
[0054]冗余驱动单元对读操作命令进行监控;
[0055]冗余驱动单元捕获到从设备读取数据的读操作命令,判断进行读操作的设备是主设备还是冗余设备:
[0056]如果为主设备,从主设备的相应位置进行数据读取,判断数据读取是否成功:如果读取成功则结束流程;如果读取失败,则从与主设备对应的冗余设备的相应位置读取数据;
[0057]如果为冗余设备,则直接读取冗余设备相应位置的数据。
[0058]上述数据读取流程中,从主设备读取数据失败时,该方法还可以进一步包括:判断主设备与冗余设备是否处于同步状态:
[0059]如果不处于同步状态,则执行所述从与主设备对应的冗余设备的相应位置读取数据的步骤;
[0060]如果处于同步状态,则根据主设备存储的一致性位图确定读操作命令所在块标记是否为已同步,如果不是标记为已同步,则结束流程,如果是标记为已同步,则执行所述从与主设备对应的冗余设备的相应位置读取数据的步骤。
[0061]本发明中,还可以进一步包括映射关系解除操作,具体地:
[0062]存储节点服务器的解除应用单元接收包含的主设备⑶ID和冗余设备⑶ID的解除冗余设备命令,发送给冗余驱动单元;
[0063]冗余驱动单元根据解除冗余设备命令包含主设备⑶ID和冗余设备⑶ID,在映射关系查找对应的主设备和冗余设备,解除查找出的映射关系。
[0064]下面通过图2-6,对本发明基于云存储的数据冗余备份方法进行详细说明。
[0065]参见图2,为本发明基于云存储的数据冗余备份之初始化处理流程图实例,其包括以下步骤:
[0066]步骤201,存储节点服务器的初始化应用单元接收来自主设备的初始化指令,为主设备选取冗余设备。
[0067]步骤202,初始化应用单元将主设备⑶ID和冗余设备⑶ID包含在冗余初始化命令中下发给冗余驱动单元。
[0068]进一步地,还可将主设备⑶ID写入冗余设备中的约定位置,将冗余设备⑶ID写入主设备中的约定位置。
[0069]步骤203,冗余驱动单元将主设备和冗余设备的设备状态设置为正在初始化状态,冗余驱动单元建立并存储主设备GUID和冗余设备GUID之间的映射关系,将主设备初始化为云存储的自有存储结构。
[0070]自有存储结构可根据需要设置,例如包含一致性位图区域、信息区域和数据区域,一致性位图区域用于对没有同步写入冗余设备的数据进行记录,信息区域存储信息块,数据区域存储数据块,信息块和数据块一一对应,每个信息块和数据块用数据编号进行标识。自有存储结构还可以包含控制信息区域,可用于存储冗余设备GUID。下面对自有存储结构的各部分进行详细说明。
[0071]一致性位图区域:此区域包含信息块位图区域和数据块位图区域两部分,两部分位图区域所占的大小相同,每部分位图所占区域大小的计算方式例如为:如果((信息块数量/8)%信息块大小)的值为0,则计算大小的公式为(信息块数量/8);如果((信息块数量/8)%信息块大小)的值不为0,则计算大小的公式为((信息块数量/8) + (信息块大小-(信息块数量/8)%信息块大小))。“%”为求余数符号,所述信息块数量为信息区域能够存储的信息块的数量,所述信息块大小为信息区域存储的每个信息块的大小。
[0072]—致性位图区域主要是为了记录冗余设备不在线或比主设备晚上线时,向主设备写数据时信息块和数据块的数据改变,当冗余设备上线后,通过一致性位图区域来进行一致性同步。
[0073]信息区域:此区域是由所有的信息块组成的,是一片连续的区域,每个信息块都有对应的编号,信息块和数据块是一一对应的关系,信息块主要存储数据块中数据的相关索弓丨信息,例如相应数据块的内容介绍、地址等信息。
[0074]数据区域:此区域是由所有的数据块组成的,是一片连续的区域,每个数据块和信息块是对应的且有相同的编号,便于寻址访问。
[0075]控制信息区域:该区域可用于存储控制信息,控制信息包括存储设备初始化标志、初始化参数、其他三个区域的起始位置、设备冗余信息和校验信息;设备冗余信息可具体包括本设备⑶ID以及对应的冗余设备⑶ID。控制信息位于设备的头部,可通过设备的前512个字节中的信息来确定其他三个区域的大小。
[0076]进一步地,本步骤中,还可以将冗余设备也初始化为云存储的自有存储结构,也可以包含控制信息区域、一致性位图区域、信息区域和数据区域,冗余设备中的一致性位图区域为空。
[0077]步骤204,冗余驱动将设备状态置为正常状态,并返回初始化完成结果,开始提供数据冗余备份服务。
[0078]参见图3,为本发明基于云存储的数据冗余备份之数据同步流程图实例,其包括以下步骤:
[0079]步骤301,冗余驱动单元发现主设备和冗余设备数据不一致,生成一致性任务。
[0080]本步骤可具体采用如下方式实现:冗余驱动单元对设备上线状态进行监控,捕获到第一设备上线,获取第一设备GUID,在映射关系中查询出对应的第二 GUID ;冗余驱动单元确定出第二 GUID对应的第二设备在线,根据第一设备和第二设备中主设备内的一致性位图确定出第一设备和第二设备存储的数据不一致;生成一致性任务,加入任务列表中。
[0081]如果第一设备为主设备,则第二设备为冗余设备;如果第二设备为主设备,则第一设备为冗余设备。
[0082]步骤302,冗余驱动单元执行一致性任务,将一致性任务中的主设备和冗余设备的设备状态均置为同步状态。
[0083]步骤303,冗余驱动单元将处于同步状态的设备的读写操作命令缓存到一个临时链表中。
[0084]缓存到临时链表中的读操作命令和写操作命令,暂时不执行。
[0085]步骤304,冗余驱动单元获取一致性位图中标记为未同步的数据块位图,确定与获取的数据块位图对应的数据编号,将数据编号对应的数据块写入第一设备和第二设备中的冗余设备,将相应数据块位图修改为已同步;并获取一致性位图中标记为未同步的信息块位图,确定与获取的信息块位图对应的数据编号,将数据编号对应的信息块写入第一设备和第二设备中的冗余设备,将相应信息块位图修改为已同步;执行完每一个块的同步之后,取出步骤303中临时链表中的读写操作命令并执行;依此类推完成标记为未同步的所有数据块和信息块的同步。
[0086]本实例中,标记为未同步的位图,即标记为“I”位图,表明该位图指示的块未进行同步,也就是只在主设备相应位置写入了数据,没有同步在冗余设备的相应位置写入数据;每个位图对应一个数据编号,确定标记为“I”的位图后,确定这些位图对应的数据编号,将数据编号对应的块块写入冗余设备的相应位置;将相应的位图修改为已同步,本实例中,也就是,将相应位图标记为“O”。
[0087]关于读写操作命令的执行,参见图4和图5的流程实例。
[0088]步骤305,将主设备和冗余设备的设备状态置为正常状态。
[0089]采用图3的流程,便可完成主设备和冗余设备的自动同步。
[0090]参见图4,为本发明基于云存储的数据冗余备份之写操作处理流程图实例,其包括以下步骤:
[0091]步骤401,用户向主设备写入数据。
[0092]步骤402,冗余驱动单元捕获写操作命令。
[0093]步骤403,冗余驱动单元判断是否是向主设备写入数据,如果不是,则直接返回失败,如果是,则执行步骤404。
[0094]步骤404,冗余驱动单元获取主设备的⑶ID,根据主设备⑶ID,在映射关系中查找出对应的冗余设备GUID ;判断冗余设备是否在线,如果不在线,则执行步骤409 ;如果冗余设备在线,则执行步骤405。
[0095]步骤409,冗余驱动单元向主设备写数据,在一致性位图中将相应位图记录为未同止/J/ O
[0096]在主设备的一致性位图中进行记录后,冗余设备上线冗余驱动便可自动完成数据同步。
[0097]步骤405,冗余驱动单元判断主设备和冗余设备是否处于同步状态,如果处于同步状态,则执行步骤406 ;否则执行步骤408。
[0098]步骤406,冗余驱动单