块设备快照方法、系统和存储介质与流程

文档序号:31078507发布日期:2022-08-09 22:02阅读:148来源:国知局
块设备快照方法、系统和存储介质与流程

1.本发明涉及数据存储技术领域,尤其涉及云存储、企业存储、块存储和高性能存储技术领域,特别涉及一种块设备快照方法、系统和存储介质。


背景技术:

2.块设备是指计算机的存储设备,按照块大小(比如磁盘的扇区,512字节)为粒度进行存储。块设备通常格式化成文件系统(如ext4文件系统、ntfs文件系统等)以便用来存储文件。块设备快照(snapshot)是指保存块设备某一时刻的状态,或者说数据内容,后续如果数据被覆盖了,可以利用快照来恢复数据内容。比如,一个图片文件,用户编辑了这个文件,一段时间以后,用户想要恢复到编辑之前的状态,如果用户在编辑之前对块设备做过快照,那么,现在就可以把整个块设备恢复到编辑这个文件之前的状态。块设备快照是在块层的一种备份数据的方法。
3.当前,有全盘快照和增量快照两种技术。全盘快照,是在创建快照的时候,将原始盘(即被创建快照的盘)的所有数据复制一份至快照盘(即存放复制的数据的盘)中,并进行保存。这种方案下,创建快照很慢,需要复制所有数据,且消耗比较大,需要完整的复制一份数据,这就需要另一个相同大小的存储空间,从而成本比较高。增量快照,是在创建快照的时候并不复制所有数据,而是在后续的读写原始盘的时候,按需复制数据。这种增量快照方案大大节省了额外需要的存储空间和创建时间,只有需要的时候才会复制数据,用户没有写原始盘,就不需要复制数据。
4.增量快照只有在用户写数据的时候引起对数据的复制,也就是写时复制(copy-on-write,简称cow)。
5.发明人在进行快照研究时,发现现有的增量快照方案具有一次写操作需要引入多次输入输出(io)操作带来相应额外损耗的缺点。
6.如何进一步提高性能,降低快照带来的额外损耗,减小快照带来的性能的负面影响,是一个有待解决的问题。


技术实现要素:

7.有鉴于现有技术中存在的问题,本发明提供了一种块设备快照方法和系统,通过在快照盘的元数据(metadata)中存储快照的对应关系等信息实现快照操作,来降低引入的io操作的次数来减少快照盘引入的额外的io消耗,从而提高系统性能。
8.本发明的一个方面,提供了一种块设备快照方法,该方法包括以下步骤:
9.基于快照创建命令在块设备上为原始盘创建快照,在原始盘和快照盘的配置块中记录原始盘识别码和快照盘识别码,创建原始盘和快照盘间的块对应关系映射表和快照盘的可用空闲块号并记录在快照盘的配置块中,其中,初始创建的快照盘中各快照块的元数据区被初始化;
10.打开已创建有快照的块设备,从快照盘的配置块读取所述块对应关系映射表和可
用空闲块号至内存;
11.在要对原始盘的块进行写操作的情况下,基于内存中的块对应关系映射表确定是否触发写时复制操作,在确定触发写时复制操作时将写操作针对的原始盘的块中的原始内容复制到读取的空闲块号所对应的快照盘中的空闲块,将所述原始盘的块的块号写入所述空闲块的元数据区,并更新内存中的块对应关系映射表和可用空闲块号;
12.在关闭快照盘时,将内存中的块对应关系映射表和可用空闲块号写入快照盘的配置块。
13.在本发明一些实施例中,所述原始盘和快照盘的配置块中还记录快照块大小信息,所述快照盘的配置块中还设置有打开状态标志字段;
14.所述打开已创建有快照的块设备,从快照盘的配置块读取所述块对应关系映射表和可用空闲块号至内存,包括:打开已创建有快照的块设备,基于快照盘的配置块中的打开状态标志字段中的打开状态标志确定块设备的前次关闭是否为正常关闭,在确定前次关闭为正常关闭的情况下,从配置块读取所述块对应关系映射表和可用空闲块号至内存,并更新打开状态标志字段中的打开状态标志;
15.所述方法还包括:在关闭快照盘时,将所述打开状态标志字段中的打开状态标志清除。
16.在本发明一些实施例中,所述方法还包括:在基于快照盘的配置块中的打开状态标志字段中的打开状态标志确定块设备的前次关闭为非正常关闭的情况下,扫描快照盘,从第一个块元数据开始扫描,基于从所述块元数据中读取的数据在内存中重建块对应关系映射表和可用空闲块号。
17.在本发明一些实施例中,所述从第一个块元数据开始扫描,基于从所述块元数据中读取的数据在内存中重建块对应关系映射表和可用空闲块号包括:从第一个块元数据开始扫描直到扫描至块元数据为0的位置,来基于从快照盘的各个块的块元数据中读取的数据确定原始盘和快照盘间的块对应关系,基于块元数据为0的位置确定空闲块号。
18.在本发明一些实施例中,所述基于快照创建命令在块设备上为原始盘创建快照包括基于快照创建命令在已打开的块设备或未打开的块设备上为原始盘创建快照;在已打开的块设备上为原始盘创建快照的情况下,在创建快照过程中暂停对块设备的io操作,在快照创建完成后继续进行所述io操作。
19.在本发明一些实施例中,所述方法还包括:恢复快照步骤,扫描整个快照盘,找到快照盘中每个块对应的原始盘的块号,并将快照盘的块中的内容写入原始盘对应的块中。
20.在本发明一些实施例中,所述方法还包括:删除快照步骤,将原始盘和快照盘的配置块全部写0,并删除原始盘和快照盘间的块对应关系。
21.在本发明一些实施例中,所述初始创建的快照盘中各快照块的元数据区被初始化包括:
22.在创建快照盘之前将快照盘池的全部快照盘中各快照块的元数据区清0;或者在创建快照盘时对快照盘池的预定数量的快照盘中各快照块的元数据区清0,然后通过后台进程对其他快照盘中各快照块的元数据区清0;或者利用硬件通过磁盘内预留的接口对快照盘中各快照块的元数据区清0。
23.在本发明一些实施例中,在所述写操作为多个写操作的情况下,所述方法还包括:
利用记录表来记录每个写操作对应的快照盘的块号,在相应写操作完成后从所述记录表中删除对应的块号;对于新到来的写操作,如果其对应的块号与未完成的写操作对应的最小块号之差大于预定值,则使新到来的写操作进行等待,直至与未完成的写操作对应的最小块号之差不大于预定值。
24.本发明的另一方面,还提供了一种实现如前所述的块设备快照方法的块设备快照系统,所述系统包括:
25.快照创建模块,用于基于快照创建命令在块设备上为原始盘创建快照,在原始盘和快照盘的配置块中记录原始盘识别码和快照盘识别码,创建原始盘和快照盘间的块对应关系映射表和快照盘的可用空闲块号并记录在快照盘的配置块中,其中,初始创建的快照盘中各快照块的元数据区被初始化;
26.块设备打开模块,用于打开已创建有快照的块设备,从快照盘的配置块读取所述块对应关系映射表和可用空闲块号至内存;
27.写操作模块,用于在要对原始盘的块进行写操作的情况下,基于内存中的块对应关系映射表确定是否触发写时复制操作,在确定触发写时复制操作时将写操作针对的原始盘的块中的原始内容复制到读取的空闲块号所对应的快照盘中的空闲块,将所述原始盘的块的块号写入所述空闲块的元数据区,并更新内存中的块对应关系映射表和可用空闲块号;
28.块设备关闭模块,用于在关闭快照盘时,将内存中的块对应关系映射表和可用空闲块号写入快照盘的配置块。
29.在本发明一些实施例中,所述块设备快照系统由计算机软件系统、智能网卡或fpga asic硬件来实现。
30.本发明的另一方面,提供了一种块设备快照系统,包括处理器和存储器,所述存储器中存储有计算机指令,所述处理器用于执行所述存储器中存储的计算机指令,当所述计算机指令被处理器执行时该系统实现如前所述方法的步骤。
31.本发明的又一方面,还提供了一种计算机存储介质,其上存储有计算机程序,该程序被处理器执行时实现如前所述方法的步骤。
32.本发明实施例提供的块设备快照方法和系统,能够缩短快照带来的额外损耗,大大减小快照带来的性能的负面影响。
33.本发明的附加优点、目的,以及特征将在下面的描述中将部分地加以阐述,且将对于本领域普通技术人员在研究下文后部分地变得明显,或者可以根据本发明的实践而获知。本发明的目的和其它优点可以通过在书面说明及其权利要求书以及附图中具体指出的结构实现到并获得。
34.本领域技术人员将会理解的是,能够用本发明实现的目的和优点不限于以上具体所述,并且根据以下详细说明将更清楚地理解本发明能够实现的上述和其他目的。
附图说明
35.此处所说明的附图用来提供对本发明的进一步理解,构成本技术的一部分,并不构成对本发明的限定。在附图中:
36.图1a至图1c为现有增量快照方案的工作原理示意图。
37.图2为现有增量快照方案的工作原理示意图。
38.图3示出本发明一实施例中块设备快照方法的流程示意图。
39.图4a和图4b分别为本发明一实施例中创建快照和写操作的示意图。
40.图5为本发明一实施例中快照盘生命周期的操作示意图。
具体实施方式
41.为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施方式和附图,对本发明做进一步详细说明。在此,本发明的示意性实施方式及其说明用于解释本发明,但并不作为对本发明的限定。
42.在此,还需要说明的是,为了避免因不必要的细节而模糊了本发明,在附图中仅仅示出了与根据本发明的方案密切相关的结构和/或处理步骤,而省略了与本发明关系不大的其他细节。
43.应该强调,术语“包括/包含”在本文使用时指特征、要素、步骤或组件的存在,但并不排除一个或更多个其它特征、要素、步骤或组件的存在或附加。
44.本发明对现有的增量快照方案进行了优化而提出了一种新的块设备快照方法和相应的系统。
45.图1a-图1c为现有增量快照方案的工作原理示意图。例如,用户依次做了如下操作,创建快照,写了第2个块,写了第3个块,写第2个块,读第2个块。每个操作描述如下:
46.(1)创建快照。该操作用于添加一个新的快照盘,如图1a中的快照盘,创建的快照盘和原始盘关联,刚创建的快照盘里面是空的,没有内容。如图1a所示,原始盘第一个块内容用aaa表示,第二个块的内容用bbb表示,第三个块的内容用ccc表示,此处只是为了便于说明而用字母表示。实际每个块(chunk)的大小一般是512字节。在创建的快照盘的最后一个块中,记录有当前快照盘里面接下来可以使用的块号(chunk号),即可用的空闲块号。
47.(2)写第2个块。原始盘的第2个块原来存储有内容bbb,在要写入内容xxx时,由于是第一次写第2个块,需要触发cow,将第2个块的内容复制到快照盘的空闲块,也就是复制到快照盘的第1个块(块1),如图1b所示。同时,在快照盘里面记录原始盘的块和快照盘的块的对应关系,该对应关系记录有快照盘中的一个数据块对应的原始盘的位置,如快照盘的第1个块对应到原始盘的第2个块,为了方便描述,后文将该对应关系称为映射表。映射表信息被记录在快照盘专门的位置,参见图1b中快照盘最后一个块,实际位置是可以变化的,最后一个块只是为了方便描述。在将原始盘第2个块的内容复制到快照盘的第1块后,空闲块号加1,因为此时快照盘中的第1号块已经不是空闲了的,空闲块此时是第2块。这个空闲块的位置,也被记录在快照盘的空闲表中,记录位置也可以在最后一个块中。
48.(3)写第3个块。由于是第一次写原始盘的第3个块,需要触发cow,将原始盘的第3个块内容复制到快照盘的空闲块,也就是快照盘第2个块(块2),如图1c所示。同时在快照盘中记录映射表和空闲表。该过程和上面的写第2个块的过程一样。
49.(4)再写第2个块,由于此时不是第一次写第二个块,不需要再次cow了。直接将新的内容(如zzz)写入原始盘的第2个块。
50.(5)读第2个块。读原始盘直接读,没有额外操作,因此,读原始盘的第2个块时无需cow触发。
51.快照之后,原始盘的内容就被记录在快照盘中了,后续可以用快照盘来将原始盘恢复到创建快照那个时间点的内容。恢复时可以按照映射表里面的对应关系,将快照盘的数据复制到原始盘中,如图2所示。
52.基于上述快照方案可知,一次写操作需要引入多次io操作,如读原始盘,写快照盘,记录对应关系和记录空闲块,即便后两个操作可以结合到一次io操作中,这样也至少需要3次额外的io操作。io操作会带来相应额外损耗,从而影响系统性能。
53.对此,本发明提供了一种块设备快照的软件实现方案,即块设备快照方法和实现该方法的系统。使用该方案,可以减少快照盘引入的额外的io消耗,提高创建快照后磁盘的性能。本发明的块设备快照方案中,将对应关系等信息直接记录在快照盘的数据块的元数据(metadata)部分,不需要额外记录到快照盘的最后一个块中。本发明的方案可以节省额外的io操作,从而仅需两个额外的io操作,也即只需要读原始盘和写快照盘对应的io操作,从而将快照带来的额外io操作由原来的至少3次,减小到2次。
54.本发明实施例的块设备快照系统通常包含如下几部分操作:1.给原始盘创建快照;2.打开块设备;3.对原始盘进行读写操作;4.关闭块设备;5.系统异常处理;6.快照恢复;7.给原始盘删除快照。下面结合着这几个操作对本发明的块设备快照方法来进行示例性描述。
55.图3所示为本发明一实施例中块设备快照方法的流程示意图。该方法可由软件系统来实现。如图3所示,该方法包括以下步骤:
56.步骤s110,在块设备上为原始盘创建快照。
57.在本步骤中,软件系统的快照创建模块接收快照创建命令,快照创建命令可包含原始盘通用唯一识别码(universally unique identifier,uuid)、快照盘uuid、快照块的大小(chunk size),并基于接收的快照创建命令进行快照的创建。创建快照后会将原始盘和快照盘的uuid、快照块大小记录在原始盘和快照盘尾部的配置块中,配置块是原始盘和快照盘的尾部的空间,用于存放一些关键配置信息。原始盘的uuid、快照盘的uuid和快照块大小信息自从创建后就固定不变,这部分信息中uuid信息可以用于在快照盘和原始盘之间进行uuid的互相验证,以确认快照盘和原始盘是否对应。在本发明实施例中,每个块(chunk)是快照的管理粒度,其大小一般是512字节或512字节的倍数,例如其可以是是64k大小,但本发明并不限于此,后文假设每个chunk为64k大小。
58.本发明实施例中,用户可以在未打开的块设备上创建快照,也可以在已打开的块设备上创建快照。在已打开的块设备上创建快照时,需要先暂停对这个块设备的io操作。在这个盘上完成快照创建后,可继续进行io操作,在创建快照期间用户发过来的io操作命令,会被临时存放在一个列表上,创建完快照后,可重新在该块设备上执行这些io操作命令。
59.本发明实施例中,块设备可以是nvme设备,或称为nvme盘。nvme设备中每个块附带8个字节的额外存储区域,可称为元数据区,可以用来存放数据完整性校验,nvme标准中对这个特性做了介绍。标准的nvme命令中nvme identify命令可以用于提取nvme盘支持的一个特性,nvme identify命令的返回结构中,元数据能力(mc,metadata capabilities)位表明了一个nvme盘的块是否支持元数据(metadata)。如果支持的话,元数据区可以用来做用户自定义的功能,由于这个元数据是每个块都有的,所以后文将统一将这个数据区称为块元数据(chunk metadata)区,该数据区中存储的数据称为块元数据。在nvme设备支持元数
据的情况下,本发明实施例可利用这8个字节来存放与快照有关的数据,更具体地,这8个字节可以用来记录快照盘的每个块对应到原始盘的那个块号,也即,利用快照盘的各个块的元数据区存储与原始盘的块的对应关系信息。图4a示出了本发明实施例中创建快照的示意图,可以看出,快照盘中,每个64k字节的块后都肚带8字节的元数据区。
60.本发明实施例中,块设备不仅可以是nvme设备,还可以是支持元数据的其他磁盘。
61.在本发明实施例中,初始创建的快照盘中各快照块的元数据区被初始化,例如将快照盘中的块元数据的值全部置为0,即使得初始的块元数据为空。
62.在本发明实施例中,在创建快照时,可在内存中创建原始盘和快照盘间的块对应关系映射表,如哈希(hash)表,该hash表初始是空的。同时,在内存中记录快照盘的接下来可用的空闲块号,初始的空闲块号为0。
63.在快照创建完毕后,可将内存中创建的块对应关系映射表和空闲块号记录在快照盘尾部的配置块中。
64.在本发明优选实施例中,快照盘尾部的配置块中还进一步设置有打开状态标志字段,用于指示快照盘的打开状态,由此来判断快照盘上次是否正常关闭。作为示例,在快照盘被打开后,系统会将打开状态标志字段置位(如将字段值设为“1”),在快照盘关闭时,会清除打开状态标志字段。这样,如果系统非正常关闭(如掉电导致的异常关闭),打开状态标志字段将不会被正常清除(打开状态标志字段仍是置位的),再次打开快照盘时,就会基于该打开状态标志字段确定上次关闭为异常关闭,这种情况下,在异常关闭时内存中最新的数据来不及记录到快照盘上,此时快照盘上的块对应关系映射表和空闲块号数据有可能是错误的,也即是无效的,此时需要扫描快照盘来重建块对应关系映射表和可用空闲块号。
65.因此,本发明实施例中,可以通过打开状态标志字段来确定快照盘的配置块中的块对应关系映射表和空闲块号数据是否可用。这将在后面进一步描述。
66.步骤s120,打开已创建有快照的块设备,从快照盘的配置块读取所述块对应关系映射表和可用空闲块号至内存。
67.更具体地,在打开原始盘时,检查是否有快照盘,若有,则将快照盘的块对应关系映射表和空闲块号读入内存。在快照盘的配置块中还设置有打开状态标志字段的情况下,该步骤可包括:打开已创建有快照的块设备,基于快照盘的配置块中的打开状态标志字段中的打开状态标志确定块设备的前次关闭是否为正常关闭,例如,若打开状态标志未被清除(即打开状态标志置位)表明前次关闭为异常关闭,若打开状态标志被清除则表明前次关闭为正常关闭。在确定前次关闭为正常关闭的情况下,从配置块读取块对应关系映射表和可用空闲块号至内存,并进一步更新打开状态标志字段中的打开状态标志,即在快照盘中记录设备已经打开状态标志。
68.而在基于快照盘的配置块中的打开状态标志字段中的打开状态标志确定块设备的前次关闭为非正常关闭的情况下,本发明的方法还包括以下步骤:扫描快照盘,从快照盘的第一个块元数据开始扫描,基于从块元数据中读取的数据在内存中重建块对应关系映射表和可用空闲块号。该步骤可包括:从第一个块元数据开始扫描直到扫描至块元数据为0的位置,来基于从快照盘的各个块的块元数据中读取的数据确定原始盘和快照盘间的块对应关系,基于块元数据为0的位置确定空闲块号。举例来说,在扫描快照盘时,从第一个块元数据开始扫描,依次读取各个块元数据,对于第m个块元数据,如果值为非0,说明是有效数据,
里面存放的是它对应的原始盘的块号n,从而也就是获得了原始盘和快照盘间的块对应关系。依次扫描各个块元数据,直到扫描到块元数据为0,这样就得到了对应表,这时的chunk号就是空闲块号。这样就重建除了需要的数据。在内存中记录有映射表和可用空闲块号之后,进一步更新打开状态标志字段中的打开状态标志,即在快照盘的打开状态标志字段中记录设备已经打开。
69.实际场景中,当系统掉电时,快照盘配置块中的打开状态标志未被正常清除,此时快照盘内的映射表和空闲块号无效,在这种情况下在此打开这个未正常关闭的原始盘时,需要扫描整个快照盘,重建映射表,并找到空闲块号。
70.步骤s130,对原始盘的块进行读写操作,基于内存中的块对应关系映射表确定是否触发写时复制操作,在确定触发写时复制操作时将原始盘的要复制的块的内容复制到内存中记录的快照盘的空闲块号所对应的空闲块中,将原始盘的被复制的块的块号写入所述空闲块的元数据区,并更新内存中的块对应关系映射表和可用空闲块号。
71.在本步骤中,读操作和原来没有快照时候的操作一样。对于写操作,如果内存中映射表没有映射,说明第一次写,则需要触发cow。如果不是第一次写,则直接写原始盘而无需触发cow。为了方便叙述,不妨将写原始盘的块所在的块号(chunk号),记作a。
72.cow过程:1)分配快照盘内的空闲块,空闲块号记录了快照盘的空闲块位置,因此根据内存中的空闲块号可获取空闲块位置,这个空闲块被使用记录原始盘的内容,分配完空闲块后将空闲块号加1,移动到下一个空闲块的位置,这个新分配的快照盘内的块号可记作b。2)读入块号a的内容,将块号a的内容写入块号b,同时将块号a写入块号b的块元数据中,这两个操作一次完成。这样,原始盘写操作位置的块的内容被记录到快照盘的分配的块的位置,原始盘的块号被记录到快照盘中分配的块的块元数据中。
73.在本步骤中,读原始盘、写快照盘、同时将原始盘的块号写入到新分配空闲块的块元数据区的8字节中,这里数据和记录关系是在一个io操作中完成的,省去了一次io操作,同时将对应关系也记录到hash表中。如果是第二次写,那不不需要做cow,直接写原始盘。如果是读操作,直接读原始盘。
74.步骤s140,在关闭快照盘时,将内存中的块对应关系映射表和可用空闲块号写入快照盘尾部的配置块中。
75.在关闭块设备时候将快照中块号对应关系映射表记录在快照盘的配置块里,可以方便下次打开块设备时能快速读取块号对应关系映射表到内存。
76.在快照盘的配置块中还设置有打开状态标志字段的情况下,关闭块设备时,还会将打开状态标志字段中的打开状态标志清除。
77.在本发明一些实施例中,所述方法还包括:恢复快照步骤,扫描整个快照盘,找到快照盘中每个块对应的原始盘的块号,并将快照盘的块中的内容写入原始盘对应的块中。
78.在本发明一些实施例中,所述方法还包括:删除快照步骤,将原始盘和快照盘的配置块全部写0,并删除原始盘和快照盘间的块对应关系。删除快照是上面部分的反向操作。
79.基于上述描述可知,本发明的上述块设备快照方法,写操作带来的io操作由现有的至少3次降低到仅需要2次,由此显著缩短了快照带来的额外损耗,大大减小了快照带来的性能的负面影响,提高了系统性能。此外,通过在nvme盘的块元数据中存储快照的块号关系信息,或其他支持元数据的磁盘中存放此信息,可以在系统异常关闭,比如掉电时,扫描
快照盘的元数据来重建对应关系映射表和空闲块号。
80.在本发明优选实施例中,实现上述方法步骤的块设备快照系统可由计算机软件系统、智能网卡或专门的硬件(如fpga asic硬件)来实现,由此实现对原始盘和快照盘的控制。由于采用智能网卡就可以实现快照流程,可以进一步加速快照的处理,减轻cpu的工作。
81.此外,在本发明优选实施例中,创建快照时,由于需要保证快照盘各个块的元数据初始值必须是0,所以在创建快照的时候需要等等把快照盘的块元数据全部清0,这个操作的时间与快照盘的大小有关,有可能需要数十分钟的等待。这里可以做如下优化,减少等待部分时间。各块元数据区可以采用如下优化方式进行初始化:
82.1)提前预清0,即在未创建快照盘时,将快照盘池中的所有盘全部清0,这样在创建快照的时候便知道快照盘已经被清0了,不需要再次清0了。
83.2)后台清0,在创建快照的时候只做少量块元数据的清0,清零的块元数据的量可以取一个经验值。然后启动一个后台的进程来进行清0。在本实施例中,需要注意在正常写快照盘的时候不要超过后台清0的位置。
84.3)通过专门的硬件来做块元数据的清0。此时块设备(磁盘)可以由专门的硬件实现,每个块元数据的只有8b,可以在磁盘内部预留接口,来实现对所有块元数据的快速清0。
85.此外,在上述实施例中,写操作过程中,同时仅进行了一个写操。因为在异常掉电后,再次打开快照盘要根据块元数据为0的位置来恢复块对应关系数据和空闲块号数据,而多个写快照盘的操作同时发生的话,这个块元数据为0的位置可能不是快照盘最后一个被写的块的位置。对此,本发明一实施例进一步做了如下优化,支持同时多个写操作:
86.在同时支持多个写操作时,进行动态流量控制,来保证异常发生时磁盘中信息的准确性。更具体地,利用记录表来记录每个写操作对应的快照盘的块号,在相应写操作完成后从所述记录表中删除对应的块号;对于新到来的写操作,如果其对应的块号与未完成的写操作对应的最小块号之差大于预定值(并行的写操作数),则使新到来的写操作进行等待,直至与未完成的写操作对应的最小块号之差不大于预定值。作为示例,如果同时允许128个写操作,记录每个写操作的时候,记录写操作对应的写快照盘的块号到一个记录表里面,当写操作完成后从记录表里删除它对应的块号。这样知道一个时刻所有发出的还未完成的写操作对应的块号,找出它们中的最小值,每当新写操作到来时,如果新写操作对应的块号比未完成的写操作对应的块最小值大128,那么此时不能继续写,需要等待之前的写操作完成。当异常掉电扫描块元数据的时候,需要扫描到连续128个为0的块元数据才停止。
87.下面,结合图5所示的快照盘生命周期的流程步骤来描述块设备快照方法的示例。
88.1.首先,基于快照创建命令新创建一个快照,创建命令包含原始盘的uuid、快照盘的uuid和块大小,创建过程会将上面三个信息记录到原始盘和快照盘尾部的配置块,并将快照盘所有块元数据都初始化为0,同时内存中创建快照盘与原始盘的块对应关系hash表,此时hash表是空的,同时内存中记录空闲块号为0,也就是快照盘第0个chunk是空闲的。
89.2.打开块设备,如打开一个已有快照的原始盘和快照盘,读取原始盘和快照盘配置块中的内容至内存中,配置块位于快照盘的尾部,里面包括3部分内容:1)原始盘和快照盘的uuid,快照盘的块大小,该部分内容是自从创建后就固定不变的,这部分内容可以用来互相验证原始盘和快照盘的uuid,看快照盘和原始盘是否对应。2)打开状态标志字段。打开块设备后首先检查快照盘的配置块中的打开状态标志字段,如果是没有置位,说明正常关
闭,配置块中映射表和空闲块号有效。如果打开状态置位,说明上次是没有正常关闭。3)块对应关系映射表和空闲块号。如果上次正常关闭,那么从快照盘的配置块读取映射表,空闲块号到内存。读入配置块后,将打开状态标志置位,写入配置块。这个标志和关闭是协同工作。关闭的时候会清除这个打开状态标志,如果没有正常关闭,这个标志保持置位。没有正常关闭后的打开情况,参见后文异常处理。
90.3.写一个原始盘的时候,查询内存中的块对应关系映射表,也就是上文的hash表,如果没有对应关系,说明是第一次写,需要cow,这时在快照盘里面分配一个空闲块,也就是空闲块号,分配后空闲块号加一,指向下一个空闲块号。读原始盘,写快照盘,同时将原始盘的块号,写入到这个新分配空闲块的块元数据区的8字节中,这里数据和记录关系是在一个io中完成的,省去了一次io操作。同时将对应关系也记录到hash表中。如果是第二次写,则不需要cow,直接写原始盘。如果是读操作,直接读原始盘。
91.4.正常关闭原始盘设备。1)将内存中的快照盘和原始盘的映射表写入快照盘的配置块,同时空闲块号也写入快照盘末尾的配置块中;2)清除打开状态标志字段,表明这是一次正常关闭。
92.5.如果上次没有正常关闭,也就是打开块设备的时候发现打开状态标志字段是置位的,那么配置块的映射表和空闲块号是无效的,也就是说上次掉电时候,没有来得及将内存中最新的数据记录到盘上,所以是无效的。这时需要扫描快照盘,从第一个块元数据开始扫描,依次读取块元数据,对于第m个块元数据,如果非0,说明是有效数据,里面存放的是它对应的原始盘的chunk号n,也就是找到了这个块的对应关系。依次全部扫描,直到扫描到块元数据为0的位置。这样就获得了块对应关系映射表,这时的块号就是空闲块号。这样就重建除了需要的数据。
93.由于只有在系统掉电等异常情况才会引起全盘扫描,且由于快照盘一般只记录增量写的数据,所以它的空间一般使用很小,这样在打开的时候扫描的一次消耗也很小,换来的是后续io操作延迟的大大缩短。
94.6.恢复快照,扫描整个快照盘,找到每个快照块对应的原始盘的块号,并将快照块的内容写入到原始盘中。
95.7.删除快照,将原始盘和快照盘配置块全部写0,去掉和快照盘的对应关系。
96.本发明的上述流程降低了快照盘引入的额外的io消耗,从而显著提高了系统性能。
97.与上述方法相应地,本发明还提供了一种块设备快照系统,所述系统包括:
98.快照创建模块,用于基于快照创建命令在块设备上为原始盘创建快照,在原始盘和快照盘的配置块中记录原始盘识别码和快照盘识别码,创建原始盘和快照盘间的块对应关系映射表和快照盘的可用空闲块号并记录在快照盘的配置块中,其中,初始创建的快照盘中各快照块的元数据区被初始化;
99.块设备打开模块,用于打开已创建有快照的块设备,从快照盘的配置块读取所述块对应关系映射表和可用空闲块号至内存;
100.写操作模块,用于在要对原始盘的块进行写操作的情况下,基于内存中的块对应关系映射表确定是否触发写时复制操作,在确定触发写时复制操作时将写操作针对的原始盘的块中的原始内容复制到读取的空闲块号所对应的快照盘中的空闲块,将所述原始盘的
块的块号写入所述空闲块的元数据区,并更新内存中的块对应关系映射表和可用空闲块号;
101.块设备关闭模块,用于在关闭快照盘时,将内存中的块对应关系映射表和可用空闲块号写入快照盘的配置块。
102.在本发明另一实施例中,提供的块设备快照系统,可包括处理器和存储器,所述存储器中存储有计算机指令,所述处理器用于执行所述存储器中存储的计算机指令,当所述计算机指令被处理器执行时该系统实现如前所述方法的步骤。
103.本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时以实现上述数据库中数据获取方法的步骤。该计算机可读存储介质可以是有形存储介质,诸如光盘、u盘、软盘、硬盘等。
104.需要明确的是,本发明并不局限于上文所描述并在图中示出的特定配置和处理。为了简明起见,这里省略了对已知方法的详细描述。在上述实施例中,描述和示出了若干具体的步骤作为示例。但是,本发明的方法过程并不限于所描述和示出的具体步骤,本领域的技术人员可以在领会本发明的精神后,作出各种改变、修改和添加,或者改变步骤之间的顺序。
105.还需要说明的是,本发明中提及的示例性实施例,基于一系列的步骤或者装置描述一些方法或系统。但是,本发明不局限于上述步骤的顺序,也就是说,可以按照实施例中提及的顺序执行步骤,也可以不同于实施例中的顺序,或者若干步骤同时执行。
106.本发明中,针对一个实施方式描述和/或例示的特征,可以在一个或更多个其它实施方式中以相同方式或以类似方式使用,和/或与其他实施方式的特征相结合或代替其他实施方式的特征。
107.以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1