一种磁盘间NTFS卷克隆方法及装置与流程

文档序号:18899816发布日期:2019-10-18 21:47阅读:210来源:国知局
一种磁盘间NTFS卷克隆方法及装置与流程

本发明属于磁盘分区管理技术领域,尤其涉及一种磁盘间ntfs卷克隆方法及装置。



背景技术:

目前操作系统常用的磁盘卷格式为ntfs(newtechnologyfilesystem)文件系统格式,当卷采用ntfs格式时,卷可以以簇为单位进行数据存储,且一个数据可以占用一个或多个簇,其中簇是ntfs格式中使用的最小磁盘单元,簇的大小是扇区的大小的整数倍,且簇的大小在被格式化时固定,扇区是磁盘读写的基本单位。随着存储技术的发展,磁盘的扇区的大小从512k逐渐向4k转变,这就意味着存在在不同磁盘之间拷贝数据,目前在不同磁盘之间拷贝数据时的拷贝效率低。



技术实现要素:

有鉴于此,本发明的目的在于提供一种磁盘间ntfs卷克隆方法及装置,用于提高拷贝效率。技术方案如下:

本发明提供一种磁盘间ntfs卷克隆方法,所述方法包括:

确定源卷的簇大小以及目标卷的簇大小;

如果所述源卷的簇大小小于所述目标卷的簇大小,将所述源卷的各个簇中存储的数据克隆到所述目标卷的各个簇中;

基于所述数据对应的文件标识,对所述目标卷的各个簇中存储的数据进行调整,所述数据对应的文件标识用于表征数据所属文件,所述数据用于表征数据所属文件的目录组织结构且所述数据所属文件不是压缩文件;

基于所述目标卷的各个簇中存储的数据,重建所述目标卷对应的各个元文件。

优选的,所述方法还包括:如果所述源卷的簇大小大于或等于所述目标卷的簇大小,将所述源卷的各个簇中存储的克隆到所述目标卷的各个簇中;

基于所述目标卷的各个簇中存储的数据,重建所述目标卷对应的各个元文件。

优选的,所述将所述源卷的各个簇中存储的数据克隆到所述目标卷的各个簇中包括:

从所述源卷的第一个簇开始依次获取所述源卷的各个簇中存储的数据;

基于所述源卷的各个簇中存储的数据对应的文件标识,将依次获取到的所述源卷的各个簇中存储的数据依次存储到所述目标卷的各个簇中。

优选的,所述基于所述数据对应的文件标识,对所述目标卷的各个簇中存储的数据进行调整包括:

如果所述目标卷中一个待调整簇的大小大于所述待调整簇中存储的数据的大小,从所述目标卷的其余簇中获得与所述待调整簇存储的数据具有相同文件标识的数据为待搬移数据,所述待搬移数据的数据量与所述待调整簇中剩余存储空间相匹配;

将所述待搬移数据搬移到所述待调整簇中;

删除其余簇中存储的所述待搬移数据。

优选的,所述从所述目标卷的其余簇中获得与所述待调整簇存储的数据具有相同文件标识的数据为待搬移数据包括:

从所述目标卷的其余簇中,获得与所述待调整簇存储的数据具有相同文件标识且排序与所述待调整簇存储的数据连续的数据为待搬移数据。

优选的,所述方法还包括:如果所述数据所属文件为压缩文件,从所述源卷中的各个簇中获得属于所述压缩文件的数据;

对所述属于所述压缩文件的数据进行解压缩,得到所述压缩文件对应的原始数据;

将所述原始数据依次存储到所述目标卷的各个簇中。

本发明还提供一种磁盘间ntfs卷克隆装置,所述装置包括:

确定单元,用于确定源卷的簇大小以及目标卷的簇大小;

判断单元,用于判断所述源卷的簇大小是否小于所述目标卷的簇大小;

拷贝单元,用于如果所述源卷的簇大小小于所述目标卷的簇大小,将所述源卷的各个簇中存储的数据克隆到所述目标卷的各个簇中;

调整单元,用于基于所述数据对应的文件标识,对所述目标卷的各个簇中存储的数据进行调整,所述数据对应的文件标识用于表征数据所属文件,所述数据用于表征数据所属文件的目录组织结构且所述数据所属文件不是压缩文件;

重建单元,用于基于所述目标卷的各个簇中存储的数据,重建所述目标卷对应的各个元文件。

优选的,所述拷贝单元,还用于如果所述源卷的簇大小大于或等于所述目标卷的簇大小,将所述源卷的各个簇中存储的数据克隆到所述目标卷的各个簇中,并触发所述重建单元。

优选的,所述拷贝单元,具体用于从所述源卷的第一个簇开始依次获取所述源卷的各个簇中存储的数据,基于所述源卷的各个簇中存储的数据对应的文件标识,将依次获取到的所述源卷的各个簇中存储的数据依次存储到所述目标卷的各个簇中。

优选的,所述调整单元包括:

获得子单元,用于如果所述目标卷中一个待调整簇的大小大于所述待调整簇中存储的数据的大小,从所述目标卷的其余簇中获得与所述待调整簇存储的数据具有相同文件标识的数据为待搬移数据,所述待搬移数据的数据量与所述待调整簇中剩余存储空间相匹配;

搬移子单元,用于将所述待搬移数据搬移到所述待调整簇中;

删除子单元,用于删除其余簇中存储的所述待搬移数据。

优选的,所述获得子单元,具体用于从所述目标卷的其余簇中,获得与所述待调整簇存储的数据具有相同文件标识且排序与所述待调整簇存储的数据连续的数据为待搬移数据。

优选的,所述判断单元,还用于判断所述数据所属文件是否为压缩文件;所述装置还包括:

获取单元,用于如果所述数据所属文件为压缩文件,从所述源卷中的各个簇中获得属于所述压缩文件的数据;

解压单元,用于对所述属于所述压缩文件的数据进行解压缩,得到所述压缩文件对应的原始数据;

存储单元,用于将所述原始数据依次存储到所述目标卷的各个簇中。

本发明还提供一种终端,所述终端包括:处理器和磁盘,所述磁盘作为目标卷所在磁盘;

所述处理器,用于确定源卷的簇大小以及目标卷的簇大小;如果所述源卷的簇大小小于所述目标卷的簇大小,将所述源卷的各个簇中存储的克隆到所述目标卷的各个簇中;基于所述数据对应的文件标识,对所述目标卷的各个簇中存储的数据进行调整,所述数据对应的文件标识用于表征数据所属文件,所述数据用于表征数据所属文件的目录组织结构且所述数据所属文件不是压缩文件;基于所述目标卷的各个簇中存储的数据,重建所述目标卷对应的各个元文件。

优选的,所述处理器还用于:如果所述源卷的簇大小大于或等于所述目标卷的簇大小,将所述源卷的各个簇中存储的数据克隆到所述目标卷的各个簇中,基于所述目标卷的各个簇中存储的数据,重建所述目标卷对应的各个元文件。

优选的,所述处理器,具体用于从所述源卷的第一个簇开始依次获取所述源卷的各个簇中存储的数据;基于所述源卷的各个簇中存储的数据对应的文件标识,将依次获取到的所述源卷的各个簇中存储的数据依次存储到所述目标卷的各个簇中。

优选的,所述处理器,具体用于如果所述目标卷中一个待调整簇的大小大于所述待调整簇中存储的数据的大小,从所述目标卷的其余簇中获得与所述待调整簇存储的数据具有相同文件标识的数据为待搬移数据,所述待搬移数据的数据量与所述待调整簇中剩余存储空间相匹配;

将所述待搬移数据搬移到所述待调整簇中;

删除其余簇中存储的所述待搬移数据。

优选的,所述处理器,具体用于从所述目标卷的其余簇中,获得与所述待调整簇存储的数据具有相同文件标识且排序与所述待调整簇存储的数据连续的数据为待搬移数据。

优选的,所述处理器还用于:如果所述数据所属文件为压缩文件,从所述源卷中的各个簇中获得属于所述压缩文件的数据;

对所述属于所述压缩文件的数据进行解压缩,得到所述压缩文件对应的原始数据;

将所述原始数据依次存储到所述目标卷的各个簇中。

本发明还提供一种存储介质,所述存储介质中存储有计算机程序代码,所述计算机程序代码执行时实现上述的磁盘间ntfs卷克隆方法。

借由上述技术方案,在不同磁盘间进行克隆时,确定源卷的簇大小以及目标卷的簇大小,如果源卷的簇大小小于目标卷的簇大小,将源卷的各个簇中存储的数据克隆到目标卷的各个簇中,基于数据对应的文件标识,对目标卷的各个簇中存储的数据进行调整,并基于目标卷的各个簇中存储的数据,重建所述目标卷对应的各个元文件,实现从源卷的簇中直接拷贝数据到目标卷中,省去文件很多时频繁打开和关闭的系统消耗,提高拷贝效率。并且拷贝的数据用于表征数据所属文件的目录组织结构,在拷贝这些数据过程中能够将文件创建相关数据如文件创建时间和多流文件命名流拷贝到目标卷中,防止文件创建相关数据的改变,从而可以保证依赖文件创建相关数据的程序的正常运行。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例提供的一种磁盘间ntfs卷克隆方法的流程图;

图2是本发明实施例提供的一种磁盘间ntfs卷克隆的示意图;

图3是本发明实施例提供的一种数据调整的示意图;

图4是本发明实施例提供的另一种数据调整的示意图;

图5是本发明实施例提供的再一种数据调整的示意图;

图6是本发明实施例提供的另一种磁盘间ntfs卷克隆的示意图;

图7是本发明实施例提供的再一种磁盘间ntfs卷克隆的示意图;

图8是本发明实施例提供的另一种磁盘间ntfs卷克隆方法的流程图;

图9是本发明实施例提供的一种磁盘间ntfs卷克隆装置的结构示意图;

图10是本发明实施例提供的一种磁盘间ntfs卷克隆装置中调整单元的结构示意图;

图11是本发明实施例提供的另一种磁盘间ntfs卷克隆装置的结构示意图;

图12是本发明实施例提供的一种终端的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参阅图1,其示出了本发明实施例提供的一种磁盘间ntfs卷克隆方法的流程图,可以包括以下步骤:

101:确定源卷的簇大小以及目标卷的簇大小。可以理解的是:源卷是当前待拷贝的数据的已知存储位置,目标卷则是当前待拷贝的数据将要存储的位置,而源卷和目标卷可能会采用不同的最小存储单元,例如源卷和目标卷可能采用具有不同大小的簇来存储数据,为此在进行克隆之前需要首先确定源卷的簇大小以及目标卷的簇大小。

在本实施例中源卷的簇大小以及目标卷的簇大小可通过源卷的簇对应的字节数以及目标卷的簇对应的字节数表示,例如磁盘扇区大小为512字节的卷簇大小可以是512、1k、2k、4k、8k、16k、32k、64k中的任意一种,磁盘扇区大小为4k的卷簇大小可以为4k、8k、16k、32k、64k中的任意一种。

其中源卷的簇大小以及目标卷的簇大小包括三种情况:一种是源卷的簇大小小于目标卷的簇大小;另一种是源卷的簇大小大于目标卷的簇大小;再一种是源卷的簇大小等于目标卷的簇大小。

源卷在存储数据时会将不同文件的数据交叉存储到各个簇中,在这种情况下,如果源卷的簇大小等于目标卷的簇大小,从源卷的簇中获得的数据可以直接拷贝到目标卷对应的一个簇中;如果源卷的簇大小大于目标卷的簇大小,则从源卷的簇中获得一条数据之后可以利用目标卷中的多个簇来存储这条数据,其中存储该条数据的簇的总大小与该条数据的大小相同,即存储该条数据的所有簇的存储空间与该条数据的数据量相同;因此无论源卷的簇大小等于目标卷的簇大小,还是源卷的簇大小大于目标卷的簇大小,都可以依次将源卷的各个簇中的数据克隆到目标卷的各个簇中,且目标卷的各个簇都能够被占满,但是如果源卷的簇大小小于目标卷的簇大小,会存在依次从源卷的簇中获得的数据属于不同文件,而属于不同文件的数据不能够存储到目标卷的同一个簇中,因此这种情况下会存在目标卷的簇不能被占满的问题,相对应的在拷贝数据到目标卷的各个簇之后还需要对数据的存储进行调整。

基于此,本实施例分别从源卷的簇大小小于目标卷的簇大小,源卷的簇大小等于或大于目标卷的簇大小来阐述从源卷到目标卷的克隆过程,其克隆过程请参见如下步骤。

102:如果源卷的簇大小小于目标卷的簇大小,将源卷的各个簇中存储的克隆到目标卷的各个簇中。

一种拷贝方式是:从源卷的第一个簇开始依次获取源卷的各个簇中存储的数据;基于源卷的各个簇中存储的数据对应的文件标识,将依次获取到的源卷的各个簇中存储的数据依次存储到目标卷的各个簇中,以防止对应不同文件标识的数据存储到目标卷的一个簇中,并且将数据依次存储到目标卷的各个簇中说明在拷贝数据的过程中目标卷中用于存储数据的各个簇是连续的,在用于存储数据的各个簇中没有空闲簇(即没有不存储数据的簇)。

在本实施例中,数据对应的文件标识用于表征数据所属文件即通过文件标识来确定数据属于哪个文件,数据用于表征数据所属文件的目录组织结构,以实现文件的目录组织结构的拷贝,且数据所属文件不是压缩文件,之所以将压缩文件独立出来是因为簇大小发生变化后压缩文件中的数据存储会相应变化,直接从源卷中拷贝压缩文件无法保持压缩文件对应的原始数据有效,所以不能采用本实施例的方式拷贝压缩文件。

上述从源卷的第一个簇开始依次获取源卷的各个簇中存储的数据表明:从源卷的第一个簇开始连续获取各个簇中存储的数据,在该获取过程中忽略数据对应的文件标识,也就是说无论源卷的各个簇中存储的数据是否对应不同文件标识,本实施例都从第一个簇开始连续读取各个簇中存储的数据,而现有技术需要基于数据对应的文件标识,具体的获取到对应一个文件标识的全部数据之后再获取对应另一个文件标识的全部数据,同一个文件标识的全部数据在源卷的存储可能是不连续的,在基于数据对应的文件标识获取数据的过程中需要在源卷的各个簇中穿插读取数据,因此本实施例相对于现有技术来说,不会存在在源卷的各个簇中基于数据对应的文件标识穿插读取数据的现象,相对于现有技术来说提高拷贝效率。

如图2所示,其示出了将依次获取到的源卷的各个簇中存储的数据依次存储到目标卷的各个簇中的一种实例,在图2中源卷的各个簇大小为2k的ntfs卷,目标卷的各个簇大小为4k的ntfs卷,源卷的各个簇中存储有对应文件1和文件2的数据,其中文件1有a~g7个数据块,文件2也有a~g个数据块,文件1和文件2的各个数据块在源卷的存储如图2中的编号1所示,各个数据块按簇形式分别存储在源卷的各个簇中。

将源卷的各个簇中存储的数据依次拷贝到目标卷的各个簇中,目标卷的各个簇中数据块的分布如图2中的编号2所示,可知目标卷的各个簇从第一个簇开始紧密相邻且中间不会出现空闲簇,并且文件1和文件2的数据块不能共用目标卷中的同一个簇。

103:基于数据对应的文件标识,对目标卷的各个簇中存储的数据进行调整,以通过数据调整的方式合并目标卷中对应同一个文件标识的各个簇中的数据,通过合并方式降低目标卷中存储空间没有被占满的簇的数量。

在本实施例中,一种调整方式是:如果目标卷中一个待调整簇的大小大于待调整簇中存储的数据的大小,从目标卷的其余簇中获得与待调整簇存储的数据具有相同文件标识的数据为待搬移数据,其中待搬移数据的数据量与待调整簇中剩余存储空间相匹配;将待搬移数据搬移到待调整簇中;删除其余簇中存储的待搬移数据。

如果目标卷中一个簇的大小大于该簇中存储的数据的大小,说明该簇没有被占满,还有剩余存储空间能够存储数据,此时可以将该簇作为待调整簇,以调整待调整簇中的数据,具体可以是将其余簇中与该待调整簇存储的数据具有相同文件标识的数据作为待搬移数据搬移到该待调整簇中,在将待搬移数据搬移到该待调整簇中,原来存储该待搬移数据的簇则可以删除掉该待搬移数据,防止相同数据占用不同簇,以使得目标卷中有更多空闲簇来存储后续的数据。

其中待搬移数据的数据量与待调整簇中剩余存储空间相匹配是指:如果其余簇中与该待调整簇存储的数据具有相同文件标识的数据的数据量大于或等于待调整簇中剩余存储空间,则可以获取与剩余存储空间相同的数据量的待搬移数据,如果其余簇中与该待调整簇存储的数据具有相同文件标识的数据的数据量小于待调整簇中剩余存储空间,则将其余簇中与该待调整簇存储的数据具有相同文件标识的数据都作为待搬移数据。

仍以上述图2为例,从编号为2的目标卷中各个簇的数据分布可知,第一个簇仍有剩余存储空间,且第六个簇中存储的数据与第一个簇中存储的数据对应相同的文件标识,则在调整是可以将第六个簇中存储的数据作为待搬移数据合并到第一个簇中,然后删除第六个簇中存储的数据,同样的其他簇中也可以参照该操作,操作后目标卷中各个簇的数据分布如图3中的编号3所示,但是在调整之后目标卷中仍存在具有剩余大小的簇,这是由于源卷存储的文件的数据的数据量以及目标卷的簇大小而决定的。

虽然上述图3示出了本实施例提供的一种调整方式,但是在经过图3所示调整方式调整之后,对应相同文件标识的数据出现乱序,那么在应用目标卷的各个簇存储的数据之前还需要进行排序调整,为了解决这一问题本实施例还提供另一种调整方式,在通过该调整方式调整之后目标卷的各个簇存储的对应相同文件标识的数据是顺序的,即不会出现乱序,其调整方式如下:

从目标卷的其余簇中,获得与待调整簇存储的数据具有相同文件标识且排序与待调整簇存储的数据连续的数据为待搬移数据。其中排序与待调整簇存储的数据连续的数据是指:待调整数据和待搬移数据是同一个文件标识的数据中彼此相邻且待搬移数据位于待调整数据之后,如果各个簇中存储的数据也有数据块标识,则排序与待调整簇存储的数据连续的数据是指:数据块标识与待调整簇存储的数据的数据块标识相邻、且数据块标识位于待调整簇存储的数据的数据块标识之后的数据。

以图2中编号为2的第一个簇来说,其数据对应的数据库标识为1a,则排序与其连续的数据为1b,那么在调整时需要将1b合并到第一个簇中,而在将1b调整到第一个簇之后,第四个簇也会出现剩余存储空间,则可以将第六个簇中的数据合并到第四个簇中,以此类推得到的调整后的数据分布如图4中的编号4为例。

在这里需要说明的一点是:在经过调整之后,目标卷中存储数据的各个簇之间可能会出现空闲簇,那么在调整之后可以再次搬移目标卷中存储的数据,以防止目标卷中存储数据的各个簇之间有空闲簇,即通过连续的簇存储数据,如图5所示。此外还有一点需要指出除压缩文件之外还有一种特殊文件为稀疏文件,稀疏文件可以采用图1所示流程从源卷拷贝到目标卷中,但是与除压缩文件和稀疏文件之外的文件(视为普通文件)不同之处在于:稀疏文件在目标卷中存储的都是0。

104:基于目标卷的各个簇中存储的数据,重建目标卷对应的各个元文件。其中重建目标卷对应的各个元文件的过程可以是:基于目标卷的各个簇中存储的数据,更新目标卷的第一元文件中的索引分布记录数据,如更新非常驻属性中的逻辑簇号及索引分配和属性列表中的虚拟簇号;基于目标卷的各个簇中存储的数据,重建除第一元文件之外的其余元文件。

在目前ntfs系统中,ntfs系统的元文件如表1所示。

其中第一元文件是上述$mft元文件,它由一个个文件记录组成,文件记录由一个个属性组成,属性的类型很多,每个属性都有属性头和属性体。属性头又分为常驻属性和非常驻属性,常驻属性在文件记录内,非常驻属性由于一个文件记录放不下(一个文件记录只有1024字节)所以需要在其它数据区记录,非常驻属性记录了数据区的逻辑簇号。索引分配是一个非常驻属性,以b+树的方式存储索引记录(每个索引记录大小为4096字节),每个索引记录由多个索引项组成,每个索引项记录了子项的虚拟簇号。属性列表是一个常驻或非常驻属性,当文件记录过大时,会出现属性列表,记录了子记录号和子记录中存放的属性类型及对应的虚拟簇号。虚拟簇号表示的是文件的第几个数据块,如果源卷的簇大小小于目标卷的簇大小时,目标卷会对源卷的簇中存储的数据块进行合并,从而导致虚拟簇号发生变化,逻辑簇号表示是目标卷中的第几个簇,换句话说表示数据块在目标卷中的位置,同样在源卷的簇大小小于目标卷的簇大小的情况下,文件的数据块的位置改为目标卷中的位置,因此逻辑簇号也会发生变化,在此情况下需要对$mft元文件中的虚拟簇号和逻辑簇号进行更改。

而除上述$mft元文件之外其余元文件的重建过程可以参阅现有技术,在这里需要说明的一点是:在数据从源卷拷贝到目标卷的过程中上述元文件中$bitmap、$logfile、$badclus、$mftmirr和$boot会发生变化,为此需要对这几个元文件进行重建,过程如下:

根据目标分区数据分布重建卷位图,以根据重建卷位图更新$bitmap元文件记录;

重建文件系统日志文件来更新$logfile文件记录,如将$logfile文件中的内容全部清零;

清空坏簇信息来更新$badclus元文件记录;

重建$mftmirr以使$mftmirr文件中的内容与$mft前4个文件记录相同;

重建$boot来更新文件系统基本参数信息。

上述重建过程请参阅现有技术,对此本实施例不再阐述。

105:如果源卷的簇大小大于或等于目标卷的簇大小,将源卷的各个簇中存储的数据克隆到目标卷的各个簇中。

一种拷贝方式是:从源卷的第一个簇开始依次获取源卷的各个簇中存储的数据;基于源卷的各个簇中存储的数据对应的文件标识,将依次获取到的源卷的各个簇中存储的数据依次存储到目标卷的各个簇中。

如果源卷的簇大小等于目标卷的簇大小,源卷的一个簇中存储的数据能够占满目标卷的一个簇,因此源卷的簇大小等于目标卷的簇大小则可以从源卷的簇中读取一个数据之后在目标卷中选择一个簇存储即可,如图6所示,可见如果源卷的簇大小等于目标卷的簇大小,数据在源卷的簇中的分布与在目标卷的簇中的分布相同。

如果源卷的簇大小大于目标卷的簇大小,源卷的一个簇中存储的数据需要占用目标卷的多个簇,在从源卷的一个簇中读取到数据之后需要将该数据拆分成多个数据块,所拆分得到的数据块的数量与目标卷的簇大小以及源卷的簇大小相关,具体的所拆分得到的数据库的数量n=x/y,x为源卷的簇大小,y为目标卷的簇大小,相对应的目标卷需要n个簇来存储源卷的一个簇中的数据。

以图7为例,在图7中源卷的簇大小为8k,目标卷的簇大小为4k,则一个源卷的簇中的数据需要目标卷中的两个簇存储,图7中每个数据被拆分成两个数据块,如1a被拆分成1a1和1a2。

106:基于目标卷的各个簇中存储的数据,重建目标卷对应的各个元文件。其中重建目标卷对应的各个元文件的方式可以是:如果源卷的簇大小等于目标卷的簇大小,更新目标卷的第一元文件中的索引分布记录数据,如更新非常驻属性中的逻辑簇号,并重建除第一元文件之外的其余元文件;如果源卷的簇大小大于目标卷的簇大小,更新目标卷的第一元文件中的索引分布记录数据,如更新非常驻属性中的逻辑簇号及索引分配和属性列表中的虚拟簇号;重建除第一元文件之外的其余元文件,具体说明请参阅步骤104,对此本实施例不再阐述。

借由上述技术方案,在不同磁盘间进行克隆时,确定源卷的簇大小以及目标卷的簇大小,如果源卷的簇大小小于目标卷的簇大小,将源卷的各个簇中存储的数据克隆到目标卷的各个簇中,基于数据对应的文件标识,对目标卷的各个簇中存储的数据进行调整,并基于目标卷的各个簇中存储的数据,重建目标卷对应的各个元文件,实现从源卷的簇中直接拷贝数据到目标卷中,省去文件很多时频繁打开和关闭的系统消耗,提高拷贝效率。并且拷贝的数据用于表征数据所属文件的目录组织结构,在拷贝这些数据过程中能够将文件创建相关数据如文件创建时间和多流文件命名流拷贝到目标卷中,防止文件创建相关数据的改变,从而可以保证依赖文件创建相关数据的程序的正常运行。

请参阅图8,其示出了本发明实施例提供的另一种磁盘间ntfs卷克隆方法的流程图,阐述数据所属文件为压缩文件时在磁盘间进行克隆的过程,在图1基础上还可以包括以下步骤:

107:如果数据所属文件为压缩文件,从源卷中的各个簇中获得属于压缩文件的数据。

可以理解的是:在采用簇形式存储压缩文件时压缩文件可以以一定数量的簇作为一个压缩单元,例如对于源卷来说其以16个簇为一个压缩单元,相对应的通过一个压缩单元存储一个大小为16个簇大小的压缩文件时,其存储方式为:12345’6’7’8’9’10’11’12’13’14’15’16’,其中前1到4个簇存储的是压缩文件中的实际数据,而5到16可以视为是稀疏簇,这些簇中存储的数据为0,那么在拷贝压缩文件的数据时可以直接拷贝前1到4个簇存储的数据,对前1到4个簇解压之后得到的是16个簇大小的数据。

108:对属于压缩文件的数据进行解压缩,得到压缩文件对应的原始数据,至于采用何种方式解压缩需要视采用哪种方式压缩,对此本实施例不再阐述。

109:将原始数据依次存储到目标卷的各个簇中,具体需要目标卷中的多少簇存储原始数据需要视原始数据的数据量以及目标卷的簇大小而定。

下面以一个例子进行说明,比如一个压缩文件有16*100个簇大小,即一个压缩单元为16个簇,用100个压缩单元存储一个压缩文件,源卷的簇大小2k,目标卷的簇大小4k,相对应的从源卷到目标卷的过程为:

1)按顺序每次读取压缩文件的16个簇数据;

2)对16个簇数据进行解压缩,得到16个簇数据对应的原始数据;

3)从目标卷中获得8个空闲簇,比如目标卷的前100个簇已经被普通文件占用,则从101簇开始往后找8个空闲簇(因为目标卷的簇大小是源卷的簇大小的两倍),将原始数据顺次写入到获得的8个簇中。

在将原始数据写入到目标卷的各个簇中,也需要对元文件进行更改,具体过程请参见上述实施例,对此本实施例不再阐述。

对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。

与上述实施例相对应,本发明实施例还提供一种磁盘间ntfs卷克隆装置,其结构如图9所示,可以包括:确定单元001、判断单元002、拷贝单元003、调整单元004和重建单元005。

确定单元001,用于确定源卷的簇大小以及目标卷的簇大小。

可以理解的是:源卷是当前待拷贝的数据的已知存储位置,目标卷则是当前待拷贝的数据将要存储的位置,而源卷和目标卷可能会采用不同的最小磁盘单元,例如源卷和目标卷可能采用具有不同大小的簇来存储数据,为此在进行克隆之前需要首先确定源卷的簇大小以及目标卷的簇大小。

其中源卷的簇大小以及目标卷的簇大小包括三种情况:一种是源卷的簇大小小于目标卷的簇大小;另一种是源卷的簇大小大于目标卷的簇大小;再一种是源卷的簇大小等于目标卷的簇大小。

源卷在存储数据时会将不同文件的数据交叉存储到各个簇中,在这种情况下,如果源卷的簇大小等于目标卷的簇大小,从源卷的簇中获得的数据可以直接拷贝到目标卷对应的一个簇中;如果源卷的簇大小大于目标卷的簇大小,则从源卷的簇中获得一条数据之后可以利用目标卷中的多个簇来存储这条数据,其中存储该条数据的簇的总大小与该条数据的大小相同,即存储该条数据的所有簇的存储空间与该条数据的数据量相同;因此无论源卷的簇大小等于目标卷的簇大小,还是源卷的簇大小大于目标卷的簇大小,都可以依次将源卷的各个簇中的数据克隆到目标卷的各个簇中,且目标卷的各个簇都能够被占满,但是如果源卷的簇大小小于目标卷的簇大小,会存在依次从源卷的簇中获得的数据属于不同文件,而属于不同文件的数据不能够存储到目标卷的同一个簇中,因此这种情况下会存在目标卷的簇不能被占满的问题,相对应的在拷贝数据到目标卷的各个簇之后还需要对数据的存储进行调整。

鉴于此,本实施例在进行克隆之前需要首先通过判断单元002判断源卷的簇大小是否小于目标卷的簇大小,基于判断单元002的判断结果触发相应处理,具体的拷贝单元003、调整单元004和重建单元005对应源卷的各个簇小于目标卷的各个簇;拷贝单元003和重建单元005对应源卷的各个簇大于目标卷的各个簇以及源卷的各个簇等于目标卷的各个簇,具体执行如下所述。

拷贝单元003,用于将源卷的各个簇中存储的数据克隆到目标卷的各个簇中。

在本实施例中,拷贝单元003的一种拷贝方式是:从源卷的第一个簇开始依次获取源卷的各个簇中存储的数据;基于源卷的各个簇中存储的数据对应的文件标识,将依次获取到的源卷的各个簇中存储的数据依次存储到目标卷的各个簇中,以防止对应不同文件标识的数据存储到目标卷的一个簇中,并且将数据依次存储到目标卷的各个簇中说明在拷贝数据的过程中目标卷中用于存储数据的各个簇是连续的,在用于存储数据的各个簇中没有空闲簇(即没有不存储数据的簇)。

在本实施例中,数据对应的文件标识用于表征数据所属文件即通过文件标识来确定数据属于哪个文件,数据用于表征数据所属文件的目录组织结构,以实现文件的目录组织结构的拷贝,且数据所属文件不是压缩文件,之所以将压缩文件独立出来是因为簇大小发生变化后压缩文件中的数据存储会相应变化,直接从源卷中拷贝压缩文件无法保持压缩文件对应的原始数据有效,所以不能采用本实施例的方式拷贝压缩文件。

对上述拷贝方式的具体说明请参阅方法实施例,对此本实施例不再阐述。

调整单元004,用于如果源卷的簇大小小于目标卷的簇大小,基于数据对应的文件标识,对目标卷的各个簇中存储的数据进行调整,以通过数据调整的方式合并目标卷中对应同一个文件标识的各个簇中的数据,通过合并方式降低目标卷中存储空间没有被占满的簇的数量。

在本实施例中,参阅图10,调整单元004包括:获得子单元401、搬移子单元402和删除子单元403。

获得子单元401,用于如果目标卷中一个待调整簇的大小大于待调整簇中存储的数据的大小,从目标卷的其余簇中获得与待调整簇存储的数据具有相同文件标识的数据为待搬移数据,待搬移数据的数据量与待调整簇中剩余存储空间相匹配。

如果目标卷中一个簇的大小大于该簇中存储的数据的大小,说明该簇没有被占满,还有剩余存储空间能够存储数据,此时可以将该簇作为待调整簇,以调整待调整簇中的数据,具体可以是将其余簇中与该待调整簇存储的数据具有相同文件标识的数据作为待搬移数据搬移到该待调整簇中,在将待搬移数据搬移到该待调整簇中,原来存储该待搬移数据的簇则可以删除掉该待搬移数据,防止相同数据占用不同簇,以使得目标卷中有更多空闲簇来存储后续的数据。

在本实施例中,获得子单元401具体用于从目标卷的其余簇中,获得与待调整簇存储的数据具有相同文件标识且排序与待调整簇存储的数据连续的数据为待搬移数据,在通过该调整方式调整之后目标卷的各个簇存储的对应相同文件标识的数据是顺序的,即不会出现乱序。

搬移子单元402,用于将待搬移数据搬移到待调整簇中。

删除子单元403,用于删除其余簇中存储的待搬移数据。

对上述调整单元004调整方式的具体说明请参阅方法实施例,对此本实施例不再阐述。

重建单元005,用于基于目标卷的各个簇中存储的数据,重建目标卷对应的各个元文件。上述重建单元005的重建过程请参阅方法实施例,对此本实施例不再阐述。

借由上述技术方案,在不同磁盘间进行克隆时,确定源卷的簇大小以及目标卷的簇大小,如果源卷的簇大小小于目标卷的簇大小,将源卷的各个簇中存储的数据克隆到目标卷的各个簇中,基于数据对应的文件标识,对目标卷的各个簇中存储的数据进行调整,并基于目标卷的各个簇中存储的数据,重建目标卷对应的各个元文件,实现从源卷的簇中直接拷贝数据到目标卷中,省去文件很多时频繁打开和关闭的系统消耗,提高拷贝效率。并且拷贝的数据用于表征数据所属文件的目录组织结构,在拷贝这些数据过程中能够将文件创建相关数据如文件创建时间和多流文件命名流拷贝到目标卷中,防止文件创建相关数据的改变,从而可以保证依赖文件创建相关数据的程序的正常运行。

参阅图11,本发明实施例还提供另一种磁盘间ntfs卷克隆装置,在图9的基础上,还可以包括:获取单元006、解压单元007和存储单元008。

其中判断单元002,还用于判断数据所属文件是否为压缩文件。

获取单元006,用于如果数据所属文件为压缩文件,从源卷中的各个簇中获得属于压缩文件的数据。

解压单元007,用于对属于所述压缩文件的数据进行解压缩,得到压缩文件对应的原始数据。

存储单元008,用于将原始数据依次存储到目标卷的各个簇中。

对上述单元的工作过程说明请参阅方法实施例,对此本实施例不再阐述。

本发明实施例还提供一种终端,其结构如图12所示,可以包括:处理器11和磁盘12,磁盘12作为目标卷所在的磁盘。

处理器11,用于确定源卷的簇大小以及目标卷的簇大小。如果源卷的簇大小小于目标卷的簇大小,将源卷的各个簇中存储的数据克隆到目标卷的各个簇中;基于数据对应的文件标识,对目标卷的各个簇中存储的数据进行调整,数据对应的文件标识用于表征数据所属文件,数据用于表征数据所属文件的目录组织结构且数据所属文件不是压缩文件;基于目标卷的各个簇中存储的数据,重建目标卷对应的各个元文件。

在本实施例中,处理器11,还用于如果源卷的簇大小大于或等于目标卷的簇大小,将源卷的各个簇中存储的数据克隆到所述目标卷的各个簇中,基于目标卷的各个簇中存储的数据,重建目标卷对应的各个元文件。

在本实施例中,处理器11,具体用于从源卷的第一个簇开始依次获取源卷的各个簇中存储的数据,基于源卷的各个簇中存储的数据对应的文件标识,将依次获取到的源卷的各个簇中存储的数据依次存储到目标卷的各个簇中。

在本实施例中,处理器11基于数据对应的文件标识,对目标卷的各个簇中存储的数据进行调整包括如下步骤:

如果目标卷中一个待调整簇的大小大于待调整簇中存储的数据的大小,从目标卷的其余簇中获得与待调整簇存储的数据具有相同文件标识的数据为待搬移数据,待搬移数据的数据量与待调整簇中剩余存储空间相匹配;将待搬移数据搬移到待调整簇中;删除其余簇中存储的待搬移数据。

在本实施例中,处理器11从目标卷的其余簇中获得与待调整簇存储的数据具有相同文件标识的数据为待搬移数据的一种方式是:从目标卷的其余簇中,获得与待调整簇存储的数据具有相同文件标识且排序与待调整簇存储的数据连续的数据为待搬移数据。

在本实施例中,处理器11,还用于如果所据所属文件为压缩文件,从源卷中的各个簇中获得属于压缩文件的数据;对属于压缩文件的数据进行解压缩,得到压缩文件对应的原始数据;将原始数据依次存储到目标卷的各个簇中。

对上述处理器11工作过程的具体说明请参阅方法实施例,对此本实施例不再阐述。

本发明实施例还提供了一种存储介质,存储介质中存储有计算机程序代码,计算机程序代码执行时实现上述的磁盘间ntfs卷克隆方法。

需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1