发明名称 一种文件系统中实时删除重复数据的方法
摘要 本发明涉及一种文件系统中实时删除重复数据的方法,属于计算机数据存储技术领域。在文件系统创建阶段,在嵌入式数据库中设置文件元数据表、数据块索引表和文件组成表;在文件系统使用阶段,通过文件系统驱动接收和响应应用程序对文件系统发起的操作命令,包括创建新文件、向已有文件写入数据、从已有文件读取数据和删除已有文件。本发明方法,同时支持定长和不定长的文件分块方法,可实时删除文件系统中的重复数据,节省存储空间,提高存储设备的利用效率,而且重复数据的删除过程对应用程序和用户完全透明,无缝兼容现有各种应用程序的文件操作,几乎不会对用户感受造成任何负面影响。
申请公布号 CN101908073A 申请公布日期 2010.12.08
申请号 CN201010252734.0 申请日期 2010.08.13
申请人 清华大学 发明人 唐力;汪东升
分类号 G06F17/30(2006.01)I 主分类号 G06F17/30(2006.01)I
代理机构 北京清亦华知识产权代理事务所(普通合伙) 11201 代理人 罗文群
主权项 一种文件系统中实时删除重复数据的方法,其特征在于该方法包括以下步骤:(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)从上述文件元数据表中删除被删除文件的元数据。
地址 100084 北京市海淀区清华园1号