一种可写快照实现方法及系统转让专利

申请号 : CN201910294470.6

文献号 : CN110032541A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 肖国栋

申请人 : 苏州浪潮智能科技有限公司

摘要 :

本申请公开了一种可写快照实现方法及系统,包括:接收到快照文件的创建请求时,利用元数据服务器记录当前所述创建请求的创建信息;当接收到对快照文件的第一修改请求后,获取第一修改请求中的第一目标快照名称,并利用第一目标快照名称获取元数据服务器中对应的创建信息;将第一修改请求、第一目标快照名称和创建信息下发至服务器,以使服务器根据第一目标快照名称和创建信息确定第一目标修改对象,并在复制目标修改对象后根据第一修改请求对复制后第一目标修改对象进行修改。本申请在快照创建时,只记录当前创建的信息,在真正需要对快照版本数据进行修改时,再对目标修改对象进行复制,实现文件快照版本的修改的同时极大的减少了磁盘空间占用。

权利要求 :

1.一种可写快照实现方法,其特征在于,应用于客户端,包括:接收到快照文件的创建请求时,利用元数据服务器记录当前所述创建请求的创建信息;

当接收到对所述快照文件的第一修改请求后,获取所述第一修改请求中的第一目标快照名称,并利用所述第一目标快照名称获取所述元数据服务器中对应的所述创建信息;

将所述第一修改请求、所述第一目标快照名称和所述创建信息下发至服务器,以使所述服务器根据所述第一目标快照名称和所述创建信息确定第一目标修改对象,并在复制所述目标修改对象后根据所述第一修改请求对复制后第一目标修改对象进行修改。

2.根据权利要求1所述的可写快照实现方法,其特征在于,还包括:当接收到对原始文件或所述快照文件的读取请求后,获取所述元数据服务器中所述读取请求对应的所述创建信息;

将所述读取请求和所述创建信息下发至所述服务器,以使所述服务器根据所述读取请求和所述创建信息确定目标读取对象,并根据所述读取请求对所述目标读取对象执行相应的操作。

3.根据权利要求1或2所述的可写快照实现方法,其特征在于,还包括:当接收到对所述原始文件的第二修改请求后,获取所述元数据服务器中所述第二修改请求对应的所述创建信息;

将所述第二修改请求和所述创建信息下发至服务器,以使所述服务器根据所述第二修改请求和所述创建信息确定第二目标修改对象,并在复制所述第二目标修改对象后根据所述修改请求对所述第二目标修改对象进行修改。

4.一种可写快照实现方法,其特征在于,应用于服务器,包括:获取客户端发送的对快照文件的第一修改请求、第一目标快照名称和创建信息;其中,所述第一目标快照名称为所述客户端接收到所述第一修改请求后获取得到的信息,所述创建信息为元数据服务器记录的快照创建操作的信息;

根据所述第一目标快照名称和所述创建信息确定第一目标修改对象;

对所述第一目标修改对象执行复制操作,并根据所述第一修改请求对复制后第一目标修改对象进行修改。

5.根据权利要求4所述的可写快照实现方法,其特征在于,所述根据所述第一目标快照名称和所述创建信息确定第一目标修改对象,包括:根据所述第一目标快照名称获取第一目标快照对象,并判断是否存在与所述第一目标快照对象对应的实对象;其中,所述实对象为实际占用存储空间的对象;

如果否,则获取所述第一目标快照对象对应的原始版本对象及其关联对象,根据所述创建信息和所述关联对象,确定所述第一目标修改对象。

6.根据权利要求4所述的可写快照实现方法,其特征在于,还包括:获取客户端发送的对原始文件或所述快照文件的读取请求以及对应的所述创建信息;

根据所述读取请求和所述创建信息确定目标读取对象,并根据所述读取请求对所述目标读取对象执行相应的读取操作。

7.根据权利要求6所述的可写快照实现方法,其特征在于,当所述读取请求为对所述原始文件的第一读取请求时,所述根据所述读取请求和所述创建信息确定目标读取对象,包括:获取所述第一读取请求中的第一目标读取名称;

利用所述第一目标读取名称获取所述原始文件对应的原始版本对象及其关联对象;

利用所述创建信息,将所述原始对象和所有所述关联对象中最后一次更新的最新对象确定为第一目标读取对象。

8.根据权利要求6所述的可写快照实现方法,其特征在于,当所述读取请求为对所述快照文件的第二读取请求时,所述根据所述读取请求和所述创建信息确定目标读取对象,包括:获取所述第二读取请求中的第二目标读取名称;

利用所述第二目标读取名称获取所述快照文件对应的快照版本对象;

判断所述快照版本对象是否为实对象;

如果是,则将所述快照版本对象确定为第二目标读取对象;

如果否,则获取所述快照文件的原始版本对象及其关联对象,并根据所述原始版本对象和所述关联对象确定所述第二目标读取对象。

9.根据权利要求4至8任一项所述的可写快照实现方法,其特征在于,还包括:获取客户端发送的对所述原始文件的第二修改请求、第二目标修改名称和所述创建信息;其中,所述第二目标修改名称为所述客户端接收到所述第二修改请求后获取得到的信息;

根据所述第二目标修改名称和所述创建信息确定第二目标修改对象;

对所述第二目标修改对象执行复制操作,并根据所述第一修改请求对复制后第二目标修改对象进行修改。

10.根据权利要求9所述的可写快照实现方法,其特征在于,所述根据所述第二目标修改名称和所述创建信息确定第二目标修改对象,包括:利用所述第二目标修改名称获取所述目标文件的目标原始版本对象及其目标关联对象;

确定所述目标原始版本对象和所述目标关联对象中最后一次更新的最新对象,并将所述最新对象确定为所述第二修改对象。

11.一种可写快照实现系统,其特征在于,包括:如权利要求1至3任一项所述的客户端,如权利要求4至10任一项所述的服务器以及元数据服务器。

说明书 :

一种可写快照实现方法及系统

技术领域

[0001] 本申请涉及计算机技术领域,更具体地说,涉及一种可写快照实现方法及系统。

背景技术

[0002] 常见的分布式文件系统架构由位于底层的DOS(分布式对象存储系统)、MDS(元数据服务)和CA(客户端代理)三部分组成,其中,DOS由多台服务器设备组成,负责将数据可靠分布到这些设备上,它对外提供基于对象的数据访问接口;MDS提供元数据服务,其中元数据可以存储到DOS,也可以独立存储;CA同时与MDS和DOS交互,对外实现文件访问接口;文件的数据被切分成一定大小的数据块,每一块作为一个对象存储到DOS中。
[0003] 快照是文件系统中一种高效的数据保护技术,用户在对文件数据进行修改后,可以创建一个快照,之后如果文件数据发生异常损坏,可以将文件回滚到该快照,达到数据保护的目的。
[0004] 快照创建后,文件可区分为多个版本,即当前版本,每个快照对应一个快照版本。组成当前版本的对象版本,称为对象的#HEAD版本,简称#HEAD对象;组成快照版本的对象版本,称为对象的#SNAP版本,简称#SNAP对象。
[0005] 在一般文件系统中,只有文件的当前版本可以继续修改,快照版本不能再被修改,导致不能满足业务需求。

发明内容

[0006] 本申请的目的在于提供一种可写快照实现方法及系统,能够实现快照的修改。
[0007] 为实现上述目的,本申请提供了一种可写快照实现方法,应用于客户端,包括:
[0008] 接收到快照文件的创建请求时,利用元数据服务器记录当前所述创建请求的创建信息;
[0009] 当接收到对所述快照文件的第一修改请求后,获取所述第一修改请求中的第一目标快照名称,并利用所述第一目标快照名称获取所述元数据服务器中对应的所述创建信息;
[0010] 将所述第一修改请求、所述第一目标快照名称和所述创建信息下发至服务器,以使所述服务器根据所述第一目标快照名称和所述创建信息确定第一目标修改对象,并在复制所述目标修改对象后根据所述第一修改请求对复制后第一目标修改对象进行修改。
[0011] 可选的,还包括:
[0012] 当接收到对原始文件或所述快照文件的读取请求后,获取所述元数据服务器中所述读取请求对应的所述创建信息;
[0013] 将所述读取请求和所述创建信息下发至所述服务器,以使所述服务器根据所述读取请求和所述创建信息确定目标读取对象,并根据所述读取请求对所述目标读取对象执行相应的操作。
[0014] 可选的,还包括:
[0015] 当接收到对所述原始文件的第二修改请求后,获取所述元数据服务器中所述第二修改请求对应的所述创建信息;
[0016] 将所述第二修改请求和所述创建信息下发至服务器,以使所述服务器根据所述第二修改请求和所述创建信息确定第二目标修改对象,并在复制所述第二目标修改对象后根据所述修改请求对所述第二目标修改对象进行修改。
[0017] 为实现上述目的,本申请提供了一种可写快照实现方法,应用于服务器,包括:
[0018] 获取客户端发送的对快照文件的第一修改请求、第一目标快照名称和创建信息;其中,所述第一目标快照名称为所述客户端接收到所述第一修改请求后获取得到的信息,所述创建信息为元数据服务器记录的快照创建操作的信息;
[0019] 根据所述第一目标快照名称和所述创建信息确定第一目标修改对象;
[0020] 对所述第一目标修改对象执行复制操作,并根据所述第一修改请求对复制后第一目标修改对象进行修改。
[0021] 可选的,所述根据所述第一目标快照名称和所述创建信息确定第一目标修改对象,包括:
[0022] 根据所述第一目标快照名称获取第一目标快照对象,并判断是否存在与所述第一目标快照对象对应的实对象;其中,所述实对象为实际占用存储空间的对象;
[0023] 如果否,则获取所述第一目标快照对象对应的原始版本对象及其关联对象,根据所述创建信息和所述关联对象,确定所述第一目标修改对象。
[0024] 可选的,还包括:
[0025] 获取客户端发送的对原始文件或所述快照文件的读取请求以及对应的所述创建信息;
[0026] 根据所述读取请求和所述创建信息确定目标读取对象,并根据所述读取请求对所述目标读取对象执行相应的读取操作。
[0027] 可选的,当所述读取请求为对所述原始文件的第一读取请求时,所述根据所述读取请求和所述创建信息确定目标读取对象,包括:
[0028] 获取所述第一读取请求中的第一目标读取名称;
[0029] 利用所述第一目标读取名称获取所述原始文件对应的原始版本对象及其关联对象;
[0030] 利用所述创建信息,将所述原始对象和所有所述关联对象中最后一次更新的最新对象确定为第一目标读取对象。
[0031] 可选的,当所述读取请求为对所述快照文件的第二读取请求时,所述根据所述读取请求和所述创建信息确定目标读取对象,包括:
[0032] 获取所述第二读取请求中的第二目标读取名称;
[0033] 利用所述第二目标读取名称获取所述快照文件对应的快照版本对象;
[0034] 判断所述快照版本对象是否为实对象;
[0035] 如果是,则将所述快照版本对象确定为第二目标读取对象;
[0036] 如果否,则获取所述快照文件的原始版本对象及其关联对象,并根据所述原始版本对象和所述关联对象确定所述第二目标读取对象。
[0037] 可选的,还包括:
[0038] 获取客户端发送的对所述原始文件的第二修改请求、第二目标修改名称和所述创建信息;其中,所述第二目标修改名称为所述客户端接收到所述第二修改请求后获取得到的信息;
[0039] 根据所述第二目标修改名称和所述创建信息确定第二目标修改对象;
[0040] 对所述第二目标修改对象执行复制操作,并根据所述第一修改请求对复制后第二目标修改对象进行修改。
[0041] 可选的,所述根据所述第二目标修改名称和所述创建信息确定第二目标修改对象,包括:
[0042] 利用所述第二目标修改名称获取所述目标文件的目标原始版本对象及其目标关联对象;
[0043] 确定所述目标原始版本对象和所述目标关联对象中最后一次更新的最新对象,并将所述最新快照版本对象确定为所述第二修改对象。
[0044] 为实现上述目的,本申请提供了一种可写快照实现系统,包括:
[0045] 前述公开的客户端,前述公开的服务器及元数据服务器。
[0046] 为实现上述目的,本申请提供了一种电子设备,包括:
[0047] 存储器,用于存储计算机程序;
[0048] 处理器,用于执行所述计算机程序时实现如上述任一种可写快照实现方法的步骤。
[0049] 为实现上述目的,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一种可写快照实现方法的步骤。
[0050] 通过以上方案可知,本申请提供的一种可写快照实现方法,包括:接收到快照文件的创建请求时,利用元数据服务器记录当前所述创建请求的创建信息;当接收到对所述快照文件的第一修改请求后,获取所述第一修改请求中的第一目标快照名称,并利用所述第一目标快照名称获取所述元数据服务器中对应的所述创建信息;将所述第一修改请求、所述第一目标快照名称和所述创建信息下发至服务器,以使所述服务器根据所述第一目标快照名称和所述创建信息确定第一目标修改对象,并在复制所述目标修改对象后根据所述第一修改请求对复制后第一目标修改对象进行修改。本申请在快照创建时,只记录当前创建的信息,在真正需要对快照版本数据进行修改时,再对目标修改对象进行复制,实现文件快照版本的修改的同时极大的减少了磁盘空间占用。
[0051] 本申请还公开了一种可写快照实现系统,同样能实现上述技术效果。

附图说明

[0052] 为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0053] 图1为本申请实施例公开的一种可写快照实现方法的流程图;
[0054] 图2为本申请实施例公开的另一种可写快照实现方法的流程图;
[0055] 图3为本申请实施例公开的另一种可写快照实现方法的流程图;
[0056] 图4为本申请实施例公开的另一种可写快照实现方法的流程图;
[0057] 图5为本申请实施例公开的另一种可写快照实现方法的流程图;
[0058] 图6-图9为本申请实施例公开的一种可写快照实现方法具体示例的处理过程示意图;
[0059] 图10为本申请实施例公开的一种具体的可写快照实现方法的流程图;
[0060] 图11为本申请实施例公开的一种可写快照实现方法中修改原始版本文件的过程流程图;
[0061] 图12为本申请实施例公开的一种可写快照实现系统的结构图。

具体实施方式

[0062] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0063] 在一般现有文件系统中,只有文件的当前版本可以继续修改,快照版本不能再被修改,导致不能满足业务需求。本申请实施例公开了一种可写快照实现方法,能够实现对快照的修改,并减少磁盘空间的占用。
[0064] 参见图1,本申请实施例公开的一种可写快照实现方法的流程图,如图1所示,包括:
[0065] S101:接收到快照文件的创建请求时,利用元数据服务器记录当前所述创建请求的创建信息;
[0066] 本实施例中,当客户端接收到用户发送的快照创建请求时,将当前创建操作的信息下发至元数据服务器,从而利用元数据服务器记录创建信息。其中,创建信息具体可以包括文件的路径、名称、创建时间等,还可以为当前创建操作添加唯一递增的标识。具体的,元数据服务器可以根据创建操作信息中的标识生成树形结构,可以更加直观的表示各个文件间的关联或复制关系,利于检索。
[0067] S102:当接收到对所述快照文件的第一修改请求后,获取所述第一修改请求中的第一目标快照名称,并利用所述第一目标快照名称获取所述元数据服务器中对应的所述创建信息;
[0068] 进一步地,当客户端接收到用户发送的对快照文件的修改请求时,解析修改请求,得到请求中的第一目标快照名称,并获取元数据服务中与第一目标快照名称对应的创建信息。
[0069] S103:将所述第一修改请求、所述第一目标快照名称和所述创建信息下发至服务器,以使所述服务器根据所述第一目标快照名称和所述创建信息确定第一目标修改对象,并在复制所述目标修改对象后根据所述第一修改请求对复制后第一目标修改对象进行修改。
[0070] 本实施例中,客户端将第一修改请求、第一目标快照名称和创建信息下发至服务器,服务器将利用上述信息确定第一目标修改对象,并复制第一目标修改对象,进一步根据第一修改请求对复制后第一目标修改对象进行修改。
[0071] 可见,本申请提供的一种可写快照实现方法,包括:接收到快照文件的创建请求时,利用元数据服务器记录当前所述创建请求的创建信息;当接收到对所述快照文件的第一修改请求后,获取所述第一修改请求中的第一目标快照名称,并利用所述第一目标快照名称获取所述元数据服务器中对应的所述创建信息;将所述第一修改请求、所述第一目标快照名称和所述创建信息下发至服务器,以使所述服务器根据所述第一目标快照名称和所述创建信息确定第一目标修改对象,并在复制所述目标修改对象后根据所述第一修改请求对复制后第一目标修改对象进行修改。本申请在快照创建时,只记录当前创建的信息,在真正需要对快照版本数据进行修改时,再对目标修改对象进行复制,极大的减少了磁盘空间占用。
[0072] 在上述实施例的基础上,参见图2所示,本申请提供的可写快照实现方法还可以进一步包括:
[0073] S201:当接收到对原始文件或所述快照文件的读取请求后,获取所述元数据服务器中所述读取请求对应的所述创建信息;
[0074] S202:将所述读取请求和所述创建信息下发至所述服务器,以使所述服务器根据所述读取请求和所述创建信息确定目标读取对象,并根据所述读取请求对所述目标读取对象执行相应的操作。
[0075] 具体地,客户端获取到用户发送的对文件的原始版本或快照版本进行读取的请求时,解析读取请求,以利用读取请求的信息获取元数据服务器中对应的创建信息。进一步将创建信息和读取请求发送至服务器,以使服务器利用读取请求的信息和创建信息确定目标读取对象,从而根据读取请求读取目标对象。
[0076] 在上述实施例的基础上,参见图3所示,本申请提供的可写快照实现方法还可以进一步包括:
[0077] S301:当接收到对所述原始文件的第二修改请求后,获取所述元数据服务器中所述第二修改请求对应的所述创建信息;
[0078] S302:将所述第二修改请求和所述创建信息下发至服务器,以使所述服务器根据所述第二修改请求和所述创建信息确定第二目标修改对象,并在复制所述第二目标修改对象后根据所述修改请求对所述第二目标修改对象进行修改。
[0079] 可以理解的是,本实施例还可以获取用户发起的对文件的原始版本进行修改的第二修改请求。
[0080] 本申请提供了一种可写快照实现方法,应用于服务器。
[0081] 参见图4,本申请实施例公开的另一种可写快照实现方法的流程图,如图4所示,包括:
[0082] S401:获取客户端发送的对快照文件的第一修改请求、第一目标快照名称和创建信息;其中,所述第一目标快照名称为所述客户端接收到所述第一修改请求后获取得到的信息,所述创建信息为元数据服务器记录的快照创建操作的信息;
[0083] 本实施例中,服务器获取客户端发送的第一修改请求,以及第一修改请求中的第一目标快照名称和对应的创建信息,第一修改请求为对文件快照版本进行修改的请求。具体的,当客户端接收到第一修改请求后,通过对第一修改请求进行解析,得到第一目标快照名称,并利用第一目标快照名称获取对应的创建信息。
[0084] S402:根据所述第一目标快照名称和所述创建信息确定第一目标修改对象;
[0085] S403:对所述第一目标修改对象执行复制操作,并根据所述第一修改请求对复制后第一目标修改对象进行修改。
[0086] 可以理解的是,服务器首先利用目标快照名称和创建信息确定正确的目标修改对象,并复制目标修改对象,进一步执行修改操作。
[0087] 本实施例提供了另一种可写快照实现方法,参见图5所示,包括:
[0088] S501:获取客户端发送的对快照文件的第一修改请求、第一目标快照名称和创建信息;其中,所述第一目标快照名称为所述客户端接收到所述第一修改请求后获取得到的信息,所述创建信息为元数据服务器记录的快照创建操作的信息;
[0089] S502:根据所述第一目标快照名称获取第一目标快照对象,并判断是否存在与所述第一目标快照对象对应的实对象;其中,所述实对象为实际占用存储空间的对象;
[0090] 本实施例中,获取快照文件对应的目标快照对象,并判断是否存在与目标快照对象对应的实对象。
[0091] S503:如果否,则获取所述第一目标快照对象对应的原始版本对象及其关联对象,根据所述创建信息和所述关联对象,确定所述第一目标修改对象;
[0092] 若不存在与目标快照对象对应的实对象,则进一步获取目标快照对象对应的文件的原始版本对象,以及原始版本对象的关联对象,并根据创建信息,从原始版本对象和关联对象中确定第一目标修改对象。另外,如果存在与目标快照对象对应的实对象,本实施例可以直接对当前实对象进行修改,无需复制。
[0093] S504:对所述第一目标修改对象执行复制操作,并根据所述第一修改请求对复制后第一目标修改对象进行修改。
[0094] 确定第一目标修改对象之后,本实施例将第一目标修改对象复制,从而根据修改请求的内容对复制后对象执行修改操作。
[0095] 在上述实施例的基础上,本申请提供的可写快照实现方法还可以进一步包括:
[0096] 获取客户端发送的对原始文件或所述快照文件的读取请求以及对应的所述创建信息;
[0097] 根据所述读取请求和所述创建信息确定目标读取对象,并根据所述读取请求对所述目标读取对象执行相应的读取操作。
[0098] 可以理解的是,服务器可以获取客户端发送的由用户发起的对文件原始版本或快照版本的读取请求,以及元数据服务器中存储的与读取请求中信息对应的创建信息,进一步根据上述信息确定目标读取对象,从而根据读取请求对目标读取对象执行相应的读取操作。
[0099] 针对上述实施例提到的可写快照实现方法,当所述读取请求为对所述原始文件的第一读取请求时,本实施例进一步针对根据所述读取请求和所述创建信息确定目标读取对象的过程进行进一步阐述,包括:
[0100] 获取所述第一读取请求中的第一目标读取名称;
[0101] 利用所述第一目标读取名称获取所述原始文件对应的原始版本对象及其关联对象;
[0102] 利用所述创建信息,将所述原始对象和所有所述关联对象中最后一次更新的最新对象确定为第一目标读取对象。
[0103] 本实施例中,根据解析后得到的第一读取请求中的第一目标读取名称,获取对应的原始版本对象,以及原始版本对象对应的关联对象。根据创建信息,获取原始版本对象和关联对象中最后一次更新的对象,将其确定为第一目标读取对象,从而进一步对第一目标读取对象进行读取。具体地,可以根据创建信息中的创建时间确定最新对象,也可以依据预先为每个创建操作添加唯一递增的标识,从而根据标识确定最新对象。
[0104] 针对上述实施例提到的可写快照实现方法,当所述读取请求为对所述快照文件的第二读取请求时,本实施例进一步针对根据所述读取请求和所述创建信息确定目标读取对象的过程进行进一步阐述,包括:
[0105] 获取所述第二读取请求中的第二目标读取名称;
[0106] 利用所述第二目标读取名称获取所述快照文件对应的快照版本对象;
[0107] 判断所述快照版本对象是否为实对象;
[0108] 如果是,则将所述快照版本对象确定为第二目标读取对象;
[0109] 如果否,则获取所述快照文件的原始版本对象及其关联对象,并根据所述原始版本对象和所述关联对象确定所述第二目标读取对象。
[0110] 具体地,服务器根据第二读取请求中的第二目标读取名称获取对应的快照文件,以及快照文件对应的快照版本对象,进一步判断快照版本对象是否为实对象。若当前快照版本对象为实对象,则将实对象确定为第二目标读取对象,可以直接对第二目标读取对象进行读取。
[0111] 另外,若快照版本对象为虚对象,则需要获取快照文件的原始版本对象,以及原始版本对象的关联对象,进一步从中确定第二目标读取对象。
[0112] 在上述实施例的基础上,本申请提供的可写快照实现方法还可以进一步包括:
[0113] 获取客户端发送的对所述原始文件的第二修改请求、第二目标修改名称和所述创建信息;其中,所述第二目标修改名称为所述客户端接收到所述第二修改请求后获取得到的信息;
[0114] 根据所述第二目标修改名称和所述创建信息确定第二目标修改对象;
[0115] 对所述第二目标修改对象执行复制操作,并根据所述第一修改请求对复制后第二目标修改对象进行修改。
[0116] 本实施例中,服务器获取客户端发送的用户对文件原始版本的第二修改请求、目标修改名称和创建信息,并进一步确定第二目标修改对象,从而复制第二目标修改对象,并根据修改请求对复制后对象执行修改操作。
[0117] 针对上述实施例提到的可写快照实现方法,本实施例进一步针对根据所述第二目标修改名称和所述创建信息确定第二目标修改对象的过程进行进一步阐述,包括:
[0118] 利用所述第二目标修改名称获取所述目标文件的目标原始版本对象及其目标关联对象;
[0119] 本实施例中,利用第二目标修改名称获取目标文件的原始版本对象,以及原始版本对象的目标关联对象。
[0120] 确定所述目标原始版本对象和所述目标关联对象中最后一次更新的最新对象,并将所述最新对象确定为所述第二目标修改对象。
[0121] 具体地,将目标原始对象和目标关联对象中最后一次更新过的最新对象确定为第二目标修改对象。
[0122] 在一种具体实施方式中,获取目标文件的原始版本对象以及原始版本对象的关联对象后,根据创建信息确定其中最新对象,具体可以根据创建时间,或预先在对象创建时添加的唯一递增的标识来确定。进一步将最新对象确定为第二目标修改对象,从而对第二目标修改对象执行复制操作,以及修改操作。
[0123] 在另一种具体实施方式中,确定最新对象之后,还进一步判断最新对象是否存在关联对象。如果是,则表示该对象生成后创建过新的快照,此时将最新对象确定为第二目标修改对象;如果否,则不能直接判断是否创建过新的快照,需要进一步获取除了最新对象之外原始版本对象和关联对象中最后一次更新的第二更新对象,并获取第二更新对象的关联对象。进一步地,确定最后一次更新的最新快照版本对象,判断其是否属于第二更新对象的关联对象中任一个,如果否,则判定该对象生成后创建过新的快照,将最新对象确定为第二目标修改对象,以使服务器复制第二目标修改对象,并对复制后修改对象进行修改;另外,若最新快照版本对象是第二更新对象的关联对象中任一个,表示最新对象生成后未创建新快照对象,可以直接对最新对象进行修改,无需执行复制操作。
[0124] 进一步地,利用具体示例对本发明提供的可写快照实现方法进行进一步阐述。具体地,本发明使用一个全局唯一且递增的snapid,用于标识用户的每次快照创建操作。引入一个全局唯一且递增的cowid,用于标识系统内部对每个对象的cow(copy on write,写时复制)操作。snapid在系统内部使用,用户在访问快照文件时,系统根据用户要访问的快照版本文件,得到对应的snapid;cowid只在系统的DOS(distributed object storage,分布式对象存储)子系统内部使用。
[0125] 如图6所示,#HEAD对象对应文件的原始版本,#snap对象对应快照版本。图中展示的文件创建了3个快照,对应snapid分别是snap1、snap2、snap4。快照创建时,系统只在文件MDS(meta data server,元数据服务器)中记录了快照信息,没有执行过数据操作,此时DOS子系统中只存在#HEAD对象(实对象),占用实际磁盘空间;不存在#snap1等对象(虚对象),不占用磁盘空间。非真实存在、不占用磁盘空间的对象称为虚对象。
[0126] 如图7所示,快照创建后,用户修改文件原始版本,此时DOS生成一个全局唯一且递增的cowid,并将#HEAD对象复制成#HEAD#cowid对象,同时记录#HEAD关联的快照id范围,即[snap1,snap4],新生成的#HEAD#cowid对象的关联快照id范围为空。#HEAD对象与#HEAD#cowid对象称为关联对象。该过程由DOS内部完成,系统其他部分不感知,MDS也没有变化。
[0127] 用户再次为原始版本文件创建快照snap8,参见图8,此时各对象的逻辑关系如图。同上,该过程只在MDS中记录快照信息,DOS不感知。后续用户访问这些对象时,需要DOS根据快照信息和上文中#HEAD对象的“关联的快照id范围”,找到合适的实对象执行访问。
[0128] 如图9所示,用户修改文件的快照snap2,即#snap2对象。系统发现用户将要修改的#snap2对象是个虚对象,于是查找#HEAD及其所有关联对象的信息,通过分析这些对象关联的快照id范围,发现snap2在#HEAD对象的关联范围以内,于是复制#HEAD对象为#snap2对象,然后修改#snap2对象。如果后续再次修改#snap2对象,此时该对象已经是实对象,系统直接修改即可。
[0129] 图10为本实施例提供的一种具体的可写快照实现方法的流程图,用户创建快照时,CA(client agent,客户端代理)将相关信息下发给MDS;MDS分配快照id,并保存到元数据中。用户读写文件原始版本时,首先由CA向MDS申请打开文件,MDS返回文件元数据、HEAD、文件相关的快照id列表;CA根据用户要访问的文件的偏移量,计算将访问的对象,得到对象名。
[0130] 对于原始版本的读取操作,CA向DOS下发对象名及从MDS获取到的信息,即(对象名、HEAD、快照id列表);DOS根据对象名,获取HEAD对象及其所有关联对象,DOS读取其中cowid最大的对象,该对象是文件最新数据所在对象。
[0131] 对于原始版本的修改操作,CA向DOS下发对象名及从MDS获取到的信息,即(对象名、#HEAD、快照id列表);DOS的处理过程参见图11。如图,首先获取文件的#HEAD对象及其关联对象,取其中cowid最大的对象(假定为#HEAD#cowidX)的关联snapid范围。如果关联范围非空,表明该对象生成后创建过新的快照,则生成新的cowid,假定为cowidY,复制#HEAD#cowidX为#HEAD@cowidY,更新#HEAD#cowidX的关联快照id范围(其最大值更新为快照id列表中的最大值),记录#HEAD@cowidY与其他#HEAD对象的关联关系,修改#HEAD@cowidY对象,处理结束;如果为空,不能确定该对象生成后是否创建过新的快照,需要继续判断,具体地,获取cowid第二大的对象的关联snapid范围,以及快照列表中的最大的snapid(即最后一次快照的snapid);如果最大snapid在第二大对象的关联snapid范围内,说明#HEAD#cowidX对象生成后没有生成过新的快照,则直接修改#HEAD#cowidX对象,处理结束;如果最大snapid不属于第二大对象的关联snapid范围,则处理过程与前述关联范围非空时相同,复制最新对象并进一步处理。
[0132] 用户读写文件快照版本时,首先由CA向MDS申请打开快照文件,MDS返回文件元数据、snapid、文件相关的快照id列表;CA根据用户要访问的文件的偏移量,计算将访问的对象,得到对象名。
[0133] 对于快照版本的读取操作,CA向DOS下发对象名及从MDS获取到的信息,即(对象名、snapid、快照id列表);DOS判断是否存在snapid对应的实对象,如果存在直接读取;如果不存在,则获取文件#HEAD对象及其关联对象信息,根据snapid和#HEAD及其关联对象的snapid范围信息,找到合适对象读取。
[0134] 对于快照版本的修改操作,CA向DOS下发对象名及从MDS获取到的信息,即(对象名、snapid、快照id列表);DOS判断是否存在snapid对应的实对象,如果存在直接修改;如果不存在,采取与上述读取过程一样的处理过程,从#HEAD及其关联对象中找到合适对象,复制该对象为#snapid对象,再修改#snapid对象内容。
[0135] 本申请还提供了一种可写快照实现系统,具体包括前述公开的服务器、前述公开的客户端、以及元数据服务器。
[0136] 本申请还提供了一种电子设备,参见图12,本申请实施例提供的一种电子设备的结构图,如图12所示,包括:
[0137] 存储器100,用于存储计算机程序;
[0138] 处理器200,用于执行所述计算机程序时可以实现上述实施例所提供的可写快照实现方法的步骤。
[0139] 具体的,存储器100包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机可读指令,该内存储器为非易失性存储介质中的操作系统和计算机可读指令的运行提供环境。处理器200在一些实施例中可以是一中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器或其他数据处理芯片,为电子设备提供计算和控制能力。
[0140] 本申请还提供了一种计算机可读存储介质,该存储介质可以包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。该存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现前述公开的可写快照实现方法。
[0141] 本申请在快照创建时,只记录当前创建的信息,在真正需要对快照版本数据进行修改时,再对目标修改对象进行复制,极大的减少了磁盘空间占用。
[0142] 说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。
[0143] 还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。