发明内容
本发明的目的在于提供一种磁盘快照建立方法及装置,从而解决现有技术中存在的前述问题。
为了实现上述目的,本发明采用的技术方案如下:
一种磁盘快照建立方法,包括:
设立全局快照号作为全局变量,所述全局快照号根据快照建立的次数进行取值,对当前二级表管理的每个数据块设立局部编号,所述局部编号根据所述全局快照号的取值进行取值;
接收快照建立命令,根据所述快照建立命令拷贝所述当前一级表和所述当前二级表作为快照一级表和快照二级表;
接收写操作命令,根据所述写操作命令获取所述写操作命令指向的待操作数据块;
对比所述待操作数据块在所述当前二级表中的局部编号是否等于所述全局快照号,根据比对结果判断是否需要进行写时拷贝。
在另一种实施例中,所述设立全局快照号作为全局变量之前,还包括:
设定针对所述元数据进行写操作时,保存所述元数据在原数据块中,拷贝所述元数据至另一目标数据块,并将所述元数据的存储地址改为指向所述目标数据块。
在另一种实施例中,所述对比所述待操作数据块在所述当前二级表中的局部编号是否等于所述全局快照号,根据比对结果判断是否需要进行写时拷贝,包括:
若所述待操作数据块在所述当前二级表中的局部编号等于所述全局快照号,则直接执行所述写操作命令;
若所述待操作数据块在所述当前二级表中的局部编号不等于所述全局快照号,则进行写时拷贝操作。
在另一种实施例中,所述局部编号根据所述全局快照号的取值进行取值,还包括:
新申请数据块的局部编号根据引用计数进行取值。
在另一种实施例中,所述对比所述待操作数据块在所述当前二级表中的局部编号是否等于所述全局快照号,根据比对结果判断是否需要进行写时拷贝,包括:
若所述待操作数据块在所述当前二级表中的局部编号等于所述全局快照号,则进行写时拷贝;
若所述待操作数据块在所述当前二级表中的局部编号不等于所述全局快照号,则直接执行所述写操作命令。
本发明的有益效果是:通过采用本发明公开的上述技术方案,得到了如下有益的效果:通过设立全局快照号和对存储对象数据块设立局部编号,来记录快照的版本。当发生写操作时,通过对比存储该对象数据块的局部编号和全局快照号,来判断该写操作是对原有数据的改写操作还是对新申请数据块的写操作。若是对原有数据的改写操作,则需要进行写时拷贝。由于本技术方案中建立快照时仅对当前一级表和当前二级表进行了拷贝操作,没有遍历所有当前二级表对每个数据块的引用计数进行获取,因此建立快照的时间大大缩短。
一种磁盘快照建立装置,包括:
变量设立模块,用于设立全局快照号作为全局变量,所述全局快照号根据快照建立的次数进行取值,对当前二级表管理的每个数据块设立局部编号,所述局部编号根据所述全局快照号的取值进行取值;
快照建立模块,用于接收快照建立命令,根据所述快照建立命令拷贝所述当前一级表和所述当前二级表作为快照一级表和快照二级表;
接收模块,用于接收写操作命令,根据所述写操作命令获取所述写操作命令指向的待操作数据块;
执行模块,用于对比所述待操作数据块在所述当前二级表中的局部编号是否等于所述全局快照号,根据比对结果判断是否需要进行写时拷贝。
在另一种实施例中,所述装置还包括:
指针修改模块,用于设定针对所述元数据进行写操作时,保存所述元数据在原数据块中,拷贝所述元数据至另一目标数据块,并将所述元数据的存储地址 改为指向所述目标数据块。
在另一种实施例中,所述执行模块包括:
第一判断单元,用于对比所述待操作数据块在所述当前二级表中的局部编号是否等于所述全局快照号;
第一执行单元,用于若所述待操作数据块在所述当前二级表中的局部编号等于所述全局快照号,则直接执行所述写操作命令;
第二执行单元,用于若所述待操作数据块在所述当前二级表中的局部编号不等于所述全局快照号,则进行写时拷贝操作。
在另一种实施例中,所述变量设立模块还用于:新申请数据块的局部编号根据引用计数进行取值。
在另一种实施例中,所述执行模块包括:
第二判断单元,用于对比所述待操作数据块在所述当前二级表中的局部编号是否等于所述全局快照号;
第三执行单元,用于若所述待操作数据块在所述当前二级表中的局部编号等于所述全局快照号,则进行写时拷贝;
第四执行单元,用于若所述待操作数据块在所述当前二级表中的局部编号不等于所述全局快照号,则直接执行所述写操作命令。
本发明的有益效果是:通过采用本发明公开的上述技术方案,得到了如下有益的效果:通过设立全局快照号和对存储对象数据块设立局部编号,来记录快照的版本。当发生写操作时,通过对比存储该对象数据块的局部编号和全局快照号,来判断该写操作是对原有数据的改写操作还是对新申请数据块的写操作。若是对原有数据的改写操作,则需要进行写时拷贝。由于本技术方案中建立快照时仅对当前一级表和当前二级表进行了拷贝操作,没有遍历所有当前二级表对每个数据块的引用计数进行获取,因此建立快照的时间大大缩短。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不用于限定本发明。
图1是本发明磁盘快照建立方法第一实施例流程图,如图1所示,本发明实施例所提供的磁盘快照建立方法由磁盘快照建立装置执行,磁盘快照建立装置可以由软件/硬件实现。其中当磁盘快照建立装置采用软件实现时,可以集成于虚拟机中。该方法包括:
步骤S100,设立全局快照号作为全局变量,全局快照号根据快照建立的次数进行取值,对当前二级表管理的每个数据块设立局部编号,局部编号根据全局快照号的取值进行取值;
具体地,通过两级表的方式对磁盘中的数据进行管理,一个磁盘包括一张一级表和多张二级表。其中一级表L1中包括多个条目,每个条目存储一个二级表L2的地址信息。每个二级表L2中也包括多个条目,每个条目存储一个映射关系,该映射关系为元数据与该元数据存储地址之间的映射关系。
设立全局快照号为全局变量,其中全局快照号用于标记快照的版本。优选地,全局快照号初始值为1,当磁盘建立第一次快照时,全局快照号取值为1;当磁盘建立第二次快照时,全局快照号取值为2,以此类推。当然可以理解的是,本发明不限于前述取值方式,还可以使用其他能够标记版本的取值方式,例如1.0、1.1、1.2,或英文字母a、b、c等。
同时对每个二级表L2管理的每个数据块设立局部编号,该局部编号根据全局快照号的取值进行取值。优选地,未建立快照时,磁盘所有数据块的局部编号取初始化值0,磁盘建立第一次快照后,全局快照号取值为1,则当前二级表所 管理的数据块的局部编号取值也为1;磁盘建立第二次快照后,全局快照号取值为2,则当前二级表所管理的数据块的局部编号取值也为2。
步骤S102,接收快照建立命令,根据快照建立命令拷贝当前一级表和当前二级表作为快照一级表和快照二级表;
接收快照建立命令,拷贝当前一级表和当前二级表作为快照一级表和快照二级表。具体地,未建立快照时,磁盘所有数据块的局部编号取初始化值0,磁盘建立第一次快照后,全局快照号取值为1,则当前二级表所管理的数据块的局部编号取值也为1,第一个快照二级表所管理的数据块的局部编号取值也为1;磁盘建立第二次快照后,全局快照号取值为2,则当前二级表所管理的数据块的局部编号取值也为2,此时第一个快照二级表所管理的数据块的局部编号取值仍为1,第二个快照二级表所管理的数据块的局部编号取值为2。即快照二级表中数据块的局部编号为建立快照时当前二级表中数据块的局部编号,不会随着全局快照号的改变而改变。
步骤S104,接收写操作命令,根据写操作命令获取写操作命令指向的待操作数据块;
具体地,接收写操作命令,其中写操作命令中携带被操作的元数据对象。获取该元数据,通过当前一级表和当前二级表查找该元数据对应数据块的局部编号。
步骤S106,对比待操作数据块在所述当前二级表中的局部编号是否等于全局快照号,根据比对结果判断是否需要进行写时拷贝。
通过采用本发明公开的上述技术方案,得到了如下有益的效果:通过设立全局快照号和对存储对象数据块设立局部编号,来记录快照的版本。当发生写操作时,通过对比存储该对象数据块的局部编号和全局快照号,来判断该写操作是对原有数据的改写操作还是对新申请数据块的写操作。若是对原有数据的改写操作,则需要进行写时拷贝。由于本技术方案中建立快照时仅对当前一级表和当前二级表进行了拷贝操作,没有遍历所有当前二级表对每个数据块的引用计数进行获取,因此建立快照的时间大大缩短。
图2是本发明磁盘快照建立方法第二实施例流程图,如图2所示,本发明实施例所提供的磁盘快照建立方法由磁盘快照建立装置执行,磁盘快照建立装置可以由软件/硬件实现。其中当磁盘快照建立装置采用软件实现时,可以集成于虚拟机中。该方法包括:
步骤S200,设定针对所述元数据进行写操作时,保存所述元数据在原数据块中,拷贝所述元数据至另一目标数据块,并将所述元数据的存储地址改为指向所述目标数据块;
步骤S202,设立全局快照号作为全局变量,全局快照号根据快照建立的次数进行取值,对当前二级表管理的每个数据块设立局部编号,局部编号根据全局快照号的取值进行取值;
步骤S204,接收快照建立命令,根据快照建立命令拷贝当前一级表和当前二级表作为快照一级表和快照二级表;
步骤S206,接收写操作命令,根据写操作命令获取写操作命令指向的待操作数据块;
步骤S208,对比待操作数据块在所述当前二级表中的局部编号是否等于全局快照号;若是则进入步骤S210,若否则进入步骤S212;
步骤S210,直接执行所述写操作命令;
步骤S212,进行写时拷贝操作。
具体地,设立全局快照号作为全局变量,初始值为1。当磁盘建立第一次快照时,全局快照号取值为1;当磁盘建立第二次快照时,全局快照号取值为2,以此类推。对每个当前二级表所管理的数据块设立局部编号,初始值为0。当磁盘建立第一次快照时,全局快照号取值为1,当前二级表所管理的数据块的局部编号为1;当磁盘建立第二次快照时,全局快照号取值为2,当前二级表所管理的数据块的局部编号为2。同时,建立快照时,拷贝当前一级表和所有当前二级表作为快照一级表和快照二级表,其中快照二级表所管理的数据块的局部编号与建立快照时的当前二级表所管理的数据块的局部编号相同。即当磁盘建立第一次快照时,第一个快照二级表所管理的数据块的局部编号为1;当磁盘建立第二次快照时,第一个快照二级表所管理的数据块的局部编号仍为1,第二个快照 二级表所管理的数据块的局部编号为2。
接收写操作命令,获取写操作命令中携带待操作数据块的地址。从当前一级表和当前二级表中查找该待操作数据块的局部编号。
由于预先设定针对磁盘中元数据进行写操作时,保存该元数据在原数据块中,然后拷贝该元数据至另一目标数据块,并将该元数据的存储地址改为指向该目标数据块。建立快照后,如果发生写操作,由于预先设定的磁盘读写机制中,会直接对元数据在原来的数据块中进行保存,因此可以直接对该元数据进行改写,无需进行写时拷贝。即假设某一数据块中如果原本存有数据,对该数据块建立快照后,该数据块在当前二级表中的局部编号应该等于全局快照号。现要对该数据块进行写操作,根据预先设定的磁盘读写机制,对该数据块进行写操作后,会自动保存该数据块中的数据内容,而将修改后的数据内容拷贝到新的数据块中,因此可以直接执行写操作而无需进行写时拷贝。
在磁盘使用过程中,磁盘中的数据会不断发生变化,即对磁盘数据块会不断执行写操作命令。如果此时接收到快照建立命令,则全局快照号会加1,而当前二级表所管理的数据块的局部编号仍然是快照建立之前的取值。此时当前二级表所管理的数据块的局部编号和全局快照号会不相等。因此此时需要进行写时拷贝。
通过采用本发明公开的上述技术方案,得到了如下有益的效果:通过设立全局快照号和对存储对象数据块设立局部编号,来记录快照的版本。当发生写操作时,通过对比存储该对象数据块的局部编号和全局快照号,来判断该写操作是对原有数据的改写操作还是对新申请数据块的写操作。若是对原有数据的改写操作,则需要进行写时拷贝。由于本技术方案中建立快照时仅对当前一级表和当前二级表进行了拷贝操作,没有遍历所有当前二级表对每个数据块的引用计数进行获取,因此建立快照的时间大大缩短。而且在快照建立期间,无需挂起虚拟机,用户仍然可以对虚拟机执行写操作。
图3是本发明磁盘快照建立方法第三实施例流程图,如图3所示,本发明实施例所提供的磁盘快照建立方法由磁盘快照建立装置执行,磁盘快照建立装置可 以由软件/硬件实现。其中当磁盘快照建立装置采用软件实现时,可以集成于虚拟机中。该方法包括:
步骤S300,设立全局快照号作为全局变量,全局快照号根据快照建立的次数进行取值,对当前二级表管理的每个数据块设立局部编号,局部编号根据全局快照号的取值进行取值,其中新申请数据块的局部编号根据引用计数进行取值;
步骤S302,接收快照建立命令,根据快照建立命令拷贝当前一级表和当前二级表作为快照一级表和快照二级表;
步骤S304,接收写操作命令,根据写操作命令获取写操作命令指向的待操作数据块;
步骤S306,对比待操作数据块在所述当前二级表中的局部编号是否等于全局快照号;若是则进入步骤S308,若否则进入步骤S310;
步骤S308,进行写时拷贝操作;
步骤S310,直接执行所述写操作命令。
具体地,设立全局快照号作为全局变量,初始值为1。当磁盘建立第一次快照时,全局快照号取值为1;当磁盘建立第二次快照时,全局快照号取值为2,以此类推。对每个当前二级表所管理的数据块设立局部编号,初始值为0。当磁盘建立第一次快照时,全局快照号取值为1,当前二级表所管理的数据块的局部编号为1;当磁盘建立第二次快照时,全局快照号取值为2,当前二级表所管理的数据块的局部编号为2。同时,建立快照时,拷贝当前一级表和所有当前二级表作为快照一级表和快照二级表,其中快照二级表所管理的数据块的局部编号与建立快照时的当前二级表所管理的数据块的局部编号相同。即当磁盘建立第一次快照时,第一个快照二级表所管理的数据块的局部编号为1;当磁盘建立第二次快照时,第一个快照二级表所管理的数据块的局部编号仍为1,第二个快照二级表所管理的数据块的局部编号为2。
接收写操作命令,获取写操作命令中携带待操作数据块的地址。从当前一级表和当前二级表中查找该待操作数据块的局部编号。
由于现有针对磁盘中元数据进行写操作时,会直接覆盖元数据原来的数据信息,而改写为新的数据,且执行快照建立命令时,磁盘的虚拟机挂起不允许执 行写操作。因此建立快照后,如果待操作数据块中原本存储了数据信息,该写操作为针对待操作数据块中原本存储的数据进行改写,则需要进行写时拷贝,将改写前的数据信息进行备份,并将备份信息写入快照二级表中,而将改写后的数据信息写入当前二级表中。如果待操作数据块中原本没有存储数据信息,即该待操作数据块为新申请的数据块,则无需进行写时拷贝,直接执行写操作命令即可。因此,建立快照后,如果待操作数据块中原本存储了数据信息,则该待操作数据块在当前二级表中的局部编号应该等于全局快照号。如果待操作数据块中原本没有存储数据信息,而是对新申请数据块执行写操作命令,则该新申请数据块在当前二级表中的局部编号根据引用计数取值,不等于全局快照号。优选地,由于新申请数据块的引用计数为0,因此,获取如果待操作数据块的引用计数为0,则说明待操作数据块为新申请数据块,令该待操作数据块的局部编号为初始值0。
由此可知,当待操作数据块在当前二级表中的局部编号等于全局快照号时,需要进行写时拷贝;当待操作数据块在当前二级表中的局部编号不等于全局快照号,直接执行写操作命令。
通过采用本发明公开的上述技术方案,得到了如下有益的效果:通过设立全局快照号和对存储对象数据块设立局部编号,来记录快照的版本。当发生写操作时,通过对比存储该对象数据块的局部编号和全局快照号,来判断该写操作是对原有数据的改写操作还是对新申请数据块的写操作。若是对原有数据的改写操作,则需要进行写时拷贝。由于本技术方案中建立快照时仅对当前一级表和当前二级表进行了拷贝操作,没有遍历所有当前二级表对每个数据块的引用计数进行获取,因此建立快照的时间大大缩短。
图4是本发明磁盘快照建立装置第一实施例结构图,如图4所示,本发明实施例所提供的磁盘快照建立装置可以由软件/硬件实现。其中当磁盘快照建立装置采用软件实现时,可以集成于虚拟机中。该装置包括:
变量设立模块10,用于设立全局快照号作为全局变量,所述全局快照号根据快照建立的次数进行取值,对当前二级表管理的每个数据块设立局部编号,所 述局部编号根据所述全局快照号的取值进行取值;
快照建立模块12,用于接收快照建立命令,根据所述快照建立命令拷贝所述当前一级表和所述当前二级表作为快照一级表和快照二级表;
接收模块14,用于接收写操作命令,根据所述写操作命令获取所述写操作命令指向的待操作数据块;
执行模块16,用于对比所述待操作数据块在所述当前二级表中的局部编号是否等于所述全局快照号,根据比对结果判断是否需要进行写时拷贝。
本实施例中磁盘快照建立装置用于执行上述磁盘快照建立方法,具有相同的功能模块,在此不再赘述。
通过采用本发明公开的上述技术方案,得到了如下有益的效果:通过设立全局快照号和对存储对象数据块设立局部编号,来记录快照的版本。当发生写操作时,通过对比存储该对象数据块的局部编号和全局快照号,来判断该写操作是对原有数据的改写操作还是对新申请数据块的写操作。若是对原有数据的改写操作,则需要进行写时拷贝。由于本技术方案中建立快照时仅对当前一级表和当前二级表进行了拷贝操作,没有遍历所有当前二级表对每个数据块的引用计数进行获取,因此建立快照的时间大大缩短。
图5是本发明磁盘快照建立装置第二实施例结构图,如图5所示,本发明实施例所提供的磁盘快照建立装置可以由软件/硬件实现。其中当磁盘快照建立装置采用软件实现时,可以集成于虚拟机中。该装置包括变量设立模块20、快照建立模块22、接收模块24、及执行模块26,其中变量设立模块20、快照建立模块22、接收模块24与上述实施例中相应的功能模块功能相同,该装置还包括指针修改模块28:
指针修改模块28,用于设定针对所述元数据进行写操作时,保存所述元数据在原数据块中,拷贝所述元数据至另一目标数据块,并将所述元数据的存储地址改为指向所述目标数据块。
执行模块26包括:
第一判断单元261,用于对比所述待操作数据块在所述当前二级表中的局部编号是否等于所述全局快照号;
第一执行单元262,用于若所述待操作数据块在所述当前二级表中的局部编号等于所述全局快照号,则直接执行所述写操作命令;
第二执行单元263,用于若所述待操作数据块在所述当前二级表中的局部编号不等于所述全局快照号,则进行写时拷贝操作。
本实施例中磁盘快照建立装置用于执行上述磁盘快照建立方法,具有相同的功能模块,在此不再赘述。
通过采用本发明公开的上述技术方案,得到了如下有益的效果:通过设立全局快照号和对存储对象数据块设立局部编号,来记录快照的版本。当发生写操作时,通过对比存储该对象数据块的局部编号和全局快照号,来判断该写操作是对原有数据的改写操作还是对新申请数据块的写操作。若是对原有数据的改写操作,则需要进行写时拷贝。由于本技术方案中建立快照时仅对当前一级表和当前二级表进行了拷贝操作,没有遍历所有当前二级表对每个数据块的引用计数进行获取,因此建立快照的时间大大缩短。而且在快照建立期间,无需挂起虚拟机,用户仍然可以对虚拟机执行写操作。
图6是本发明磁盘快照建立装置第三实施例结构图,如图6所示,本发明实施例所提供的磁盘快照建立装置可以由软件/硬件实现。其中当磁盘快照建立装置采用软件实现时,可以集成于虚拟机中。该装置包括变量设立模块30、快照建立模块32、接收模块34、及执行模块36,其中快照建立模块32、接收模块34与上述实施例中相应的功能模块功能相同。
其中,变量设立模块30还用于:新申请数据块的局部编号根据引用计数进行取值。
执行模块36包括:
第二判断单元361,用于对比所述待操作数据块在所述当前二级表中的局部编号是否等于所述全局快照号;
第三执行单元362,用于若所述待操作数据块在所述当前二级表中的局部编号等于所述全局快照号,则进行写时拷贝;
第四执行单元363,用于若所述待操作数据块在所述当前二级表中的局部编号不等于所述全局快照号,则直接执行所述写操作命令。
本实施例中磁盘快照建立装置用于执行上述磁盘快照建立方法,具有相同的功能模块,在此不再赘述。
通过采用本发明公开的上述技术方案,得到了如下有益的效果:通过设立全局快照号和对存储对象数据块设立局部编号,来记录快照的版本。当发生写操作时,通过对比存储该对象数据块的局部编号和全局快照号,来判断该写操作是对原有数据的改写操作还是对新申请数据块的写操作。若是对原有数据的改写操作,则需要进行写时拷贝。由于本技术方案中建立快照时仅对当前一级表和当前二级表进行了拷贝操作,没有遍历所有当前二级表对每个数据块的引用计数进行获取,因此建立快照的时间大大缩短。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。