CN101814044B - 元数据处理方法及装置 - Google Patents
元数据处理方法及装置 Download PDFInfo
- Publication number
- CN101814044B CN101814044B CN 201010149720 CN201010149720A CN101814044B CN 101814044 B CN101814044 B CN 101814044B CN 201010149720 CN201010149720 CN 201010149720 CN 201010149720 A CN201010149720 A CN 201010149720A CN 101814044 B CN101814044 B CN 101814044B
- Authority
- CN
- China
- Prior art keywords
- metadata
- snapshot
- bit map
- map area
- address
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种元数据处理方法及装置,该方法包括:根据写时拷贝操作将原磁盘空间中第一次发生写操作的数据块拷贝到快照备份数据区中,建立元数据、以及位图对应关系,根据位图对应关系计算元数据所属的元数据位图区的首地址以及元数据在元数据位图区的元数据位置索引;判断首地址与预先设置的分配标志位或删除标志位是否相同,获取比较结果,并设置位图映射位;根据比较结果、元数据所属的元数据位图区的首地址、以及元数据位置索引,将元数据存储在分配控制缓存区或删除控制缓存区的相应位置索引上,或将分配控制缓存区中所有元数据写入元数据位图区的相应位置上或将删除控制缓存区中所有元数据从元数据位图区的相应位置上删除。
Description
技术领域
本发明涉及快照领域,特别是涉及一种元数据处理方法及装置。
背景技术
目前,随着网络存储和数据存储的迅速发展,数据管理以及数据安全变得尤为重要。用户数据量的激增不仅带来了对在线存储设备的大量需求,也对在线数据保护提出了更高的要求。快照(Snapshot)就是防范在线存储设备数据丢失的有效技术之一。
在现有技术中,快照是对于指定数据集合的完全可用拷贝,该拷贝包括相应数据在某个时间点,即拷贝开始时间点的映像。快照可以是其所表示数据的副本,也可以是其所表示数据的复制品。当存储设备发生应用故障或者文件损坏时,可以利用快照功能及时进行数据恢复,将数据恢复为快照产生时间点的状态。
目前实现快照的方法按照技术不同划分为三种:全复制快照(Split Mirror)、写时拷贝(Copy-On-Write)、以及写重定向(Redirect-On-Write)。
写时拷贝也可以成为第一次写拷贝(COPY ON FIRST WRITE),主机对被映射的逻辑单元号(Logical Unit Number,LUN)建立快照之后,当磁盘空间的数据块发生第一次写操作时,将该磁盘已有的数据块读取出来,并存入分配好的快照空间,同时建立该数据块在磁盘空间和快照空间的映射关系,最后再将要写入的新数据块存入该磁盘空间。为了保证存储设备在掉电重启后仍然可以恢复到在线时的快照状态,除了基本的配置参数需要保存到快照空间中,另外一个重要的数据:由磁盘空间和快照空间组成的映射关系的元数据,也就是说,数据块在原来磁盘空间的地址和备份到快照空间的保存地址,需要保存到快照空间。
目前,在快照空间同时保存数据块和元数据,并为每个快照都预先分配一个独立的快照空间,图1是现有技术中独立快照空间的结构示意图,如图1所示,由保存元数据区10和保存快照备份的数据块区11组成。在快照空间分配上,元数据和备份数据块均采取从各自空间区域的起始地址开始按顺序递增的策略进行存储,当删除一个快照时,将整个快照空间回收,不同快照的快照空间互不相关。由于一个元数据所占空间非常小,一般为16个字节。如果每次写时拷贝操作都将元数据保存到硬盘上的元数据区,会极大降低快照操作的效率。因此采用预先分配缓存策略,分配一个固定大小的缓存(buffer),每次将元数据保存在buffer中,由于元数据是按照递增顺序的分配策略进行保存,因此每次需要按照一个一个的递增排列将元数据保存在buffer的相应顺序位置上,当buffer空间保存满时一次性的写入元数据区。
图2是现有技术中元数据处理的流程图,如图2所示,元数据的处理具体包括如下步骤:
步骤201,主机向磁盘空间disk发起写请求,其请求起始地址为addr,长度为size。
步骤202,快照处理程序根据定义的块长度(length)进行平均拆分主机的写请求长度,即,等分为split=(size/length)个块写请求,Datai={data1,data2,...,datan},n=split,按顺序依次对datai进行快照处理。
步骤203,根据写时拷贝原理,对第一次发生写操作的数据块进行写时拷贝操作,首先读取原磁盘空间的数据块,然后拷贝到快照空间备份数据区中。
步骤204,将该数据块在磁盘空间地址和快照空间地址保存在一个结构体构成一个元数据,将元数据按顺序先保存在buffer中下一个递增空闲位置上。
步骤205,对存入buffer的元数据进行判断,监控该缓存是否存满,如果存满则继续步骤206,如果没有存满则继续步骤207。
步骤206,将缓存中的元数据一次性写入快照空间的元数据区,然后清零缓存,然后继续步骤207。
步骤207,将datai写入磁盘空间,然后回到步骤203,继续下一个datai的处理,直到所有分解的数据块都处理完毕。
由于快照系统需要支持很多个快照,为了提高快照空间利用率,可以采用统一空间按需分配的动态分配策略,多个快照卷共享同一快照空间,支持空间的回收利用,在此种策略下,不同快照的元数据和数据块是按需分配的。从图2的处理流程可以看出,元数据的写操作是通过在按顺序递增的寻找空闲位置的方法而实现的。而动态分配策略则类似文件系统中每个文件保存的数据块,并非按顺序排列的,这样在多个快照反复建立和删除的实际应用中,就使数据块和元数据散落分布在统一的快照空间中。因此,现有技术中的元数据写操作无法满足统一空间按需分配的动态分配的策略。此外,由于元数据所占空间很小,必须累计到一定数量才能一次性的写入快照元数据区中,否则会造成写硬盘次数增多,从而降低快照功能的整体性能。
发明内容
本发明提供一种元数据处理方法及装置,用以解决现有技术中元数据写操作无法满足统一空间按需分配的动态分配的策略、以及写硬盘次数频繁的问题。
根据本发明的实施例,提供了一种元数据处理方法,包括如下处理:
步骤1,根据写时拷贝操作将原磁盘空间中第一次发生写操作的数据块拷贝到预先申请的快照空间的快照备份数据区中,建立元数据、以及快照备份数据区与保存元数据的元数据位图区的位图对应关系,并根据位图对应关系计算元数据所属的元数据位图区的首地址以及元数据在元数据位图区的元数据位置索引,其中,元数据包括原磁盘空间与快照空间的映射地址、以及表示相应的元数据所对应的快照备份数据区的数据块是否已经分配的位图映射位;
步骤2,判断首地址与预先设置的分配标志位或删除标志位是否相同,获取比较结果,并设置位图映射位,其中,分配标志位或删除标志位为当前元数据位图区的首地址;
步骤3,根据比较结果、元数据所属的元数据位图区的首地址、以及元数据位置索引,将元数据存储在建立的分配控制缓存区或删除控制缓存区的相应位置索引上,或者根据比较结果将分配控制缓存区中存储的所有元数据写入元数据位图区的相应位置上或将删除控制缓存区中存储的所有元数据从元数据位图区的相应位置上删除。
优选地,根据写时拷贝操作将原磁盘空间中第一次发生写操作的数据块拷贝到预先申请的快照空间的快照备份数据区中包括:申请快照空间,并记录该快照空间的地址;读取原磁盘空间中当前已保存的第一次发生写操作的数据块,并记录原磁盘空间的地址;将读取的第一次发生写操作的数据块拷贝到申请的快照空间的快照备份数据区中。
优选地,在判断首地址与预先设置的分配标志位或删除标志位是否相同之前,上述方法还包括:判断快照操作的类型,其中,快照操作的类型包括:分配元数据操作、以及删除元数据操作。
优选地,上述方法还包括:在分配元数据操作完成后,将删除标志位复位为初始值,其中,删除标志位的初始值为零;在删除元数据操作完成后,将分配标志位复位为初始值,其中,分配标志位的初始值为零。
优选地,在快照操作的类型为分配元数据操作的情况下,步骤3具体包括:如果比较结果为相同,则根据元数据所属的元数据位图区的首地址、以及元数据位置索引,将元数据存储在分配控制缓存区的相应位置索引上;如果比较结果为不同,则将分配控制缓存区中存储的所有元数据写入元数据位图区的相应位置上。
优选地,在比较结果为不同的情况下,上述方法还包括:判断分配标志位是否为零;如果为零,则读取元数据位图区的数据,进行元数据的同步操作;如果不为零,将分配控制缓存区中存储的所有元数据写入元数据位图区的相应位置上,随后再读取元数据位图区的数据,进行元数据的同步操作。
优选地,在快照操作的类型为删除元数据操作的情况下,步骤3具体包括:如果比较结果为相同,则根据元数据所属的元数据位图区的首地址、以及元数据位置索引,将元数据存储在删除控制缓存区的相应位置索引上;如果比较结果为不同,则将删除控制缓存区中存储的所有元数据从元数据位图区的相应位置上删除。
优选地,在比较结果为不同的情况下,上述方法还包括:判断删除标志位是否为零;如果为零,则读取元数据位图区的数据,进行元数据的同步操作;如果不为零,则首先将删除控制缓存区中存储的所有元数据从元数据位图区的相应位置上删除,随后再读取元数据位图区的数据,进行元数据的同步操作。
根据本发明的实施例,还提供了一种元数据处理装置,包括:
快照处理模块,用于根据写时拷贝操作将原磁盘空间中第一次发生写操作的数据块拷贝到预先申请的快照空间的快照备份数据区中,建立元数据、以及快照备份数据区与保存元数据的元数据位图区的位图对应关系,其中,元数据包括原磁盘空间与快照空间的映射地址、以及表示相应的元数据所对应的快照备份数据区的数据块是否已经分配的位图映射位;
快照空间管理模块,用于根据快照处理模块的请求分配和回收快照空间,并根据位图对应关系计算元数据所属的元数据位图区的首地址以及元数据在元数据位图区的元数据位置索引;
元数据管理模块,用于判断首地址与预先设置的分配标志位或删除标志位是否相同,获取比较结果,并设置位图映射位,根据比较结果、元数据所属的元数据位图区的首地址、以及元数据位置索引,将元数据存储在建立的分配控制缓存区或删除控制缓存区的相应位置索引上,或者根据比较结果将分配控制缓存区中存储的所有元数据写入元数据位图区的相应位置上或将删除控制缓存区中存储的所有元数据从元数据位图区的相应位置上删除,其中,分配标志位或删除标志位为当前元数据位图区的首地址。
优选地,快照处理模块具体用于:申请快照空间,并记录该快照空间的地址;读取原磁盘空间中当前已保存的第一次发生写操作的数据块,并记录原磁盘空间的地址;将读取的第一次发生写操作的数据块拷贝到申请的快照空间的快照备份数据区中。
优选地,元数据管理模块进一步用于:在判断首地址与预先设置的分配标志位或删除标志位是否相同之前,判断快照操作的类型,其中,快照操作的类型包括:分配元数据操作、以及删除元数据操作。
优选地,元数据管理模块具体包括:分配子模块,用于在快照操作的类型为分配元数据操作的情况下,如果比较结果为相同,则根据元数据所属的元数据位图区的首地址、以及元数据位置索引,将元数据存储在分配控制缓存区的相应位置索引上,如果比较结果为不同,则将分配控制缓存区中存储的所有元数据写入元数据位图区的相应位置上,在分配元数据操作完成后,将删除标志位复位为初始值,其中,删除标志位的初始值为零;删除子模块,用于在快照操作的类型为删除元数据操作的情况下,如果比较结果为相同,则根据元数据所属的元数据位图区的首地址、以及元数据位置索引,将元数据存储在删除控制缓存区的相应位置索引上,如果比较结果为不同,则将删除控制缓存区中存储的所有元数据从元数据位图区的相应位置上删除,在删除元数据操作完成后,将分配标志位复位为初始值,其中,分配标志位的初始值为零。
优选地,分配子模块进一步用于:在比较结果为不同的情况下,判断分配标志位是否为零;如果为零,则读取元数据位图区的数据,进行元数据的同步操作;如果不为零,将分配控制缓存区中存储的所有元数据写入元数据位图区的相应位置上,随后再读取元数据位图区的数据,进行元数据的同步操作;删除子模块进一步用于:在比较结果为不同的情况下,判断删除标志位是否为零;如果为零,则读取元数据位图区的数据,进行元数据的同步操作;如果不为零,则首先将删除控制缓存区中存储的所有元数据从元数据位图区的相应位置上删除,随后再读取元数据位图区的数据,进行元数据的同步操作。
本发明有益效果如下:
本发明实施例通过多个快照共享统一快照空间,并预先设置的分配标志位和删除标志位启动元数据的写入和删除,解决了现有技术中元数据写操作无法满足统一空间按需分配的动态分配的策略、以及写硬盘次数频繁的问题,能够节省快照空间、同时通过空间区域识别和快照操作状态的综合控制,能够减少读写元数据的次数,提高快照系统的整体性能、以及快照的处理效率。
附图说明
图1是现有技术中独立快照空间的结构示意图;
图2是现有技术中元数据处理的流程图;
图3是根据本发明实施例的元数据处理装置的结构示意图;
图4是本发明实施例的快照空间内总体布局的示意图;
图5是本发明实施例的元数据处理装置的详细结构示意图;
图6为本发明实施例的元数据处理方法的流程图;
图7是本发明实施例的元数据处理方法的详细处理的流程图;
图8是本发明实施例的元数据分配处理的流程图;
图9是本发明实施例的元数据删除处理的流程图。
具体实施方式
以下结合附图以及实施例,对本发明的技术方案进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不限定本发明。
装置实施例
根据本发明的实施例,提供了一种元数据处理装置,图3是根据本发明实施例的元数据处理装置的结构示意图,如图3所示,根据本发明实施例的元数据处理装置包括:快照处理模块30、快照空间管理模块31、元数据管理模块32。在对本发明实施例的元数据处理装置进行详细说明之前,首先对根据本发明实施例的快照空间内总体布局进行说明。
图4是本发明实施例的快照空间内总体布局的示意图,如图4所示,快照空间由超级块和若干个备份块区组构成。其中,备份块区组的数量g由快照空间的大小决定,并记录在超级块中。备份块区组由元数据位图区和快照备份数据区组成。其中,元数据位图区用来保存元数据,快照备份数据区用来保存写时拷贝操作需要备份的快照数据块。元数据位图区保存n个元数据,每个元数据按位图关系对应快照备份数据区的一个数据块,即,快照备份数据区被分为n个数据块。每个数据块的长度等于快照处理中等分的数据块长度(length),元数据位图区长度等于一个数据块的长度(length)。一个备份块区组的长度即为(n+1)乘以length,备份块区组的数量g也由快照空间大小计算获得。如果一个元数据的大小为size,可以计算得到n=length/size,在元数据位图区中,每个元数据记做m,如上所述,一个元数据位图区包含n个m。
其中,每个m由映射地址和位图映射位组成,映射地址即为前述保存的磁盘空间和快照空间的映射关系地址,位图映射位是上述记录和快照备份数据区的位图对应关系,当该位图映射位为1时,表示其对应的快照备份数据区中的数据块已经被分配用于备份快照写时拷贝时发生的磁盘空间数据块,当该位图映射位为0时,表示其对应的快照备份数据区中的数据块被回收可用于再分配,这个一般发生在删除快照的操作中。
下面,对本发明实施例的元数据处理装置进行详细的说明。
快照处理模块30用于根据写时拷贝操作将原磁盘空间中第一次发生写操作的数据块拷贝到预先申请的快照空间的快照备份数据区中,建立元数据、以及快照备份数据区与保存元数据的元数据位图区的位图对应关系,其中,元数据包括原磁盘空间与快照空间的映射地址、以及表示相应的元数据所对应的快照备份数据区的数据块是否已经分配的位图映射位;
具体地,快照处理模块30首先需要申请快照空间,并记录该快照空间的地址;随后,读取原磁盘空间中当前已保存的第一次发生写操作的数据块,并记录原磁盘空间的地址;最后,将读取的第一次发生写操作的数据块拷贝到申请的快照空间的快照备份数据区中。
快照空间管理模块31用于根据快照处理模块30的请求,分配回收快照空间,并根据位图对应关系计算元数据所属的元数据位图区的首地址以及元数据在元数据位图区的元数据位置索引;
元数据管理模块32用于判断首地址与预先设置的分配标志位或删除标志位是否相同,获取比较结果,并设置位图映射位,根据比较结果、元数据所属的元数据位图区的首地址、以及元数据位置索引,将元数据存储在建立的分配控制缓存区或删除控制缓存区的相应位置索引上,或者根据比较结果将分配控制缓存区中存储的所有元数据写入元数据位图区的相应位置上或将删除控制缓存区中存储的所有元数据从元数据位图区的相应位置上删除,其中,分配标志位或删除标志位为当前元数据位图区的首地址。
元数据管理模块32在判断首地址与预先设置的分配标志位或删除标志位是否相同之前,还需要判断快照操作的类型,其中,快照操作的类型包括:分配元数据操作、以及删除元数据操作。
优选地,元数据管理模块32可以包括分配子模块和删除子模块,其中:
分配子模块用于在快照操作的类型为分配元数据操作的情况下,如果比较结果为相同,则根据元数据所属的元数据位图区的首地址、以及元数据位置索引,将元数据存储在分配控制缓存区的相应位置索引上,如果比较结果为不同,则将分配控制缓存区中存储的所有元数据写入元数据位图区的相应位置上,在分配元数据操作完成后,将删除标志位复位为初始值,其中,删除标志位的初始值为零;在比较结果为不同的情况下,分配子模块还需要判断分配标志位是否为零;如果为零,则读取元数据位图区的数据,进行元数据的同步操作;如果不为零,将分配控制缓存区中存储的所有元数据写入元数据位图区的相应位置上,随后再读取元数据位图区的数据,进行元数据的同步操作;
删除子模块用于在快照操作的类型为删除元数据操作的情况下,如果比较结果为相同,则根据元数据所属的元数据位图区的首地址、以及元数据位置索引,将元数据存储在删除控制缓存区的相应位置索引上,如果比较结果为不同,则将删除控制缓存区中存储的所有元数据从元数据位图区的相应位置上删除,在删除元数据操作完成后,将分配标志位复位为初始值,其中,分配标志位的初始值为零。在比较结果为不同的情况下,删除子模块还需要判断删除标志位是否为零;如果为零,则读取元数据位图区的数据,进行元数据的同步操作;如果不为零,则首先将删除控制缓存区中存储的所有元数据从元数据位图区的相应位置上删除,随后再读取元数据位图区的数据,进行元数据的同步操作。
从上述处理可以看出,为了减少读写元数据的次数,提高快照操作效率,尽量以一个元数据位图区为单位进行统一读写,本发明实施例提供了一种跨区组标志来启动元数据读写的策略,上述区组即为备份块区组,当要写的元数据映射空间跨出当前的元数据位图区后启动一次元数据的写入操作。同时将根据不同的快照操作建立两个元数据读写控制缓冲区:一个是分配控制缓冲区,一个删除控制缓冲区。快照的备份操作和删除操作是两个独立的操作,都在统一快照空间进行写元数据,为了确保元数据一致性,两个缓存区采用各自的分配标志(alloc flag)和删除标志(delete flag)作为启动同步读元数据的判断标志。
下面,分步骤对本发明实施例的上述技术方案的处理流程进行详细的说明。
第一步,快照处理模块30依次处理等分的磁盘空间写命令数据块,数据块长度为length,根据写时拷贝原理,对第一次发生写操作的数据块进行写时拷贝操作,首先向快照空间管理模块31申请一个大小为length的空闲空间,记录该空间的地址,读取原磁盘空间的数据块,并记录该空间的地址。
快照空间管理模块31首先根据图4所设计的统一快照空间布局,建立快照备份数据区的空闲数据块池,并按照数据块大小(length)动态分配和回收空间,并将分配的空闲空间地址返回给快照处理模块30。同时快照空间管理模块31还需要管理元数据位图区与快照备份数据区的位图对应关系,依据该对应关系来备份相应的元数据。如图4所示,每个元数据位图区的首地址即为该备份块区组的首地址,因此,根据上述对应关系可以计算出每个备份的元数据所属的元数据位图区,即,元数据位图区首地址(area address),首地址的不同则被视为跨出当前元数据位图区的标志,从而启动一次元数据写操作。另外依据上述对应关系也可以计算出每个元数据被备份在当前元数据位图区的具体位置索引,即,元数据位置索引(locate index),从而依据该索引计算元数据将要保存的地址(meta address),其中,meta address=(area address)+(locateindex)×size,size为每个元数据的大小。
随后,快照处理模块30将读取得磁盘空间数据块拷贝到申请到的快照备份数据区内,同时将原磁盘空间的地址和快照备份数据区的地址建立映射关系,并保存在数据结构中,提交给元数据管理模块32进一步处理。
第二步,元数据管理模块32依据快照空间管理模块31提供的方法进行启动元数据写操作的控制,同时确保元数据的一致性。根据快照操作,元数据管理模块32具体包括:分配子模块和删除子模块。
其中,分配子模块首先根据快照处理模块30提交的映射地址,确认快照空间地址的有效性,然后通过上述的位图对应关系,确认需要保存元数据的位置索引(locate index),并设置位图映射位为1,最后构成一个完整的元数据,然后将其保存在分配子模块预先建立的分配控制缓冲区相应的位置索引处,由于缓冲区的长度等于元数据位图区的长度,即最终保存位置会对应在前述的meta address处。
分配子模块还需要建立静态的分配标志alloc flag(上述分配标志位)作为启动同步读写操作的判断标志,并将alloc flag初始化为零,alloc flag是第一次发生元数据的写操作或删除操作后需要同步读写元数据位图区的启动标志。alloc flag在处理元数据时被赋值为元数据位图区的首地址(area address),即元数据位图区的第一个元数据m的首地址。
元数据位图区包含了n个元数据,当某个元数据超出当前元数据位图区时,则启动写入上述对应缓冲区的操作。具体地,每次元数据写操作时需要计算要写入的元数据位图区首地址(area address),并和alloc flag,即上次写入元数据的元数据位图区首地址(area address)作比较,若相同,则将新的元数据写入缓冲区的位置索引处;若不同,则需启动写缓冲策略,将该缓冲区的元数据一起写入快照空间内,即写入上次写元数据计算得到的area address处。
若比较结果为不同,则再进一步判断alloc flag是否为零。若等于零,则需要先启动读元数据位图区的内容,同步新的元数据,保证数据一致性,再根据上述分配标志方法中元数据位图区是否相同的判断标准决定是否启动写元数据;如果alloc flag不等于零,则需要先启动写当前元数据位图区的内容,然后再同步读下一个新的元数据位图区,以保证数据的一致性。
为了保证删除子模块的数据一致性,在完成分配操作之后,分配子模块还需要将delete flag(上述删除标志位)复位为零。
当发生删除快照操作时,首先将该快照所占用的空间回收到空闲数据块池,然后将要处理的映射地址提交给删除子模块,随后,还需要确认需要保存元数据的位置索引(locate index),并设置位图映射位为0,构成一个完整的元数据,然后将其保存在删除子模块预先建立的删除控制缓冲区相应的位置索引处,即保存位置会对应在前述的meta address处。
删除子模块还需要建立静态的删除标志位delete flag作为启动同步读写操作的判断标志,并初始化为零,delete flag表示分配操作后需要同步读写元数据位图区的启动标志。该标志在处理元数据时被赋值为元数据位图区的首地址(area address)。
每次元数据写操作时需要计算要写入的元数据位图区首地址(areaaddress),并和delete flag,即上次写入元数据的元数据位图区首地址(areaaddress)作比较,若相同,则将新的元数据写入缓冲区的位置索引处;若不同,则需启动写缓冲策略,将该缓冲区的元数据一起写入快照空间内,即写入上次写元数据计算得到的area address处。
若比较结果为不同,则需要再进一步判断delete flag是否为零。若等于零,则需要先启动读元数据位图区的内容,同步新的元数据,保证数据一致性,再根据元数据位图区是否相同的判断标准决定是否启动写元数据策略;如果不等于零,则需要先启动写当前元数据位图区的内容,然后再同步读下一个新的元数据位图区,保证数据一致性。
为了保证分配子模块的数据一致性,在完成删除操作之后,删除子模块需要复位alloc flag标志为零。
第三步,快照处理模块30将磁盘空间写命令数据块写入磁盘,然后继续下一个数据块的处理,直到所有分解的数据块都处理完毕,并刷新控制缓冲区。
图5是本发明实施例的元数据处理装置的详细结构示意图,如图5所示,快照处理模块50根据写时拷贝原理,判断第一个次写标志,处理分解的数据块。快照空间管理模块51负责快照空间的分配和回收,以及快照备份数据区和元数据位图区以及单个元数据的对应关系转换,并提供给元数据管理模块52。元数据管理模块52接收磁盘空间和快照空间的映射地址,并依据快照空间管理模块51提供的元数据和快照数据的映射地址关系,实施本发明实施例中的元数据读写算法策略,以达到减少元数据读写的次数,可以较大提高快照操作的效率。此外,分配子模块520和删除子模块521则隶属于元数据管理模块52,可以进一步区分元数据的不同操作,以及保证处理时元数据的一致性。
方法实施例
根据本发明的实施例,提供了一种元数据处理方法,图6为本发明实施例的元数据处理方法的流程图,如图6所示,根据本发明实施例的元数据处理方法包括如下处理:
步骤601,根据写时拷贝操作将原磁盘空间中第一次发生写操作的数据块拷贝到预先申请的快照空间的快照备份数据区中,建立元数据、以及快照备份数据区与保存元数据的元数据位图区的位图对应关系,并根据位图对应关系计算元数据所属的元数据位图区的首地址以及元数据在元数据位图区的元数据位置索引,其中,元数据包括原磁盘空间与快照空间的映射地址、以及表示相应的元数据所对应的快照备份数据区的数据块是否已经分配的位图映射位;
在步骤601中,首先需要申请快照空间,并记录该快照空间的地址;随后,读取原磁盘空间中当前已保存的第一次发生写操作的数据块,并记录原磁盘空间的地址;并将读取的第一次发生写操作的数据块拷贝到申请的快照空间的快照备份数据区中。
步骤602,判断首地址与预先设置的分配标志位或删除标志位是否相同,获取比较结果,并设置位图映射位,其中,分配标志位或删除标志位为当前元数据位图区的首地址;
在判断首地址与预先设置的分配标志位或删除标志位是否相同之前,还需要判断快照操作的类型,其中,快照操作的类型包括:分配元数据操作、以及删除元数据操作。
步骤603,根据比较结果、元数据所属的元数据位图区的首地址、以及元数据位置索引,将元数据存储在建立的分配控制缓存区或删除控制缓存区的相应位置索引上,或者根据比较结果将分配控制缓存区中存储的所有元数据写入元数据位图区的相应位置上或将删除控制缓存区中存储的所有元数据从元数据位图区的相应位置上删除。
为了保持数据的一致性,在分配元数据操作完成后,将删除标志位复位为初始值,其中,删除标志位的初始值为零;并且在删除元数据操作完成后,将分配标志位复位为初始值,其中,分配标志位的初始值为零。
具体地,在快照操作的类型为分配元数据操作的情况下,如果比较结果为相同,则根据元数据所属的元数据位图区的首地址、以及元数据位置索引,将元数据存储在分配控制缓存区的相应位置索引上;如果比较结果为不同,则将分配控制缓存区中存储的所有元数据写入元数据位图区的相应位置上。
优选地,在比较结果为不同的情况下,还需要判断分配标志位是否为零;如果为零,则读取元数据位图区的数据,进行元数据的同步操作;如果不为零,将分配控制缓存区中存储的所有元数据写入元数据位图区的相应位置上,随后再读取元数据位图区的数据,进行元数据的同步操作。
在快照操作的类型为删除元数据操作的情况下,如果比较结果为相同,则根据元数据所属的元数据位图区的首地址、以及元数据位置索引,将元数据存储在删除控制缓存区的相应位置索引上;如果比较结果为不同,则将删除控制缓存区中存储的所有元数据从元数据位图区的相应位置上删除。
优选地,在比较结果为不同的情况下,判断删除标志位是否为零;如果为零,则读取元数据位图区的数据,进行元数据的同步操作;如果不为零,则首先将删除控制缓存区中存储的所有元数据从元数据位图区的相应位置上删除,随后再读取元数据位图区的数据,进行元数据的同步操作。
从上述处理可以看出,通过多个快照共享统一快照空间,并预先设置的分配标志位和删除标志位启动元数据的写入和删除,能够节省快照空间、同时通过空间区域识别和快照操作状态的综合控制,能够减少读写元数据的次数,提高快照系统的整体性能、以及快照的处理效率。
需要说明的是,本发明实施例的相关细节可以参照上述装置实施例进行理解,在此不再赘述,以下结合附图,对本发明实施例的元数据处理方法的详细处理流程进行说明。
图7是本发明实施例的元数据处理方法的详细处理的流程图,如图7所示,包括如下处理:
步骤701,主机向磁盘空间disk发起写请求,其请求起始地址为addr,长度为size。
步骤702,快照处理模块根据定义的块长度(length)进行平均拆分主机的写请求长度的操作,即等分为split=(size/length)个块写请求。Datai={data1,data2,...,datan},n=split,按顺序依次对datai进行快照处理。
步骤703,根据写时拷贝原理,对第一次发生写操作的数据块进行写时拷贝操作,向快照空间管理模块申请快照空间,然后读取原磁盘空间的数据块,拷贝到快照空间。
步骤704,建立磁盘空间和快照空间的映射地址关系,并提交给元数据管理模块进行处理。
步骤705,判断快照操作类型是分配元数据操作还是删除元数据操作,如果是分配操作,则进入步骤706;如果是删除操作,则进入步骤707。
步骤706,分配处理子流程,具体操作如图8所示。
步骤707,删除处理子流程,具体操作如图9所示。
步骤708,将datai写入磁盘,然后回到步骤703,继续进行下一个datai的处理,直到所有分解的数据块都处理完毕。
图8是本发明实施例的元数据分配处理的流程图,如图8所示,包括如下处理:
步骤801.初始化alloc flag标志为零。
步骤802,分配长度为length的分配控制buffer缓冲区。
步骤803,计算备份的元数据所属的元数据位图区,即元数据位图区首地址(area address),并保存到temp中。
步骤804,比较temp和alloc flag是否相同。
步骤805,若相同,设置位图映射位为1,构成一个完整的元数据,然后执行步骤811;若不同则执行步骤806。
步骤806,判断alloc flag标志是否为零。
步骤807,若为零,读取当前元数据位图区的内容到控制缓冲区内,然后执行步骤810中的处理;若不为零,则进入步骤808中进一步处理。
步骤808,启动刷新buffer到快照空间的相应元数据位图区中,然后执行步骤809.
步骤809,读取当前元数据位图区域的内容,然后执行步骤810中的处理。
步骤810,继续处理当前元数据,转到步骤805进行处理。
步骤811,计算元数据在当前元数据位图区的位置索引(locate index),并将元数据存入buffer的相应的位置索引中。
步骤812,判断所有Datai I/O是否处理完。
步骤813,若处理完毕,则刷新buffer到快照空间的相应元数据位图区中。
步骤814,将delete flag置为零,作为同步数据一致性的标志。
图9是本发明实施例的元数据删除处理的流程图,如图9所示,包括如下处理:
步骤901,初始化delete flag标志为零。
步骤902,分配长度为length的删除控制buffer缓冲区。
步骤903,计算删除的元数据所属的元数据位图区,即元数据位图区首地址(area address),并保存到temp中
步骤904,比较temp和delete flag是否相同。
步骤905,若相同,设置位图映射位为0,构成一个完整的元数据,然后执行步骤911中的处理;若不同则执行步骤906。
步骤906,判断delete flag标志是否为零。
步骤907,若为零,读取当前元数据位图区的内容到控制缓冲区内,然后执行步骤910;若不为零,则进入步骤908中进一步处理。
步骤908,启动刷新buffer到快照空间的相应元数据位图区中,然后执行步骤909。
步骤909,读取当前元数据位图区域的内容,然后执行步骤910中的处理。
步骤910,继续处理当前元数据,转到步骤905进行处理。
步骤911,计算元数据在当前元数据位图区的位置索引(locate index),并将元数据存入buffer的相应的位置索引中。
步骤912,判断所有DataiI/O是否处理完。
步骤913,若处理完毕,则刷新buffer到快照空间的相应元数据位图区中。
步骤914,将alloc flag置为零,作为同步数据一致性的标志。
本发明实施例通过多个快照共享统一快照空间,并预先设置的分配标志位和删除标志位启动元数据的写入和删除,解决了现有技术中元数据写操作无法满足统一空间按需分配的动态分配的策略、以及写硬盘次数频繁的问题,能够节省快照空间、同时通过空间区域识别和快照操作状态的综合控制,能够减少读写元数据的次数,提高快照系统的整体性能、以及快照的处理效率。
尽管为示例目的,已经公开了本发明的优选实施例,本领域的技术人员将意识到各种改进、增加和取代也是可能的,因此,本发明的范围应当不限于上述实施例。
Claims (13)
1.一种元数据处理方法,其特征在于,包括如下处理:
步骤1,根据写时拷贝操作将原磁盘空间中第一次发生写操作的数据块拷贝到预先申请的快照空间的快照备份数据区中,建立元数据、以及所述快照备份数据区与保存所述元数据的元数据位图区的位图对应关系,并根据所述位图对应关系计算所述元数据所属的元数据位图区的首地址以及所述元数据在所述元数据位图区的元数据位置索引,其中,所述元数据包括所述原磁盘空间与所述快照空间的映射地址、以及表示相应的元数据所对应的快照备份数据区的数据块是否已经分配的位图映射位;
步骤2,判断所述首地址与预先设置的分配标志位或删除标志位是否相同,获取比较结果,并设置所述位图映射位,其中,所述分配标志位或删除标志位为当前元数据位图区的首地址;
步骤3,根据所述比较结果、所述元数据所属的元数据位图区的首地址、以及所述元数据位置索引,将所述元数据存储在建立的分配控制缓存区或删除控制缓存区的相应位置索引上,或者根据所述比较结果将所述分配控制缓存区中存储的所有元数据写入所述元数据位图区的相应位置上或将所述删除控制缓存区中存储的所有元数据从所述元数据位图区的相应位置上删除。
2.根据权利要求1所述的方法,其特征在于,所述根据写时拷贝操作将原磁盘空间中第一次发生写操作的数据块拷贝到预先申请的快照空间的快照备份数据区中包括:
申请快照空间,并记录该快照空间的地址;
读取所述原磁盘空间中当前已保存的所述第一次发生写操作的数据块,并记录所述原磁盘空间的地址;
将读取的所述第一次发生写操作的数据块拷贝到申请的所述快照空间的所述快照备份数据区中。
3.如权利要求1所述的方法,其特征在于,在判断所述首地址与预先设置的分配标志位或删除标志位是否相同之前,所述方法还包括:
判断快照操作的类型,其中,所述快照操作的类型包括:分配元数据操作、以及删除元数据操作。
4.如权利要求3所述的方法,其特征在于,所述方法还包括:
在分配元数据操作完成后,将所述删除标志位复位为初始值,其中,所述删除标志位的初始值为零;
在删除元数据操作完成后,将所述分配标志位复位为初始值,其中,所述分配标志位的初始值为零。
5.如权利要求4所述的方法,其特征在于,在所述快照操作的类型为分配元数据操作的情况下,所述步骤3具体包括:
如果所述比较结果为相同,则根据所述元数据所属的元数据位图区的首地址、以及所述元数据位置索引,将所述元数据存储在所述分配控制缓存区的相应位置索引上;
如果所述比较结果为不同,则将所述分配控制缓存区中存储的所有元数据写入所述元数据位图区的相应位置上。
6.如权利要求5所述的方法,其特征在于,在所述比较结果为不同的情况下,所述方法还包括:
判断所述分配标志位是否为零;
如果为零,则读取所述元数据位图区的数据,进行元数据的同步操作;
如果不为零,将所述分配控制缓存区中存储的所有元数据写入所述元数据位图区的相应位置上,随后再读取所述元数据位图区的数据,进行元数据的同步操作。
7.如权利要求4所述的方法,其特征在于,在所述快照操作的类型为删除元数据操作的情况下,所述步骤3具体包括:
如果所述比较结果为相同,则根据所述元数据所属的元数据位图区的首地址、以及所述元数据位置索引,将所述元数据存储在所述删除控制缓存区的相应位置索引上;
如果所述比较结果为不同,则将所述删除控制缓存区中存储的所有元数据从所述元数据位图区的相应位置上删除。
8.如权利要求7所述的方法,其特征在于,在所述比较结果为不同的情况下,所述方法还包括:
判断所述删除标志位是否为零;
如果为零,则读取所述元数据位图区的数据,进行元数据的同步操作;
如果不为零,则首先将所述删除控制缓存区中存储的所有元数据从所述元数据位图区的相应位置上删除,随后再读取所述元数据位图区的数据,进行元数据的同步操作。
9.一种元数据处理装置,其特征在于,包括:
快照处理模块,用于根据写时拷贝操作将原磁盘空间中第一次发生写操作的数据块拷贝到预先申请的快照空间的快照备份数据区中,建立元数据、以及所述快照备份数据区与保存所述元数据的元数据位图区的位图对应关系,其中,所述元数据包括所述原磁盘空间与所述快照空间的映射地址、以及表示相应的元数据所对应的快照备份数据区的数据块是否已经分配的位图映射位;
快照空间管理模块,用于根据所述快照处理模块的请求,分配回收所述快照空间,并根据所述位图对应关系计算所述元数据所属的元数据位图区的首地址以及所述元数据在所述元数据位图区的元数据位置索引;
元数据管理模块,用于判断所述首地址与预先设置的分配标志位或删除标志位是否相同,获取比较结果,并设置所述位图映射位,根据所述比较结果、所述元数据所属的元数据位图区的首地址、以及所述元数据位置索引,将所述元数据存储在建立的分配控制缓存区或删除控制缓存区的相应位置索引上,或者根据所述比较结果将所述分配控制缓存区中存储的所有元数据写入所述元数据位图区的相应位置上或将所述删除控制缓存区中存储的所有元数据从所述元数据位图区的相应位置上删除,其中,所述分配标志位或删除标志位为当前元数据位图区的首地址。
10.如权利要求9所述的装置,其特征在于,所述快照处理模块具体用于:
申请快照空间,并记录该快照空间的地址;
读取所述原磁盘空间中当前已保存的所述第一次发生写操作的数据块,并记录所述原磁盘空间的地址;
将读取的所述第一次发生写操作的数据块拷贝到申请的所述快照空间的所述快照备份数据区中。
11.如权利要求9所述的装置,其特征在于,所述元数据管理模块进一步用于:在判断所述首地址与预先设置的分配标志位或删除标志位是否相同之前,判断快照操作的类型,其中,所述快照操作的类型包括:分配元数据操作、以及删除元数据操作。
12.如权利要求11所述的装置,其特征在于,所述元数据管理模块具体包括:
分配子模块,用于在所述快照操作的类型为分配元数据操作的情况下,如果所述比较结果为相同,则根据所述元数据所属的元数据位图区的首地址、以及所述元数据位置索引,将所述元数据存储在所述分配控制缓存区的相应位置索引上,如果所述比较结果为不同,则将所述分配控制缓存区中存储的所有元数据写入所述元数据位图区的相应位置上,在分配元数据操作完成后,将所述删除标志位复位为初始值,其中,所述删除标志位的初始值为零;
删除子模块,用于在所述快照操作的类型为删除元数据操作的情况下,如果所述比较结果为相同,则根据所述元数据所属的元数据位图区的首地址、以及所述元数据位置索引,将所述元数据存储在所述删除控制缓存区的相应位置索引上,如果所述比较结果为不同,则将所述删除控制缓存区中存储的所有元数据从所述元数据位图区的相应位置上删除,在删除元数据操作完成后,将所述分配标志位复位为初始值,其中,所述分配标志位的初始值为零。
13.如权利要求12所述的装置,其特征在于,
所述分配子模块进一步用于:在所述比较结果为不同的情况下,判断所述分配标志位是否为零;如果为零,则读取所述元数据位图区的数据,进行元数据的同步操作;如果不为零,将所述分配控制缓存区中存储的所有元数据写入所述元数据位图区的相应位置上,随后再读取所述元数据位图区的数据,进行元数据的同步操作;
所述删除子模块进一步用于:在所述比较结果为不同的情况下,判断所述删除标志位是否为零;如果为零,则读取所述元数据位图区的数据,进行元数据的同步操作;如果不为零,则首先将所述删除控制缓存区中存储的所有元数据从所述元数据位图区的相应位置上删除,随后再读取所述元数据位图区的数据,进行元数据的同步操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010149720 CN101814044B (zh) | 2010-04-19 | 2010-04-19 | 元数据处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010149720 CN101814044B (zh) | 2010-04-19 | 2010-04-19 | 元数据处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101814044A CN101814044A (zh) | 2010-08-25 |
CN101814044B true CN101814044B (zh) | 2013-03-20 |
Family
ID=42621305
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201010149720 Active CN101814044B (zh) | 2010-04-19 | 2010-04-19 | 元数据处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101814044B (zh) |
Families Citing this family (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102456354B (zh) * | 2010-10-22 | 2015-05-20 | 山东新北洋信息技术股份有限公司 | 磁信息记录方法及装置、磁票 |
CN102609335B (zh) * | 2012-01-12 | 2014-07-02 | 浪潮(北京)电子信息产业有限公司 | 一种实现写时复制保护元数据的装置及方法 |
WO2014019145A1 (zh) * | 2012-07-31 | 2014-02-06 | 华为技术有限公司 | 一种元数据的处理方法和装置 |
CN102968384A (zh) * | 2012-11-21 | 2013-03-13 | 浪潮电子信息产业股份有限公司 | 一种无阻塞的存储加速方法 |
CN103049390B (zh) * | 2012-12-14 | 2016-03-09 | 华为技术有限公司 | 应用元数据的数据处理方法及存储系统 |
CN104731672B (zh) * | 2013-12-24 | 2018-06-26 | 华为技术有限公司 | 数据存储的方法及设备 |
CN104461780B (zh) * | 2014-11-28 | 2017-12-15 | 华为技术有限公司 | 一种释放数据块的方法及装置 |
CN104506619B (zh) * | 2014-12-22 | 2018-06-05 | 华为技术有限公司 | 一种数据备份、恢复方法及其装置、服务器 |
WO2016101266A1 (zh) * | 2014-12-26 | 2016-06-30 | 华为技术有限公司 | 一种基于写重定向的存储服务器确定增量数据的方法及装置 |
CN104516795A (zh) * | 2015-01-15 | 2015-04-15 | 浪潮(北京)电子信息产业有限公司 | 一种数据存取方法及系统 |
CN106294193B (zh) * | 2015-06-03 | 2019-10-15 | 杭州海康威视系统技术有限公司 | 存储设备及基于该存储设备的分块存储方法 |
CN107451070B (zh) * | 2016-06-01 | 2020-08-04 | 腾讯科技(深圳)有限公司 | 一种数据的处理方法和服务器 |
CN108062200B (zh) * | 2016-11-08 | 2019-12-20 | 杭州海康威视数字技术股份有限公司 | 一种磁盘数据读写方法及装置 |
CN108073584B (zh) * | 2016-11-08 | 2021-11-30 | 北京国双科技有限公司 | 一种数据处理方法及服务器 |
CN108228647B (zh) * | 2016-12-21 | 2022-05-24 | 伊姆西Ip控股有限责任公司 | 用于数据拷贝的方法和设备 |
CN109213621B (zh) * | 2017-07-07 | 2021-08-31 | 华为技术有限公司 | 一种数据处理方法及数据处理设备 |
CN109508143B (zh) * | 2018-08-17 | 2022-04-22 | 郑州云海信息技术有限公司 | 一种数据存储方法及装置 |
CN109324929B (zh) * | 2018-09-17 | 2021-11-09 | 郑州云海信息技术有限公司 | 一种快照创建方法、装置、设备及可读存储介质 |
CN109597573B (zh) * | 2018-11-27 | 2022-03-25 | 杭州宏杉科技股份有限公司 | 管理元数据读取方法及装置 |
CN111240890B (zh) * | 2018-11-29 | 2023-05-26 | 阿里巴巴集团控股有限公司 | 数据处理方法、快照处理方法、装置及计算设备 |
CN110134645B (zh) * | 2019-04-15 | 2023-07-11 | 深圳市战音科技有限公司 | 文件系统存储管理方法、读取方法、管理装置和读取装置 |
CN113468104A (zh) * | 2020-03-31 | 2021-10-01 | 阿里巴巴集团控股有限公司 | 一种快照的数据结构、相关数据处理方法及装置和系统 |
CN112559384B (zh) * | 2020-12-17 | 2022-04-15 | 南昌航空大学 | 一种基于非易失存储器的混合固态盘动态分区方法 |
CN113377292B (zh) * | 2021-07-02 | 2024-02-02 | 北京青云科技股份有限公司 | 一种单机存储引擎 |
CN113568582B (zh) * | 2021-07-30 | 2023-05-26 | 重庆紫光华山智安科技有限公司 | 数据管理方法、装置和存储设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1567262A (zh) * | 2003-06-10 | 2005-01-19 | 联想(北京)有限公司 | 基于数据卷快照的在线数据备份方法 |
CN101206595A (zh) * | 2006-12-19 | 2008-06-25 | 英业达股份有限公司 | 以快照指针进行磁盘快照的方法 |
-
2010
- 2010-04-19 CN CN 201010149720 patent/CN101814044B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1567262A (zh) * | 2003-06-10 | 2005-01-19 | 联想(北京)有限公司 | 基于数据卷快照的在线数据备份方法 |
CN101206595A (zh) * | 2006-12-19 | 2008-06-25 | 英业达股份有限公司 | 以快照指针进行磁盘快照的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101814044A (zh) | 2010-08-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101814044B (zh) | 元数据处理方法及装置 | |
US11455212B2 (en) | Block-level single instancing | |
US10157109B2 (en) | Method for restoring files from a continuous recovery system | |
US11461015B2 (en) | Available storage space in a system with varying data redundancy schemes | |
US10031675B1 (en) | Method and system for tiering data | |
US7237076B2 (en) | Method of maintaining a plurality of snapshots, server apparatus and storage apparatus | |
CN106662981B (zh) | 存储设备、程序和信息处理方法 | |
US8965850B2 (en) | Method of and system for merging, storing and retrieving incremental backup data | |
CN103761053B (zh) | 一种数据处理方法和装置 | |
CN106055431B (zh) | 基于快照在线回滚的数据备份与恢复的方法及装置 | |
US9372854B2 (en) | Load balancing backup jobs in a virtualized storage system having a plurality of physical nodes | |
CN101777017B (zh) | 一种连续数据保护系统的快速恢复方法 | |
CN105718217A (zh) | 一种精简配置存储池数据一致性维护的方法及装置 | |
CN109144416B (zh) | 查询数据的方法和装置 | |
US8364644B1 (en) | Exclusion of data from a persistent point-in-time image | |
CN101364163B (zh) | 一种逻辑卷创建系统及其方法 | |
US11449237B2 (en) | Targetless snapshot system replication data pointer table | |
JP7304215B2 (ja) | ストレージシステムおよび履歴情報管理方法 | |
CN107608825A (zh) | 一种云备份快照数据的方法及装置 | |
CN108628700A (zh) | 一种持续数据保护方法及装置 | |
CN108255642B (zh) | 一种连续数据保护中io数据管理的方法 | |
CN112052217B (zh) | 快照实现方法及装置 | |
Xie et al. | ESnap-A cached dependent snapshot system | |
CN117149724B (zh) | 一种云环境系统重复数据删除的方法及系统 | |
CN113986117A (zh) | 文件的存储方法、系统、计算设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |