发明内容
本发明的实施例提供一种文件***的快照方法和装置,缩短了创建快照的时间,以及节省了快照占用的存储空间。
为达到上述目的,本发明的实施例采用如下技术方案:
第一方面,本发明提供一种文件***的快照方法,包括:
确定待创建快照的目录;
在所述目录的元数据中创建快照索引;所述快照索引中包括快照标识、快照时间戳和快照变化列表;其中,所述快照标识为所述目录创建所述快照索引的标识;所述快照时间戳为所述目录创建所述快照索引的***时间;所述快照变化列表包括新建列表和删除列表,所述新建列表包括创建所述快照索引之后,在所述目录中新建文件以及修改后的文件的元数据的指针;所述删除列表包括所述目录创建所述快照索引之后,在所述目录中被删除文件以及被修改文件的原始文件的元数据的指针。
在第一方面的第一种可能的实现方式中,所述在所述目录的元数据中创建快照索引包括:
根据所述目录的元数据中的快照属性判断是否已创建快照,所述快照属性用于指示所述目录是否已创建快照;
当所述快照属性指示未创建快照时,在所述目录的元数据中添加所述快照索引,将所述快照索引中的快照标识置为预定值,并为所述快照索引分配前向指针和后向指针,将所述前向指针和后向指针均设为空;其中,所述前向指针用于指向在所述目录的元数据中,所述目录的前一个快照索引的后向指针;所述后向指针用于指向在所述目录的元数据中,所述目录的下一个快照索引的前向指针;
当所述快照属性指示已创建快照时,在所述目录的元数据中添加所述快照索引,并将所述快照索引的前向指针指向前一个快照索引的后向指针,将所述前一个快照索引的后向指针指向所述快照索引的前向指针。
结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,在所述目录的元数据中创建快照索引之后,所述方法还包括:
根据快照标识和快照时间戳中的至少一种,查找所述目录的元数据中待删除的快照索引;
判断所述待删除的快照索引的前向指针和后向指针是否均为空;
当所述待删除的快照索引的前向指针和后向指针均为空时,将所述待删除的快照索引删除;
当所述待删除的快照索引的前向指针为空,且所述待删除的快照索引的后向指针不为空时,将所述待删除的快照索引的快照变化列表存入下一个快照索引的快照变化列表中,并将所述待删除的快照索引删除,其中,所述下一个快照索引的前向指针设为空;
当所述待删除的快照索引的后向指针为空,所述待删除的快照索引的前向指针不为空,或者当所述待删除的快照索引的前向指针和后向指针均不为空时,将所述待删除的快照索引的快照变化列表存入前一个快照索引的快照变化列表中,并将所述待删除的快照索引删除,其中,所述前一个快照索引的后向指针指向所述待删除的快照索引的下一个快照索引的前向指针,所述下一个快照索引的前向指针指向所述前一个快照索引的后向指针。
在第一方面的第三种可能的实现方式中,在所述目录的元数据中创建快照索引之后,所述方法还包括:
获取在所述目录下待处理的文件,以及对所述待处理的文件的操作;
根据所述操作,更新所述目录的元数据中创建的快照索引中的快照变化列表。
结合第一方面的第三种可能的实现方式,在第四种可能的实现方式中,当所述对所述待处理的文件的操作为在所述目录下新建文件时,所述根据所述操作,更新所述目录的元数据中创建的快照索引中的快照变化列表包括:
将所述待处理的文件的元数据的指针存入所述目录的元数据中最后一个快照索引的新建列表中。
结合第一方面的第三种可能的实现方式,在第五种可能的实现方式中,当所述对所述待处理的文件的操作为修改所述目录下的文件时,所述根据所述操作,更新所述目录的元数据中创建的快照索引中的快照变化列表包括:
判断所述待处理的文件的元数据的指针是否存在于所述目录的元数据中快照索引的新建列表中;
当存在于所述新建列表中时,根据对所述待处理的文件的修改,修改所述待处理的文件的元数据;
当不存在于所述新建列表中时,将所述待处理的文件复制到第一存储区域,所述待处理的文件的元数据复制到第二存储区域,并将所述待处理的文件的元数据的指针存入所述目录的元数据中最后一个快照索引的删除列表中,将修改后的文件的元数据的指针存入所述最后一个快照索引的新建列表中。
结合第一方面的第三种可能的实现方式,在第六种可能的实现方式中,当所述对所述待处理的文件的操作为修改所述目录下的文件的元数据时,所述根据所述操作,更新所述目录的元数据中创建的快照索引中的快照变化列表包括:
判断所述待处理的文件的元数据的指针是否存在于所述目录的元数据中快照索引的新建列表中;
当存在于所述新建列表时,修改所述待处理的文件的元数据;
当不存在于所述新建列表时,将所述待处理的文件的元数据复制到第三存储区域,将所述待处理的文件的元数据的指针存入所述目录的元数据中最后一个快照索引的删除列表中,将修改后文件的元数据的指针存入所述最后一个快照索引的新建列表中。
结合第一方面的第三种可能的实现方式,在第七种可能的实现方式中,当所述对所述待处理的文件的操作为删除所述目录下的文件时,所述根据所述操作,更新所述目录的元数据中创建的快照索引中的快照变化列表包括:
判断所述待处理的文件的元数据的指针是否存在于所述目录的元数据中快照索引的新建列表中;
当存在于所述新建列表时,删除所述新建列表中所述待处理的文件的元数据的指针;
当不存在于所述新建列表时,删除所述目录的元数据中的目标指针,将所述待处理的文件复制到第四存储区域,并将所述待处理的文件复制后的元数据的指针存入所述目录的元数据中最后一个快照索引的删除列表中,所述目标指针为所述目录的元数据中指向所述待处理的文件的元数据的指针。
第二方面,本发明提供一种文件***的快照装置,包括:
确定单元,用于确定待创建快照的目录;
创建单元,用于在所述目录的元数据中创建快照索引;所述快照索引中包括快照标识、快照时间戳和快照变化列表;其中,所述快照标识为所述目录创建所述快照索引的标识;所述快照时间戳为所述目录创建所述快照索引的***时间;所述快照变化列表包括新建列表和删除列表,所述新建列表包括创建所述快照索引之后,在所述目录中新建文件以及修改后的文件的元数据的指针;所述删除列表包括所述目录创建所述快照索引之后,在所述目录中被删除文件以及被修改文件的原始文件的元数据的指针。
在第二方面的第一种可能的实现方式中,所述创建单元包括:
判断模块,用于根据所述目录的元数据中的快照属性判断是否已创建快照,所述快照属性用于指示所述目录是否已创建快照;
第一创建模块,用于当所述快照属性指示未创建快照时,在所述目录的元数据中添加所述快照索引,将所述快照索引中的快照标识置为预定值,并为所述快照索引分配前向指针和后向指针,将所述前向指针和后向指针均设为空;其中,所述前向指针用于指向在所述目录的元数据中,所述目录的前一个快照索引的后向指针;所述后向指针用于指向在所述目录的元数据中,所述目录的下一个快照索引的前向指针;
第二创建模块,用于当所述快照属性指示已创建快照时,在所述目录的元数据中添加所述快照索引,并将所述快照索引的前向指针指向前一个快照索引的后向指针,将所述前一个快照索引的后向指针指向所述快照索引的前向指针。
结合第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述装置还包括:
查找单元,用于根据快照标识和快照时间戳中的至少一种,查找所述目录的元数据中待删除的快照索引;
判断单元,用于判断所述待删除的快照索引的前向指针和后向指针是否均为空;
删除单元,用于当所述待删除的快照索引的前向指针和后向指针均为空时,将所述待删除的快照索引删除;
第一处理单元,用于当所述待删除的快照索引的前向指针为空,且所述待删除的快照索引的后向指针不为空时,将所述待删除的快照索引的快照变化列表存入下一个快照索引的快照变化列表中,并将所述待删除的快照索引删除,其中,所述下一个快照索引的前向指针设为空;
第二处理单元,用于当所述待删除的快照索引的后向指针为空,所述待删除的快照索引的前向指针不为空,或者当所述待删除的快照索引的前向指针和后向指针均不为空时,将所述待删除的快照索引的快照变化列表存入前一个快照索引的快照变化列表中,并将所述待删除的快照索引删除,其中,所述前一个快照索引的后向指针指向所述待删除的快照索引的下一个快照索引的前向指针,所述下一个快照索引的前向指针指向所述前一个快照索引的后向指针。
在第二方面的第三种可能的实现方式中,所述装置还包括:
获取单元,用于获取在所述目录下待处理的文件,以及对所述待处理的文件的操作;
更新单元,用于根据所述操作,更新所述目录的元数据中创建的快照索引中的快照变化列表。
结合第二方面的第三种可能的实现方式,在第四种可能的实现方式中,当所述获取单元获取到对所述待处理的文件的操作为在所述目录下新建文件时,所述更新单元包括:
第一处理模块,用于将所述待处理的文件的元数据的指针存入所述目录的元数据中最后一个快照索引的新建列表中。
结合第二方面的第三种可能的实现方式,在第五种可能的实现方式中,当所述获取单元获取到对所述待处理的文件的操作为修改所述目录下的文件时,所述更新单元包括:
判断模块,用于判断所述待处理的文件的元数据的指针是否存在于所述目录的元数据中快照索引的新建列表中;
第一修改模块,用于当存在于所述新建列表中时,根据对所述待处理的文件的修改,修改所述待处理的文件的元数据;
第二处理模块,用于当不存在于所述新建列表中时,将所述待处理的文件复制到第一存储区域,所述待处理的文件的元数据复制到第二存储区域,并将所述待处理的文件的元数据的指针存入所述目录的元数据中最后一个快照索引的删除列表中,将修改后的文件的元数据的指针存入所述最后一个快照索引的新建列表中。
结合第二方面的第三种可能的实现方式,在第六种可能的实现方式中,当所述获取单元获取到对所述待处理的文件的操作为修改所述目录下的文件的元数据时,所述更新单元包括:
所述判断模块,还用于判断所述待处理的文件的元数据的指针是否存在于所述目录的元数据中快照索引的新建列表中;
第二修改模块,用于当存在于所述新建列表时,修改所述待处理的文件的元数据;
第三处理模块,用于当不存在于所述新建列表时,将所述待处理的文件的元数据复制到第三存储区域,所述待处理的文件的元数据的指针存入所述目录的元数据中最后一个快照索引的删除列表中,将所述修改后的文件的元数据的指针存入所述最后一个快照索引的新建列表中。
结合第二方面的第三种可能的实现方式,在第七种可能的实现方式中,当所述获取单元获取到对所述待处理的文件的操作为删除所述目录下的文件时,所述更新单元包括:
所述判断模块,还用于判断所述待处理的文件的元数据的指针是否存在于所述目录的元数据中快照索引的新建列表中;
删除模块,用于当存在于所述新建列表时,删除所述新建列表中所述待处理的文件的元数据的指针;
第四处理模块,用于当不存在于所述新建列表时,删除所述目录的元数据中的目标指针,将所述待处理的文件复制到第四存储区域,并将所述待处理的文件复制后的元数据的指针存入所述目录的元数据中最后一个快照索引的删除列表中,所述目标指针为所述目录的元数据中指向所述待处理的文件的元数据的指针。
本发明实施例提供一种文件***的快照方法和装置,通过确定待创建快照的目录,然后在所述目录的元数据中创建快照索引;所述快照索引中包括快照标识、快照时间戳和快照变化列表;其中,所述快照标识为所述目录创建所述快照索引的标识;所述快照时间戳为所述目录创建所述快照索引的***时间;所述快照变化列表包括新建列表和删除列表。本发明实施例解决了现有技术中创建快照时,增加创建快照的时间,以及占用大量的存储空间的问题,缩短了创建快照的时间,以及节省了快照占用的存储空间。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例针对文件***的快照,提供一种文件***的快照方法,本实施例执行主体为终端,如图1所示,所述方法包括:
101、确定待创建快照的目录。
其中,所述待创建快照的目录可以包括子目录和子文件。
102、在所述目录的元数据中创建快照索引;所述快照索引中包括快照标识、快照时间戳和快照变化列表;其中,所述快照标识为所述目录创建所述快照索引的标识;所述快照时间戳为所述目录创建所述快照索引的***时间;所述快照变化列表包括新建列表和删除列表,所述新建列表包括创建所述快照索引之后,在所述目录中新建文件以及修改后的文件的元数据的指针;所述删除列表包括所述目录创建所述快照索引之后,在所述目录中被删除文件以及被修改文件的原始文件的元数据的指针。
对于创建快照的目录,在所述目录的元数据中创建快照索引,所述快照索引中包括快照标识、快照时间戳和快照变化列表。
其中,所述快照标识为所述目录创建所述快照索引的标识,当所述快照属性指示未创建快照时,即当所述目录第一次创建快照时,将所述快照索引中的快照标识置为预定值,例如将所述快照标识设为1;当所述快照属性指示已创建快照时,根据所述目录的元数据中前一个快照索引的快照标识,将所述快照索引的快照标识置为递增整数。
其中,在所述目录中新建文件以及修改后的文件的元数据的指针,是指所述目录中新建文件以及修改后的文件的元数据的存储路径;在所述目录中被删除文件以及被修改文件的原始文件的元数据的指针,是指在所述目录中被删除文件以及被修改文件的原始文件的元数据的的存储路径。
其中,新建列表的作用是为了在所述目录创建所述快照索引之后,所述目标中的文件有更新时,可以实时记录下来,以备后续恢复数据。所述删除列表的作用是为了在所述目录创建所述快照索引之后,删除或者修改后的文件可以保存下来,以备后续恢复数据。
本发明实施例提供一种文件***的快照方法,通过确定待创建快照的目录,然后在所述目录的元数据中创建快照索引,所述快照索引中包括快照标识、快照时间戳和快照变化列表。本发明实施例解决了现有技术中创建快照时,增加创建快照的时间,以及占用大量的存储空间的问题,缩短了创建快照的时间,以及节省了快照占用的存储空间。
在所述目录的元数据中还存在快照属性,用于指示所述目录是否已创建快照,对于已创建快照的目录,在所述目录的元数据中的快照属性标识为已创建快照,对于还没有创建快照的目录,则在所述目录的元数据中的快照属性标识为没有创建快照,如图2所示,在上述步骤102中,在所述目录的元数据中创建快照索引还包括:
201、根据所述目录的元数据中的快照属性判断是否已创建快照,所述快照属性用于指示所述目录是否已创建快照;
202、当所述快照属性指示未创建快照时,在所述目录的元数据中添加所述快照索引,将所述快照索引中的快照标识置为预定值,例如将所述快照标识设为1,并为所述快照索引分配前向指针和后向指针,将所述前向指针和后向指针均设为空;其中,所述前向指针用于指向在所述目录的元数据中,所述目录的前一个快照索引的后向指针;所述后向指针用于指向在所述目录的元数据中,所述目录的下一个快照索引的前向指针。
如图3所示。其中,所述前向指针用于指向在所述目录的元数据中,所述目录的前一个快照索引的后向指针,所述后向指针用于指向在所述目录的元数据中,所述目录的下一个快照索引的前向指针。
203、当所述快照属性指示已创建快照时,在所述目录的元数据中添加所述快照索引,并将所述快照索引的前向指针指向前一个快照索引的后向指针,将所述前一个快照索引的后向指针指向所述快照索引的前向指针。
其中,根据所述目录的元数据中的前一个快照索引的快照标识,将所述快照索引中的快照标识置为递增整数。例如,所述前一个快照索引的快照标识为2时,则所述快照索引中的快照标识为3,并将所述快照索引的前向指针指向所述前一个快照索引的后向指针,且所述前一个快照索引的后向指针指向所述快照索引的前向指针,如图4所示。
可选的,对于已经创建快照的目录,还存在对快照的删除,即删除所述目录的快照索引,如图5所示,包括如下步骤:
501、根据快照标识和快照时间戳中的至少一种,查找所述目录的元数据中待删除的快照索引。
由于所述快照索引的快照标识和快照时间戳都是所述快照索引的唯一标识,则通过快照标识和快照时间戳中的至少一种,查找所述目录的元数据中待删除的快照索引。
502、判断所述待删除的快照索引的前向指针和后向指针是否均为空。
通过图3和图4可知,当所述快照索引为所述目录的唯一快照索引时,则其前向指针和后向指针均为空,当所述快照索引不是所述目录的唯一快照索引时,所述快照索引的前向指针和后向指针中至少有一个指针不为空,因此,判断所述待删除的快照索引的前向指针和后向指针,确定对所述快照索引的处理。
503、当所述待删除的快照索引的前向指针和后向指针均为空时,将所述待删除的快照索引删除。
当所述快照索引的前向指针和后向指针均为空时,说明所述快照索引为所述目录的唯一快照索引,则直接将所述快照索引删除。
504、当所述待删除的快照索引的前向指针为空,且所述待删除的快照索引的后向指针不为空时,将所述待删除的快照索引的快照变化列表存入下一个快照索引的快照变化列表中,并将所述待删除的快照索引删除,其中,所述下一个快照索引的前向指针设为空。
当所述待删除的快照索引的前向指针为空,且所述待删除的快照索引的后向指针不为空时,所述快照索引为所述目录的第一个快照索引,将所述待删除的快照索引的快照变化列表存入下一个快照索引的快照变化列表中,以便于日后恢复所述目录为第一个快照索引时的状态,然后将所述待删除的快照索引删除。其中,由于将所述待删除的快照索引删除后,所述下一个快照索引为所述目录的第一个快照索引了,则将所述下一个快照索引的前向指针设为空。
在这里要强调的是,所述第一个快照索引与快照标识为1的快照索引并不一定相同,存在快照标识为1的快照索引被删除,而目前第一个快照索引为快照标识为2的快照索引的情况。
505、当所述待删除的快照索引的后向指针为空,所述待删除的快照索引的前向指针不为空,或者当所述待删除的快照索引的前向指针和后向指针均不为空时,将所述待删除的快照索引的快照变化列表存入前一个快照索引的快照变化列表中,并将所述待删除的快照索引删除,其中,所述前一个快照索引的后向指针指向所述待删除的快照索引的下一个快照索引的前向指针,所述下一个快照索引的前向指针指向所述前一个快照索引的后向指针。
例如,图4所示,当所述待删除的快照索引的后向指针为空,所述待删除的快照索引的前向指针不为空,为快照索引3,当所述待删除的快照索引的前向指针和后向指针均不为空时,为快照索引2。当所述待删除的快照索引为快照索引3时,将所述快照索引3的快照变化列表存入快照索引2的快照变化列表中,以便后续要恢复所述目录为快照索引2时的状态要用到快照索引3中的快照变化列表中的内容,并将所述快照索引2的后向指针设为空。当所述待删除的快照索引为快照索引2时,将快照索引2的快照变化列表存入快照索引1的快照变化列表中,以便于日后在恢复所述目录为快照索引1时的状态要用到快照索引2中的快照变化列表中的内容,并将快照索引1的后向指针指向快照索引3的前向指针。
可选的,如图6所示,在所述目录的元数据中创建快照索引之后,还包括对所述目录中文件变化的记录,包括:
601、获取在所述目录下待处理的文件,以及对所述待处理的文件的操作;
602、根据所述操作,更新所述目录的元数据中创建的快照索引中的快照变化列表。
由于在每次对所述目录创建快照之后,所述目录中的文件都可能会出现变化,因此,需要在当次的快照索引中记录所述目录下文件的变化,例如,在所述目录创建第一个快照索引之后,所述目录中文件的变化记录在所述第一个快照索引的快照变化列表中,当所述目录创建第二个快照索引之后,所述目录中文件的变化记录在所述第二个快照索引的快照变化列表中,依次类推。上述变化存在三种情况:新建文件、修改文件以及删除文件,所述文件可以为一个文档或者为一个特定文件,例如文件夹。
第一种情况:当所述对所述待处理的文件的操作为在所述目录下新建所述文件时,步骤602则是将所述待处理的文件的元数据的指针存入所述目录的元数据中最后一个快照索引的新建列表中。
第二种情况中对文件的修改包括两部分,分别是修改文件和修改文件的元数据。当所述对所述待处理的文件的操作为修改所述目录下的文件时,步骤602,所述根据所述操作,更新所述目录的元数据中创建的快照索引中的快照变化列表包括:
判断所述待处理的文件的元数据的指针是否存在于所述目录的元数据中快照索引的新建列表中;
当存在于所述新建列表中时,根据对所述待处理的文件的修改,修改所述待处理的文件的元数据;
当不存在于所述新建列表中时,将所述待处理的文件复制到第一存储区域,所述待处理的文件的元数据复制到第二存储区域,并将所述待处理的文件的元数据的指针存入所述目录的元数据中最后一个快照索引的删除列表中,将修改后的文件的元数据的指针存入所述最后一个快照索引的新建列表中。
其中,当所述文件的元数据的指针存在于所述目录的元数据中快照索引的新建列表中时,表示所述文件为本次所述目录创建快照索引之后新建的文件,则根据对所述文件的修改,修改所述文件的元数据。例如,当对所述文件进行修改后,所述文件的修改时间有变化,则将所述文件的元数据中的修改时间进行更新。
当所述文件的元数据的指针不存在于所述目录的元数据中快照索引的新建列表中时,表示所述文件是本次所述目录创建所述快照索引之前就已经存在于所述目录中,则将修改前所述文件复制到第一存储区域,所述修改前所述文件的元数据复制到第二存储区域,并将所述修改前所述文件的元数据的指针存入所述目录的元数据中最后一个快照索引的删除列表中,修改后所述文件的元数据的指针存入所述最后一个快照索引的新建列表中。
第二种情况中,当所述对所述待处理的文件的操作为修改所述目录下的文件的元数据时,步骤602,所述根据所述操作,更新所述目录的元数据中创建的快照索引中的快照变化列表包括:
判断所述待处理的文件的元数据的指针是否存在于所述目录的元数据中快照索引的新建列表中;
当存在于所述新建列表时,修改所述待处理的文件的元数据;
当不存在于所述新建列表时,将所述待处理的文件的元数据复制到第三存储区域,将所述待处理的文件的元数据的指针存入所述目录的元数据中最后一个快照索引的删除列表中,将修改后的文件的元数据的指针存入所述最后一个快照索引的新建列表中。
其中,当所述文件的元数据的指针存在于所述目录的元数据中快照索引的新建列表中时,表示所述文件为本次所述目录创建快照索引之后新建的文件,则直接修改所述文件的元数据。例如,当要对所述文件的元数据中文件创建时间进行修改时,则将所述指针指向的元数据中的创建时间进行更新。
当所述文件的元数据的指针不存在于所述目录的元数据中快照索引的新建列表中时,表示所述文件是本次所述目录创建快照索引之前就已经存在于所述目录中,则将所述文件修改前的元数据复制到第三存储区域,所述文件修改前的元数据的指针存入所述最后一个快照索引的删除列表中,所述文件修改后的元数据的指针存入所述最后一个快照索引的新建列表中。
第三种情况,当所述对所述待处理的文件的操作为删除所述目录下的文件时,步骤602,所述根据所述操作,更新所述目录的元数据中创建的快照索引中的快照变化列表包括:
判断所述待处理的文件的元数据的指针是否存在于所述目录的元数据中快照索引的新建列表中;
当存在于所述新建列表时,删除所述新建列表中所述待处理的文件的元数据的指针;
当不存在于所述新建列表时,删除所述目录的元数据中的目标指针,将所述待处理的文件复制到第四存储区域,并将所述待处理的文件复制后的元数据的指针存入所述目录的元数据中最后一个快照索引的删除列表中,所述目标指针为所述目录的元数据中指向所述待处理的文件的元数据的指针。
其中,当所述文件的元数据的指针存在于所述目录的元数据中快照索引的新建列表中时,表示所述文件为本次所述目录创建快照索引之后新建的文件,则在删除所述文件和所述文件的元数据的同时,删除所述新建列表中所述文件的元数据的指针。
当所述文件的元数据的指针不存在于所述目录的元数据中快照索引的新建列表中时,表示所述文件是本次所述目录创建快照索引之前就已经存在于所述目录中,则删除所述目录的元数据中的目标指针,所述目标指针为在所述目录的元数据中指向所述文件的元数据的指针,然后将删除前所述文件复制到第四存储区域,并将复制后所述文件的元数据的指针存入所述目录的元数据中最后一个快照索引的删除列表中。
为了本领域技术人员更好的理解本发明实施例提供的文件***的快照方法的技术方案,下面通过具体的实施例对本发明提供的文件***的快照方法进行详细说明。
本实施例以本地文件***为例,如图7所示,执行主体为终端,当客户进程发起快照请求时,文件***的一个进程接收该请求,并执行如下步骤:
701、根据所述快照请求,确定待创建快照的目录。
所述快照请求中包括带创建快照的目录。
702、判断所述目录创建快照的次数是否超过最大值;
703、当所述目录创建快照的次数超过最大值时,显示创建快照失败的提示信息;
704、当所述目录创建快照的次数没有超过最大值时,在所述目录的元数据中创建快照索引。
其中,步骤704的处理过程可以参考图1和图2所述的步骤102,此处不再赘述。
705、显示创建快照成功的提示信息。
本地文件***也可以进行删除快照的操作,具体参见图5所示的处理过程,此处不再赘述。
本地文件***对本次所述目录创建快照的快照索引之后,还包括对所述目录下文件的操作,如新建、修改和删除文件,可以参考图6所示的处理过程,此处不再赘述。
上述文件***的快照方法还可以应用于分布式文件***的快照方法,其中,分布式文件***是指文件***管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。其中,文件***中的元数据是通过元数据服务器进行管理,由客户端通过网络传输协议将消息传递给元数据服务器,由元数据服务器进行文件***的快照,例如,当要创建快照时,将快照请求发送给所述元数据服务器,所述元数据服务器根据图1、图2以及图7所示的处理过程进行操作,并向客户端返回快照创建成功或者失败的消息。同样,删除快照索引时,将删除快照索引的请求消息发送给所述元数据服务器,所述元数据服务器根据图5所示的处理过程进行操作,并返回操作结果。对于目录创建快照之后,对所述目录下文件的操作,也可以向所述元数据服务器发送请求,所述元数据服务器根据图6所示的处理过程进行操作,并返回操作结果。
通过本发明实施例可以在创建快照时,解决现有技术中对于分割镜像快照技术,预先创建镜像卷占用了大量的存储资源,造成资源的浪费的问题,同时解决写时复制快照技术中,在创建快照时需要复制元数据,增加创建快照的时间,以及占用大量的存储空间的问题。本发明实施例在创建快照时,不用预先创建镜像卷,也不用复制元数据,因此缩短了创建快照的时间,以及节省了快照占用的存储空间。
如图8所示,本发明实施例提供一种文件***的快照装置80,包括确定单元801和创建单元802。
其中,确定单元801,用于确定待创建快照的目录;
创建单元802,用于用于在所述目录的元数据中创建快照索引;所述快照索引中包括快照标识、快照时间戳和快照变化列表;其中,所述快照标识为所述目录创建所述快照索引的标识;所述快照时间戳为所述目录创建所述快照索引的***时间;所述快照变化列表包括新建列表和删除列表,所述新建列表包括创建所述快照索引之后,在所述目录中新建文件以及修改后的文件的元数据的指针;所述删除列表包括所述目录创建所述快照索引之后,在所述目录中被删除文件以及被修改文件的原始文件的元数据的指针。
本发明实施例提供一种文件***的快照装置,通过确定待创建快照的目录,然后在所述目录的元数据中创建快照索引,其中,所述快照索引中包括快照标识、快照时间戳和快照变化列表。本发明实施例解决了现有技术中创建快照时,增加创建快照的时间,以及占用大量的存储空间的问题,缩短了创建快照的时间,以及节省了快照占用的存储空间。
可选的,如图9所示,所述创建单元包括:
判断模块901,用于根据所述目录的元数据中的快照属性判断是否已创建快照,所述快照属性用于指示所述目录是否已创建快照;
第一创建模块902,用于当所述快照属性指示未创建快照时,在所述目录的元数据中添加所述快照索引,将所述快照索引中的快照标识置为预定值,并为所述快照索引分配前向指针和后向指针,将所述前向指针和后向指针均设为空;其中,所述前向指针用于指向在所述目录的元数据中,所述目录的前一个快照索引的后向指针;所述后向指针用于指向在所述目录的元数据中,所述目录的下一个快照索引的前向指针;
第二创建模块903,用于当所述快照属性指示已创建快照时,在所述目录的元数据中添加所述快照索引,并将所述快照索引的前向指针指向前一个快照索引的后向指针,将所述前一个快照索引的后向指针指向所述快照索引的前向指针。
可选的,如图10所示,所述装置还包括:
查找单元1001,用于根据快照标识和快照时间戳中的至少一种,查找所述目录的元数据中待删除的快照索引;
判断单元1002,用于判断所述待删除的快照索引的前向指针和后向指针是否均为空;
删除单元1003,用于当所述待删除的快照索引的前向指针和后向指针均为空时,将所述待删除的快照索引删除;
第一处理单元1004,用于当所述待删除的快照索引的前向指针为空,且所述待删除的快照索引的后向指针不为空时,将所述待删除的快照索引的快照变化列表存入下一个快照索引的快照变化列表中,并将所述待删除的快照索引删除,其中,所述下一个快照索引的前向指针设为空;
第二处理单元1005,用于当所述待删除的快照索引的后向指针为空,所述待删除的快照索引的前向指针不为空,或者当所述待删除的快照索引的前向指针和后向指针均不为空时,将所述待删除的快照索引的快照变化列表存入前一个快照索引的快照变化列表中,并将所述待删除的快照索引删除,其中,所述前一个快照索引的后向指针指向所述待删除的快照索引的下一个快照索引的前向指针,所述下一个快照索引的前向指针指向所述前一个快照索引的后向指针。
可选的,如图11所示,所述装置还包括:
获取单元1101,用于获取在所述目录下待处理的文件,以及对所述待处理的文件的操作;
更新单元1102,用于根据所述操作,更新所述目录的元数据中创建的快照索引中的快照变化列表。
可选的,当所述获取单元获取到对所述待处理的文件的操作为在所述目录下新建文件时,如图12所示,所述更新单元包括:
第一处理模块1201,用于用于将所述待处理的文件的元数据的指针存入所述目录的元数据中最后一个快照索引的新建列表中。
可选的,当所述获取单元获取到对所述待处理的文件的操作为修改所述目录下的文件时,如图13所示,所述更新单元包括:
判断模块1301,用于判断所述待处理的文件的元数据的指针是否存在于所述目录的元数据中快照索引的新建列表中;
第一修改模块1302,用于当存在于所述新建列表中时,根据对所述待处理的文件的修改,修改所述待处理的文件的元数据;
第二处理模块1303,用于当不存在于所述新建列表中时,将所述待处理的文件复制到第一存储区域,所述待处理的文件的元数据复制到第二存储区域,并将所述待处理的文件的元数据的指针存入所述目录的元数据中最后一个快照索引的删除列表中,将修改后的文件的元数据的指针存入所述最后一个快照索引的新建列表中。
可选的,当所述获取单元获取到对所述待处理的文件的操作为修改所述目录下的文件的元数据时,如图14所示,所述更新单元包括:
所述判断模块,还用于判断所述待处理的文件的元数据的指针是否存在于所述目录的元数据中快照索引的新建列表中;
第二修改模块1401,用于当存在于所述新建列表时,修改所述待处理的文件的元数据;
第三处理模块1402,用于当不存在于所述新建列表时,将所述待处理的文件修改前的元数据复制到第三存储区域,将所述待处理的文件的元数据的指针存入所述目录的元数据中最后一个快照索引的删除列表中,将修改后的文件的元数据的指针存入所述最后一个快照索引的新建列表中。
可选的,当所述获取单元获取到对所述待处理的文件的操作为删除所述目录下的文件时,如图15所示,所述更新单元包括:
所述判断模块,还用于判断所述待处理的文件的元数据的指针是否存在于所述目录的元数据中快照索引的新建列表中;
删除模块1501,用于当存在于所述新建列表时,删除所述新建列表中所述待处理的文件的元数据的指针;
第四处理模块1502,用于当不存在于所述新建列表时,删除所述目录的元数据中的目标指针,将所述待处理的文件复制到第四存储区域,并将所述待处理的文件复制后的元数据的指针存入所述目录的元数据中最后一个快照索引的删除列表中,所述目标指针为所述目录的元数据中指向所述待处理的文件的元数据的指针。
上述装置80处理本地文件***的快照时,所述装置80存在于本地终端,处理分布式文件***的快照时,所述装置80存在于元数据服务器中。
上述文件***的快照装置80中的各单元的具体实现过程,可参见上述文件***的快照方法的处理过程。
上述图8至图15所示的文件***的快照装置可基于计算机或者其他网络设备的硬件结构来实现,如图16所示,文件***的快照装置16的硬件结构包括存储器1601、收发器1602、处理器1603和总线1604。
其中,处理器1603、存储器1601和收发器1602通过总线1604。
存储器1601可以是只读存储器(Read Only Memory,ROM),静态存储设备,动态存储设备或者随机存取存储器(Random Access Memory,RAM)。存储器1601可以存储操作***和其他应用程序的指令以及应用数据。存储器1601中存储的指令由处理器1603来运行执行。
本发明实施例中存储器1601可用于存储实现图8至图15所示实施例中各功能单元的指令、接收到的创建快照请求、删除快照请求以及对创建快照的目录下的文件操作的请求。
收发器1602用来实现文件***的快照装置16与其他设备,例如客户端的通信。
本发明实施例中,收发器1602用于接收来自客户进程或者客户端的请求消息。
处理器1603可以采用通用的中央处理器(Central ProcessingUnit,CPU),微处理器,应用专用集成电路(Application SpecificIntegrated Circuit,ASIC),或者一个或多个集成电路,用于执行相关程序。
本发明实施例中,处理器1603用于执行存储器1601中的指令,具体执行:
通过收发器1602接收的创建快照请求消息,确定待创建快照的目录;
在所述目录的元数据中创建快照索引;所述快照索引中包括快照标识、快照时间戳和快照变化列表;其中,所述快照标识为所述目录创建所述快照索引的标识;所述快照时间戳为所述目录创建所述快照索引的***时间;所述快照变化列表包括新建列表和删除列表,所述新建列表包括创建所述快照索引之后,在所述目录中新建文件以及修改后的文件的元数据的指针;所述删除列表包括所述目录创建所述快照索引之后,在所述目录中被删除文件以及被修改文件的原始文件的元数据的指针。
其中,处理器1603中的具体处理过程可参考方法实施例部分以及图8至图15所示的服务网关实施例部分,这里不再赘述。
总线1604可包括一通路,在文件***的快照装置各个部件(例如处理器1603、存储器1601和接收器1602)之间传送信息。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的***,装置和单元的具体工作过程,可以参考前述方法实施例中的过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的***,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。