发明内容
有鉴于此,本发明的目的在于提供一种生成快照的方法,该方法能够减少对存储介质的IO读写次数,降低生成快照所耗费的时间,提高系统性能。
本发明的目的在于提供一种生成快照的装置,该装置能够减少对存储介质的IO读写次数,降低生成快照所耗费的时间,提高系统性能。
本发明的目的在于提供一种利用生成的快照进行数据恢复的方法,该方法能够减少对存储介质的IO读写次数,提高系统性能。
本发明的目的在于提供一种利用生成的快照进行数据恢复的方法,该方法能够减少对存储介质的IO读写次数,提高系统性能。
一种生成快照的方法,该方法包括:
A、监控对源介质的写操作,判断快照介质包含的当前快照子数据区中是否存在与源介质的写操作携带的写数据地址匹配的影射页,如果存在,则将写操作发送至源介质,否则,根据源介质的写操作携带的写数据地址中记载的源数据,在当前快照子数据区中生成一个新的影射页,并更新当前快照子数据区保存的映射表及暂存的影射表;
B、判断是否满足生成快照的触发条件,如果是,执行步骤C,否则执行步骤A;
C、更新快照介质包含的元数据区中保存的元数据,清空暂存的影射表。
较佳地,所述步骤A之前进一步包括:
判断是否存在与源介质绑定的快照介质,如果存在,则确定当前快照子数据区,否则,选择一个作为快照介质的存储介质与源介质进行绑定,对快照介质进行初始化。
上述方法中,所述快照介质包含元数据区及快照数据区;
所述元数据区用以保存元数据;所述元数据至少包含快照数量、预设的影射页数量的最大值、当前快照子数据区的状态信息、快照数据区的起止地址及当前快照子数据区的起止地址;
所述快照数据区包含多个快照子数据区;所述快照子数据区用以保存影射表及影射页;所述影射表为源介质的影射页与快照子数据区的影射页之间的映射关系;所述快照子数据区的影射页用以保存与其有映射关系的源介质的影射页中的数据的快照数据。
上述方法中,步骤A所述判断快照介质包含的当前快照子数据区中是否存在与源介质的写操作携带的写数据地址匹配的影射页包括:
根据源介质的写操作携带的写数据地址,确定源介质的影射页;
判断暂存的影射表中是否存在包含源介质的影射页的映射关系,如果存在,则确定快照介质包含的当前快照子数据区中存在与源介质的写操作携带的写地址匹配的影射页,如果不存在,则确定快照介质包含的当前快照子数据区中不存在与源介质的写操作携带的写地址匹配的影射页。
上述方法中,步骤A所述在当前快照子数据区中生成一个新的影射页,并更新当前快照子数据区保存的影射表及暂存的影射表包括:
对源介质的写操作携带的写数据地址中记载的源数据进行拷贝,将拷贝后的数据写入当前快照子数据区中的一个空影射页中,将写入拷贝后的数据的影射页作为生成的新的影射页;
将源介质的写操作携带的写数据地址对应的源介质的影射页,与当前快照子数据区中写入拷贝后的数据的影射页之间的映射关系,写入当前快照子数据区保存的影射表及暂存的影射表。
上述方法中,所述生成快照的触发条件为:当前快照子数据区包含的影射页的数量达到预设的影射页数量的最大值,或者接收到由快照生成周期触发生成的快照生成指令。
上述方法中,所述步骤C包括:将元数据包含的快照数量增1,将元数据包含的当前快照子数据区的状态信息标注为已完成。
上述方法中,所述确定当前快照子数据区包括:
读取快照介质的元数据区中包含的元数据,在元数据中的当前快照子数据区的状态信息为已完成时,根据元数据中的当前快照子数据区的起止地址确定下一个快照子数据区的起止地址,在下一个快照子数据区中建立一个空的影射表,并更新元数据区保存的元数据;
在元数据中的当前快照子数据区的状态信息为未完成时,保持当前快照子数据区不变。
上述方法中,所述对快照介质进行初始化包括:
将快照介质划分为元数据区及快照数据区;
根据快照数据区的起止地址及预设的快照子数据区的大小,确定当前快照子数据区的起止地址,将当前快照子数据区的状态标注为未完成;
将快照数量、预设的影射页数量的最大值、快照数据区的起止地址、当前快照子数据区的状态及当前快照子数据区的起止地址的作为元数据写入元数据区;
根据当前快照子数据区的起止地址,在快照数据区包含的当前快照子数据区建立一个空的影射表,并暂存一个空的影射表;
根据预设的影射页数量的最大值及预设的影射页大小,将当前快照子数据区中除保存影射表之外的存储空间划分为多个空的影射页。
一种生成快照的装置,该装置包含:
源介质,用以保存源数据;
快照介质,用以保存由源数据生成的快照数据;所述快照介质包含用以保存元数据的元数据区及快照数据区;所述快照数据区包含多个用以保存影射表及影射页的快照子数据区;
存储控制器,监控对源介质的写操作,判断当前快照子数据区中是否存在与源介质的写操作携带的写数据地址匹配的影射页,如果存在,则将写操作发送至源介质,否则,根据源介质的写操作携带的写数据地址中记载的源数据,在当前快照子数据区中生成一个新的影射页,并更新当前快照子数据区保存的影射表及其暂存的影射表;
所述存储控制器判断是否满足生成快照的触发条件,如果是,更新元数据区保存的元数据,否则继续监控对源介质的写操作。
较佳地,所述存储控制器还判断是否存在与源介质绑定的快照介质,如果存在,则确定当前快照子数据区,否则,选择一个作为快照介质的存储介质与源介质进行绑定,对快照介质进行初始化。
上述装置中,所述元数据至少包含快照数量、预设的影射页数量的最大值、当前快照子数据区的状态信息、快照数据区的起止地址及当前快照子数据区的起止地址;
所述影射表为源介质的影射页与快照子数据区的影射页之间的映射关系;所述快照子数据区的影射页用以保存与其有映射关系的源介质的影射页中的数据的快照数据。
上述装置中,所述存储控制器包含:
操作监控模块,监控对源介质的操作,如果判定为读操作,则将读操作发送至源介质,如果判定为写操作,则将写操作携带的写数据地址发送给快照生成模块,根据快照生成模块的第一触发,将写操作发送至源介质,根据快照生成模块的第二触发,继续监控对源介质的操作;
快照生成模块,根据写操作携带的写数据地址,确定源介质的影射页,判断其暂存的影射表中是否存在包含源介质的影射页的映射关系,如果存在,则输出第一触发至操作监控模块,否则,对源介质的写操作携带的写数据地址中记载的源数据进行拷贝,将拷贝后的数据写入当前快照子数据区中的一个空的影射页中,生成新的影射页;
所述快照生成模块将源介质的写操作携带的写数据地址对应的源介质的影射页,与当前快照子数据区中写入拷贝后的数据的影射页之间的映射关系,写入当前快照子数据区保存的影射表及其暂存的影射表中;
所述快照生成模块判断当前快照子数据区包含的影射页的数量是否达到预设的影射页数量的最大值,或者判断是否接收到由快照生成周期触发生成的快照生成指令,如果是,将元数据包含的快照数量增1,将元数据包含的当前快照子数据区的状态信息标注为已完成,清空其暂存的影射表,否则输出第二触发至操作监控模块。
上述装置中,所述存储控制器包含:
初始化模块,启动后判断是否存在与源介质绑定的快照介质,如果存在,则根据元数据中的当前快照子数据区的状态信息,确定当前快照子数据区,否则,选择一个作为快照介质的存储介质与源介质进行绑定,将快照介质划分为元数据区及快照数据区,将元数据写入元数据区,将快照数据区划分为多个包含空的影射页及空的影射表的快照子数据区;
操作监控模块,监控对源介质的操作,如果判定为读操作,则将读操作发送至源介质,如果判定为写操作,则将写操作携带的写数据地址发送给快照生成模块,根据快照生成模块的第一触发,将写操作发送至源介质,根据快照生成模块的第二触发,继续监控对源介质的操作;
快照生成模块,根据写操作携带的写数据地址,确定源介质的影射页,判断其暂存的影射表中是否存在包含源介质的影射页的映射关系,如果存在,则输出第一触发至操作监控模块,否则,对源介质的写操作携带的写数据地址中记载的源数据进行拷贝,将拷贝后的数据写入当前快照子数据区中的一个空的影射页中,生成新的影射页;
所述快照生成模块将源介质的写操作携带的写数据地址对应的源介质的影射页,与当前快照子数据区中写入拷贝后的数据的影射页之间的映射关系,写入当前快照子数据区保存的影射表及其暂存的影射表中;
所述快照生成模块判断当前快照子数据区包含的影射页的数量是否达到预设的影射页数量的最大值,或者判断是否接收到由快照生成周期触发生成的快照生成指令,如果是,将元数据包含的快照数量增1,将元数据包含的当前快照子数据区的状态信息标注为已完成,清空其暂存的影射表,否则输出第二触发至操作监控模块。
一种利用生成的快照进行数据恢复的方法,该方法包括:
根据数据恢复指令及生成快照的时间点,确定进行数据恢复的快照子数据区;
生成一个空的恢复影射表,将进行数据恢复的快照子数据区至当前快照子数据区的多个快照子数据区中保存的影射表包含的映射关系写入恢复影射表中;
根据快照子数据区对应的时间点,更新恢复影射表;
利用更新后的恢复映射表中的映射关系,将进行数据恢复的快照子数据区至当前快照子数据区的多个快照子数据区中包含的影射页所保存的数据,写入与其有映射关系的源介质的影射页中;
清空进行数据恢复的快照子数据区至当前快照子数据区的多个快照子数据区中保存的影射表及影射页,删除恢复影射表,更新元数据区。
上述方法中,所述确定进行数据恢复的快照子数据区包括:
根据接收到的数据恢复指令,结束生成快照;
根据快照的时间点、快照生成周期及元数据区保存的元数据,由生成快照时的当前快照子数据区,确定进行数据恢复的快照子数据区。
上述方法中,所述根据快照子数据区对应的时间点,更新恢复影射表包括:
比较包含了相同源介质的影射页的映射关系所属的快照子数据区对应的时间点,保留所属的快照子数据区所对应的生成快照的时间点最早的一条映射关系,删除其余的包含了相同源介质的影射页的映射关系,获得更新后的恢复映射表。
上述方法中,所述更新元数据区包含:
将元数据区保存的元数据中的快照数量更新为进行数据恢复的快照子数据区生成之前的快照数量;
将元数据区保存的元数据中的当前快照子数据区的状态信息更新为已完成;
将元数据区保存的元数据中当前快照子数据区的起止地址更新为进行数据恢复的快照子数据区之前生成的一个快照子数据区的起止地址。
一种利用生成的快照进行数据恢复的装置,该装置包含前述任一所述的生成快照的装置及恢复控制器;
所述恢复控制器根据数据恢复指令及生成快照的时间点,确定进行数据恢复的快照子数据区,生成一个空的恢复影射表,将进行数据恢复的快照子数据区至当前快照子数据区的多个快照子数据区中保存的影射表包含的映射关系写入恢复影射表中,根据快照子数据区对应的时间点,更新恢复影射表;
所述恢复控制器利用更新后的恢复映射表中的映射关系,将进行数据恢复的快照子数据区至当前快照子数据区的多个快照子数据区中包含的影射页所保存的数据,写入与其有映射关系的源介质的影射页中;
所述恢复控制器清空进行数据恢复的快照子数据区至当前快照子数据区的多个快照子数据区中保存的影射表及影射页,删除恢复影射表,更新元数据区。
上述装置中,所述恢复控制器包含:
快照恢复模块,根据接收到的数据恢复指令,结束生成快照,根据快照的时间点、快照生成周期及元数据区保存的元数据,由生成快照时的当前快照子数据区,确定进行数据恢复的快照子数据区;
所述快照恢复模块生成一个空的恢复影射表,将进行数据恢复的快照子数据区至当前快照子数据区的多个快照子数据区中保存的影射表包含的映射关系写入恢复影射表中;
所述快照恢复模块比较包含了相同源介质的影射页的映射关系所属的快照子数据区对应的时间点,保留所属的快照子数据区所对应的生成快照的时间点最早的一条映射关系,删除其余的包含了相同源介质的影射页的映射关系,获得更新后的恢复映射表,输出更新后的恢复影射表至更新模块,并删除更新后的恢复映射表;
更新模块,利用更新后的恢复映射表中的映射关系,将进行数据恢复的快照子数据区至当前快照子数据区的多个快照子数据区中包含的影射页所保存的数据,写入与其有映射关系的源介质的影射页中;
所述更新模块清空进行数据恢复的快照子数据区至当前快照子数据区的多个快照子数据区中保存的影射表及影射页,删除恢复影射表,将元数据区保存的元数据中的快照数量更新为进行数据恢复的快照子数据区生成之前的快照数量,将元数据区保存的元数据中的当前快照子数据区的状态信息更新为已完成,将元数据区保存的元数据中当前快照子数据区的起止地址更新为进行数据恢复的快照子数据区之前生成的一个快照子数据区的起止地址。
由上述的技术方案可见,本发明提供了一种生成快照的方法及装置,在该方法中,监控对源介质的写操作,判断快照介质包含的当前快照子数据区中是否存在与源介质的写操作携带的写数据地址匹配的影射页,如果存在,则将写操作发送至源介质,否则,根据源介质的写操作携带的写数据地址中记载的源数据,在当前快照子数据区中生成一个新的影射页,并更新当前快照子数据区保存的映射表及暂存的影射表,判断是否满足生成快照的触发条件,如果是,则更新快照介质包含的元数据区中保存的元数据,清空暂存的影射表,否则继续监控对源介质的写操作。本发明还提供了一种利用生成的快照进行数据恢复的方法及装置,在该方法中,根据快照子数据区中保存的影射表对源介质进行数据恢复,相较于现有的利用快照进行数据恢复的方法,本发明利用生成的快照进行数据恢复时,减少了对存储介质的IO读写次数。采用本发明的方法及装置,能够极大地减少了对存储介质的IO读写次数,降低生成快照所耗费的时间,提高系统性能。
具体实施方式
为使本发明的目的、技术方案、及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。
本发明提供了一种生成快照的方法及装置,在该方法中,监控对源介质的写操作,判断快照介质包含的当前快照子数据区中是否存在与源介质的写操作携带的写数据地址匹配的影射页,如果存在,则将写操作发送至源介质,否则,根据源介质的写操作携带的写数据地址中记载的源数据,在当前快照子数据区中生成一个新的影射页,并更新当前快照子数据区中的影射表;根据生成快照的触发条件,更新快照介质包含的元数据区中保存的元数据,清空暂存的影射表。其中,本发明提及的暂存的影射表是暂存于生成快照的装置所装设的系统的内存中的影射表,其保持与当前快照子数据区的影射表同步,作用是为了加快影射页的查找效率。
本发明还提供了一种利用生成的快照进行数据恢复的方法及装置,该方法中,利用生成快照期间保存于快照子数据区中的影射表,对需要进行数据恢复的源介质中的影射页进行定位,将快照子数据区中的影射页中保存的快照数据写入源介质中与其有映射关系的影射页中,节省了查找定位源介质中需要进行数据恢复的存储空间所耗费的时间,提高了系统性能,由于在生成快照的过程中减少了对存储介质的IO读写次数,相较于现有的利用生成快照进行数据恢复的方法,减少了对存储介质的IO读写次数。当配置的影射页越大,则减少的IO读写次数则越多,效率的提升也就越大。
为了表述清楚,现对本发明提及的一些名词进行说明,具体如下:本发明的快照介质为用以保存源介质中的源数据的快照数据的存储介质;快照介质可被划分为元数据区及快照数据区;元数据区用以保存与生成快照相关的元数据;快照数据区用以保存源介质中的源数据的快照数据。其中,元数据至少包含快照数量、预设的影射页数量的最大值、当前快照子数据区的状态信息、快照数据区的起止位置及当前快照子数据区的起止位置;快照数据区可被划分为多个快照子数据区,每一个快照子数据区用以保存一个快照生成周期内生成的源数据的快照数据;每一个快照子数据区可被划分为用以保存影射表的影射表区和用以保存多个影射页的影射数据区。
本发明提及的影射页即为依据生成快照时对系统性能的要求,在源介质上和快照介质的快照子数据区中划分的一定大小的存储空间,影射页的大小可为2的幂次方,最小为16KB,最大可达到2048KB;源介质的影射页的大小与绑定的快照介质包含的快照子数据区中的影射页的大小相同。本发明的源介质根据其大小及设置的影射页的大小,能够确定源介质包含的影射页的数量,源介质中的影射页可以为依次编码;本发明的快照介质中的每一个快照子数据区根据其大小及设置的影射页的大小,能够确定每一个快照子数据区包含的影射页的数量,每一个快照子数据区中影射页是独立编码的,且在一个快照子数据区中影射页按照其地址依次编码。
本发明提及的源介质的影射页与快照介质的影射页之间的映射关系为一种指向关系,即源介质的影射页中保存的源数据的拷贝数据被写入到一个快照子数据区中的某一个影射页中,则由源介质的影射页指向该快照子数据区的该影射页的指向关系,就代表了一个映射关系,在影射表中可以用一个影射项进行表示。比如:比如:一个源介质有128个数据块,编号为块0到块127,每个数据块的大小为16KB,预设的影射页的大小为32KB,则这个源介质在逻辑上被分成64个影射页,影射页依次编号为影射页0到影射页63;若对源介质的一个写操作中携带的写数据地址包含于块3的存储空间内,则这个写操作会落入到影射页1中;若影射页1保存的源数据的快照数据被写入到当前快照子数据区中的影射页8中,则在影射表中会生成一条由源介质的影射页1指向当前快照子数据区的影射页8的映射关系。
图2为本发明生成快照的方法流程图。现结合图2,对本发明生成快照的方法进行说明,具体如下:
步骤201:监控对源介质的操作的类型,如果是写操作,则执行步骤203,如果是读操作,执行步骤202;
该步骤可通过拦截对源介质的所有操作,通过对操作的类型的识别,对源介质的操作的类型进行监控。其中,可通过标识符,对操作的类型进行识别,比如:读操作的标识符为READ,写操作的标识符为WRITE。
步骤202:允许对源介质的读操作,之后执行步骤201;
该步骤可通过放行对源介质的读操作来实现。
步骤203:判断当前快照子数据区中是否存在与写操作的写数据地址匹配的影射页,如果是,执行步骤204,否则执行步骤205;
该步骤包括:步骤2031,冻结对源介质的所有读操作或写操作;步骤2032,根据源介质的写操作中携带的写数据地址,确定进行本次写操作的源介质的影射页;步骤2033,根据暂存的影射表,判断影射表中是否存在包含源介质的影射页的映射关系,如果是,执行步骤204,否则执行步骤205。
步骤2032,可根据影射页的大小、源介质的起止地址及写数据地址,确定写数据地址所属的影射页的存储空间,进而确定进行本次写操作的影射页。
由于本发明的快照生成方法中,每当当前快照子数据区中生成了一个新的影射页时,就会对暂存的影射表及当前快照子数据区保存的影射表进行更新,因此,暂存的影射表能够与当前快照子数据区保存的影射表保持同步。其中,快照子数据区中保存的影射表可在利用生成的快照进行数据恢复时定位源介质中的影射页,而暂存的影射页是为了避免频繁地对快照子数据区中的影射表进行读取和查找,这样可以提高系统的性能。
步骤204:允许对源介质的写操作,之后执行步骤201;
该步骤可通过放行对源介质的写操作来实现。
步骤205:在当前快照子数据区中生成新的影射页,更新当前快照子数据区保存的影射表及暂存的影射表;
该步骤包括:步骤2051,对源介质的写操作携带的写数据地址中记载的源数据进行拷贝;步骤2052,将拷贝后的数据写入当前快照子数据区中的一个空影射页中,将写入拷贝后的数据的影射页作为生成的新的影射页;步骤2053,将源介质的写操作携带的写数据地址对应的源介质的影射页,与当前快照子数据区中写入拷贝后的数据的影射页之间的映射关系,写入当前快照子数据区保存的影射表及暂存的影射表中。
步骤2052中提及的拷贝后的数据即为此刻生成的写数据地址中记载的源数据的快照数据;步骤2052中提及的当前快照子数据区中的影射页可为按照预设的影射页大小划分的存储空间,在写入拷贝后的数据时,可根据预设的影射页大小及当前快照子数据区的起止地址,将拷贝后的数据写入已保存了快照数据的影射页的下一个空的影射页的存储空间中。
步骤206:判断是否满足生成快照的触发条件,如果是,执行步骤207,否则执行步骤201;
该步骤中判断是否满足生成快照的触发条件可为判断当前快照子数据区中的影射页的数量是否达到元数据中包含的预设的影射页数量的最大值,或者为判断是否接收到由快照生成周期触发生成的快照生成指令,如果是,执行步骤207,否则执行步骤201,仍然执行本次快照生成周期。
可根据影射表中的映射关系的数量确定当前快照子数据区中的影射页的数量。
步骤207:更新元数据区中保存的元数据,清空暂存的影射表,之后结束操作;
该步骤包括:步骤2071,将元数据包含的快照数量增1;步骤2072,将元数据包含的当前快照子数据区的状态信息标注为已完成;步骤2073,清空暂存的影射表。
由步骤201执行至步骤207完成了一个快照数据的生成过程,步骤207之后可结束该快照生成周期,进入下一个快照生成周期,或者结束快照生成流程。若进入下一个快照生成周期,可执行步骤201。
优选地,在步骤201之前进一步包括:
步骤200:判断是否存在与源介质绑定的快照介质,如果是,则确定当前快照子数据区,否则,选择一个作为快照介质的存储介质与源介质进行绑定,对快照介质进行初始化。
步骤200中,可根据一个用以记载源介质与快照介质的绑定关系的配置文件,来判断是否存在与源介质绑定的快照介质。
步骤200中确定当前快照子数据区的方法包括:读取快照介质的元数据区中的元数据,在元数据中的当前快照子数据区的状态信息为已完成时,根据元数据中当前快照子数据区的起止地址,确定下一个快照子数据区的起止地址,在下一个快照子数据区中建立一个空的影射表,并更新元数据区保存的元数据;在元数据中的当前快照子数据区的状态信息为未完成时,保持当前快照子数据区不变。
其中,上述方法中提及的更新元数据区保存的元数据包括:将下一个快照子数据区的起止地址作为元数据中当前快照子数据区的起止地址,将当前快照子数据区的状态信息更新为未完成。
步骤200中对快照介质进行初始化包括:将快照介质划分为元数据区及快照数据区;根据快照数据区的起止地址及预设的快照子数据区的大小,确定当前快照子数据区的起止地址,将当前快照子数据区的状态标注为未完成;将快照数量、预设的影射页数量的最大值、快照数据区的起止地址、当前快照子数据区的状态及当前快照子数据区的起止地址的作为元数据写入元数据区;根据当前快照子数据区的起止地址,在快照数据区包含的当前快照子数据区建立一个空的影射表,并暂存一个空的影射表;根据预设的影射页数量的最大值及预设的影射页大小,将当前快照子数据区中除保存影射表之外的存储空间划分为多个空的影射页。
图3为本发明利用生成的快照进行数据恢复的方法流程图。现结合图3,对本发明利用生成的快照进行数据恢复的方法进行说明,具体如下:
本发明的数据恢复方法是利用图2的方法所生成的快照数据来进行数据保护和恢复。
步骤301:根据数据恢复指令及生成快照的时间点,确定进行数据恢复的快照子数据区;
该步骤包括:步骤3011,根据接收到的数据恢复指令,结束生成快照;步骤3012,根据快照的时间点、快照生成周期及元数据,由生成快照时的当前快照子数据区,确定进行数据恢复的快照子数据区。
步骤3012中提及的进行数据恢复的快照子数据区可为当前快照子数据区,或当前快照子数据区之前已经保存了快照数据的快照子数据区,可根据快照的时间点及快照的生成周期,推算所要进行数据恢复的快照子数据区与当前快照子数据区间生成的快照的个数,进而确定进行数据恢复的快照子数据区。
步骤302:生成一个恢复影射表;
该步骤包括:步骤3021,冻结对源介质的读操作及写操作;步骤3022,生成一个空的恢复影射表;步骤3023,将进行数据恢复的快照子数据区至当前快照子数据区的多个快照子数据区中保存的影射表包含的映射关系写入恢复影射表中。
比如:进行数据恢复的快照子数据区为快照子数据区3,当前的快照子数据区为快照子数据区6,则快照子数据区3、快照子数据区4、快照子数据区5及快照子数据区6中保存的影射表中的映射关系被写入生成的恢复影射表中。
步骤303:更新恢复影射表;
该步骤包括:比较包含了相同源介质的影射页的映射关系所属的快照子数据区对应的时间点,保留所属的快照子数据区所对应的生成快照的时间点最早的一条映射关系,删除其余的包含了相同源介质的影射页的映射关系,获得更新后的恢复映射表。
比如:快照子数据区3中包含了由源介质的影射页1至快照子数据区3中影射页4的映射关系,快照子数据区5中包含了由源介质的影射页1至快照子数据区5中影射页9的映射关系,则在更新恢复影射表时,由于快照子数据区3的生成时间点早于快照子数据区5的生成时间点,则保留快照子数据区3中有关源介质的影射页1的映射关系,而删除快照子数据区5中有关源介质的影射页1的映射关系。
步骤304:利用更新后的恢复影射表对源介质进行数据恢复;
该步骤包括:利用更新后的恢复映射表中的映射关系,将进行数据恢复的快照子数据区至当前快照子数据区的多个快照子数据区中包含的影射页所保存的数据,写入与其有映射关系的源介质的影射页中。
步骤305:清空多个快照子数据区,并更新元数据区;
该步骤包括:步骤3051,清空进行数据恢复的快照子数据区至当前快照子数据区的多个快照子数据区中保存的影射表及影射页;步骤3052,删除恢复影射表;步骤3053,将元数据区保存的元数据中的快照数量更新为进行数据恢复的快照子数据区生成之前的快照数量,将元数据区保存的元数据中的当前快照子数据区的状态信息更新为已完成,将元数据区保存的元数据中当前快照子数据区的起止地址更新为进行数据恢复的快照子数据区之前生成的一个快照子数据区的起止地址。
步骤306:结束数据恢复。
经该步骤后,可跳回至步骤201执行生成快照流程,也可结束对快照介质的所有流程。
图4为本发明生成快照的装置的结构示意图。现结合图4,对本发明生成快照的装置的结构进行说明,具体如下:
本发明生成快照的装置包含:源介质40、快照介质41及存储控制器42。
源介质40用以保存源数据。
快照介质41用以保存由源数据生成的快照数据。其中,快照介质41包含用以保存元数据的元数据区411及快照数据区;快照数据区包含多个用以保存影射表及影射页的快照子数据区412;快照子数据区412可进一步包含用以保存影射表的影射表区及用以保存多个影射页的影射数据区。
其中,元数据至少包含快照数量、预设的影射页数量的最大值、当前快照子数据区的状态信息、快照数据区的起止地址及当前快照子数据区的起止地址;影射表为源介质的影射页与快照子数据区的影射页之间的映射关系;快照子数据区的影射页用以保存与其有映射关系的源介质的影射页中的数据的快照数据。
存储控制器42监控对源介质40的写操作,判断当前快照子数据区412中是否存在与源介质40的写操作携带的写数据地址匹配的影射页,如果存在,则将写操作发送至源介质40,否则,根据源介质的写操作携带的写数据地址中记载的源数据,在当前快照子数据区412中生成一个新的影射页,并更新当前快照子数据区412保存的影射表及其暂存的影射表。
存储控制器42判断是否满足生成快照的触发条件,如果是,更新元数据区411保存的元数据,否则继续监控对源介质40的写操作。
另外,存储控制器42还可在启动之初,对源介质40及快照介质41进行初始化,具体地,存储控制器42判断是否存在与源介质40绑定的快照介质41,如果存在,则确定当前快照子数据区,否则,选择一个作为快照介质41的存储介质与源介质40进行绑定,对快照介质41进行初始化。
其中,存储控制器42包含:操作监控模块421及快照生成模块422。
操作监控模块421监控对源介质40的操作,如果判定为读操作,则将读操作发送至源介质40,如果判定为写操作,则将写操作携带的写数据地址发送给快照生成模块422,根据快照生成模块422的第一触发,将写操作发送至源介质40,根据快照生成模块422的第二触发,继续监控对源介质40的操作。
快照生成模块422根据写操作携带的写数据地址,确定源介质40的影射页,判断其暂存的影射表中是否存在包含源介质40的影射页的映射关系,如果存在,则输出第一触发至操作监控模块421,否则,对源介质40的写操作携带的写数据地址中记载的源数据进行拷贝,将拷贝后的数据写入当前快照子数据区412中的一个空的影射页中,生成新的影射页。
快照生成模块422将源介质40的写操作携带的写数据地址对应的源介质40的影射页,与当前快照子数据区412中写入拷贝后的数据的影射页之间的映射关系,写入当前快照子数据区412保存的影射表及其暂存的影射表。
快照生成模块422判断当前快照子数据区412包含的影射页的数量是否达到预设的影射页数量的最大值,或者判断是否接收到由快照生成周期触发生成的快照生成指令,如果是,将元数据包含的快照数量增1,将元数据包含的当前快照子数据区的状态信息标注为已完成,清空其暂存的影射表,否则输出第二触发至操作监控模块421。
在存储控制器42能够进一步对源介质40及快照介质41进行初始化时,存储控制器42进一步包含:初始化模块420。其中,初始化模块420在启动后,判断是否存在与源介质40绑定的快照介质41,如果存在,则根据元数据中的当前快照子数据区的状态信息,确定当前快照子数据区412,否则,选择一个作为快照介质41的存储介质与源介质40进行绑定,将快照介质41划分为元数据区411及快照数据区,将元数据写入元数据区411,将快照数据区划分为多个包含空的影射页及空的影射表的快照子数据区412。
图5为本发明利用生成的快照进行数据恢复的装置的结构示意图。现结合图5,对本发明利用生成的快照进行数据恢复的装置的结构进行说明,具体如下:
本发明利用生成的快照进行数据恢复的装置除了包含图4所示的生成快照的装置之外,还包含一恢复控制器53。
恢复控制器53根据数据恢复指令及生成快照的时间点,确定进行数据恢复的快照子数据区412,生成一个空的恢复影射表,将进行数据恢复的快照子数据区412至当前快照子数据区412的多个快照子数据区412中保存的影射表包含的映射关系写入恢复影射表中,根据快照子数据区对应的时间点,更新恢复影射表。
恢复控制器53利用更新后的恢复映射表中的映射关系,将进行数据恢复的快照子数据区412至当前快照子数据区412的多个快照子数据区412中包含的影射页所保存的数据,写入与其有映射关系的源介质40的影射页中。
恢复控制器53清空进行数据恢复的快照子数据区412至当前快照子数据区的多个快照子数据区412中保存的影射表及影射页,删除恢复影射表,更新元数据区。
其中,恢复控制器53包含:快照恢复模块531及更新模块532。
快照恢复模块531根据接收到的数据恢复指令,结束生成快照,根据快照的时间点、快照生成周期及元数据区保存的元数据,由生成快照时的当前快照子数据区412,确定进行数据恢复的快照子数据区412。
快照恢复模块531生成一个空的恢复影射表,将进行数据恢复的快照子数据区412至当前快照子数据区412的多个快照子数据区412中保存的影射表包含的映射关系写入恢复影射表中。
快照恢复模块531比较包含了相同源介质40的影射页的映射关系所属的快照子数据区412对应的时间点,保留所属的快照子数据区412所对应的生成快照的时间点最早的一条映射关系,删除其余的包含了相同源介质的影射页的映射关系,获得更新后的恢复映射表,输出更新后的恢复影射表至更新模块532,并删除更新后的恢复映射表。
更新模块532利用更新后的恢复映射表中的映射关系,将进行数据恢复的快照子数据区412至当前快照子数据区412的多个快照子数据区412中包含的影射页所保存的数据,写入与其有映射关系的源介质40的影射页中。
更新模块532清空进行数据恢复的快照子数据区412至当前快照子数据区412的多个快照子数据区412中保存的影射表及影射页,删除恢复影射表,将元数据区411保存的元数据中的快照数量更新为进行数据恢复的快照子数据区生成之前的快照数量,将元数据区411保存的元数据中的当前快照子数据区的状态信息更新为已完成,将元数据区411保存的元数据中当前快照子数据区的起止地址更新为进行数据恢复的快照子数据区之前生成的一个快照子数据区的起止地址。
本发明的上述较佳实施例中,在向快照子数据区中写入影射表及拷贝的数据时,如果当前快照子数据区为快照数据区中的最后一个快照子数据区,则当前快照子数据区的下一个快照子数据区为快照数据区的起始位置处的快照子数据区,以此类推,快照数据区包含的多个快照子数据区可在生成快照的过程中被循环利用,以对生成的影射表及生成的影射页进行保存。
本发明的上述较佳实施例中,在生成快照的方法中,采用了COFW方式生成快照;在逻辑上将需要快照保护的源介质分成相同等份的存储空间,即多个影射页,在源介质中的源数据第一次被改变时,就将这个写操作所落入源介质的影射页的数据整个读取并写入到相应的快照子数据区中的影射页中,当下一个写操作的位置仍落入这个源介质的影射页时,就无需再次读取这个源介质的源数据并写入到快照子数据区中的影射页中,减少了IO操作的次数;由于数据局部性原理的存在,本发明的生成快照的方法通过这种方式可以极大地减少利用COFW方式产生的IO次数;另外,通过配置影射页的大小,能够降低生成快照所耗费的时间,提高系统的性能,使系统的快照性能达到最优。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。