一种文件系统中实时删除重复数据的方法

文档序号:6607666阅读:156来源:国知局
专利名称:一种文件系统中实时删除重复数据的方法
技术领域
本发明涉及一种文件系统中实时删除重复数据的方法,属于计算机数据存储技术 领域。
背景技术
随着数码设备日新月异的发展,人类社会正全面在进入数字化时代,需要存储的 数据量也正呈现出爆炸式增长的态势。在此背景下,为了降低存储成本和提高存储系统的 可扩展性,如何能以尽可能少的空间储存尽可能多的数据就成为存储领域最炙手可热的问 题。重复数据删除技术兴起于本世纪初期,近年来得到广泛普及和应用。重复数据删 除的基本思想可概述如下首先将存储系统中的文件都切分成若干数据块,用数据块内容 的哈希值为数据块集合建立索引,每个哈希值对应的数据块内容都仅被存储一份;然后,存 储系统并不是直接记录每个文件的具体内容,而是记录每个文件由那些数据块组成,以及 这些数据块在每个文件中的位置信息;根据这些信息,存储系统就能由适当的数据块内容 重构出每个文件的内容。目前,重复数据删除技术主要被应用于数据的同步、备份或归档阶段,典型的代表 有同步备份工具Dropbox以及EMC公司的磁盘备份、归档和灾难恢复产品Data Domain系 统等。在上述这些方法中,重复数据删除都不是实时进行的。在Dropbox中,只有当每个 文件被关闭后,才会对整个文件进行切块,然后再将变化的数据块传输到服务器端。而在 DataDomain系统中,由于每次重复数据删除都需要扫描整个磁盘,因此只能以较低的频率 周期性进行。不难理解,这种非实时的重复数据删除方法存在以下明显缺点一、重复数据 删除与数据的读、写操作在不同阶段各自独立进行,存储系统为了支持随机读写文件中的 数据,必须在第一级存储阶段保存全部完整数据,而仅能在备份和归档的第二级存储阶段 发挥节省存储空间的作用;二、切块效率低下,即使只修改极小一部分数据,也需要对一个 文件甚至磁盘中的全部数据都重新进行切块。

发明内容
本发明的目的是提出一种文件系统中实时删除重复数据的方法,通过文件系统驱 动模块截获来自应用程序的创建文件和向文件中写入数据的操作命令,然后根据操作命令 提供的信息和数据,实时进行数据切块和重复数据删除,并只将新产生的数据块存储到磁 盘上,从而在根本上实现以数据块为基本存储单元的文件系统及其存储和组织结构,达到 节省存储空间的目的。本发明提出的文件系统中实时删除重复数据的方法,包括以下步骤(1)采用嵌入式数据库存储文件系统中的元数据信息,在该嵌入式数据库中设置 文件元数据表、数据块索引表和文件组成表;所述的文件元数据表记录文件系统中每个文 件的元数据,该元数据包括文件标识、文件名、文件所在文件夹的标识、文件大小、文件类型、访问权限以及文件的创建、修改和访问时间;所述的数据块索引表记录文件系统中文件 的数据块的标识以及与标识相对应的数据块的引用次数,其中数据块的标识为该数据块内 容的哈希值;所述的文件组成表记录组成文件系统中的文件的数据块的信息,包括上述文 件标识、数据块起始位置、数据块大小和数据块标识,由其中的数据块起始位置和数据块大 小决定数据区域;(2)通过文件系统的驱动模块,接收和响应应用程序对文件系统发起的操作命令, 该操作命令包括创建新文件、向已有文件写入数据、从已有文件读取数据和删除已有文件, 具体过程如下(2-1)当文件系统的驱动模块接收到来自应用程序的创建新文件的操作命令时, 在文件元数据表中记录被创建文件的元数据;(2-2)当文件系统的驱动模块接收到来自应用程序的向已有文件写入数据的操作 命令时,进行以下操作(2-2-1)根据操作命令中被写文件的文件标识、写入位置和写入数据大小,从上述 文件组成表中检索属于该被写文件的两个数据块标识,且满足与该两个数据块标识相对应 的两个数据块为与被写入数据区域相互重叠的首、尾两个数据块;(2-2-2)根据检索到的数据块标识,从存储设备中读取与该数据块标识相对应的 数据块内容;(2-2-3)将读出的数据块内容中与被写入数据区域不重叠的数据拼接到被写入数 据的两侧,得到拼接后的数据及数据区域;(2-2-4)从上述文件组成表中检索与属于该被写文件、且数据块起始位置位于上 述步骤(2-2-3)数据区域之内的数据块相对应的数据块标识;(2-2-5)将与从上述数据块索引表中检索到的数据块标识相对应的数据块的引用 次数减1,当引用次数不为O时,进行步骤(2-2-6),当引用次数成为0时,从数据块索引表 中删除该数据块标识及与该数据块标识相对应的数据块引用次数,并从存储设备上删除该 数据块内容,进行步骤(2-2-6);(2-2-6)将上述步骤(2-2-3)拼接后的数据切分成一组新数据块;(2-2-7)从上述数据块索引表中分别搜索与上述一组新数据块相对应的每个数据 块标识若该数据块标识已存在,则在数据块索引表中将与该数据块标识相对应的数据块 的引用次数加1,若该数据块标识为新标识,则在数据块索引表中添加该新数据块标识,并 将与该新数据块标识相对应的数据块的引用次数设置为1,并将与该新数据块标识相对应 的新数据块内容存储到存储设备上;在上述文件组成表中记录被写文件的文件标识、该新 数据块的起始位置、该新数据块的大小以及该新数据块的标识;(2-2-8)根据向已有文件写入数据的操作命令更新上述文件元数据表中被写文件 的元数据;(2-3)当文件系统的驱动模块接收到来自应用程序的从文件系统中的已有文件中 读取数据的操作命令时,进行以下操作(2-3-1)根据操作命令,在计算机内存中分配与待读取数据的大小相等的内存空 间,并将该内存空间初始化为空白;(2-3-2)根据操作命令中的被读文件的文件标识和读取位置,从上述文件组成表
5中检索属于该被读文件的数据块标识,且满足与该数据块标识相对应的数据块是起始位置 处于读取位置之前的最后一个数据块,若检索到该数据块标识,且该数据块区域与待读取 数据区域存在重叠,则读取该数据块内容,并将该读取的内容与待读取数据区域的重叠部 分写入上述步骤(2-3-1)的内存空间的头部,进行步骤(2-3-3),若检索不到该数据块标 识,或者与检索到的数据标识相对应的数据块区域与待读取数据区域不存在重叠,则进行 步骤(2-3-3);(2-3-3)根据操作命令,从上述文件组成表中检索属于该被读文件的数据块标识, 且满足与该数据块标识相对应的数据块的起始位置处于待读取数据区域内;读取与检索到 的所有数据块标识相对应的数据块的内容,并将读出的数据块内容中与待读取数据区域的 重叠部分写入上述步骤(2-3-1)的内存空间中;(2-3-4)根据操作命令,更新上述文件元数据表中被读文件的元数据;(2-3-5)将上述步骤(2-3-1)的内存空间中的数据通过文件系统的驱动模块返回 给应用程序;(2-4)当文件系统的驱动模块接收到来自应用程序的删除文件系统中的已有文件 的操作命令时,进行以下操作(2-4-1)从上述文件组成表中检索属于被删除文件的数据块标识;(2-4-2)在上述数据块索引表中将与检索到的每个数据块标识相对应的数据块的 引用次数减1,当引用次数变为0时,从数据块索引表中删除该数据块标识及与该数据块标 识相对应的数据块引用次数,从存储设备上删除该数据块内容,并进行步骤(2-4-3),当引 用次数未变为0时,进行步骤(2-4-3);(2-4-3)从上述文件组成表中删除被删除文件的所有记录;(2-4-4)从上述文件元数据表中删除被删除文件的元数据。本发明提出的文件系统中实时删除重复数据的方法,具备以下优点1、利用本发明的方法,可以删除文件系统中的重复数据,因此节省存储空间。2、利用本发明的方法,将在进行文件读取、写入的同时,对被修改的文件数据进行 切块与拼接操作,而无须处理未被修改的数据,因此极大提高了文件处理的效率。3、本发明方法同时支持定长和不定长的文件分块方法,能够显著改善重复数据的 去除效果,提高存储空间的利用效率。4、与已有技术相比,本发明方法使得重复数据的删除过程对应用程序和用户完全 透明,对新打开的文件可立即实现随机读、写操作,无须等候拼接临时文件,因此能够无缝 兼容现有各种应用程序的文件操作,几乎不会对用户感受造成任何负面影响。5、由于本方法能够删除文件系统中的重复数据,因此能够在备份文件系统中的数 据时,能够减少需要复制的数据量,缩短备份时间,并节省备份计算和存储资源开销。


图1是本发明方法的系统结构图。图2是本发明方法中文件系统的驱动模块接收到来自应用程序的向已有文件写 入数据的操作命令时的流程框图。图3是本发明方法中向已有文件写入数据的过程示意图。
图4是本发明方法中文件系统的驱动模块接收到来自应用程序的从文件系统中 的已有文件中读取数据的操作命令时的流程框图。图5是本发明方法中计算待读取数据区域及计算向内存空间的起始写入位置示 意图。图6是本发明方法中从已有文件读取数据的过程示意图。图7是本发明方法中文件系统的驱动模块接收到来自应用程序的删除文件系统 中的已有文件的操作命令时的流程框图。
具体实施例方式下面结合附图,详细介绍本发明提出的文件系统中数据的实时去重和传输方法(1)如图1所示,本方法通过在操作系统的文件系统虚拟层之下注册文件系统驱 动模块,接收和响应应用程序对文件系统发起的操作命令,由文件系统实时重复数据删除 管理进程负责将元数据信息和数据块内容存储到存储设备中。具体地,本方法在存储设备 中采用嵌入式数据库存储文件系统中的元数据信息。在该嵌入式数据库中设置文件元数据 表、数据块索引表和文件组成表;所述的文件元数据表记录文件系统中每个文件的元数据, 该元数据包括文件标识、文件名、文件所在文件夹的标识、文件大小、文件类型、访问权限以 及文件的创建、修改和访问时间;所述的数据块索引表记录文件系统中文件的数据块的标 识以及与标识相对应的数据块的引用次数,其中数据块的标识为该数据块内容的哈希值; 所述的文件组成表记录组成文件系统中的文件的数据块的信息,包括上述文件标识、数据 块起始位置、数据块大小和数据块标识,由其中的数据块起始位置和数据块大小决定数据 区域。(2)通过文件系统的驱动模块,接收和响应应用程序对文件系统发起的操作命令, 该操作命令包括创建新文件、向已有文件写入数据、从已有文件读取数据和删除已有文件, 具体过程如下(2-1)当文件系统的驱动模块接收到来自应用程序的创建新文件的操作命令时, 在文件元数据表中记录被创建文件的元数据。(2-2)当文件系统的驱动模块接收到来自应用程序的向已有文件写入数据的操作 命令时,参见图2所示的流程框图,进行以下操作(2-2-1)根据操作命令中被写文件的文件标识、写入位置和写入数据大小,从上述 文件组成表中检索属于该被写文件的两个数据块标识,且满足与该两个数据块标识相对应 的两个数据块为与被写入数据区域相互重叠的首、尾两个数据块,具体过程可参见图3。从 图3中,可以看出,文件系统中存在文件标识分别为1和2的两个文件,文件标识为1的文 件由5个数据块组成,该5个数据块对应的数据块标识分别为A、B、C、D、E,文件标识为2的 文件由3个数据块组成,该3个数据块对应的数据块标识分贝为A、D、F,文件组成表中记录 了文件的组成信息。上述两个文件存在重复数据,导致该两个文件都含有数据块标识分别 为A和D的两个数据块,由于这两个数据块的内容只被存储一次,因此实现了数据去重的目 的。如图3所示,操作命令中被写文件的文件标识为1,根据该文件标识,同时根据操作命令 中的写入位置和写入数据大小可计算出被写入数据区域,在文件组成表中检索属于该被写 文件的两个数据块标识,且满足与该两个数据块标识相对应的两个数据块为与被写入数据区域相互重叠的首、尾两个数据块,就会得到数据块标识B和数据块标识D。(2-2-2)根据检索到的数据块标识,从存储设备中读取与该数据块标识相对应的 数据块内容;对应图3,就是读出数据块标识分别为B和D的两个数据块的内容。(2-2-3)将读出的数据块内容中与被写入数据区域相不重叠的数据拼接到被写入 数据的两侧,得到拼接后的数据及拼接后的数据区域;拼接过程、拼接后的数据及拼接后的 数据区域,如图3所示。(2-2-4)从上述文件组成表中检索与属于该被写文件、且数据块起始位置位于上 述步骤(2-2-3)数据区域之内的数据块相对应的数据块标识;在如图3所示例中,该检索将 得到的3个数据块标识,分别为B、C和D。(2-2-5)将与从上述数据块索引表中检索到的数据块标识相对应的数据块的引用 次数减1,当引用次数不为0时,进行步骤(2-2-6),当引用次数成为0时,从数据块索引表 中删除该数据块标识及与该数据块标识相对应的数据块引用次数,并从存储设备上删除该 数据块内容,进行步骤(2-2-6)。(2-2-6)将上述步骤(2-2-3)拼接后的数据切分成一组新数据块;数据切分的方 法可以使用基于用户或系统设定的数据块大小的定长切分和基于内容指纹的不定长切分, 本发明的一个实施例中,使用了 Muthitacharoen等人提出的基于Rabin指纹的可变长切分 方法;如图3所示,拼接后的数据被切分成两个新的数据块,根据数据块内容的哈希值,该 两个数据块的数据块标识分别为G和H。(2-2-7)从上述数据块索引表中分别搜索与上述一组新数据块相对应的每个数据 块标识若该数据块标识已存在,则在数据块索引表中将与该数据块标识相对应的数据块 的引用次数加1,若该数据块标识为新标识,则在数据块索引表中添加该新数据块标识,并 将与该新数据块标识相对应的数据块的引用次数设置为1,并将与该新数据块标识相对应 的新数据块内容存储到存储设备上;在上述文件组成表中记录被写文件的文件标识、该新 数据块的起始位置、该新数据块的大小以及该新数据块的标识。(2-2-8)根据向已有文件写入数据的操作命令,更新上述文件元数据表中被写文 件的元数据。(2-3)当文件系统的驱动模块接收到来自应用程序的从文件系统中的已有文件中 读取数据的操作命令时,参见图4所示的流程框图,进行以下操作(2-3-1)根据操作命令,在计算机内存中分配与待读取数据的大小相等的内存空 间,并将该内存空间初始化为空白;如图5所示。(2-3-2)根据操作命令中的被读文件的文件标识和读取位置,从上述文件组成表 中检索属于该被读文件的数据块标识,且满足与该数据块标识相对应的数据块是起始位置 处于读取位置之前的最后一个数据块,若检索到该数据块标识,且该数据块区域与待读取 数据区域存在重叠,则读取该数据块内容,并将该读取的内容与待读取数据区域的重叠部 分写入上述步骤(2-3-1)的内存空间的头部,进行步骤(2-3-3),具体过程可参见图6。从图 6中,可以看出,文件系统中存在文件标识分别为1和2的两个文件,文件标识为1的文件由 5个数据块组成,该5个数据块对应的数据块标识分别为A、B、C、D、E,文件标识为2的文件 由3个数据块组成,该3个数据块对应的数据块标识分贝为A、D、F,文件组成表中记录了文 件的组成信息。在图6中,操作命令中被读文件的文件标识为1,根据该文件标识,同时根据操作命令中的读取位置,从文件组成表中检索属于该被读文件的数据块标识,且满足与该 数据块标识相对应的数据块是起始位置处于读取位置之前的最后一个数据块,就会得到数 据块标识B,而且与数据块标识B相对应的数据块区域与待读取数据区域存在重叠,因此, 就要从存储设备中读取与B相对应的数据块的内容,并将读取的数据块内容与待读取数据 区域的重叠部分写入图6中所示的内存空间的头部。若检索不到该数据块标识,或者与检 索到的数据标识相对应的数据块区域与待读取数据区域不存在重叠,则进行步骤(2-3-3)。(2-3-3)根据操作命令,从上述文件组成表中检索属于该被读文件的数据块标识, 且满足与该数据块标识相对应的数据块的起始位置处于待读取数据区域内。在图5和图6 所示例中,将会检索得到数据块标识C和D。读取与检索到的所有数据块标识相对应的数据 块的内容,并将读出的数据块内容中与待读取数据区域的重叠部分写入上述步骤(2-3-1) 的内存空间中。在该内存空间的中的起始写入位置等于该数据块的起始位置减去读取位置 等到的差,以图6中将数据块标识为C的数据块内容写入该内存空间为例,由于读取位置为 r,与C相对应的数据块的起始位置为b,因此,与C相对应的数据块内容将以b-r为起始写 入位置被写入该内存空间中。(2-3-4)根据操作命令,更新上述文件元数据表中被读文件的元数据,即修改被读 文件的最近访问时间。(2-3-5)将上述步骤(2-3-1)的内存空间中的数据通过文件系统的驱动模块返回
给应用程序。(2-4)当文件系统的驱动模块接收到来自应用程序的删除文件系统中的已有文件 的操作命令时,参见图7所示的流程框图,进行以下操作(2-4-1)从上述文件组成表中检索属于被删除文件的数据块标识。(2-4-2)在上述数据块索引表中将与检索到的每个数据块标识相对应的数据块的 引用次数减1,当引用次数变为0时,从数据块索引表中删除该数据块标识及与该数据块标 识相对应的数据块引用次数,从存储设备上删除该数据块内容,并进行步骤(2-4-3),当引 用次数未变为0时,进行步骤(2-4-3)。(2-4-3)从上述文件组成表中删除被删除文件的所有记录。(2-4-4)从上述文件元数据表中删除被删除文件的元数据。
9
权利要求
一种文件系统中实时删除重复数据的方法,其特征在于该方法包括以下步骤(1)采用嵌入式数据库存储文件系统中的元数据信息,在该嵌入式数据库中设置文件元数据表、数据块索引表和文件组成表;所述的文件元数据表记录文件系统中每个文件的元数据,该元数据包括文件标识、文件名、文件所在文件夹的标识、文件大小、文件类型、访问权限以及文件的创建、修改和访问时间;所述的数据块索引表记录文件系统中文件的数据块的标识以及与标识相对应的数据块的引用次数,其中数据块的标识为该数据块内容的哈希值;所述的文件组成表记录组成文件系统中的文件的数据块的信息,包括上述文件标识、数据块起始位置、数据块大小和数据块标识,由其中的数据块起始位置和数据块大小决定数据区域;(2)通过文件系统的驱动模块,接收和响应应用程序对文件系统发起的操作命令,该操作命令包括创建新文件、向已有文件写入数据、从已有文件读取数据和删除已有文件,具体过程如下(2 1)当文件系统的驱动模块接收到来自应用程序的创建新文件的操作命令时,在文件元数据表中记录被创建文件的元数据;(2 2)当文件系统的驱动模块接收到来自应用程序的向已有文件写入数据的操作命令时,进行以下操作(2 2 1)根据操作命令中被写文件的文件标识、写入位置和写入数据大小,从上述文件组成表中检索属于该被写文件的两个数据块标识,且满足与该两个数据块标识相对应的两个数据块为与被写入数据区域相互重叠的首、尾两个数据块;(2 2 2)根据检索到的数据块标识,从存储设备中读取与该数据块标识相对应的数据块内容;(2 2 3)将读出的数据块内容中与被写入数据区域不重叠的数据拼接到被写入数据的两侧,得到拼接后的数据及数据区域;(2 2 4)从上述文件组成表中检索与属于该被写文件、且数据块起始位置位于上述步骤(2 2 3)数据区域之内的数据块相对应的数据块标识;(2 2 5)将与从上述数据块索引表中检索到的数据块标识相对应的数据块的引用次数减1,当引用次数不为0时,进行步骤(2 2 6),当引用次数成为0时,从数据块索引表中删除该数据块标识及与该数据块标识相对应的数据块引用次数,并从存储设备上删除该数据块内容,进行步骤(2 2 6);(2 2 6)将上述步骤(2 2 3)拼接后的数据切分成一组新数据块;(2 2 7)从上述数据块索引表中分别搜索与上述一组新数据块相对应的每个数据块标识若该数据块标识已存在,则在数据块索引表中将与该数据块标识相对应的数据块的引用次数加1,若该数据块标识为新标识,则在数据块索引表中添加该新数据块标识,并将与该新数据块标识相对应的数据块的引用次数设置为1,并将与该新数据块标识相对应的新数据块内容存储到存储设备上;在上述文件组成表中记录被写文件的文件标识、该新数据块的起始位置、该新数据块的大小以及该新数据块的标识;(2 2 8)根据向已有文件写入数据的操作命令更新上述文件元数据表中被写文件的元数据;(2 3)当文件系统的驱动模块接收到来自应用程序的从文件系统中的已有文件中读取数据的操作命令时,进行以下操作(2 3 1)根据操作命令,在计算机内存中分配与待读取数据的大小相等的内存空间,并将该内存空间初始化为空白;(2 3 2)根据操作命令中的被读文件的文件标识和读取位置,从上述文件组成表中检索属于该被读文件的数据块标识,且满足与该数据块标识相对应的数据块是起始位置处于读取位置之前的最后一个数据块,若检索到该数据块标识,且该数据块区域与待读取数据区域存在重叠,则读取该数据块内容,并将该读取的内容与待读取数据区域的重叠部分写入上述步骤(2 3 1)的内存空间的头部,进行步骤(2 3 3),若检索不到该数据块标识,或者与检索到的数据标识相对应的数据块区域与待读取数据区域不存在重叠,则进行步骤(2 3 3);(2 3 3)根据操作命令,从上述文件组成表中检索属于该被读文件的数据块标识,且满足与该数据块标识相对应的数据块的起始位置处于待读取数据区域内;读取与检索到的所有数据块标识相对应的数据块的内容,并将读出的数据块内容中与待读取数据区域的重叠部分写入上述步骤(2 3 1)的内存空间中;(2 3 4)根据操作命令,更新上述文件元数据表中被读文件的元数据;(2 3 5)将上述步骤(2 3 1)的内存空间中的数据通过文件系统的驱动模块返回给应用程序;(2 4)当文件系统的驱动模块接收到来自应用程序的删除文件系统中的已有文件的操作命令时,进行以下操作(2 4 1)从上述文件组成表中检索属于被删除文件的数据块标识;(2 4 2)在上述数据块索引表中将与检索到的每个数据块标识相对应的数据块的引用次数减1,当引用次数变为0时,从数据块索引表中删除该数据块标识及与该数据块标识相对应的数据块引用次数,从存储设备上删除该数据块内容,并进行步骤(2 4 3),当引用次数未变为0时,进行步骤(2 4 3);(2 4 3)从上述文件组成表中删除被删除文件的所有记录;(2 4 4)从上述文件元数据表中删除被删除文件的元数据。
全文摘要
本发明涉及一种文件系统中实时删除重复数据的方法,属于计算机数据存储技术领域。在文件系统创建阶段,在嵌入式数据库中设置文件元数据表、数据块索引表和文件组成表;在文件系统使用阶段,通过文件系统驱动接收和响应应用程序对文件系统发起的操作命令,包括创建新文件、向已有文件写入数据、从已有文件读取数据和删除已有文件。本发明方法,同时支持定长和不定长的文件分块方法,可实时删除文件系统中的重复数据,节省存储空间,提高存储设备的利用效率,而且重复数据的删除过程对应用程序和用户完全透明,无缝兼容现有各种应用程序的文件操作,几乎不会对用户感受造成任何负面影响。
文档编号G06F17/30GK101908073SQ20101025273
公开日2010年12月8日 申请日期2010年8月13日 优先权日2010年8月13日
发明者唐力, 汪东升 申请人:清华大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1