一种收缩虚拟磁盘镜像文件的方法及装置的制作方法

文档序号:6430408阅读:276来源:国知局
专利名称:一种收缩虚拟磁盘镜像文件的方法及装置的制作方法
技术领域
本申请涉及计算机文件处理技术,特别是涉及一种收缩虚拟磁盘镜像文件的方法及装置。
背景技术
镜像文件其实和ZIP压缩包类似,它将特定的一系列文件按照一定的格式制作成单一的文件,以方便用户下载和使用,例如一个测试版的操作系统、游戏等。它最重要的特点是可以被特定的软件识别并可直接刻录到光盘上。其实通常意义上的镜像文件可以再扩展一下,在镜像文件中可以包含更多的信息。比如说系统文件、引导文件、分区表信息等,这样镜像文件就可以包含一个分区甚至是一块硬盘的所有信息。VHD (Virtual Hard Disk)是一种虚拟磁盘的镜像文件格式。VHD格式的文件可以 作为一种虚拟磁盘,进行文件系统格式化、存储虚拟机的数据。VHD包括三种类型固定(fixed)磁盘镜像、动态(dynamic)磁盘镜像、增量(differencing)磁盘镜像。固定磁盘镜像文件的大小在创建时就确定了下来,在它上面格式化文件系统、写入数据、删除数据都不会改变镜像文件的大小。动态磁盘镜像文件和增量磁盘镜像文件会随着写入数据的增加而增长,但当数据被删除后,镜像文件的大小不会减小。例如,创建一个2GB的动态磁盘镜像文件,它的最初大小仅为十几KB,随着写入的数据不断增加,它的大小最多可以增长到约2GB,但删除数据并不会使它的大小减少。基于这种特性,所述动态磁盘镜像文件和增量磁盘镜像文件一旦写入数据,其文件大小就会增长,即使以后删除数据也不会使文件减小,因此这部分删除的数据相当于仍在占用VHD的存储空间,造成了存储空间的浪费。

发明内容
本申请提供了一种收缩虚拟磁盘镜像文件的方法及装置,以解决目前的虚拟磁盘镜像文件即使删除数据也不会使文件减小,从而浪费存储空间的问题。为了解决上述问题,本申请公开了一种收缩虚拟磁盘镜像文件的方法,其中所述文件包含数据块和用于记录每个数据块信息的块分配表;所述方法包括查找文件中的垃圾数据块,并修改所述垃圾数据块在块分配表中的相应记录,其中所述垃圾数据块为不保存有效数据的数据块;将位于垃圾数据块后面的有效数据块迁移至垃圾数据块的位置,并修改迁移后的有效数据块在块分配表中的相应记录;在完成数据块迁移后,将所述文件进行截短。优选的,每个数据块包含扇区和用于记录每个扇区信息的扇区位图;所述查找文件中的垃圾数据块之前,还包括查找文件数据块中的垃圾扇区,并修改所述垃圾扇区在扇区位图中的相应记录。优选的,所述查找文件中的垃圾数据块,包括查找文件数据块中的扇区位图,将扇区位图中对应所有扇区的记录都表示为垃圾扇区的数据块作为垃圾数据块。优选的,所述查找文件数据块中的垃圾扇区,包括查找文件数据块中的扇区位图,如果扇区位图中对应某个扇区的记录表示该扇区中存储着数据,则继续进行以下判断如果所述文件是动态磁盘镜像文件,则判断该扇区中存储的数据是否全为0,如果是,则将该扇区作为垃圾扇区;如果所述文件是增量磁盘镜像文件,则判断该扇区中存储的数据是否与父镜像文件中相同扇区位置的数据一致,如果一致,则将该扇区作为垃圾扇区。优选的,所述查找文件数据块中的垃圾扇区,包括如果所述文件是动态磁盘镜像文件,则获取文件数据块的原始扇区位图和表示对应扇区是否存储有效数据的反演扇区位图;对比所述原始扇区位图和反演扇区位图的每一位如果原始扇区位图中对应某个扇区的记录表示该扇区中存储着数据,并且该扇区在反演扇区位图中的相应记录表示该扇区中 没有存储数据,则将该扇区作为垃圾扇区。优选的,所述查找文件数据块中的垃圾扇区,包括如果所述文件是增量磁盘镜像文件,则获取文件数据块的原始扇区位图和表示对应扇区是否存储有效数据的反演扇区位图以及祖先镜像文件中相同数据块的扇区位图;对比所述原始扇区位图、反演扇区位图和祖先镜像扇区位图的每一位如果原始扇区位图中对应某个扇区的记录表示该扇区中存储着数据,并且该扇区在祖先镜像扇区位图中的相应记录表示该扇区中没有存储数据,并且该扇区在反演扇区位图中的相应记录表示该扇区中没有存储数据,则将该扇区作为垃圾扇区。优选的,在完成数据块迁移后,将所述文件进行截短,包括在完成数据块迁移后,文件末尾形成一块等于所有垃圾数据块大小的无用区域,将所述无用区域截断,得到截短之后的文件。本申请还提供了一种收缩虚拟磁盘镜像文件的装置,其中所述文件包含数据块和用于记录每个数据块信息的块分配表;所述装置包括垃圾数据块查找模块,用于查找文件中的垃圾数据块,并修改所述垃圾数据块在块分配表中的相应记录,其中所述垃圾数据块为不保存有效数据的数据块;数据迁移模块,用于将位于垃圾数据块后面的有效数据块迁移至垃圾数据块的位置,并修改迁移后的有效数据块在块分配表中的相应记录;文件截短模块,用于在完成数据块迁移后,将所述文件进行截短。优选的,每个数据块包含扇区和用于记录每个扇区信息的扇区位图;所述装置还包括垃圾扇区查找模块,用于查找文件数据块中的垃圾扇区,并修改所述垃圾扇区在扇区位图中的相应记录。优选的,所述垃圾数据块查找模块通过查找文件数据块中的扇区位图,将扇区位图中对应所有扇区的记录都表示为垃圾扇区的数据块作为垃圾数据块。优选的,所述垃圾扇区查找模块包括扇区位图查找子模块,用于查找文件数据块中的扇区位图,如果扇区位图中对应某个扇区的记录表示该扇区中存储着数据,则触发判断子模块;
判断子模块,用于进行以下判断如果所述文件是动态磁盘镜像文件,则判断该扇区中存储的数据是否全为0,如果是,则将该扇区作为垃圾扇区;如果所述文件是增量磁盘镜像文件,则判断该扇区中存储的数据是否与父镜像文件中相同扇区位置的数据一致,如果一致,则将该扇区作为垃圾扇区。优选的,如果所述文件是动态磁盘镜像文件,则所述垃圾扇区查找模块包括第一获取子模块,用于获取文件数据块的原始扇区位图和表示对应扇区是否存储有效数据的反演扇区位图;第一对比子模块,用于对比所述原始扇区位图和反演扇区位图的每一位如果原 始扇区位图中对应某个扇区的记录表示该扇区中存储着数据,并且该扇区在反演扇区位图中的相应记录表示该扇区中没有存储数据,则将该扇区作为垃圾扇区。优选的,如果所述文件是增量磁盘镜像文件,则所述垃圾扇区查找模块包括第二获取子模块,用于获取文件数据块的原始扇区位图和表示对应扇区是否存储有效数据的反演扇区位图以及祖先镜像文件中相同数据块的扇区位图;第二对比子模块,对比所述原始扇区位图、反演扇区位图和祖先镜像扇区位图的每一位如果原始扇区位图中对应某个扇区的记录表示该扇区中存储着数据,并且该扇区在祖先镜像扇区位图中的相应记录表示该扇区中没有存储数据,并且该扇区在反演扇区位图中的相应记录表示该扇区中没有存储数据,则将该扇区作为垃圾扇区。与现有技术相比,本申请包括以下优点首先,本申请通过查找虚拟磁盘镜像文件中的垃圾数据块,并将垃圾数据块后面的有效数据块迁移至垃圾数据块的位置,使文件末尾形成一块无用的区域,最后再将这部分无用的区域截断,就可以清除文件中的垃圾数据块,进而收缩文件的大小。本申请使得VHD格式的动态磁盘镜像文件和增量磁盘镜像文件删除某些数据后,镜像文件的大小也可以减小,从而节省文件所需的存储空间。其次,本申请在查找垃圾数据块的过程中,提出一种快速计算垃圾扇区的方法,可以更加快速地识别出数据块中哪些扇区是垃圾扇区,进而将所有扇区都是垃圾扇区的数据块作为垃圾数据块。当然,实施本申请的任一产品不一定需要同时达到以上所述的所有优点。


图I是本申请实施例中VHD镜像文件的格式的示意图;图2是本申请实施例中BAT的示意图;图3是本申请实施例所述一种收缩虚拟磁盘镜像文件的方法流程图;图4是本申请另一实施例所述一种收缩虚拟磁盘镜像文件的方法流程图;图5是本申请图2所示实施例中经过垃圾数据块查找后的BAT示意图;图6是本申请图5所示实施例中经过数据迁移后的BAT示意图;图7是本申请图6所示实施例中经过文件截短后的BAT示意图;图8是本申请实施例所述一种收缩虚拟磁盘镜像文件的装置结构图。
具体实施例方式为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式
对本申请作进一步详细的说明。本申请提出一种清除虚拟磁盘镜像文件中的垃圾数据、进而收缩文件的方法,使得镜像文件中删除某些数据后,应用该方法,镜像文件的大小也可以减小,从而节省文件所需的存储空间。其中,所述垃圾数据是指在虚拟机运行过程中产生的,后来又删除的不再需要的,但仍存在于虚拟磁盘镜像文件中的数据。下面以VHD格式的镜像文件为例对本申请所述方法的实现流程进行详细说明。首先介绍VHD镜像文件的格式。
参照图1,是本申请实施例中VHD镜像文件的格式的示意图。一个VHD镜像文件通常包括以下几部分footer (底部信息)、header(头信息)、BAT(Block Allocation Table,块分配表)和data block(数据块)。每部分的详细说明如下I) footerfooter中记录着header的起始扇区、文件大小、镜像类型(动态镜像或增量镜像)等等信息。footer位于文件的最后,每当有新的数据写入镜像文件时,都要随着向后移动,写到文件的最后。而且,由于footer是VHD文件最重要的信息,所以在VHD的最开始,保留了 footer的一个备份拷贝。2) headerheader中记录着BAT的起始扇区、BAT中的项数(即最多可能有多少个datablock)、Data Block的大小等信息。此外,如果是增量镜像文件,还记录着它的父盘(即父镜像文件)的位置信息。3)BATBAT中的每一项记录了对应的data block的起始扇区,如果某个表项并没有对应的data block,则记录为OxFFFFFFFF (表示尚未分配的data block)。4) data block每个data block由一个扇区位图(sector bitmap)和其后的数据区(扇区)组成。对于动态VHD,扇区位图中的某一位(bit)为0,表示对应的扇区(sector)中没有保存数据;如果某一位(bit)为1,表示对应的扇区(sector)中保存着数据,但是如果该扇区的数据被删除了,该位不会复位,仍然是I。换而言之,如果某个扇区中的数据从该datablock被分配给VHD文件后,没有被修改过,则对应的位图中的位为O ;否则只要被修改过,就为I。对于增量VHD,某一位为1,表示该增量盘自身的该扇区中保存着有效数据;如果为0,表示该增量盘自身的该扇区中没有保存有效数据,需要到它的父盘中对应的扇区中读取数据。如果父盘也是一个增量盘,则需要进一步检查是否需要到父盘的父盘中读取数据,直至回溯到一个非增量的(固定大小的或动态的)祖先盘。同一个镜像文件中的所有data block大小相同,并且记录在header中。基于图I所示的镜像文件格式,当创建一个动态镜像文件或增量镜像文件时,新创建的镜像文件仅仅包含footer、header、BAT等部分,并没有分配data block。当要写入数据时,才会为该数据分配若干个data block,用于保存数据,并且更新BAT中对应项记录的data block起始扇区。当要读取保存在VHD镜像文件中的数据时,需要将要读取的逻辑扇区号(相对于保存数据的逻辑扇区号,而不是相对于VHD镜像文件的物理扇区号)换算成相对VHD镜像文件的物理扇区号。换算方法如下BlockNumber = LogicalSectorNumber/SectorsPerBlock其中,符号“/”表示除取下整,如“5/3 = I”;SectorInBlock = LogicalSectorNumber% SectorsPerBlock其中,符号“ V’表示除取余数,如“5% 3 = 2”; PhysicalSectorLocation = BAT[BlockNumber]+BlockBitmapSectorCount+SectorlnBlock其中LogicalSectorNumber 逻辑扇区号;BlockNumber 所在的 data block 号;SectorsPerBlock 每个 data block 所包含的扇区数;SectorInBlock 在所在的 data block 中的扇区号;PhysicalSectorLocation 相对VHD镜像文件的物理扇区号;BlockBitmapSectorCount :扇区位图的扇区数。需要说明的是,在虚拟机用户看来,VHD镜像文件就像一个磁盘分区一样,可以部署某个文件系统使用。当要写入数据时,根据不同的文件系统的数据写策略,可能会写到文件系统的不同物理区域,大部分情况下,不会从文件系统的起始位置依次向后(指从扇区号相对于起始位置较小的部分向较大的部分)写。所以对于VHD文件来说,各data block的顺序与它们各自的起始扇区号的大小顺序通常都不同。如图I中,假设每个data block的大小为2MB,虚拟机用户如果一开始要在第3MB的地方写入几KB数据,则系统会先分配data block I给VHD文件,而不会把data block O分配给VHD文件。再例如图2,是本申请实施例中BAT的示意图。针对某个最多可以有16个data block的VHD文件,某个时刻BAT中记录了这16个data block的序号DBO DB15,以及各个data block的起始扇区号,所述起始扇区号即为各data block在VHD文件中的相对位置。其中,起始扇区号为OxFFFFFFFF的data block表示该data block尚未分配。从图2可以看出,BAT中各data block的起始扇区号的大小并不是按照DBO DB 15的顺序递增。基于上述内容,下面分析现有技术为什么删除数据也不会使VHD文件减小。在现有技术中,当要写入的扇区对应的data block尚未分配时(对应的BAT项中记录为OxFFFFFFFF),则新分配一个data block(对应的BAT项中记录为新分配的datablock的起始扇区号),并且在所述新分配的data block的扇区位图中将要写入的扇区对应的位修改为I。但是,如果删除了某些数据,即使某个data block中的数据都不再有效,该data block的扇区位图中的对应位也不会复位,仍是I,即表示该data block仍处于被分配的状态,因此现有技术无法回收该data block所占的存储空间来存储其他的数据,从而造成存储空间的浪费。基于这种原因,要想节省VHD文件所占的空间,则要能够截短文件。在截短文件之前,先将原来在文件偏后位置处的数据,迁移到存放垃圾数据的位置,使得文件最后形成一块无用的区域,最后再将这部分无用的区域截断。基于这种思路,本申请提出一种收缩虚拟磁盘镜像文件的方法,可以有效地清除文件中的垃圾数据,进而达到收缩文件的目的。 下面通过实施例对本申请的内容进行详细说明。参照图3,是本申请实施例所述一种收缩虚拟磁盘镜像文件的方法流程图。仍以VHD镜像文件的收缩为例,步骤如下步骤301,查找文件中的垃圾数据块,并修改所述垃圾数据块在块分配表中的相应记录,其中所述垃圾数据块为不保存有效数据的数据块;文件中的data block基本分为垃圾数据块和有效数据块,有效数据块是指存放了有效数据的data block,所述垃圾数据块是指已经删除了块中全部数据的data block,即该data block中的数据都不再有效。查找到垃圾data block后,将该垃圾data block在块分配表BAT中记录的起始扇区号值为OxFFFFFFFF,即表示该data block对应的逻辑数据块不再保存数据。步骤302,将位于垃圾数据块后面的有效数据块迁移至垃圾数据块的位置,并修改迁移后的有效数据块在块分配表中的相应记录;所述“后面”是指在文件的物理存储区域,将文件偏后位置的有效数据块迁移至垃圾数据块的位置,同时将块分配表BAT中对应该有效数据块的起始扇区号修改为原来所述垃圾数据块的起始扇区号。所述“迁移”具体是指复制的过程,即将位于垃圾数据块后面的有效数据块中的数据复制到垃圾数据块的位置。步骤303,在完成数据块迁移后,将所述文件进行截短。上述迁移的目的是为了将有效数据块尽量向前移到文件的前部,从而使文件的最后形成一块无用的区域,最后将这部分无用区域进行截断,就可以使文件的长度减小。为了使本领域技术人员更加了解图3所示实施例的内容,下面通过图4所示的另一优选实施例进行更加详细地说明。参照图4,是本申请另一实施例所述一种收缩虚拟磁盘镜像文件的方法流程图。仍以VHD文件为例步骤401,查找文件数据块中的垃圾扇区;具体的查找方法如下对于每一个data block中的每一个扇区,查找data block中的扇区位图,如果扇区位图中对应某个扇区的记录表示该扇区中存储着数据,例如扇区位图中的某个位为1,则表示对应的扇区中可能存储着有效数据,也可能已经删除了数据,所以需要继续进行以下判断I)如果所述文件是动态磁盘镜像文件,则判断该扇区中存储的数据是否全为0,·如果是,则将该扇区作为垃圾扇区;2)如果所述文件增量磁盘镜像文件,则判断该扇区中存储的数据是否与父镜像文件中相同扇区位置的数据一致,如果一致,则将该扇区作为垃圾扇区。步骤402,修改所述垃圾扇区在扇区位图中的相应记录;查找到垃圾扇区后,可以将将垃圾扇区在扇区位图中对应的位清0,即表示对应的扇区中没有保存数据。步骤403,查找文件中的垃圾数据块;具体的查找方法如下查找文件数据块中的扇区位图,将扇区位图中对应所有扇区的记录都表示为垃圾 扇区的数据块作为垃圾数据块。对于每一个data block,如果一个data block被使用(BAT中对应项记录的不为OxFFFFFFFF),但经过上面的两步之后,该data block的扇区位图全为0,则该data block可以认为是一个垃圾data block,因为其中不再保存有效的数据。但是,如果一个data block的扇区位图中,有些扇区的对应位为O,有些扇区的对应位为I,则该data block不是一个垃圾data block,仍是有效数据块。步骤404,修改所述垃圾数据块在块分配表中的相应记录;在BAT中,将垃圾data block对应的起始扇区记录置为OxFFFFFFFF。例如,图2中起始扇区分别为12327、24639、28743的三个data blockDB5、DB13和DB14,经上述三步,发现为垃圾data block,则将它们的BAT项置为OxFFFFFFFF,如图5所
/Jn ο步骤405,数据迁移;将位于垃圾data block(目标位置)后面的有效data block(源位置),拷贝(包括扇区位图和数据)至该垃圾data block处,并更新迁移后的有效data block在BAT中的起始扇区。例如,图5中,可以把起始扇区为36951 (DB8)的有效data block,迁移至起始扇区为12327的区域中,对应的BAT[8]的起始扇区改为12327 ;把起始扇区为32847 (DB7)的有效data block,迁移至起始扇区为24639的区域中,对应的BAT[7]的起始扇区改为24639,最后形成如图6所示的文件。这样,在文件的末尾处,起始扇区为28743的data block仍为垃圾data block,而起始扇区为32847和36951的data block中的数据被复制到了起始扇区改为24639和12327的data block中,所以起始扇区为32847和36951的data block对VHD文件来说不必要保留,这三个数据块构成一块无用的区域。当然,也可以有其他的迁移方法,但总的宗旨是使文件末尾形成一块无用的区域,以便进行截断。步骤406,截短文件。在完成数据块迁移后,即步骤403中找到的垃圾data block处都重新保存着有效数据、或者后面不再有有效的data block可以拷贝过来,则文件末尾形成一块无用区域,将所述无用区域截断,即可得到截短之后的文件。截短的大小最多可以是找到的垃圾datablock的大小,如图7所示,即将文件末尾的三个数据块截断。综上所述,经过以上步骤的处理,完成了垃圾数据的清除,使得VHD格式的动态磁盘镜像文件和增量磁盘镜像文件删除某些数据后,镜像文件的大小也可以减小,从而节省文件所需的存储空间。此外,在上述查找垃圾扇区的过程中,除了采用上述方法分别从本盘(动态)或父盘(增量)中依次读取扇区位图进行比对、进而判断是否为垃圾扇区外,本申请还提出一种快速计算垃圾扇区的方法,可以更加快速地识别出数据块中哪些扇区是垃圾扇区,进而将所有扇区都是垃圾扇区的数据块作为垃圾数据块。仍以VHD镜像文件为例,下面详细说明所述的快速识别方法。I.对于增量磁盘镜像文件而言首先,对于每个data block,得到三个sector bitmap (扇区位图),分别是I) source bitmap,简写为 src_bmp,原始扇区位图该 VHD 中该 data block 的sector bitmap ;
·
2)parent bitmap,简写为prt_bmp,祖先镜像扇区位图读取父镜像中该datablock的sector bitmap,如果某位为I,则为I ;否则,继续回溯父镜像的父镜像,直至祖先镜像,当读到祖先镜像时该位为0,则为O。3)block bitmap,简写为blk_bmp,反演扇区位图根据虚拟机用户在该VHD镜像文件上建立的文件系统,反演得到的sector bitmap,表示在该位上的sector是否真正存储着有效信息。通常的文件系统,都通过某种方式记录着数据的位图信息,标记着哪些扇区保存着有效信息,哪些扇区没有保存有效信息。比如Linux中常用的ext2/3/4,通过每个块组中的bitmap块,记录着哪些块中保存着有效数据;再比如Windows中常用的NTFS,通过SBitmap文件记录块的位图信息。其中一个块包含若干个扇区。获得文件系统中的扇区位图信息后,通过前面介绍的逻辑扇区号与物理扇区号间的换算方法,就可以得到在VHD文件中哪些扇区中保存着有效信息,从而得到blk_bmp。然后,比对这三个bitmap,生成一个最终的目标位图dst_bmp,作为该VHD中该data block在将垃圾扇区在bitmap中对应的位清O后(即上述步骤402之后)的sectorbitmap ο对于每一位if src_bmp = O, then dst_bmp = 0 ;if src_bmp = I, thenif prt_bmp = 0 and blk_bmp = I, then dst_bmp = I ;/*表示相对于父盘来说,新写了数据*/if prt_bmp = I and blk_bmp = 0, then dst_bmp = I ;/*表示相对于父盘来说,删除了数据*/if prt_bmp = O and blk_bmp = 0, then dst_bmp = 0 ;/*表示相对于父盘来说,新写了数据,但最后又删除了这部分新写的数据*/if prt_bmp = I and blk_bmp = I表示相对于父盘来说,发生了修改,这时分别从本镜像与父镜像中读取数据并比较,如果一致则置dst_bmp为0,不一致则置dst_bmp为I。由上可知,上述第三种判断如果原始扇区位图中对应某个扇区的记录表示该扇区中存储着数据(src_bmp = I),并且该扇区在祖先镜像扇区位图中的相应记录表示该扇区中没有存储数据(prt_bmp = 0),并且该扇区在反演扇区位图中的相应记录表示该扇区中没有存储数据(blk_bmp = O),则将该扇区作为垃圾扇区。还有一种情况也可以判为垃圾扇区,即上述最后一种判断,如果src_bmp = I,并且prt_bmp = I and blk_bmp = I,这时分别从本镜像与父镜像中读取数据并比较,如果一致则置dst_bmp为O,此时也可以将该扇区作为垃圾扇区。2.对于动态磁盘镜像文件而言,则相对简单,如下首先,对于每个data block,获取source bitmap和block bitmap,不需要获取parent bitmap。然后,比对这两个bitmap,生成一个最终的目标位图dst_bmp,作为上述步骤402之后的sector bitmap。对于每一位if src_bmp = O, then dst_bmp = 0 ; if src_bmp = 1,thenif blk_bmp = I, then dst_bmp = I ;/*表示新写了数据*/if blk_bmp = 0, then dst_bmp = 0 ;/*表示新写了数据,但最后又删除了这部分新写的数据*/由上可知,如果原始扇区位图中对应某个扇区的记录表示该扇区中存储着数据(src_bmp = I),并且该扇区在反演扇区位图中的相应记录表示该扇区中没有存储数据(blk_bmp = O),则将该扇区作为垃圾扇区。上述实施例是以VHD格式的镜像文件为例进行说明,但具体应用中也可以应用到其他格式的虚拟磁盘镜像文件中,其实施原理与上述实施例相似,故不再赘述。需要说明的是,对于前述的方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本申请所必须的。基于上述方法实施例的说明,本申请还提供了相应的收缩虚拟磁盘镜像文件的装置实施例,来实现上述方法实施例所述的内容。参照图8,是本申请实施例所述一种收缩虚拟磁盘镜像文件的装置结构图。所述收缩虚拟磁盘镜像文件的装置可以包括垃圾数据块查找模块81、数据迁移模块82和文件截短模块83,其中,垃圾数据块查找模块81,用于查找文件中的垃圾数据块,并修改所述垃圾数据块在块分配表中的相应记录,其中所述垃圾数据块为不保存有效数据的数据块;数据迁移模块82,用于将位于垃圾数据块后面的有效数据块迁移至垃圾数据块的位置,并修改迁移后的有效数据块在块分配表中的相应记录;其中,所述迁移是指复制操作;文件截短模块83,用于在完成数据块迁移后,将所述文件进行截短。优选的,由于每个数据块包含扇区和用于记录每个扇区信息的扇区位图,因此所述装置还可以包括以下模块垃圾扇区查找模块84,用于查找文件数据块中的垃圾扇区,并修改所述垃圾扇区在扇区位图中的相应记录。
进一步优选的,基于所述垃圾扇区查找模块84,所述垃圾数据块查找模块81通过查找文件数据块中的扇区位图,可以将扇区位图中对应所有扇区的记录都表示为垃圾扇区的数据块作为垃圾数据块。对于所述垃圾扇区查找模块84,可通过两种方法进行垃圾扇区的查找。对于第一种查找方法,即从本盘(动态)或父盘(增量)中依次读取扇区位图进行比对、进而判断是否为垃圾扇区,相应的所述垃圾扇区查找模块84具体可以包括以下子模块扇区位图查找子模块,用于查找文件数据块中的扇区位图,如果扇区位图中对应某个扇区的记录表示该扇区中存储着数据,则触发判断子模块;判断子模块,用于进行以下判断 如果所述文件是动态磁盘镜像文件,则判断该扇区中存储的数据是否全为0,如果是,则将该扇区作为垃圾扇区;如果所述文件是增量磁盘镜像文件,则判断该扇区中存储的数据是否与父镜像文件中相同扇区位置的数据一致,如果一致,则将该扇区作为垃圾扇区。对于第二种快速查找的方法,相应的所述垃圾扇区查找模块84具体又可以包括以下子模块I)如果所述文件是动态磁盘镜像文件,则所述垃圾扇区查找模块84具体可以包括第一获取子模块,用于获取文件数据块的原始扇区位图和表示对应扇区是否存储有效数据的反演扇区位图;第一对比子模块,用于对比所述原始扇区位图和反演扇区位图的每一位如果原始扇区位图中对应某个扇区的记录表示该扇区中存储着数据,并且该扇区在反演扇区位图中的相应记录表示该扇区中没有存储数据,则将该扇区作为垃圾扇区。2)如果所述文件是增量磁盘镜像文件,则所述垃圾扇区查找模块84具体可以包括第二获取子模块,用于获取文件数据块的原始扇区位图和表示对应扇区是否存储有效数据的反演扇区位图以及祖先镜像文件中相同数据块的扇区位图;第二对比子模块,对比所述原始扇区位图、反演扇区位图和祖先镜像扇区位图的每一位如果原始扇区位图中对应某个扇区的记录表示该扇区中存储着数据,并且该扇区在祖先镜像扇区位图中的相应记录表示该扇区中没有存储数据,并且该扇区在反演扇区位图中的相应记录表示该扇区中没有存储数据,则将该扇区作为垃圾扇区。综上所述,上述实施例所述的收缩虚拟磁盘镜像文件的装置可使VHD格式的动态磁盘镜像文件和增量磁盘镜像文件删除某些数据后,镜像文件的大小也可以减小,从而节省文件所需的存储空间。对于上述收缩虚拟磁盘镜像文件的装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见图I至图7所示方法实施例的部分说明即可。本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。以上对本申请所提供的一种收缩虚拟磁盘镜像文件的方法及装置,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式
及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。 ·
权利要求
1.一种收缩虚拟磁盘镜像文件的方法,其特征在于 所述文件包含数据块和用于记录每个数据块信息的块分配表; 所述方法包括 查找文件中的垃圾数据块,并修改所述垃圾数据块在块分配表中的相应记录,其中所述垃圾数据块为不保存有效数据的数据块; 将位于垃圾数据块后面的有效数据块迁移至垃圾数据块的位置,并修改迁移后的有效数据块在块分配表中的相应记录; 在完成数据块迁移后,将所述文件进行截短。
2.根据权利要求I所述的方法,其特征在于 每个数据块包含扇区和用于记录每个扇区信息的扇区位图; 所述查找文件中的垃圾数据块之前,还包括 查找文件数据块中的垃圾扇区,并修改所述垃圾扇区在扇区位图中的相应记录。
3.根据权利要求2所述的方法,其特征在于,所述查找文件中的垃圾数据块,包括 查找文件数据块中的扇区位图,将扇区位图中对应所有扇区的记录都表示为垃圾扇区的数据块作为垃圾数据块。
4.根据权利要求2所述的方法,其特征在于,所述查找文件数据块中的垃圾扇区,包括 查找文件数据块中的扇区位图,如果扇区位图中对应某个扇区的记录表示该扇区中存储着数据,则继续进行以下判断 如果所述文件是动态磁盘镜像文件,则判断该扇区中存储的数据是否全为O,如果是,则将该扇区作为垃圾扇区; 如果所述文件是增量磁盘镜像文件,则判断该扇区中存储的数据是否与父镜像文件中相同扇区位置的数据一致,如果一致,则将该扇区作为垃圾扇区。
5.根据权利要求2所述的方法,其特征在于,所述查找文件数据块中的垃圾扇区,包括 如果所述文件是动态磁盘镜像文件,则获取文件数据块的原始扇区位图和表示对应扇区是否存储有效数据的反演扇区位图; 对比所述原始扇区位图和反演扇区位图的每一位 如果原始扇区位图中对应某个扇区的记录表示该扇区中存储着数据,并且该扇区在反演扇区位图中的相应记录表示该扇区中没有存储数据,则将该扇区作为垃圾扇区。
6.根据权利要求2所述的方法,其特征在于,所述查找文件数据块中的垃圾扇区,包括 如果所述文件是增量磁盘镜像文件,则获取文件数据块的原始扇区位图和表示对应扇区是否存储有效数据的反演扇区位图以及祖先镜像文件中相同数据块的扇区位图; 对比所述原始扇区位图、反演扇区位图和祖先镜像扇区位图的每一位 如果原始扇区位图中对应某个扇区的记录表示该扇区中存储着数据,并且该扇区在祖先镜像扇区位图中的相应记录表示该扇区中没有存储数据,并且该扇区在反演扇区位图中的相应记录表示该扇区中没有存储数据,则将该扇区作为垃圾扇区。
7.根据权利要求I所述的方法,其特征在于,在完成数据块迁移后,将所述文件进行截短,包括 在完成数据块迁移后,文件末尾形成一块等于所有垃圾数据块大小的无用区域,将所述无用区域截断,得到截短之后的文件。
8.一种收缩虚拟磁盘镜像文件的装置,其特征在于 所述文件包含数据块和用于记录每个数据块信息的块分配表; 所述装置包括 垃圾数据块查找模块,用于查找文件中的垃圾数据块,并修改所述垃圾数据块在块分配表中的相应记录,其中所述垃圾数据块为不保存有效数据的数据块; 数据迁移模块,用于将位于垃圾数据块后面的有效数据块迁移至垃圾数据块的位置,并修改迁移后的有效数据块在块分配表中的相应记录; 文件截短模块,用于在完成数据块迁移后,将所述文件进行截短。
9.根据权利要求8所述的装置,其特征在于 每个数据块包含扇区和用于记录每个扇区信息的扇区位图; 所述装置还包括 垃圾扇区查找模块,用于查找文件数据块中的垃圾扇区,并修改所述垃圾扇区在扇区位图中的相应记录。
10.根据权利要求9所述的装置,其特征在于 所述垃圾数据块查找模块通过查找文件数据块中的扇区位图,将扇区位图中对应所有扇区的记录都表示为垃圾扇区的数据块作为垃圾数据块。
11.根据权利要求9所述的装置,其特征在于,所述垃圾扇区查找模块包括 扇区位图查找子模块,用于查找文件数据块中的扇区位图,如果扇区位图中对应某个扇区的记录表示该扇区中存储着数据,则触发判断子模块; 判断子模块,用于进行以下判断 如果所述文件是动态磁盘镜像文件,则判断该扇区中存储的数据是否全为0,如果是,则将该扇区作为垃圾扇区; 如果所述文件是增量磁盘镜像文件,则判断该扇区中存储的数据是否与父镜像文件中相同扇区位置的数据一致,如果一致,则将该扇区作为垃圾扇区。
12.根据权利要求9所述的装置,其特征在于,如果所述文件是动态磁盘镜像文件,则所述垃圾扇区查找模块包括 第一获取子模块,用于获取文件数据块的原始扇区位图和表示对应扇区是否存储有效数据的反演扇区位图; 第一对比子模块,用于对比所述原始扇区位图和反演扇区位图的每一位 如果原始扇区位图中对应某个扇区的记录表示该扇区中存储着数据,并且该扇区在反演扇区位图中的相应记录表示该扇区中没有存储数据,则将该扇区作为垃圾扇区。
13.根据权利要求9所述的装置,其特征在于,如果所述文件是增量磁盘镜像文件,则所述垃圾扇区查找模块包括 第二获取子模块,用于获取文件数据块的原始扇区位图和表示对应扇区是否存储有效数据的反演扇区位图以及祖先镜像文件中相同数据块的扇区位图; 第二对比子模块,对比所述原始扇区位图、反演扇区位图和祖先镜像扇区位图的每一位 如果原始扇区位图中对应某个扇区的记录表示该扇区中存储着数据,并且该扇区在祖先镜像扇区位图中的相应记录表示该扇区中没有存储数据,并且该扇区在反演扇区位图中的相应记录表示该扇区中没有存储数据,则将该扇区作为垃圾扇区。
全文摘要
本申请提供了一种收缩虚拟磁盘镜像文件的方法及装置,以解决目前的虚拟磁盘镜像文件即使删除数据也不会使文件减小,从而浪费存储空间的问题。所述方法包括查找文件中的垃圾数据块,并修改所述垃圾数据块在块分配表中的相应记录,其中所述垃圾数据块为不保存有效数据的数据块;将位于垃圾数据块后面的有效数据块迁移至垃圾数据块的位置,并修改迁移后的有效数据块在块分配表中的相应记录;在完成数据块迁移后,将所述文件进行截短。本申请使得虚拟磁盘镜像文件删除某些数据后,镜像文件的大小也可以减小,从而节省文件所需的存储空间。
文档编号G06F12/06GK102929884SQ201110228838
公开日2013年2月13日 申请日期2011年8月10日 优先权日2011年8月10日
发明者宋振华, 陈伟才, 王倩, 万佳 申请人:阿里巴巴集团控股有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1