CN115826878B - 一种写时拷贝方法、装置、设备及计算机可读存储介质 - Google Patents
一种写时拷贝方法、装置、设备及计算机可读存储介质 Download PDFInfo
- Publication number
- CN115826878B CN115826878B CN202310108005.5A CN202310108005A CN115826878B CN 115826878 B CN115826878 B CN 115826878B CN 202310108005 A CN202310108005 A CN 202310108005A CN 115826878 B CN115826878 B CN 115826878B
- Authority
- CN
- China
- Prior art keywords
- block
- bitmap
- data block
- copy
- size
- 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
- Record Information Processing For Printing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种写时拷贝方法、装置、设备及计算机可读存储介质,涉及云计算技术领域,包括获取cluster的大小与block的大小;若所述cluster的大小与所述block的大小的比值达到预设阈值,则创建block位图;以block为最小粒度,将源数据块中的目标数据拷贝到新数据块;在所述block位图中记录所述新数据块的首地址与所述源数据块的首地址以及所述新数据块中各数据块的更新状态。该方法能够提高写时拷贝的执行速度,提高***整体响应能力。
Description
技术领域
本申请涉及云计算技术领域,特别涉及一种写时拷贝方法;还涉及一种写时拷贝装置、设备以及计算机可读存储介质。
背景技术
OCFS2(英文全称为The Oracle Clustered File System Version 2)是一个通用的基于盘区的共享磁盘集群文件***,其利用网络和基于磁盘的心跳来确定集群内的节点是否可用,可以实现跨节点(服务器)的磁盘空间管理,同时对用户提供统一视图。共享磁盘集群文件***需要通过锁机制保证磁盘空间管理的循序性,即避免同时修改文件***的元数据。磁盘划分为若干个cluster group进行管理,每个cluster group包含若干个cluster,每个clsuter又包含若干个block。支持从512字节到4KB的块(block)大小,支持从4KB到1MB的文件***集群(cluster)大小。
在云计算场景中,传统的数据备份方案主要是周期性对数据进行备份,包括全量备份和增量备份。增量备份主要方案就是使用reflink技术。Reflink的基本原理是在做文件拷贝动作时,仅创建新的inode,使其独立于源文件的inode,但新建的inode和源文件的inode仍会共享数据块(在OCFS2中指cluster)信息,只有当数据块被修改的情况下才会拷贝源数据块信息和修改部分的信息到新数据块中。
目前,现有的CoW(Copy-on-Write,写时拷贝技术)的技术实现方案中,数据块的最小拷贝粒度是一个cluster的大小。在cluster_size=1M,block_size=4K的场景下,若源数据块发生很小的数据量改动,比如1K,触发CoW后,底层则至少需要拷贝1个cluster的数据量,即1M,但实际上只有1K数据属于有效拷贝数据。由于数据拷贝操作是比较耗费***资源的,因此会出现数据拷贝动作执行时间长,***响应慢的情况。
有鉴于此,如何提高提高写时拷贝的执行速度,提高***整体响应能力已成为本领域技术人员亟待解决的技术问题。
发明内容
本申请的目的是提供一种写时拷贝方法,能够提高写时拷贝的执行速度,提高***整体响应能力。本申请的另一个目的是提供一种写时拷贝装置、设备以及计算机可读存储介质,均具有上述技术效果。
为解决上述技术问题,本申请提供了一种写时拷贝方法,包括:
获取cluster的大小与block的大小;
若所述cluster的大小与所述block的大小的比值达到预设阈值,则创建block位图;
以block为最小粒度,将源数据块中的目标数据拷贝到新数据块;
在所述block位图中记录所述新数据块的首地址与所述源数据块的首地址以及所述新数据块中各数据块的更新状态。
可选的,所述以block为最小粒度,将源数据块中的目标数据拷贝到新数据块前还包括:
判断是否启用了block位图特性;
若启用了block位图特性,则以block为最小粒度,将源数据块中的目标数据拷贝到新数据块。
可选的,所述判断是否启用了block位图特性包括:
判断节点中是否记录有表征启用block位图特性的标记;
若节点中记录有表征启用block位图特性的标记,则启用了所述block位图特性。
可选的,还包括:
若所述cluster的大小与所述block的大小的比值达到预设阈值,则在节点中记录用于表征启用block位图特性的标记。
可选的,所述block位图中的比特位图的一个比特位表示所述新数据块的一个数据块的更新状态。
可选的,若所述新数据块中的数据块未发生更新,则对应的所述比特位为零;若所述新数据块中的数据块发生更新,则对应的所述比特位为一。
可选的,所述block位图还记录有用于记录所述新数据块的各数据块的更新状态的所述比特位图的长度。
可选的,还包括:
以cluster为最小单位分配所述新数据块。
可选的,还包括:
分配存储空间用于存放所述block位图记录的信息。
可选的,还包括:
在节点中记录所述存储空间的首地址。
可选的,还包括:
根据所述存储空间的首地址,查阅所述block位图;
根据所述block位图,确定数据读取对象,并从所述数据读取对象处读取数据。
可选的,所述根据所述存储空间的首地址,查阅所述block位图前还包括:
判断是否启用了block位图特性;
若启用了block位图特性,则根据所述存储空间的首地址,查阅所述block位图。
可选的,还包括:
创建引用计数树。
可选的,还包括:
更新所述引用计数树的引用计数值。
可选的,还包括:
创建所述节点。
可选的,还包括:
分析所述目标数据的大小;
若所述目标数据的大小达到第一预设值,则以cluster为最小粒度,将所述目标数据拷贝到所述新数据块。
可选的,还包括:
统计待拷贝的所述block的个数;
若待拷贝的所述block的个数达到第二预设值,则以cluster为最小粒度,将待拷贝的所述block拷贝到所述新数据块。
可选的,还包括:
定义所述预设阈值。
可选的,还包括:
将所述新数据块中的各数据块对应的所述比特位初始化为零。
为解决上述技术问题,本申请还提供了一种写时拷贝装置,包括:
获取模块,用于获取cluster的大小与block的大小;
创建模块,用于若所述cluster的大小与所述block的大小的比值达到预设阈值,则创建block位图;
拷贝模块,用于以block为最小粒度,将源数据块中的目标数据拷贝到新数据块;
记录模块,用于在所述block位图记录所述新数据块的首地址与所述源数据块的首地址以及所述新数据块中各数据块的更新状态。
为解决上述技术问题,本申请还提供了一种写时拷贝设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如上任一项所述的写时拷贝方法的步骤。
为解决上述技术问题,本申请还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上任一项所述的写时拷贝方法的步骤。
本申请所提供的写时拷贝方法,包括:获取cluster的大小与block的大小;若所述cluster的大小与所述block的大小的比值达到预设阈值,则创建block位图;以block为最小粒度,将源数据块中的目标数据拷贝到新数据块;在所述block位图中记录所述新数据块的首地址与所述源数据块的首地址以及所述新数据块中各数据块的更新状态。
可见,本申请所提供的写时拷贝方法,在cluster的大小远大于block的大小时,以block为最小粒度进行数据拷贝,这样可以避免无效的数据拷贝,提高数据拷贝的执行速度。同时,通过创建block位图来记录所述新数据块的首地址与所述源数据块的首地址以及所述新数据块中发生数据更新的数据块,可以保证以block为最小粒度进行数据拷贝后,能够正常进行数据访问。
本申请所提供的写时拷贝装置、设备以及计算机可读存储介质均具有上述技术效果。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对现有技术和实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例所提供的一种写时拷贝方法的流程示意图;
图2为本申请实施例所提供的一种写时拷贝原理示意图;
图3为本申请实施例所提供的一种具体的写时拷贝方法的示意图;
图4为本申请实施例所提供的一种写时拷贝装置的示意图;
图5为本申请实施例所提供的一种写时拷贝设备的示意图。
具体实施方式
本申请的核心是提供一种写时拷贝方法,能够提高写时拷贝的执行速度,提高***整体响应能力。本申请的另一个核心是提供一种写时拷贝装置、设备以及计算机可读存储介质,均具有上述技术效果。
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
请参考图1,图1为本申请实施例所提供的一种写时拷贝方法的流程示意图,参考图1所示,该方法主要包括:
S101:获取cluster的大小与block的大小;
S102:若所述cluster的大小与所述block的大小的比值达到预设阈值,则创建block位图;
S103:以block为最小粒度,将源数据块中的目标数据拷贝到新数据块;
S104:在所述block位图记录所述新数据块的首地址与所述源数据块的首地址以及所述新数据块中各数据块的更新状态。
本实施例旨在当所述cluster的大小远大于所述block的大小时,以block为最小粒度进行数据拷贝。同时为了在以block为最小粒度进行数据拷贝后,能够正常准确的访问数据,本实施例在所述cluster的大小远大于所述block的大小时,创建了block位图,通过block位图记录新数据块的首地址与所述源数据块的首地址以及所述新数据块中发生数据更新的数据块。以block为最小粒度进行数据拷贝后,当访问数据时,通过查阅block位图记录的信息可获知所要访问的数据位于新数据块还是源数据块,进而可以根据block位图记录的新数据块的首地址访问新数据块,或者根据block位图记录的源数据块的首地址访问源数据块。
目标数据是指源数据块中需要更新的数据。
步骤S101与步骤S102可以是在上层应用触发文件拷贝动作后执行。具体而言,上层应用触发文件拷贝动作后,底层在创建inode节点并填充成员信息时,可首先获取OCFS2的cluster_size即cluster的大小和block_size即block的大小以及预设阈值(该预设阈值可在制作文件***时或者执行reflink快照时给定)。计算cluster_size与block_size的比值。如果cluster_size与block_size的比值大于或等于预设阈值,则创建block位图。如果cluster_size与block_size的比值小于预设阈值,则不创建block位图,写时拷贝沿用现有的实现方案。
其中,在一些实施例中,还包括:若所述cluster的大小与所述block的大小的比值达到预设阈值,则在节点中记录用于表征启用block位图特性的标记。
如果cluster_size与block_size的比值大于或等于预设阈值,定义特性标记BLKMAP,并记录到inode节点中的ocfs2_extend_rec.e_flags成员,表示启用block位图。如果cluster_size与block_size的比值小于预设阈值,则不做标记处理,表示不启用block位图,仍沿用现有的写时拷贝的实现方案。
参考图2所示,block位图的数据结构包括blkno、ref_blkno和bitmap。blkno用于记录新数据块的首地址,ref_blkno用于记录源数据块(共享数据块)的首地址,bitmap用于记录新数据块中各个数据块的更新状态,依据bitmap可以获知新数据块中哪些数据块被更新了,哪些数据块没有被更新。
在一种具体的实施方式中,所述block位图中的比特位图的一个比特位表示所述新数据块的一个数据块的更新状态。
其中,若所述新数据块中的数据块未发生更新,则对应的所述比特位为零;若所述新数据块中的数据块发生更新,则对应的所述比特位为一。
也就是说,bitmap中的每个bit位对应新数据块中的一个block,若新数据块中的某些block数据更新了,bitmap中对应的bit位置1,否则bit位清0。Bitmap的长度等于新数据块中块的个数。
另外,在一种具体的实施方式中,所述block位图还记录有用于记录所述新数据块的各数据块的更新状态的比特位图的长度。
如图2所示,bitmap即为比特位图。本实施例中,block位图的数据结构包括blkno、ref_blkno、map_size和bitmap。map_size用于记录bitmap的长度。例如,bitmap的长度为20个bit,则map_size=20。
步骤S103与S104可以是在上层应用修改reflink快照文件时执行。具体而言,上层应用修改reflink快照文件时,底层以cluster为最小单位分配新数据块,并以block为最小粒度,仅拷贝源数据块中的需要更新的block数据到新数据块中,同时更新block位图中的bitmap。另外,如果源数据块中的所有数据均已经更新,则同步更新reflink计数树的refcount值。
在一种具体的实施方式中,以block为最小粒度,将源数据块中的数据拷贝到新数据块还包括:
判断是否启用了block位图特性;
若启用了block位图特性,则以block为最小粒度,将源数据块中的目标数据拷贝到新数据块。
其中,所述判断是否启用了block位图特性包括:
判断节点中是否记录有表征启用block位图特性的标记;
若节点中记录有表征启用block位图特性的标记,则启用了所述block位图特性。
具体而言,上层应用修改reflink快照文件时,底层首先判断reflink快照文件的inode中,block位图是否已经启用。若没有启用,则按照现有的写时拷贝的实现方案,即以cluster为最小粒度,拷贝源数据块中的数据到新数据块中,同时更新reflink计数树的refcount值。若启用,则以block为最小粒度,仅拷贝源数据块中的需要更新的block数据到新数据块中,同时更新block位图中的bitmap。另外,如果源数据块中的所有数据均已经更新,则同步更新reflink计数树的refcount值。
在上述实施例的基础上,在一些实施例中,还包括:
分配存储空间用于存放所述block位图记录的信息。
在节点中记录所述存储空间的首地址。
block位图创建后,链接block位图到inode节点。具体而言,单独使用一个block空间存储block位图信息,同时在inode节点中ocfs2_extend_rec下的新增一个成员i_blockcount_loc,用于记录block位图信息所在数据块的首地址blockno。
进一步的,在上述实施例的基础上,作为一种具体的实施方式,还包括:
根据所述存储空间的首地址,查阅所述block位图;
根据所述block位图,确定数据读取对象,并从所述数据读取对象处读取数据。
本实施例旨在根据block位图索引新数据块。写时拷贝完成后,当上层应用读取reflink快照文件时,底层查阅block位图,确认哪些block数据从新数据块中读取,哪些block数据从源数据块中读取,进而从源数据块或新数据块中读取数据。
其中,根据所述存储空间的首地址,查阅所述block位图前还包括:
判断是否启用了block位图特性;
若启用了block位图特性,则根据所述存储空间的首地址,查阅所述block位图。
具体而言,写时拷贝完成后,当上层应用读取reflink快照文件时,底层首先判断reflink快照文件的inode中,block位图是否已经启用。若block位图没有启用,则根据reflilnk计数树的记录信息进行数据的检索。若block位图已经启用,则查阅block位图,确认哪些block数据从新数据块中读取,哪些block数据从源数据块中读取,进而针对性的读取数据。
所述判断是否启用了block位图特性可以包括:
判断节点中是否记录有表征启用block位图特性的标记;
若节点中记录有表征启用block位图特性的标记,则启用了所述block位图特性。
具体而言,写时拷贝完成后,当上层应用读取reflink快照文件时,第二判断首先判断reflink快照文件的inode中是否记录有表征启用block位图特性的标记。若inode中记录有表征启用block位图特性的标记,则根据reflilnk计数树的记录信息进行数据的检索。若inode中未记录有表征启用block位图特性的标记,则查阅block位图,确认哪些block数据从新数据块中读取,哪些block数据从源数据块中读取,进而从源数据块或新数据块中读取数据。
进一步,在一些实施例中,还包括:
分析所述目标数据的大小;
若所述目标数据的大小达到第一预设值,则以cluster为最小粒度,将所述目标数据拷贝到所述新数据块。
具体而言,在拷贝目前数据前,还可以分析目标数据的大小,如果目标数据的大小达到第一预设值,即目标数据的量较大时,若以block为最小粒度进行数据拷贝,需要拷贝较多次,此时可以选择以cluster为最小粒度进行数据拷贝。
进一步,在一些实施例中,还包括:
统计待拷贝的所述block的个数;
若待拷贝的所述block的个数达到第二预设值,则以cluster为最小粒度,将待拷贝的所述block拷贝到所述新数据块。
具体而言,在拷贝目前数据前,还可以统计待拷贝的block的个数,如果待拷贝的block的个数达到第二预设值,即待拷贝的block的个数较多时,若以block为最小粒度进行数据拷贝,需要拷贝较多次,此时可以选择以cluster为最小粒度进行数据拷贝。
以下结合图3所示,描述一种具体的写时拷贝实施方式:
OCFS2的cluster_size=1M,block_size=4K,预设阈值HT=256。以某文件的节点inodeB管理的4M数据作为研究对象,inodeB.extent_rec记录了e_flags=REFCOUNTED,表示支持reflink快照功能。另外记录了源文件偏移量e_cpos=3(从磁盘的cluster3开始),源数据块长度e_leaf_cluster=4(共占用4个cluster),源数据块所在的磁盘位置的首地址e_blkno=768(数据记录从磁盘的768号blockno开始)。
根据OCFS2的cluster_size和block_size以及预设阈值进行block位图特性自适应配置。当上层应用对文件做reflink快照,底层创建新的文件节点副本inodeA,此时不创建新数据块,也不对源数据进行拷贝。由于cluster_size和block_size的比值clsuter_size/block_size=256>= HT,故InodeA.extent_rec中的e_flags=REFCOUNTED|BLKMAP,表示在支持reflink快照功能的基础上,追加block位图特性。另外记录源数据(共享数据块)的相关信息:偏移量e_cpos=3,源数据块长度e_leaf_cluster=4,源数据块所在的磁盘位置首地址e_blkno=768。除了新建文件节点副本inodeA,还新建一个引用计数树refcounttree,用于记录reflink快照后的数据块共享信息,其refcount_rec中记录了共享数据块的文件偏移r_cpos=3,共享数据块的共享长度r_cluster=4,共享数据块的引用计数r_refcount=2。
创建block位图并连接到inodeA。当上层应用对文件的reflink快照做小范围修改,底层在分配新数据块之前,识别到block位图特性已经开启,新分配一个block的存储空间ocfs2_blkcnt_block用于存放block位图信息ocfs2_blkcnt_rec。block位图存储空间分配完成后,将inodeA中ocfs2_extend_rec的成员i_blockcount_loc指向block位图数据块的首地址blockno:102400。
上层应用准备修改reflink快照文件中第5个cluster中的第0个和第2个block中的数据(即blockno为1280和1282的两个数据block)时,底层首先检查该文件的inodeA中block位图特性flag,本实施例中该特性已经启用。然后以cluster为最小单位分配新的数据块,同时更新block位图信息,blkno记录新数据块的起始地址blkno:3584,ref_blkno记录源数据块准备更新的数据块起始地址blkno:1280,map_size记录新数据块的长度256(新分配一个cluster,共256个block),bitmap为256个地址连续的bit位,并初始化为0,表示新数据块中的block数据还未进行更新写入。以上工作准备就绪后,再将预写入的数据拷贝到新数据块中的3584和3586两个block位置,同时将block位图bitmap中对应的bit位值1,源数据块中的数据不做修改。
写时拷贝完成后,当上层应用读取reflink快照文件时,底层首先检查该文件的inodeA中block位图特性flag,本实施例中该特性已经启用。接着遍历block位图,bitmap中置1时,则对应的block数据从新数据块中读取数据,否则block数据仍从源数据块(共享数据块)中读取数据。
综上所述,本申请所提供的写时拷贝方法,包括:获取cluster的大小与block的大小;若所述cluster的大小与所述block的大小的比值达到预设阈值,则创建block位图;以block为最小粒度,将源数据块中的数据拷贝到新数据块;在所述block位图记录所述新数据块的首地址与所述源数据块的首地址以及所述新数据块中发生数据更新的数据块。可见,本申请所提供的写时拷贝方法,在cluster的大小远大于block的大小时,以block为最小粒度进行数据拷贝,这样避免由于无效的数据拷贝,提高数据拷贝的执行速度。同时,通过创建block位图来记录所述新数据块的首地址与所述源数据块的首地址以及所述新数据块中发生数据更新的数据块,可以保证以block为最小粒度进行数据拷贝后,能够正常进行数据访问。
本申请还提供了一种写时拷贝装置,下文描述的该装置可以与上文描述的方法相互对应参照。请参考图4,图4为本申请实施例所提供的一种写时拷贝装置的示意图,结合图4所示,该装置包括:
获取模块10,用于获取cluster的大小与block的大小;
创建模块20,用于若所述cluster的大小与所述block的大小的比值达到预设阈值,则创建block位图;
拷贝模块30,用于以block为最小粒度,将源数据块中的目标数据拷贝到新数据块;
记录模块40,用于在所述block位图记录所述新数据块的首地址与所述源数据块的首地址以及所述新数据块中各数据块的更新状态。
本实施例旨在当所述cluster的大小远大于所述block的大小时,以block为最小粒度进行数据拷贝。同时为了在以block为最小粒度进行数据拷贝后,能够正常准确的访问数据,本实施例在所述cluster的大小远大于所述block的大小时,创建了block位图,通过block位图记录新数据块的首地址与所述源数据块的首地址以及所述新数据块中发生数据更新的数据块。以block为最小粒度进行数据拷贝后,当访问数据时,通过查阅block位图记录的信息即可获知所要访问的数据位于新数据块还是源数据块,进而可以根据block位图记录的新数据块的首地址访问新数据块或者根据block位图记录的源数据块的首地址访问源数据块。
上层应用触发文件拷贝动作后,底层在创建inode节点并填充成员信息时,获取模块10可首先获取OCFS2的cluster_size即cluster的大小和block_size即block的大小以及预设阈值(该预设阈值可在制作文件***时或者执行reflink快照时给定)。计算cluster_size与block_size的比值。如果cluster_size与block_size的比值大于或等于预设阈值,则创建模块20创建block位图。如果cluster_size与block_size的比值小于预设阈值,则创建模块20不创建block位图,写时拷贝沿用现有的实现方案。
block位图的数据结构包括blkno、ref_blkno和bitmap。blkno用于记录新数据块的首地址,ref_blkno用于记录源数据块(共享数据块)的首地址,bitmap用于记录新数据块中哪些数据块被更新了。
上层应用修改reflink快照文件时,拷贝模块30以block为最小粒度,仅拷贝源数据块中的需要更新的block数据到新数据块中,同时记录模块40更新block位图中的bitmap。
在上述实施例的基础上,作为一种具体的实施方式,还包括:
第一判断模块,用于判断是否启用了block位图特性;
若启用了block位图特性,则所述拷贝模块30以block为最小粒度,将源数据块中的目标数据拷贝到新数据块。
具体而言,上层应用修改reflink快照文件时,底层首先判断reflink快照文件的inode中,block位图是否已经启用。若没有启用,则按照现有的写时拷贝的实现方案,即以cluster为最小粒度,拷贝源数据块中的数据到新数据块中,同时更新reflink计数树的refcount值。若启用,则以block为最小粒度,仅拷贝源数据块中的需要更新的block数据到新数据块中,同时更新block位图中的bitmap。
在上述实施例的基础上,作为一种具体的实施方式,所述第一判断模块包括:
判断单元,用于判断节点中是否记录有表征启用block位图特性的标记;
确定单元,用于若节点中记录有表征启用block位图特性的标记,则启用了所述block位图特性。
在上述实施例的基础上,作为一种具体的实施方式,还包括:
标记模块,用于若所述cluster的大小与所述block的大小的比值达到预设阈值,则在节点中记录用于表征启用block位图特性的标记。
具体而言,如果cluster_size与block_size的比值大于或等于预设阈值,定义特性标记BLKMAP,并记录到inode节点中的ocfs2_extend_rec.e_flags成员,表示启用block位图。如果cluster_size与block_size的比值小于预设阈值,则不做标记处理,表示不启用block位图,仍沿用现有的写时拷贝的实现方案。
在上述实施例的基础上,作为一种具体的实施方式,所述block位图中的比特位图的一个比特位表示所述新数据块的一个数据块的更新状态。
在上述实施例的基础上,作为一种具体的实施方式,若所述新数据块中的数据块未发生更新,则对应的所述比特位为零;若所述新数据块中的数据块发生更新,则对应的所述比特位为一。
具体而言,bitmap中的每个bit位对应新数据块中的一个block,若新数据块中的某些block数据更新了,bitmap中对应的bit位置1,否则bit位清0。bitmap的长度等于新数据块中块的个数。
在上述实施例的基础上,作为一种具体的实施方式,所述block位图还记录有用于记录所述新数据块的各数据块的更新状态的所述比特位图的长度。
具体而言,bitmap即为比特位图。本实施例中,block位图的数据结构包括blkno、ref_blkno、map_size和bitmap。map_size用于记录bitmap的长度。例如,bitmap的长度为20个bit,则map_size=20。
在上述实施例的基础上,作为一种具体的实施方式,还包括:
第一分配模块,用于以cluster为最小单位分配所述新数据块。
在上述实施例的基础上,作为一种具体的实施方式,还包括:
第二分配模块,用于分配存储空间用于存放所述block位图记录的信息。
在上述实施例的基础上,作为一种具体的实施方式,还包括:
节点记录模块,用于在节点中记录所述存储空间的首地址。
具体而言,单独使用一个block空间存储block位图信息,同时在inode节点中ocfs2_extend_rec下的新增一个成员i_blockcount_loc,用于记录block位图信息所在数据块的首地址blockno。
在上述实施例的基础上,作为一种具体的实施方式,还包括:
查阅模块,用于根据所述存储空间的首地址,查阅所述block位图;
读取模块,用于根据所述block位图,确定数据读取对象,并从所述数据读取对象处读取数据。
写时拷贝完成后,当上层应用读取reflink快照文件时,查阅block位图,确认哪些block数据从新数据块中读取,哪些block数据从源数据块中读取,进而从源数据块或新数据块中读取数据。
在上述实施例的基础上,作为一种具体的实施方式,还包括:
第二判断模块,用于判断是否启用了block位图特性;
若启用了block位图特性,则所述查阅模块根据所述存储空间的首地址,查阅所述block位图。
具体而言,写时拷贝完成后,当上层应用读取reflink快照文件时,底层首先判断reflink快照文件的inode中,block位图是否已经启用。若block位图没有启用,则根据reflilnk计数树的记录信息进行数据的检索。若block位图已经启用,则查阅block位图,确认哪些block数据从新数据块中读取,哪些block数据从源数据块中读取,进而针对性的读取数据。
其中,第二判断模块具体可用于:判断节点中是否记录有表征启用block位图特性的标记;若节点中记录有表征启用block位图特性的标记,则启用了所述block位图特性。
写时拷贝完成后,当上层应用读取reflink快照文件时,第二判断首先判断reflink快照文件的inode中是否记录有表征启用block位图特性的标记。若inode中记录有表征启用block位图特性的标记,则根据reflilnk计数树的记录信息进行数据的检索。若inode中未记录有表征启用block位图特性的标记,则查阅block位图,确认哪些block数据从新数据块中读取,哪些block数据从源数据块中读取,进而针对性的读取数据。
在上述实施例的基础上,作为一种具体的实施方式,还包括:
引用计数树创建模块,用于创建引用计数树。
在上述实施例的基础上,作为一种具体的实施方式,还包括:
更新模块,用于更新所述引用计数树的引用计数值。
在上述实施例的基础上,作为一种具体的实施方式,还包括:
节点创建模块,用于创建所述节点。
在上述实施例的基础上,作为一种具体的实施方式,还包括:
分析模块,用于分析所述目标数据的大小;
第二拷贝模块,用于若所述目标数据的大小达到第一预设值,则以cluster为最小粒度,将所述目标数据拷贝到所述新数据块。
在上述实施例的基础上,作为一种具体的实施方式,还包括:
统计模块,用于统计待拷贝的所述block的个数;
第三拷贝模块,用于若待拷贝的所述block的个数达到第二预设值,则以cluster为最小粒度,将待拷贝的所述block拷贝到所述新数据块。
在上述实施例的基础上,作为一种具体的实施方式,还包括:
定义模块,用于定义所述预设阈值。
在上述实施例的基础上,作为一种具体的实施方式,还包括:
初始化模块,用于将所述新数据块中的各数据块对应的所述比特位初始化为零。
本申请所提供的写时拷贝装置,在cluster的大小远大于block的大小时,以block为最小粒度进行数据拷贝,这样避免了无效的数据拷贝,提高了数据拷贝的执行速度。同时,通过创建block位图来记录所述新数据块的首地址与所述源数据块的首地址以及所述新数据块中发生数据更新的数据块,可以保证以block为最小粒度进行数据拷贝后,能够正常进行数据访问。
本申请还提供了一种写时拷贝设备,参考图5所示,该设备包括存储器1和处理器2。
存储器1,用于存储计算机程序;
处理器2,用于执行计算机程序实现如下的步骤:
获取cluster的大小与block的大小;若所述cluster的大小与所述block的大小的比值达到预设阈值,则创建block位图;以block为最小粒度,将源数据块中的目标数据拷贝到新数据块;在所述block位图中记录所述新数据块的首地址与所述源数据块的首地址以及所述新数据块中各数据块的更新状态
对于本申请所提供的设备的介绍请参照上述方法实施例,本申请在此不做赘述。
本申请所提供的写时拷贝设备,在cluster的大小远大于block的大小时,以block为最小粒度进行数据拷贝,这样避免了无效的数据拷贝,提高了数据拷贝的执行速度。同时,通过创建block位图来记录所述新数据块的首地址与所述源数据块的首地址以及所述新数据块中发生数据更新的数据块,可以保证以block为最小粒度进行数据拷贝后,能够正常进行数据访问。
本申请还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时可实现如下的步骤:
获取cluster的大小与block的大小;若所述cluster的大小与所述block的大小的比值达到预设阈值,则创建block位图;以block为最小粒度,将源数据块中的目标数据拷贝到新数据块;在所述block位图中记录所述新数据块的首地址与所述源数据块的首地址以及所述新数据块中各数据块的更新状态
该计算机可读存储介质可以包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory ,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
对于本申请所提供的计算机可读存储介质的介绍请参照上述方法实施例,本申请在此不做赘述。
本申请所提供的计算机可读存储介质,在cluster的大小远大于block的大小时,以block为最小粒度进行数据拷贝,这样避免了无效的数据拷贝,提高了数据拷贝的执行速度。同时,通过创建block位图来记录所述新数据块的首地址与所述源数据块的首地址以及所述新数据块中发生数据更新的数据块,可以保证以block为最小粒度进行数据拷贝后,能够正常进行数据访问。
说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置、设备以及计算机可读存储介质而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上对本申请所提供的写时拷贝方法、装置、设备以及计算机可读存储介质进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围。
Claims (21)
1.一种写时拷贝方法,其特征在于,包括:
获取cluster的大小与block的大小;
若所述cluster的大小与所述block的大小的比值达到预设阈值,则创建block位图;
以block为最小粒度,将源数据块中的目标数据拷贝到新数据块;所述目标数据指所述源数据块中需要更新的数据;
在所述block位图中记录所述新数据块的首地址与所述源数据块的首地址以及所述新数据块中各数据块的更新状态;
还包括:
若所述cluster的大小与所述block的大小的比值达到所述预设阈值,则在节点中记录用于表征启用block位图特性的标记;
若所述block位图启用,则查阅所述block位图。
2.根据权利要求1所述的写时拷贝方法,其特征在于,所述以block为最小粒度,将源数据块中的目标数据拷贝到新数据块前还包括:
判断是否启用了block位图特性;
若启用了block位图特性,则以block为最小粒度,将源数据块中的目标数据拷贝到新数据块。
3.根据权利要求2所述的写时拷贝方法,其特征在于,所述判断是否启用了block位图特性包括:
判断节点中是否记录有表征启用block位图特性的标记;
若节点中记录有表征启用block位图特性的标记,则启用了所述block位图特性。
4.根据权利要求1所述的写时拷贝方法,其特征在于,所述block位图中的比特位图的一个比特位表示所述新数据块的一个数据块的更新状态。
5.根据权利要求4所述的写时拷贝方法,其特征在于,若所述新数据块中的数据块未发生更新,则对应的所述比特位为零;若所述新数据块中的数据块发生更新,则对应的所述比特位为1。
6.根据权利要求4所述的写时拷贝方法,其特征在于,所述block位图还记录有用于记录所述新数据块的各数据块的更新状态的所述比特位图的长度。
7.根据权利要求1所述的写时拷贝方法,其特征在于,还包括:
以cluster为最小单位分配所述新数据块。
8.根据权利要求1所述的写时拷贝方法,其特征在于,还包括:
分配存储空间用于存放所述block位图记录的信息。
9.根据权利要求8所述的写时拷贝方法,其特征在于,还包括:
在节点中记录所述存储空间的首地址。
10.根据权利要求9所述的写时拷贝方法,其特征在于,还包括:
根据所述存储空间的首地址,查阅所述block位图;
根据所述block位图,确定数据读取对象,并从所述数据读取对象处读取数据。
11.根据权利要求10所述的写时拷贝方法,其特征在于,所述根据所述存储空间的首地址,查阅所述block位图前还包括:
判断是否启用了block位图特性;
若启用了block位图特性,则根据所述存储空间的首地址,查阅所述block位图。
12.根据权利要求1所述的写时拷贝方法,其特征在于,还包括:
创建引用计数树。
13.根据权利要求12所述的写时拷贝方法,其特征在于,还包括:
更新所述引用计数树的引用计数值。
14.根据权利要求3所述的写时拷贝方法,其特征在于,还包括:
创建所述节点。
15.根据权利要求1所述的写时拷贝方法,其特征在于,还包括:
分析所述目标数据的大小;
若所述目标数据的大小达到第一预设值,则以cluster为最小粒度,将所述目标数据拷贝到所述新数据块。
16.根据权利要求1所述的写时拷贝方法,其特征在于,还包括:
统计待拷贝的所述block的个数;
若待拷贝的所述block的个数达到第二预设值,则以cluster为最小粒度,将待拷贝的所述block拷贝到所述新数据块。
17.根据权利要求1所述的写时拷贝方法,其特征在于,还包括:
定义所述预设阈值。
18.根据权利要求5所述的写时拷贝方法,其特征在于,还包括:
将所述新数据块中的各数据块对应的所述比特位初始化为零。
19.一种写时拷贝装置,其特征在于,包括:
获取模块,用于获取cluster的大小与block的大小;
创建模块,用于若所述cluster的大小与所述block的大小的比值达到预设阈值,则创建block位图;
拷贝模块,用于以block为最小粒度,将源数据块中的目标数据拷贝到新数据块;所述目标数据指所述源数据块中需要更新的数据;
记录模块,用于在所述block位图记录所述新数据块的首地址与所述源数据块的首地址以及所述新数据块中各数据块的更新状态;
还包括:
若所述cluster的大小与所述block的大小的比值达到所述预设阈值,则在节点中记录用于表征启用block位图特性的标记;
若所述block位图启用,则查阅所述block位图。
20.一种写时拷贝设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至18任一项所述的写时拷贝方法的步骤。
21.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至18任一项所述的写时拷贝方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310108005.5A CN115826878B (zh) | 2023-02-14 | 2023-02-14 | 一种写时拷贝方法、装置、设备及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310108005.5A CN115826878B (zh) | 2023-02-14 | 2023-02-14 | 一种写时拷贝方法、装置、设备及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115826878A CN115826878A (zh) | 2023-03-21 |
CN115826878B true CN115826878B (zh) | 2023-05-16 |
Family
ID=85521199
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310108005.5A Active CN115826878B (zh) | 2023-02-14 | 2023-02-14 | 一种写时拷贝方法、装置、设备及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115826878B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117708072A (zh) * | 2023-07-14 | 2024-03-15 | 荣耀终端有限公司 | 文件复制方法、终端设备及芯片*** |
CN117891751B (zh) * | 2024-03-14 | 2024-06-14 | 北京壁仞科技开发有限公司 | 内存数据访存方法及装置、电子设备与存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7849057B1 (en) * | 2007-03-30 | 2010-12-07 | Netapp, Inc. | Identifying snapshot membership for blocks based on snapid |
CN103412824A (zh) * | 2013-07-19 | 2013-11-27 | 华为技术有限公司 | 写时拷贝快照方法及装置 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8095770B2 (en) * | 2009-05-08 | 2012-01-10 | Oracle America Inc. | Method and system for mapping data to a process |
CN101840362B (zh) * | 2009-10-28 | 2012-05-30 | 创新科存储技术有限公司 | 一种改进的写时拷贝快照的实现方法和装置 |
CN103984609B (zh) * | 2014-05-28 | 2017-06-16 | 华为技术有限公司 | 一种基于写时复制的文件***中回收检查点的方法和装置 |
CN104331344A (zh) * | 2014-11-11 | 2015-02-04 | 浪潮(北京)电子信息产业有限公司 | 一种数据备份的方法及装置 |
CN105988723A (zh) * | 2015-02-12 | 2016-10-05 | 中兴通讯股份有限公司 | 一种快照处理方法及装置 |
CN107122131B (zh) * | 2017-04-18 | 2020-08-14 | 杭州宏杉科技股份有限公司 | 自动精简配置的方法及装置 |
US11531488B2 (en) * | 2017-08-07 | 2022-12-20 | Kaseya Limited | Copy-on-write systems and methods |
CN111522507B (zh) * | 2020-04-14 | 2021-10-01 | 中山大学 | 一种低延迟的文件***地址空间管理方法、***及介质 |
CN111737221B (zh) * | 2020-06-19 | 2022-04-22 | 浪潮电子信息产业股份有限公司 | 集群文件***的数据读写方法、装置及设备和存储介质 |
US11467735B2 (en) * | 2020-12-01 | 2022-10-11 | International Business Machines Corporation | I/O operations in log structured arrays |
CN113568788B (zh) * | 2021-09-26 | 2021-11-30 | 成都云祺科技有限公司 | Linux非逻辑卷块设备的快照方法、***及存储介质 |
CN115129253A (zh) * | 2022-06-30 | 2022-09-30 | 苏州浪潮智能科技有限公司 | 一种快照处理方法、装置、设备及介质 |
-
2023
- 2023-02-14 CN CN202310108005.5A patent/CN115826878B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7849057B1 (en) * | 2007-03-30 | 2010-12-07 | Netapp, Inc. | Identifying snapshot membership for blocks based on snapid |
CN103412824A (zh) * | 2013-07-19 | 2013-11-27 | 华为技术有限公司 | 写时拷贝快照方法及装置 |
Non-Patent Citations (1)
Title |
---|
Adapting to memory pressure from within scientific applications on multiprogrammed COWs;R.T. Mills等;18th International Parallel and Distributed Processing Symposium;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN115826878A (zh) | 2023-03-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115826878B (zh) | 一种写时拷贝方法、装置、设备及计算机可读存储介质 | |
KR101137299B1 (ko) | 스냅샷을 제공하는 파일 시스템에 대한 계층적 저장 관리 | |
US10649897B2 (en) | Access request processing method and apparatus, and computer device | |
CN110321301B (zh) | 一种数据处理的方法及装置 | |
CN106951375B (zh) | 在存储***中删除快照卷的方法及装置 | |
US20200117368A1 (en) | Method for achieving data copying in ftl of solid state drive, system and solid state drive | |
CN114860163B (zh) | 一种存储***、内存管理方法和管理节点 | |
US20140173226A1 (en) | Logical object deletion | |
US9785547B2 (en) | Data management apparatus and method | |
US8015376B2 (en) | Methods and systems for management of copies of a mapped storage volume | |
CN113568566B (zh) | 利用索引物件来进行简易存储服务无缝迁移的方法、主装置以及存储服务器 | |
CN113508382A (zh) | Ssd中数据的选择性擦除 | |
US10976946B2 (en) | Method and computer system for managing blocks | |
US10606746B2 (en) | Access request processing method and apparatus, and computer system | |
CN113568582B (zh) | 数据管理方法、装置和存储设备 | |
CN110147203B (zh) | 一种文件管理方法、装置、电子设备及存储介质 | |
CN112631950B (zh) | 一种l2p表的保存方法、***、设备以及介质 | |
CN113704217A (zh) | 一种分布式持久性内存文件***中元数据及数据组织架构方法 | |
CN116755625A (zh) | 一种数据处理方法、装置、设备及可读存储介质 | |
US20200133773A1 (en) | Data and metadata storage in storage devices | |
WO2016192057A1 (zh) | 索引表的更新方法和设备 | |
CN115328859A (zh) | 一种元数据访问方法、装置、设备及介质 | |
CN114201115A (zh) | 数据存储***、方法、计算机设备及存储介质 | |
CN111444114B (zh) | 一种非易失性内存中数据的处理方法、装置及*** | |
KR101465426B1 (ko) | 익스텐트 매핑 플래시 디바이스 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |