CN101957836B - 一种文件系统中可配置的实时透明压缩方法 - Google Patents
一种文件系统中可配置的实时透明压缩方法 Download PDFInfo
- Publication number
- CN101957836B CN101957836B CN2010102717881A CN201010271788A CN101957836B CN 101957836 B CN101957836 B CN 101957836B CN 2010102717881 A CN2010102717881 A CN 2010102717881A CN 201010271788 A CN201010271788 A CN 201010271788A CN 101957836 B CN101957836 B CN 101957836B
- Authority
- CN
- China
- Prior art keywords
- file
- data block
- compression algorithm
- data
- mentioned
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种文件系统中可配置的实时透明压缩方法,属于计算机数据存储技术领域。在文件系统创建阶段,在配置文件中设定对各种不同类别的文件使用何种压缩算法(压缩配置信息将在文件系统挂载阶段读如计算机内存),并在嵌入式数据库中设置文件元数据表、数据块索引表和文件组成表;在文件系统使用阶段,通过文件系统驱动接收和响应应用程序对文件系统发起的操作命令,并根据配置要求对读、写的数据进行实时透明的压缩操作。本发明方法能够在文件系统中为各种类别的文件灵活配置适宜的压缩策略和压缩算法,从而既有效节省存储空间,又避免浪费计算资源,而且,由于本方法的压缩过程对应用程序和用户透明,因此不会影响读写文件的便捷性。
Description
技术领域
本发明涉及一种文件系统中可配置的实时透明压缩方法,属于计算机数据存储技术领域。
背景技术
随着各种数码设备的广泛应用,人们需要保存的数字化数据也日益飞速增长。数据压缩技术通过采用更适合待存储数据特点的编码机制,降低存储数据中的统计冗余度,能够起到提高存储空间利用效率和有效节省存储资源的作用。因此,各种数据压缩方法在计算机存储系统中得到了十分广泛的应用。
目前,在计算机存储系统中实现数据压缩的方法主要可分为以下两类,而无论哪类方法都存在明显不足。第一类方法是将数据压缩作为一项独立于存储系统之外的可选功能。在这类方法中,数据压缩通常被实现为工具软件的形式,首先用压缩软件对待存储的数据进行处理,然后再将处理后得到的压缩文件保存到存储系统中。在Windows操作系统下的常用压缩软件有WinZip和WinRar等,在Unix/Linux操作系统下也有很多被广泛应用的压缩工具可控选择,如gzip、bzip2和lzma等。
上述方法的缺点主要体现在以下几个方面。首先,数据压缩成为数据存储流程中的一个额外操作过程,由于用户必须主动使用压缩软件对其需要存储的文件进行压缩,因此给用户带来不便。其次,压缩后的数据必须先经过解压缩后才能访问其内容,由于压缩软件通常以一个甚至多个文件作为一次压缩过程的操作对象,这种粗粒度的压缩方法将严重损害从被压缩文件中读取数据以及向被压缩文件中写入或修改数据的灵活性和便捷性。最后,压缩和解压缩的过程都要求存储系统中有足够的空余空间才能顺利进行,这是因为在压缩和解压缩完成之前,原始数据和生成的压缩数据需要被同时保存在磁盘上,所以,如果开始时存储系统中的空余空间小于新生成的数据大小,压缩或解压缩的过程就无法顺利完成。
另一类在计算机存储系统中实现数据压缩的方法是将数据压缩内嵌入存储系统之中,所为存储系统自有的一种能力。这类方法的典型代表是各种支持压缩功能的文件系统。例如,Windows操作系统下的NTFS文件系统就支持在整个分区上或者分区中的某一文件夹上启用压缩功能,启用压缩功能后,所有存储到该分区或文件夹中的文件都会被自动压缩以节省磁盘空间,当数据被读出时又会被解压缩以恢复原状,由于压缩和解压缩的过程都是在NTFS文件系统内部完成,因此除对数据读写速度造成一定性能影响外,这种方法实现的数据压缩功能对用户几乎是完全透明的。类似地,在Linux操作系统下也有一些内在支持数据压缩的文件系统,如JFFS2和e2compr等。
然而,现有的各种支持压缩功能的文件系统也存在显著缺点。一旦启用这些文件系统中的压缩功能后,所有存储到文件系统中的文件数据都将被等同地进行压缩。然而,对不同类型的文件区别对待其实是非常必要的。因为尽管压缩操作能够显著缩小大多数文本文件占用的空间,但并不是对每个文件而言压缩都是一种明智的选择。对于某些多媒体类型的文件,例如用MPEG-2编码的视频文件和用MP3编码的音频文件,它们本身就已经在编码阶段对数据进行了高压缩比的有损压缩,这些文件中数据的统计冗余度已经被降到极低的水平,所以,当压缩文件系统中再一次对这些文件进行无损压缩算法时,不但难以有效减小这些文件的大小,甚至经常会出现压缩后的数据反而大于压缩前数据的情况。因此,压缩文件系统对这些不宜再被压缩的文件的压缩过程并不能带来有效节省存储空间的好处,再考虑到压缩过程对计算资源的额外开销以及对数据读、写性能的负面影响,现有压缩文件系统中这种不区分文件类型的盲目压缩方法无疑是不恰当且得不偿失的。
发明内容
本发明的目的是提出一种文件系统中可配置的实时透明压缩方法,通过文件系统驱动模块截获来自应用程序的创建文件和向文件中写入数据的操作命令,然后根据操作命令提供的信息和数据,实时进行数据切块和重复数据删除,并只将新产生的数据块存储到磁盘上,从而在根本上实现以数据块为基本存储单元的文件系统及其存储和组织结构,达到节省存储空间的目的。
本发明提出的文件系统中实时删除重复数据的方法,包括以下步骤:
(1)由用户根据文件的扩展名或文件的文件夹路径对文件进行分类,确定需压缩文件的种类及相应的压缩算法,并将需压缩文件的种类及相应的压缩算法存储到一个配置文件中;
(2)当文件系统被挂载入计算机的操作系统时,从上述配置文件中读取需压缩文件的种类及相应的压缩算法,根据读取的需压缩文件种类及相应压缩算法,在计算机内存中构建两个哈希表:第一哈希表和第二哈希表,使第一哈希表的键为文件夹路径,值为与该文件夹路径表示的文件种类相对应的压缩算法,使第二哈希表的键为文件扩展名,值为与该文件扩展名表示的文件种类相对应的压缩算法;
(3)在嵌入式数据库中设置文件元数据表、数据块索引表和文件组成表,用其中的文件元数据表记录上述文件系统中每个文件的元数据,包括文件标识、文件名、父文件夹标识、文件大小、文件类型、访问权限、文件的创建时间、修改时间、访问时间和文件的扩展名以及对该文件使用的压缩算法,用其中的数据块索引表记录上述文件系统中每个文件的数据块标识以及与该数据块标识相对应的数据块的引用次数,其中数据块标识为该数据块内容的哈希值;用其中的文件组成表记录组成上述文件系统中每个文件的数据块的信息,该信息包括该数据块所属文件的文件标识、数据块起始位置、数据块大小和数据块标识,数据块起始位置和数据块大小决定了该数据块在该数据块所属文件中覆盖的数据区域;
(4)利用计算机中的文件系统驱动模块,接收和响应计算机应用程序对上述文件系统发起的操作命令,该操作命令包括创建新文件夹、创建新文件、向已有文件写入数据、从已有文件读取数据和删除已有文件,具体过程如下:
(4-1)当文件系统驱动模块接收到来自计算机应用程序的创建新文件夹的操作命令时,进行以下操作:
(4-1-1)根据操作命令中被创建文件夹的父文件夹标识,在上述文件元数据表中检索出该父文件夹标识表示的文件种类使用的压缩算法,若检索结果为未使用任何压缩算法,则通过上述文件元数据表逐级向上递归检索,得到被创建文件夹的路径,并在上述第一哈希表中检索该被创建文件夹的路径,若检索到路径,则将该检索到的路径的压缩算法作为该被创建文件夹的压缩算法,若检索不到路径,则将该被创建文件夹的压缩算法记为未使用任何压缩算法,若检索结果为使用了压缩算法,则将检索到的压缩算法作为被创建文件夹的压缩算法;
(4-1-2)在上述文件元数据表中记录被创建文件夹的元数据;
(4-2)当文件系统的驱动模块接收到来自计算机应用程序的创建新文件的操作命令时,进行以下操作:
(4-2-1)根据操作命令中被创建文件的文件名得到被创建文件的扩展名,在上述第二哈希表中检索该被创建文件的扩展名,若检索到被创建文件的扩展名,则将与检索得到的由被创建文件的扩展名表示的文件种类相对应的压缩算法作为被创建文件的压缩算法,若检索不到被创建文件的扩展名,则根据操作命令中该被创建文件的父文件夹标识,在上述文件元数据表中检索该父文件夹标识表示的文件种类使用的压缩算法,若检索结果为未使用任何压缩算法,则将该被创建文件的压缩算法记为未使用任何压缩算法,若检索结果为使用了压缩算法,则将该压缩算法作为被创建文件的压缩算法;
(4-2-2)在上述文件元数据表中记录被创建文件的元数据;
(4-3)当文件系统的驱动模块接收到来自计算机应用程序的向已有文件写入数据的操作命令时,进行以下操作:
(4-3-1)根据操作命令中被写文件的文件标识、写入位置和写入数据大小,从上述文件组成表中检索属于该被写文件的两个数据块标识,且满足与该两个数据块标识相对应的数据块为与被写入数据区域相互重叠的首、尾两个数据块,并根据该检索到的数据块标识,从存储设备中读取与该数据块标识相对应的数据块内容;
(4-3-2)根据操作命令中被写文件的文件标识,从上述文件元数据表中检索出被写文件使用的压缩算法,若检索结果为未使用任何压缩算法,则进行步骤(4-3-3),若检索结果为使用了压缩算法,则使用该压缩算法对步骤(4-3-1)得到的数据块内容进行解压缩;
(4-3-3)将上述步骤(4-3-1)的数据块内容中或步骤(4-3-1)经解压缩的数据块内容中与被写入数据区域不重叠的数据拼接到被写入数据的两侧,得到拼接后的数据及数据区域;
(4-3-4)从上述文件组成表中检索出属于该被写文件的数据块标识、且满足与该数据块标识相对应的数据块的起始位置位于上述步骤(4-3-3)数据区域之内;
(4-3-5)将与上述数据块索引表中检索到的数据块标识相对应的数据块的引用次数减1,当引用次数不为0时,进行步骤(4-3-6),当引用次数成为0时,从数据块索引表中删除该数据块标识及与该数据块标识相对应的数据块引用次数,并从存储设备上删除该数据块内容,进行步骤(4-3-6);
(4-3-6)将上述步骤(4-3-3)拼接后的数据切分成一组新数据块,并根据步骤(4-3-2)中的检索结果对每个新数据块做如下处理:若步骤(4-3-2)中的检索结果为未使用任何压缩算法,则进行步骤(4-3-7),若检索结果为使用了压缩算法,则使用该压缩算法对每个新数据块的内容进行解压缩;
(4-3-7)从上述数据块索引表中分别搜索与上述(4-3-6)的一组新数据块或经过压缩的数据块相对应的每个数据块标识:若检索到该数据块标识,则在数据块索引表中将与该数据块标识相对应的数据块的引用次数加1,若检索不到该数据块标识,则在数据块索引表中添加该数据块标识,将与该数据块标识相对应的数据块的引用次数设置为1,并将与上述数据块标识相对应的新数据块或经过压缩的数据块存储到计算机存储设备上,在上述文件组成表中记录被写文件的文件标识、上述数据块的起始位置、上述数据块的大小以及上述数据块的标识;
(4-3-8)根据向已有文件写入数据的操作命令,更新上述文件元数据表中被写文件的元数据;
(4-4)当文件系统的驱动模块接收到来自计算机应用程序的从文件系统的已有文件中读取数据的操作命令时,进行以下操作:
(4-4-1)根据操作命令,在计算机内存中分配与待读取数据的大小相等的内存空间,并将该内存空间初始化为空白;
(4-4-2)根据操作命令中的被读文件的文件标识、读取位置和待读取数据的大小,计算出被读文件中的待读取数据区域;
(4-4-3)根据上述操作命令中的被读文件的文件标识,从上述文件元数据表中检索该被读文件使用的压缩算法;
(4-4-4)根据操作命令中的被读文件的文件标识和读取位置,从文件组成表中检索属于该被读文件的数据块标识,数据块标识满足:与该数据块标识相对应的数据块是起始位置处于上述读取位置之前的数据块中的最后一个数据块,若检索到该数据块标识,且该数据块区域与步骤(4-4-2)的待读取数据区域存在重叠,则读取该数据块内容,并根据步骤(4-4-3)的检索结果对该读取的数据块内容做如下处理:若步骤(4-4-3)的检索结果为被读文件未使用任何压缩算法,则将读取的数据块内容中与步骤(4-4-2)的待读取数据区域的重叠部分写入步骤(4-4-1)的内存空间的头部,进行步骤(4-4-5),若步骤(4-4-3)的检索结果为被读文件使用了压缩算法,则利用检索到的压缩算法对读取的数据块内容进行解压缩,并将解压缩后的数据块内容中与步骤(4-4-2)的待读取数据区域的重叠部分写入步骤(4-4-1)的内存空间的头部,进行步骤(4-4-5);若检索不到该数据块标识,或者与检索到的数据标识相对应的数据块区域不存在与步骤(4-4-2)的待读取数据区域相重叠的部分,进行步骤(4-4-5);
(4-4-5)根据操作命令中的被读文件的文件标识,从文件组成表中检索属于该被读文件的数据块标识,且满足与该数据块标识相对应的数据块的起始位置处于步骤(4-4-2)的待读取数据区域内,并读取与检索到的每个数据块标识相对应的数据块内容,根据步骤(4-4-3)的检索结果对该读取的数据块内容做如下处理:若步骤(4-4-3)的检索结果为被读文件未使用任何压缩算法,则将读取的数据块内容与步骤(4-4-2)的待读取数据区域的重叠部分写入步骤(4-4-1)的内存空间中,进行步骤(4-4-6),若步骤(4-4-3)的检索结果为被读文件使用了压缩算法,则利用检索到的压缩算法对读取的数据块内容进行解压缩,并将解压缩后的数据块内容与步骤(4-4-2)的待读取数据区域的重叠部分写入步骤(4-4-1)的内存空间的头部,进行步骤(4-4-6);
(4-4-6)根据操作命令,更新上述文件元数据表中被读文件的元数据;
(4-4-7)将上述步骤(4-4-1)的内存空间中的数据通过文件系统的驱动模块返回给计算机应用程序;
(4-5)当文件系统的驱动模块接收到来自计算机应用程序的删除文件系统中已有文件的操作命令时,进行以下操作:
(4-5-1)从上述文件组成表中检索出属于被删除文件的数据块标识,在上述数据块索引表中将与检索到的每个数据块标识相对应的数据块的引用次数减1,若引用次数变为0,从数据块索引表中删除该数据块标识及与该数据块标识相对应的数据块引用次数,并从计算机存储设备上删除该数据块内容,进行步骤(4-5-2),若引用次数不为0,进行步骤(4-5-2);
(4-5-2)从上述文件组成表中删除被删除文件的所有记录;
(4-5-3)从上述文件元数据表中删除被删除文件的元数据。
本发明提出的文件系统中可配置的实时透明压缩方法的方法,具备以下优点:
1、利用本发明的方法,能够对文件系统中的数据进行压缩,以节省存储空间。
2、与现有的其他压缩文件系统对文件系统中的所有文件都采用相同的压缩算法进行压缩不同,本发明的方法能够通过配置文件,为各种不同的文件类别灵活设定与该文件类别相适应的压缩算法,从而避免对已经过压缩编码的文件类别再次进行徒劳的压缩操作,达到节省计算资源和提高压缩效率的目的。
3、与通过压缩软件实现数据压缩的方法相比,本发明方法使得在将文件保存到文件系统的时自动进行数据压缩,由于该数据压缩过程对应用程序和用户完全透明,应用程序和用户能够对文件系统中的文件可直接实现随机的读、写操作,因此本发明方法能够无缝兼容各种现有应用程序的文件操作,几乎不会对用户感受造成任何负面影响。
附图说明
图1是本发明方法的一个配置文件示例。
图2是本发明方法中文件系统驱动模块接收到来自应用程序的向已有文件写入数据的操作命令时的流程框图。
图3是本发明方法执行向已有文件写入数据的示意图。
图4是本发明方法中文件系统驱动模块接收到来自应用程序的从文件系统中的已有文件中读取数据的操作命令时的流程框图。
图5是本发明方法根据操作命令中的读取位置、读取数据大小计算待读取数据区域的示意图。
具体实施方式
下面结合附图,详细介绍本发明提出的一种文件系统中可配置的实时透明压缩方法:
(1)由用户根据文件的扩展名或文件的文件夹路径对文件进行分类,确定需压缩文件的种类及相应的压缩算法,并将需压缩文件的种类及相应的压缩算法存储到一个配置文件中。图1为本发明方法的一个实施例中,以XML形式实现配置文件的一个示例,该示例的配置文件中共设定了名称分别为c1、c2、c3的三种文件种类及相应的压缩算法。c1和c2都是根据文件的扩展名设定的文件种类,c1包括文件系统中所有扩展名为txt或doc的文件,由于配置文件中c1类下的algorithm被设定为“bzip2”,因此在向文件系统中存储c1类文件时,将使用bzip2压缩算法对数据进行压缩,c2包括文件系统中所有文件扩展名为avi、mp3或jpg的文件,配置文件中c2类的“algorithm”被设定为“none”,表明在向文件系统中存储c3类文件时,将不使用任何压缩算法对数据进行压缩。C3是根据文件夹路径设定的文件种类,包括文件系统中文件夹/home/data/books中及该文件夹的各级子文件夹中的所有文件,c3类文件使用的压缩算法被设定为“lzma”,表明在向文件系统中存储c3类文件时,将使用lzma压缩算法对数据进行压缩。此外,配置文件中还通过“default”的“algorithm”设定默认压缩算法为“none”,以指明对配置文件中所设定的文件种类即c1、c2和c3之外的所有文件,都不使用任何压缩算法。
(2)当文件系统被挂载入计算机的操作系统时,从上述配置文件中读取需压缩文件的种类及相应的压缩算法,根据读取的需压缩文件种类及相应压缩算法,在计算机内存中构建两个哈希表:第一哈希表和第二哈希表,使第一哈希表的键为文件夹路径,值为与该文件夹路径表示的文件种类相对应的压缩算法,使第二哈希表的键为文件扩展名,值为与该文件扩展名表示的文件种类相对应的压缩算法。
(3)在嵌入式数据库中设置文件元数据表、数据块索引表和文件组成表,用其中的文件元数据表记录上述文件系统中每个文件的元数据,包括文件标识、文件名、父文件夹标识、文件大小、文件类型、访问权限、文件的创建时间、修改时间、访问时间和文件的扩展名以及该文件使用的压缩算法,用其中的数据块索引表记录上述文件系统中每个文件的数据块标识以及与该数据块标识相对应的数据块的引用次数,数据块标识为该数据块内容的哈希值,用其中的文件组成表记录组成上述文件系统中每个文件的数据块的信息,该信息包括该数据块所属文件的文件标识、数据块起始位置、数据块大小和数据块标识,数据块起始位置和数据块大小决定了该数据块在该数据块所属文件中覆盖的数据区域。
(4)利用计算机中的文件系统驱动模块,接收和响应计算机应用程序对上述文件系统发起的操作命令,该操作命令包括创建新文件夹、创建新文件、向已有文件写入数据、从已有文件读取数据和删除已有文件,具体过程如下:
(4-1)当文件系统驱动模块接收到来自计算机应用程序的创建新文件夹的操作命令时,进行以下操作:
(4-1-1)根据操作命令中被创建文件夹的父文件夹标识,在上述文件元数据表中检索出该父文件夹标识表示的文件种类使用的压缩算法,若检索结果为未使用任何压缩算法,则通过上述文件元数据表逐级向上递归检索,得到被创建文件夹的路径,并在上述第一哈希表中检索该被创建文件夹的路径,若检索到路径,则将该检索到的路径的压缩算法作为该被创建文件夹的压缩算法,若检索不到路径,则将该被创建文件夹的压缩算法记为未使用任何压缩算法,若检索结果为使用了压缩算法,则将检索到的压缩算法作为被创建文件夹的压缩算法。例如,基于图1所示的配置文件,假设文件系统中已经创建过文件夹/home/data,若当前在/home/data之下创建新的文件夹books,则首先在文件元数据表中检索出/home/data表示的文件种类使用的压缩算法。由于检索结果为未使用任何压缩算法,因此,通过上述文件元数据表逐级向上递归检索,得到被创建文件夹的路径/home/data/books,并在上述第一哈希表中检索该被创建文件夹的路径,并得到该被创建文件夹应使用的压缩算法为lzma。
(4-1-2)在上述文件元数据表中记录被创建文件夹的元数据。
(4-2)当文件系统的驱动模块接收到来自计算机应用程序的创建新文件的操作命令时,进行以下操作:
(4-2-1)根据操作命令中被创建文件的文件名得到被创建文件的扩展名,在上述第二哈希表中检索该被创建文件的扩展名,若检索到被创建文件的扩展名,则将与检索得到的由被创建文件的扩展名表示的文件种类相对应的压缩算法作为被创建文件的压缩算法,若检索不到被创建文件的扩展名,则根据操作命令中该被创建文件的父文件夹标识,在上述文件元数据表中检索该父文件夹标识表示的文件种类使用的压缩算法,若检索结果为未使用任何压缩算法,则将该被创建文件的压缩算法记为未使用任何压缩算法,若检索结果为使用了压缩算法,则将该压缩算法作为被创建文件的压缩算法。例如,基于图1所示的配置文件,当在文件系统中创建新文件abc.txt时,首先在第二哈希表中检索该被创建文件的扩展名txt,并将检索得到的压缩算法bzip2作为被创建文件abc.txt使用的压缩算法;当在文件系统的文件夹/home/data/books中创建新文件xyz.xls时,首先在第二哈希表中检索该被创建文件的扩展名xls,由于检索不到该被创建文件的扩展名,因此需要进一步在文件元数据表中检索文件夹/home/data/books表示的文件种类使用的压缩算法,并将检索得到的压缩算法lzma作为被创建文件xyz.xls使用的压缩算法。
(4-2-2)在上述文件元数据表中记录被创建文件的元数据。
(4-3)当文件系统的驱动模块接收到来自计算机应用程序的向已有文件写入数据的操作命令时,参见图2所示的流程框图,进行以下操作:
(4-3-1)根据操作命令中被写文件的文件标识、写入位置和写入数据大小,从上述文件组成表中检索属于该被写文件的两个数据块标识,且满足与该两个数据块标识相对应的数据块为与被写入数据区域相互重叠的首、尾两个数据块,并根据该检索到的数据块标识,从存储设备中读取与该数据块标识相对应的数据块内容。在图3中的示例展示了写入位置、写入数据大小与被写入数据区域的联系,在该示例中,与被写入数据区域相互重叠的首、尾两个数据块为A和E。
(4-3-2)根据操作命令中被写文件的文件标识,从上述文件元数据表中检索出被写文件使用的压缩算法,若检索结果为未使用任何压缩算法,则进行步骤(4-3-3),若检索结果为使用了压缩算法,则使用该压缩算法对步骤(4-3-1)得到的数据块内容进行解压缩。
(4-3-3)将上述步骤(4-3-1)的数据块内容中或步骤(4-3-1)经解压缩的数据块内容中与被写入数据区域不重叠的数据拼接到被写入数据的两侧,得到拼接后的数据及数据区域,参见图3中的示例。
(4-3-4)从上述文件组成表中检索出属于该被写文件的数据块标识、且满足与该数据块标识相对应的数据块的起始位置位于上述步骤(4-3-3)数据区域之内。对于图3中示例的情况,该检索将得到与数据块B、C、D和E对应的数据块标识。
(4-3-5)将与上述数据块索引表中检索到的数据块标识相对应的数据块的引用次数减1,当引用次数不为0时,进行步骤(4-3-6),当引用次数成为0时,从数据块索引表中删除该数据块标识及与该数据块标识相对应的数据块引用次数,并从存储设备上删除该数据块内容,进行步骤(4-3-6)。
(4-3-6)将上述步骤(4-3-3)拼接后的数据切分成一组新数据块,并根据步骤
(4-3-2)中的检索结果对每个新数据块做如下处理:若步骤(4-3-2)中的检索结果为未使用任何压缩算法,则进行步骤(4-3-7),若检索结果为使用了压缩算法,则使用该压缩算法对每个新数据块的内容进行解压缩,并进行步骤(4-3-7)。
(4-3-7)从上述数据块索引表中分别搜索与上述(4-3-6)的一组新数据块或经过压缩的数据块相对应的每个数据块标识:若检索到该数据块标识,则在数据块索引表中将与该数据块标识相对应的数据块的引用次数加1,若检索不到该数据块标识,则在数据块索引表中添加该数据块标识,将与该数据块标识相对应的数据块的引用次数设置为1,并将与上述数据块标识相对应的新数据块或经过压缩的数据块存储到计算机存储设备上,在上述文件组成表中记录被写文件的文件标识、上述数据块的起始位置、上述数据块的大小以及上述数据块的标识。
(4-3-8)根据向已有文件写入数据的操作命令,更新上述文件元数据表中被写文件的元数据。
(4-4)当文件系统的驱动模块接收到来自计算机应用程序的从文件系统的已有文件中读取数据的操作命令时,参见图4所示的流程框图,进行以下操作:
(4-4-1)根据操作命令,在计算机内存中分配与待读取数据的大小相等的内存空间,并将该内存空间初始化为空白。
(4-4-2)根据操作命令中的被读文件的文件标识、读取位置和待读取数据的大小,计算出被读文件中的待读取数据区域,如图5所示。
(4-4-3)根据上述操作命令中的被读文件的文件标识,从上述文件元数据表中检索该被读文件使用的压缩算法。
(4-4-4)根据操作命令中的被读文件的文件标识和读取位置,从文件组成表中检索属于该被读文件的数据块标识,数据块标识满足:与该数据块标识相对应的数据块是起始位置处于上述读取位置之前的数据块中的最后一个数据块,若检索到该数据块标识,且该数据块区域与步骤(4-4-2)的待读取数据区域存在重叠,则读取该数据块内容,并根据步骤(4-4-3)的检索结果对该读取的数据块内容做如下处理:若步骤(4-4-3)的检索结果为被读文件未使用任何压缩算法,则将读取的数据块内容中与步骤(4-4-2)的待读取数据区域的重叠部分写入步骤(4-4-1)的内存空间的头部,进行步骤(4-4-5),若步骤(4-4-3)的检索结果为被读文件使用了压缩算法,则利用检索到的压缩算法对读取的数据块内容进行解压缩,并将解压缩后的数据块内容中与步骤(4-4-2)的待读取数据区域的重叠部分写入步骤(4-4-1)的内存空间的头部,进行步骤(4-4-5);若检索不到该数据块标识,或者与检索到的数据标识相对应的数据块区域不存在与步骤(4-4-2)的待读取数据区域相重叠的部分,进行步骤(4-4-5);
(4-4-5)根据操作命令中的被读文件的文件标识,从文件组成表中检索属于该被读文件的数据块标识,且满足与该数据块标识相对应的数据块的起始位置处于步骤(4-4-2)的待读取数据区域内,并读取与检索到的每个数据块标识相对应的数据块内容,根据步骤(4-4-3)的检索结果对该读取的数据块内容做如下处理:若步骤(4-4-3)的检索结果为被读文件未使用任何压缩算法,则将读取的数据块内容与步骤(4-4-2)的待读取数据区域的重叠部分写入步骤(4-4-1)的内存空间中,进行步骤(4-4-6),若步骤(4-4-3)的检索结果为被读文件使用了压缩算法,则利用检索到的压缩算法对读取的数据块内容进行解压缩,并将解压缩后的数据块内容与步骤(4-4-2)的待读取数据区域的重叠部分写入步骤(4-4-1)的内存空间的头部,进行步骤(4-4-6);
(4-4-6)根据操作命令,更新上述文件元数据表中被读文件的元数据;
(4-4-7)将上述步骤(4-4-1)的内存空间中的数据通过文件系统的驱动模块返回给计算机应用程序;
(4-5)当文件系统的驱动模块接收到来自计算机应用程序的删除文件系统中已有文件的操作命令时,进行以下操作:
(4-5-1)从上述文件组成表中检索出属于被删除文件的数据块标识,在上述数据块索引表中将与检索到的每个数据块标识相对应的数据块的引用次数减1,若引用次数变为0,从数据块索引表中删除该数据块标识及与该数据块标识相对应的数据块引用次数,并从计算机存储设备上删除该数据块内容,进行步骤(4-5-2),若引用次数不为0,进行步骤(4-5-2);
(4-5-2)从上述文件组成表中删除被删除文件的所有记录;
(4-5-3)从上述文件元数据表中删除被删除文件的元数据。
Claims (1)
1.一种文件系统中可配置的实时透明压缩方法,其特征在于该方法包括以下步骤:
(1)由用户根据文件的扩展名或文件的文件夹路径对文件进行分类,确定需压缩文件的种类及相应的压缩算法,并将需压缩文件的种类及相应的压缩算法存储到一个配置文件中;
(2)当文件系统被挂载入计算机的操作系统时,从上述配置文件中读取需压缩文件的种类及相应的压缩算法,根据读取的需压缩文件种类及相应压缩算法,在计算机内存中构建两个哈希表:第一哈希表和第二哈希表,使第一哈希表的键为文件夹路径,值为与该文件夹路径表示的文件种类相对应的压缩算法,使第二哈希表的键为文件扩展名,值为与该文件扩展名表示的文件种类相对应的压缩算法;
(3)在嵌入式数据库中设置文件元数据表、数据块索引表和文件组成表,用其中的文件元数据表记录上述文件系统中每个文件的元数据,包括文件标识、文件名、父文件夹标识、文件大小、文件类型、访问权限、文件的创建时间、修改时间、访问时间和文件的扩展名以及对该文件使用的压缩算法,用其中的数据块索引表记录上述文件系统中每个文件的数据块标识以及与该数据块标识相对应的数据块的引用次数,其中数据块标识为该数据块内容的哈希值;用其中的文件组成表记录组成上述文件系统中每个文件的数据块的信息,该信息包括该数据块所属文件的文件标识、数据块起始位置、数据块大小和数据块标识,数据块起始位置和数据块大小决定了该数据块在该数据块所属文件中覆盖的数据区域;
(4)利用计算机中的文件系统驱动模块,接收和响应计算机应用程序对上述文件系统发起的操作命令,该操作命令包括创建新文件夹、创建新文件、向已有文件写入数据、从已有文件读取数据和删除已有文件,具体过程如下:
(4-1)当文件系统驱动模块接收到来自计算机应用程序的创建新文件夹的操作命令时,进行以下操作:
(4-1-1)根据操作命令中被创建文件夹的父文件夹标识,在上述文件元数据表中检索出该父文件夹标识表示的文件种类使用的压缩算法,若检索结果为未使用任何压缩算法,则通过上述文件元数据表逐级向上递归检索,得到被创建文件夹的路径,并在上述第一哈希表中检索该被创建文件夹的路径,若检索到路径,则将该检索到的路径的压缩算法作为该被创建文件夹的压缩算法,若检索不到路径,则将该被创建文件夹的压缩算法记为未使用任何压缩算法,若检索结果为使用了压缩算法,则将检索到的压缩算法作为被创建文件夹的压缩算法;
(4-1-2)在上述文件元数据表中记录被创建文件夹的元数据;
(4-2)当文件系统的驱动模块接收到来自计算机应用程序的创建新文件的操作命令时,进行以下操作:
(4-2-1)根据操作命令中被创建文件的文件名得到被创建文件的扩展名,在上述第二哈希表中检索该被创建文件的扩展名,若检索到被创建文件的扩展名,则将与检索得到的由被创建文件的扩展名表示的文件种类相对应的压缩算法作为被创建文件的压缩算法,若检索不到被创建文件的扩展名,则根据操作命令中该被创建文件的父文件夹标识,在上述文件元数据表中检索该父文件夹标识表示的文件种类使用的压缩算法,若检索结果为未使用任何压缩算法,则将该被创建文件的压缩算法记为未使用任何压缩算法,若检索结果为使用了压缩算法,则将该压缩算法作为被创建文件的压缩算法;
(4-2-2)在上述文件元数据表中记录被创建文件的元数据;
(4-3)当文件系统的驱动模块接收到来自计算机应用程序的向已有文件写入数据的操作命令时,进行以下操作:
(4-3-1)根据操作命令中被写文件的文件标识、写入位置和写入数据大小,从上述文件组成表中检索属于该被写文件的两个数据块标识,且满足与该两个数据块标识相对应的数据块为与被写入数据区域相互重叠的首、尾两个数据块,并根据该检索到的数据块标识,从存储设备中读取与该数据块标识相对应的数据块内容;
(4-3-2)根据操作命令中被写文件的文件标识,从上述文件元数据表中检索出被写文件使用的压缩算法,若检索结果为未使用任何压缩算法,则进行步骤(4-3-3),若检索结果为使用了压缩算法,则使用该压缩算法对步骤(4-3-1)得到的数据块内容进行解压缩;
(4-3-3)将上述步骤(4-3-1)的数据块内容中或步骤(4-3-1)经解压缩的数据块内容中与被写入数据区域不重叠的数据拼接到被写入数据的两侧,得到拼接后的数据及数据区域;
(4-3-4)从上述文件组成表中检索出属于该被写文件的数据块标识、且满足与该数据块标识相对应的数据块的起始位置位于上述步骤(4-3-3)数据区域之内;
(4-3-5)将与上述数据块索引表中检索到的数据块标识相对应的数据块的引用次数减1,当引用次数不为0时,进行步骤(4-3-6),当引用次数成为0时,从数据块索引表中删除该数据块标识及与该数据块标识相对应的数据块引用次数,并从存储设备上删除该数据块内容,进行步骤(4-3-6);
(4-3-6)将上述步骤(4-3-3)拼接后的数据切分成一组新数据块,并根据步骤(4-3-2)中的检索结果对每个新数据块做如下处理:若步骤(4-3-2)中的检索结果为未使用任何压缩算法,则进行步骤(4-3-7),若检索结果为使用了压缩算法,则使用该压缩算法对每个新数据块的内容进行解压缩;
(4-3-7)从上述数据块索引表中分别搜索与上述(4-3-6)的一组新数据块或经过压缩的数据块相对应的每个数据块标识:若检索到该数据块标识,则在数据块索引表中将与该数据块标识相对应的数据块的引用次数加1,若检索不到该数据块标识,则在数据块索引表中添加该数据块标识,将与该数据块标识相对应的数据块的引用次数设置为1,并将与上述数据块标识相对应的新数据块或经过压缩的数据块存储到计算机存储设备上,在上述文件组成表中记录被写文件的文件标识、上述数据块的起始位置、上述数据块的大小以及上述数据块的标识;
(4-3-8)根据向已有文件写入数据的操作命令,更新上述文件元数据表中被写文件的元数据;
(4-4)当文件系统的驱动模块接收到来自计算机应用程序的从文件系统的已有文件中读取数据的操作命令时,进行以下操作:
(4-4-1)根据操作命令,在计算机内存中分配与待读取数据的大小相等的内存空间,并将该内存空间初始化为空白;
(4-4-2)根据操作命令中的被读文件的文件标识、读取位置和待读取数据的大小,计算出被读文件中的待读取数据区域;
(4-4-3)根据上述操作命令中的被读文件的文件标识,从上述文件元数据表中检索该被读文件使用的压缩算法;
(4-4-4)根据操作命令中的被读文件的文件标识和读取位置,从文件组成表中检索属于该被读文件的数据块标识,数据块标识满足:与该数据块标识相对应的数据块是起始位置处于上述读取位置之前的数据块中的最后一个数据块,若检索到该数据块标识,且该数据块区域与步骤(4-4-2)的待读取数据区域存在重叠,则读取该数据块内容,并根据步骤(4-4-3)的检索结果对该读取的数据块内容做如下处理:若步骤(4-4-3)的检索结果为被读文件未使用任何压缩算法,则将读取的数据块内容中与步骤(4-4-2)的待读取数据区域的重叠部分写入步骤(4-4-1)的内存空间的头部,进行步骤(4-4-5),若步骤(4-4-3)的检索结果为被读文件使用了压缩算法,则利用检索到的压缩算法对读取的数据块内容进行解压缩,并将解压缩后的数据块内容中与步骤(4-4-2)的待读取数据区域的重叠部分写入步骤(4-4-1)的内存空间的头部,进行步骤(4-4-5);若检索不到该数据块标识,或者与检索到的数据标识相对应的数据块区域不存在与步骤(4-4-2)的待读取数据区域相重叠的部分,进行步骤(4-4-5);
(4-4-5)根据操作命令中的被读文件的文件标识,从文件组成表中检索属于该被读文件的数据块标识,且满足与该数据块标识相对应的数据块的起始位置处于步骤(4-4-2)的待读取数据区域内,并读取与检索到的每个数据块标识相对应的数据块内容,根据步骤(4-4-3)的检索结果对该读取的数据块内容做如下处理:若步骤(4-4-3)的检索结果为被读文件未使用任何压缩算法,则将读取的数据块内容与步骤(4-4-2)的待读取数据区域的重叠部分写入步骤(4-4-1)的内存空间中,进行步骤(4-4-6),若步骤(4-4-3)的检索结果为被读文件使用了压缩算法,则利用检索到的压缩算法对读取的数据块内容进行解压缩,并将解压缩后的数据块内容与步骤(4-4-2)的待读取数据区域的重叠部分写入步骤(4-4-1)的内存空间中,进行步骤(4-4-6);
(4-4-6)根据操作命令,更新上述文件元数据表中被读文件的元数据;
(4-4-7)将上述步骤(4-4-1)的内存空间中的数据通过文件系统的驱动模块返回给计算机应用程序;
(4-5)当文件系统的驱动模块接收到来自计算机应用程序的删除文件系统中已有文件的操作命令时,进行以下操作:
(4-5-1)从上述文件组成表中检索出属于被删除文件的数据块标识,在上述数据块索引表中将与检索到的每个数据块标识相对应的数据块的引用次数减1,若引用次数变为0,从数据块索引表中删除该数据块标识及与该数据块标识相对应的数据块引用次数,并从计算机存储设备上删除该数据块内容,进行步骤(4-5-2),若引用次数不为0,进行步骤(4-5-2);
(4-5-2)从上述文件组成表中删除被删除文件的所有记录;
(4-5-3)从上述文件元数据表中删除被删除文件的元数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010102717881A CN101957836B (zh) | 2010-09-03 | 2010-09-03 | 一种文件系统中可配置的实时透明压缩方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010102717881A CN101957836B (zh) | 2010-09-03 | 2010-09-03 | 一种文件系统中可配置的实时透明压缩方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101957836A CN101957836A (zh) | 2011-01-26 |
CN101957836B true CN101957836B (zh) | 2012-07-11 |
Family
ID=43485166
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010102717881A Expired - Fee Related CN101957836B (zh) | 2010-09-03 | 2010-09-03 | 一种文件系统中可配置的实时透明压缩方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101957836B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI484360B (zh) * | 2012-10-24 | 2015-05-11 | 鴻海精密工業股份有限公司 | 文件自動分類方法及系統 |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102521256B (zh) * | 2011-11-17 | 2013-07-10 | 广东电网公司电力科学研究院 | 高可靠性的实时/历史数据库数据保护方法 |
US20130179409A1 (en) * | 2012-01-06 | 2013-07-11 | International Business Machines Corporation | Separation of data chunks into multiple streams for compression |
CN102761540B (zh) * | 2012-05-30 | 2014-11-19 | 北京奇虎科技有限公司 | 数据压缩方法、装置、系统以及服务器 |
CN104067523B (zh) | 2013-01-17 | 2018-03-09 | 华为技术有限公司 | 一种数据包处理方法和装置 |
CN106155934B (zh) * | 2016-06-27 | 2019-08-09 | 华中科技大学 | 一种云环境下基于重复数据的缓存方法 |
CN106341482B (zh) * | 2016-09-22 | 2019-07-30 | 江苏赞奇科技股份有限公司 | 基于文件类型的云渲染混合压缩传输系统与方法 |
CN108537007A (zh) * | 2017-03-04 | 2018-09-14 | 上海逐玛信息技术有限公司 | 一种针对基因测序数据的存取方法 |
CN113296709B (zh) * | 2017-06-02 | 2024-03-08 | 伊姆西Ip控股有限责任公司 | 用于去重的方法和设备 |
CN107910046A (zh) * | 2017-11-24 | 2018-04-13 | 郑州云海信息技术有限公司 | 一种医学图像实时压缩系统及方法 |
CN108363719B (zh) * | 2018-01-02 | 2022-10-21 | 中科边缘智慧信息科技(苏州)有限公司 | 分布式文件系统中可配置的透明压缩方法 |
CN109800182A (zh) * | 2019-01-18 | 2019-05-24 | 深圳忆联信息系统有限公司 | 一种降低写放大的数据存储处理方法及其系统 |
EP3926450B1 (de) * | 2020-06-18 | 2022-05-11 | Paragon Software GmbH | Dynamisches herstellen einer kompatibilität von dateisystemen in echtzeit |
CN111949621B (zh) * | 2020-07-22 | 2023-12-29 | 金钱猫科技股份有限公司 | 一种基于场景切换的文件压缩存储方法及终端 |
CN114124103A (zh) * | 2020-08-31 | 2022-03-01 | 华为技术有限公司 | 一种数据压缩方法以及压缩装置 |
CN112584155B (zh) * | 2020-12-11 | 2022-11-04 | 南京中兴力维软件有限公司 | 一种视频数据处理方法和装置 |
CN112988685A (zh) * | 2021-03-31 | 2021-06-18 | 第四范式(北京)技术有限公司 | 数据压缩和解压缩方法及其装置 |
CN117008773A (zh) * | 2022-04-29 | 2023-11-07 | 华为技术有限公司 | 应用压缩方法、解压缩方法及电子设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1425986A (zh) * | 2003-01-17 | 2003-06-25 | 清华大学 | 自动压缩/解压缩文件系统及其压缩算法 |
CN101814069A (zh) * | 2009-02-20 | 2010-08-25 | 苏州市蜗牛电子有限公司 | 电子文件打包方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101582067A (zh) * | 2008-05-15 | 2009-11-18 | 国际商业机器公司 | 解压压缩文件时减小存储需求的方法和系统 |
-
2010
- 2010-09-03 CN CN2010102717881A patent/CN101957836B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1425986A (zh) * | 2003-01-17 | 2003-06-25 | 清华大学 | 自动压缩/解压缩文件系统及其压缩算法 |
CN101814069A (zh) * | 2009-02-20 | 2010-08-25 | 苏州市蜗牛电子有限公司 | 电子文件打包方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI484360B (zh) * | 2012-10-24 | 2015-05-11 | 鴻海精密工業股份有限公司 | 文件自動分類方法及系統 |
Also Published As
Publication number | Publication date |
---|---|
CN101957836A (zh) | 2011-01-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101957836B (zh) | 一种文件系统中可配置的实时透明压缩方法 | |
CN101908073B (zh) | 一种文件系统中实时删除重复数据的方法 | |
CN101917396B (zh) | 一种网络文件系统中数据的实时去重和传输方法 | |
US9430156B1 (en) | Method to increase random I/O performance with low memory overheads | |
US8983952B1 (en) | System and method for partitioning backup data streams in a deduplication based storage system | |
US10216449B1 (en) | Extended snapshot using backup and microservice | |
TWI544333B (zh) | 用於備份應用程式的儲存器結構之方法、電腦儲存媒體及系統 | |
US8990228B2 (en) | Systems and methods for arbitrary data transformations | |
US9183218B1 (en) | Method and system to improve deduplication of structured datasets using hybrid chunking and block header removal | |
US9262313B2 (en) | Provisioning in heterogenic volume of multiple tiers | |
CA2542162A1 (en) | Preload library for transparent file transformation | |
US20130067237A1 (en) | Providing random access to archives with block maps | |
US10409777B2 (en) | Storing data in a file system | |
US20140280397A1 (en) | Heterogenic volume generation and use system | |
US9116904B2 (en) | File system operation on multi-tiered volume | |
CN102456059A (zh) | 重复数据删除的处理系统 | |
WO2021073635A1 (zh) | 一种数据存储方法及装置 | |
CN101539884B (zh) | 数据存储方法和装置 | |
CN104462388A (zh) | 一种基于级联式存储介质的冗余数据清理方法 | |
CN105493080A (zh) | 基于上下文感知的重复数据删除的方法和装置 | |
US20170351608A1 (en) | Host device | |
EP2750020B1 (en) | Systems and methods for managing files in a computer system by segmenting files | |
JP7292291B2 (ja) | 複数のパーティションを含むメディア記憶デバイス | |
CN101577143A (zh) | 文件存储方法、装置及系统 | |
JPWO2012053152A1 (ja) | ストレージシステム、データ管理装置、方法及びプログラム |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20120711 Termination date: 20210903 |