虚拟磁盘的优化缩减的制作方法
【专利摘要】本文披露了缩减一个存储对象的各种系统和方法。例如,一种方法可以包括接收一个请求以便缩减该存储对象。该存储对象可以包括多个存储单元。该方法还可以包括接收识别一组存储单元的一个第一列表。该列表可以响应于缩减该存储对象的请求而产生。该方法还可以包括从在所接收的列表中未识别的该存储对象内的一组存储单元来读取数据,并将读取的数据从该第一存储对象复制到一个第二存储对象。
【专利说明】虚拟磁盘的优化缩减
[0001]威廉E.索伯发明领域
[0002]本发明涉及数据存储,并且更具体地涉及重新调整虚拟磁盘的容量。
[0003]相关领域说明
[0004]虚拟磁盘是直接或间接从一个或多个底层物理存储装置的内存中形成的存储对象。虚拟机将虚拟磁盘解释为物理存储装置,例如硬盘。一种类型的虚拟磁盘是动态虚拟磁盘。动态虚拟磁盘可以在容量上从相对较小的初始容量(这种情况中动态虚拟磁盘使用较少量的存储空间)变到某种最大容量(其中动态虚拟磁盘使用更大量的存储空间)。当虚拟机存储附加数据时,虚拟磁盘容量变大。动态虚拟磁盘高效地利用底层物理存储装置的空间,因为动态虚拟磁盘仅仅在虚拟机实际需要存储空间时消耗存储空间。
[0005]但虚拟机不再使用存储空间的一部分时,可以回收未使用的存储空间。例如,如果虚拟机在虚拟磁盘上存储了一个文件,但随后将该文件指定为删除,在底层物理存储装置中包含该文件的存储空间就不再由虚拟机主动地使用。这种存储空间可以例如由管理底层物理存储装置的文件系统来回收。这称为“缩减”虚拟磁盘。然而,缩减虚拟磁盘的常规方法通常需要大量的输入和输出(I/o)操作,这些操作可能负面地影响性能。
[0006]发明概沭
[0007]本文披露了缩减一个存储对象的各种系统和方法。例如,一种方法可以包括接收缩减该存储对象的一个请求。该存储对象可以包括多个存储单元。该方法还可以包括接收识别一组存储单元的一个列表。该列表可以响应于缩减该存储对象的请求而产生。该方法还包括从该存储对象中的一组存储单元(并未在接收的列表中得到识别)读取数据,并且包括将读取的数据从该第一存储对象复制到一个第二存储对象。在一个实施例中,该第一和第二存储对象是动态虚拟磁盘。
[0008]在一个实施例中,该方法包括响应于缩减该存储对象的请求而创建一个文件。创建该文件可以在不执行任何I/o操作的情况下完成。这种情况可以通过检查与该文件相关联的一个属性的值来检测。该列表识别包括在该文件中的存储对象的多个部分。一旦完成缩减操作,就可以删除该文件。在一个实施例中,在该列表中识别的这些部分是在创建该文件之前未使用的该存储对象的多个部分。
[0009]在一个实施例中,该方法包括接收一个第二列表并将该第二列表与该第一列表合并。每个列表对应于该存储对象的一个分区并且识别这些对应的分区的多个未使用部分。
[0010]一种系统的示例可以包括一个或多个处理器和连接至该一个或多个处理器的内存。该内存存储多条程序指令,这些程序指令可用于执行像上述方法的一种方法。类似地,这些程序指令可以存储在一个计算机可读存储介质上。
[0011]前述内容是一个概述,因此不可避免地包含细节的简化、概括以及省略;因而本领域技术人员将认识到概述仅仅是说明性的并且在任何情况下不用于限制。如权利要求所唯一定义的本发明的其他方面、发明特征和优点在以下提供的非限制性详细描述中将变得明显。
[0012]附图简沭
[0013]通过参考附图,本发明可以得到更好的理解,并且其众多目标、特征以及优点对本领域技术人员是明显的。
[0014]图1是根据一个实施例的一种缩减动态虚拟磁盘的系统的框图。
[0015]图2A是根据一个实施例的动态虚拟磁盘的图示。
[0016]图2B是根据一个实施例的动态虚拟磁盘的图示。
[0017]图2C是根据一个实施例的动态虚拟磁盘的图示。
[0018]图3是根据一个实施例的一种执行动态虚拟磁盘缩减操作的方法的流程图。
[0019]图4a的流程图根据一个实施例展示了一种执行动态虚拟磁盘缩减操作的方法的多个附加方面。
[0020]图4b的流程图根据一个实施例展示了一种执行动态虚拟磁盘缩减操作的方法的多个附加方面。
[0021]图5是根据一个实施例的一种计算装置的框图,该框图展示了如何在软件中实施
一个容量调整管理器。
[0022]图6是根据一个实施例的一种网络系统的框图,该框图展示了各种计算装置如何通过网络进行通信。
[0023]尽管易于对本发明进行各种修改和替代,但在附图和详细说明中将本发明的具体实施例作为示例来提供。应当理解的是,附图和详细说明不用于将本发明限制于所披露的具体形式。相反,本发明应该涵盖落在所附权利要求定义的本发明的精神和范围之内的所有修改形式、等同形式以及替代形式。
[0024]详细说明
[0025]在采用虚拟化的系统中,主机装置上布置了一个或多个虚拟机。这种主机装置安装有一个主操作系统,该主操作系统提供对主机装置的资源的访问并管理它们,例如处理器周期、存储空间以及网络带宽。主机分配这些资源以便在这个或这些虚拟机中使用。每个虚拟机或来宾可以运行它自己的操作系统和应用程序。
[0026]运行在操作系统上的虚拟机以及一个或多个应用程序通常使用一些存储空间。主机通常分配一个或多个虚拟磁盘给虚拟机。一种类型的虚拟磁盘是动态虚拟磁盘。当例如通过主操作系统创建动态虚拟磁盘时,主机设置虚拟磁盘的最大容量,例如100千兆字节(Gb)。该虚拟磁盘被称为IOOGb虚拟磁盘,并且一旦该虚拟磁盘与虚拟机相关联时,虚拟机就将该虚拟磁盘看作是IOOGb存储装置。
[0027]当主机首次创建一个动态虚拟磁盘时,该虚拟磁盘基本上耗用零物理存储空间,因为虚拟机仍未向虚拟磁盘写入任何数据。也就是说,主机已经向该虚拟机磁盘分配了IOOGb的存储空间,但该虚拟磁盘仍未使用这些存储空间的任意一部分。主机分配IOOGb是承诺IOOGb的物理存储空间对与该虚拟磁盘相关联的虚拟机是可用的。动态地分配虚拟磁盘意味着直到虚拟机将写操作指向虚拟机时,主机的文件系统实际上才需要向虚拟磁盘分配底层物理存储装置的具体物理存储器。直到虚拟机写入到存储空间时,最终可由虚拟磁盘利用的存储空间才可用于其他目的,例如临时存储器。
[0028]主机可以创建的另一种类型的虚拟磁盘是固定盘。在固定盘情况中,在创建固定盘时主机的文件系统预留了与所分配的空间相对应的物理存储器。在此示例中,如果主机向固定的虚拟磁盘分配100Gb,文件系统就在底层物理存储装置上划拨IOOGb的物理存储空间并将该存储空间标记为已使用,这样该存储空间不能用于任何其他目的。
[0029]在动态虚拟磁盘的情况中,虚拟机将虚拟磁盘看作是具有IOOGb (或近似IOOGb)的空闲或可利用空间的IOOGb存储装置,并且文件系统将虚拟磁盘看作是具有基本为零容量的存储对象。在创建虚拟磁盘时,虚拟磁盘中的已用空间实际上不为零,因为与该虚拟磁盘相关联的某些元数据通常存储在虚拟机磁盘中。例如,虚拟机磁盘可以包括识别虚拟磁盘中可用空间和已用空间的图。因此,即使主机分配IOOGb的虚拟磁盘,虚拟机可以将该虚拟磁盘看作是最初具有少于IOOGb的可用空间,并且文件系统可用将该虚拟磁盘看作是容量大于零。
[0030]当虚拟机写到虚拟磁盘时,就消耗或使用了物理存储空间。通常虚拟机将虚拟磁盘的一部分标记为已使用,这减少了虚拟机在虚拟机磁盘中所观察到的可用空间的容量。虚拟机能够直接访问底层物理存储装置以便写入数据。可替代地,虚拟机可以将数据转移到主机上的文件系统,并且文件系统可以对物理存储装置进行实际的写操作。虚拟机还将写操作通知给文件系统。响应于虚拟机的通知,文件系统将存储虚拟磁盘的底层物理存储装置的一部分标记为已使用。例如,如果虚拟机写入IGb的文件,文件系统将虚拟磁盘的容量增加IGb并将等于IGb容量的物理存储空间的容量标记为已使用,因此这些空间不可用于其他目的。以此方式,虚拟磁盘的容量可以随着时间而增长。
[0031 ] 在一些情况中,虚拟机不再希望存储先前写入到虚拟磁盘的数据。考虑以下示例。在第一时间点,虚拟机下载软件包并将该软件包写入到虚拟磁盘。在此示例中,该软件包使用IGb的空间。也就是说,当虚拟机将该软件包写入到虚拟磁盘时,虚拟机将虚拟磁盘中的空闲空间的容量减少了 IGb并且文件系统将虚拟磁盘的容量增加了 1Gb。如果虚拟机随后下载了该软件包的一个较新版本(也使用IGb的存储空间)并在虚拟磁盘中使用该较新的版本,虚拟机再次将虚拟磁盘中的空闲空间的容量减少IGb并且文件系统再次将虚拟磁盘的容量增加了 1Gb。当增加虚拟磁盘文件的容量时,文件系统将底层物理存储装置上的相应容量的物理存储空间标记为已使用。在此示例中,虚拟磁盘现在存储了两个版本的软件包,一个较新版本和一个旧版本。假设旧版本是废弃的,虚拟机可以将旧版本标记为删除。当虚拟机将旧版本标记为删除时,虚拟机将虚拟磁盘中的可用空间容量增加1Gb。然而,虚拟机通常不向文件系统通知此事,所以文件系统仍将物理存储空间分配给两个版本的软件包。也就是说,尽管虚拟机只将IGb的虚拟磁盘看作用于存储较新的软件包,但文件系统仍认为2Gb用于储存两个版本的软件包。
[0032]由于在虚拟机执行创建空闲空间的操作(例如,如以上示例中,将数据标记为删除)时未通知主机,所以文件系统并不会响应于这些操作来减少虚拟磁盘的容量。如果允许这种情况向其逻辑结论方向发展,虚拟磁盘文件可能最终增长到它的最大允许容量,并且虚拟机不能够在虚拟磁盘中存储任何额外数据。在一些情况中这是可能发生的,尽管虚拟机不再关心虚拟磁盘中数据的十分重要的部分。例如,虚拟机可以指定应该将某些数据标记为删除。结果,虚拟机将这些数据部分看作是可用空间。然而,虚拟机通常不会将虚拟机不再关心的数据的那些部分传送至文件系统。因此,文件系统已经在底层物理存储装置上标记为已使用或不可用的物理存储器(包含虚拟机不再关心的数据)。在这种情况中,从虚拟机的角度看,虚拟磁盘具有可用的空间,但从主机的角度看,可以将虚拟磁盘看作是满的。
[0033]很多原因导致这种不良情况。在一个示例中,如果虚拟磁盘文件达到了它的最大分配容量(从文件系统的角度来看),虚拟机将不能够执行新的数据写操作。而且,存储空间通常是短缺的,所以在存储装置中存储不再有用的数据可能增加存储系统的成本并不必要地请求获得额外的存储装置。仍进一步地,增加存储装置中所用存储空间的容量在一些情况下可能负面地影响存储装置的性能。例如,当一个存储装置更满地载入数据时可能要比存储装置不那么满地载入花费更多的时间来读取或写入到存储装置。
[0034]为了改善以上不利状况,传统的系统可以采用回收虚拟机不再需要的存储空间的方法。这种做法称为缩减虚拟磁盘。以下讨论一个这类方法以及与常规方法相关的一些限制。
[0035]一种缩减虚拟磁盘的方法包括将一种模式(例如,全零)写入到底层存储装置中分配给该虚拟磁盘但包含虚拟机未使用的数据的全部区域。零写入到的物理存储装置中的那些区域存储了虚拟机先前写入但虚拟机不再使用的数据。在这种示例中,虚拟机的操作系统与用于组织底层物理存储装置上的数据的文件系统相兼容。这允许虚拟机指定底层物理存储装置中的哪些物理存储空间应当以零来覆盖。
[0036]当虚拟机接收到缩减虚拟磁盘的请求时,虚拟机首先识别虚拟磁盘中虚拟机先前使用但目前不再使用的那些部分。然后虚拟机向虚拟机磁盘的那些部分写入全零。在一个示例中,虚拟机维护虚拟磁盘的一个图,该图指示虚拟磁盘的哪些部分包含使用的、或有效的数据并且哪些部分不包含这些数据。该图指示虚拟机在虚拟磁盘中使用了多少空间以及虚拟磁盘中多少空间可利用。
[0037]然后主机停止或中止虚拟机的操作。这意味着虚拟机不再能够写入到虚拟磁盘。在一些情况中,虚拟机仍然能够从虚拟磁盘中读取。在缩减操作的情况中,虚拟磁盘被称为源虚拟磁盘,因为虚拟磁盘中的数据将要复制到被称为目的虚拟磁盘的新虚拟磁盘。
[0038]接着,主机创建新的(目的)虚拟磁盘。文件系统可以向目的虚拟磁盘分配等量的存储空间。例如,如果主机先前为源虚拟磁盘分配100Gb,主机可以为目的虚拟磁盘分配另一个100Gb。如以上提及,主机将目的虚拟磁盘看作是在创建该目的虚拟磁盘时容量就基本为零的存储对象。
[0039]接着,主机读取底层物理存储装置中对应于源虚拟磁盘的那些部分。主机读取被文件系统标记为由虚拟磁盘使用的所有存储空间。也就是说,如果文件系统将虚拟磁盘文件的容量看作是IOOGb (这意味着文件系统已经将IOOGb的存储空间标记为由虚拟磁盘使用),主机就读取IOOGb的数据。
[0040]对于主机所读取的底层物理存储装置中的每个部分,主机都确定是否该部分填以全零。如果是这样,主机认为物理存储装置的这部分未由虚拟机使用。当物理存储装置的这部分不包含全零时,主机认为这部分由虚拟机使用并将存储在这部分中的数据写入到新的虚拟磁盘。因此,物理存储装置中分配给虚拟磁盘并包含全零的任意部分不会从源虚拟磁盘复制到目的虚拟磁盘。如所提及,包含全零的那些部分是虚拟机所指示的并未由虚拟机使用的那些部分,所以虚拟机向那些部分写入全零。
[0041]一旦虚拟机所使用的所有数据被读取并复制到目的虚拟磁盘,目的虚拟磁盘仅包含标记为由虚拟机使用的数据,并且不包含虚拟机不关心的数据。此时,主机可以删除源虚拟磁盘文件并指示虚拟机利用目的虚拟磁盘恢复操作。虚拟机可以开始向目的虚拟磁盘写数据并从目的虚拟磁盘读取。
[0042]从主机的角度看,上述方法可以使虚拟磁盘的容量显著减少。然而,这样做需要将零写入到物理存储装置中包含数据(这些数据不再由虚拟机使用)的所有部分,并读取物理存储装置中虚拟机磁盘已经使用的所有部分。在一些情况中,读和写(I/o操作)可能消耗大量计算资源,例如处理器周期和数据传输带宽。
[0043]考虑将虚拟磁盘看作是IOOGb的示例,但仅包括虚拟机关心的32Gb数据。执行以上方法包括虚拟机写入68Gb的零。然后主机读取IOOGb的数据并将这IOOGb与零相比较。接着,主机将虚拟机关心的32Gb数据写到新的虚拟磁盘。这总计是200Gb的I/O操作。
[0044]以下针对所附图示描述一种缩减动态虚拟磁盘的替代方法。该替代方法减少了执行相同缩减的I/O操作量,从而突破了理论最小值。在以上示例中,替代方法包括仅读取32Gb并且仅写入32Gb。减少136GB的I/O操作表示68%的节约量,这意味着相同的缩减操作可以在更短的时长中执行并使用相当少的计算资源,例如处理器周期和数据传输带宽。
[0045]图1是一种计算系统的框图。如图所示,该计算系统包括由网络30连接的计算装置10和存储装置20,该存储装置包括虚拟磁盘22和虚拟磁盘24。网络30可以包括WAN (广域网)(例如互联网)、一个或多个LAN(局域网)和/或一个或多个SAN(存储区域网)。
[0046]计算装置10是例如个人计算机、膝上型计算机、服务器、个人数字助理、蜂窝电话等这样的计算装置。计算装置10包括操作系统50 (包括文件系统60)和虚拟化模块70 (包括容量调整管理器72)。计算装置10还实现虚拟机40 (I)(包括操作系统42 (I)、容量调整模块44(I)和应用程序46 (I))和虚拟机40 (2)(包括操作系统42 (2)、容量调整模块44(2)和应用程序46(2))。
[0047]操作系统50可以通过计算装置10获取计算资源,例如处理器或存储资源(例如存储器20)。在一个实施例中,存储器20包括组织成物理集群的物理存储装置。集群表示可以读取或写入到存储器20的最少量的数据,例如4Kb。物理存储装置中的每个集群顺序地从例如物理集群O (代表第一物理集群)到某个最大数(代表物理存储装置中的最后一个物理集群)进行编号。存储装置20可以包括在和/或连接至(例如,通过总线、网络或其他适合的互联设备)计算装置10。存储装置20提供持久性的数据存储,这样存储在这种存储装置上的数据甚至在关闭存储装置之后仍保持存储状态。这种存储装置例如可以是硬盘、光碟(CD)、数字通用光盘(DVD)、或其他大容量存储装置、或包括这种存储装置阵列的存储系统(例如独立磁盘冗余阵列(RAID)系统或光存储自动点唱机)。这种存储装置还可以是在这类物理存储装置和/或存储系统上实施的虚拟或逻辑存储装置。例如,这类存储装置可以是在RAID存储系统上实施的逻辑卷。另外,这类存储装置可以包括一个或多个存储装置。存储装置还可以包括一种或多种类型的存储介质,包括固态介质(例如,闪盘驱动器)、光介质(例如,CD和DVD)以及磁介质(例如,硬盘或磁带)。
[0048]文件系统60可以将数据(例如存储器20中的数据)组织进入文件和目录中。文件系统60可以维护存储器20中的文件和数据的物理单元的列表。例如,当操作系统50创建新文件时,操作系统50可以将该文件的参数通知给文件系统60,例如大小和类型、关联关系和各种其他元数据。利用这种信息,文件系统60可以确定例如在存储器20中哪些集群将存储该文件的数据。类似地,当针对存储器20进行写操作时,文件系统60分配具体的物理集群以存储写入的数据。文件系统60持续跟踪哪些物理集群已使用、哪些文件在已使用的物理集群中存储数据以及哪些物理集群未使用。
[0049]在一个实施例中,操作系统50创建虚拟磁盘,例如虚拟磁盘22。文件系统60指定存储器20中的哪些物理集群存储虚拟磁盘22的数据。在一个实施例中,操作系统50指定虚拟磁盘22是动态虚拟磁盘。动态虚拟磁盘最初具有相对少量的实际使用存储器并且在虚拟机(对虚拟磁盘具有写访问权)需要更多空间时可以增加。文件系统60将动态虚拟磁盘22看作是存储对象,例如文件,该存储对象最初的容量几乎为零。因此,当最初创建虚拟磁盘22时,文件系统60不会将存储器20中的物理集群的任何一个识别为实际存储虚拟磁盘22的数据。当更多的数据由例如虚拟机40写入到虚拟磁盘22时,文件系统60增加虚拟磁盘22的容量并将存储器20中的附加物理集群识别为存储虚拟磁盘22的数据。
[0050]操作系统50可以向虚拟机40的一个或多个分配虚拟磁盘22。操作系统50可以通知虚拟机40已经给虚拟机40分配并指定了虚拟磁盘。一般而言,虚拟机40是充当物理计算机系统的软件结构。例如,虚拟机40可以运行应用程序(例如应用程序46),提供服务并且处理命令。应用程序46的示例可以包括针对计费、电子表格、数据库、字处理、媒体消费、采购和开发、产品开发等的软件。虚拟机可以运行它自己的操作系统,例如操作系统
42。示例操作系统包括微软Windows和Unix。当应用程序46写数据时,操作系统42可以对虚拟磁盘22进行写操作。操作系统42可以保存一个图,该图识别虚拟磁盘22中已使用的多个部分以及可用的多个部分。为了确定虚拟磁盘22中存储的数据在物理上存储在什么位置,操作系统42可以与文件系统60进行通信。
[0051]操作系统50还可以将虚拟磁盘22的某些特性通知给虚拟机40,例如可用空间的容量。虚拟机40不需要知道虚拟磁盘22是动态的。当操作系统50为虚拟机40分配虚拟磁盘22时,操作系统50通知虚拟机40在虚拟磁盘22中有多少空间对虚拟机40是可利用的。虚拟机40将虚拟磁盘22看作是一个存储对象,该存储对象的容量由操作系统50指定。虚拟机40可以不知道用于存储虚拟磁盘22的物理集群的实际容量或数量最初是十分小的并且可以在虚拟机40向虚拟磁盘22写入附加数据时增加。例如,操作系统50可以向虚拟磁盘22划拨IOOGb并将虚拟磁盘22分配给虚拟机40。虚拟机40将虚拟磁盘22看作是IOOGb的存储对象。文件系统60将虚拟磁盘22看作是OGb的存储对象。在一个实施例中,虚拟机40维护一个图(例如位图),该图将虚拟磁盘22表示为虚拟集群的顺序排列。每个虚拟集群可以有固定的容量。例如,虚拟机40可以将虚拟磁盘22看作是一系列25K的虚拟集群(其中每个虚拟集群是4Kb),在此示例中该虚拟磁盘是100GB的虚拟磁盘。虚拟机40可以使用该图来识别哪些虚拟集群已使用以及哪些未使用。
[0052]应用程序46对虚拟磁盘22的写操作示例可如下进行。应用程序46执行写操作。写操作包括在应用程序46使用的文件中保存数据,存储从网络下载的文件等。虚拟机40检测是否虚拟磁盘22具有可用空间。例如,虚拟机40可以检测虚拟集群的图以检测哪些虚拟集群(如果有的话)是可用的。如果虚拟机40检测到虚拟磁盘22是充满的,或没有可用的虚拟集群,写操作失败。否则,应用程序46向虚拟机40传递与写操作相关的信息,例如文件名。应用程序46还可以向虚拟机40传递将要写入的数据。虚拟机40对虚拟磁盘22进行写操作。为了这样做,虚拟机40向文件系统60传递信息,该信息表示需要写操作。该信息可以识别将要写入的数据的大小和容量,以及该数据所关联的文件的文件名。
[0053]文件系统60检测是否有足够的空间分配给虚拟磁盘22以便容纳数据。例如,如果应用程序46正写入IGb的数据,并且文件系统60发现IOOGb分配给虚拟磁盘22且仅使用了 50Gb,文件系统60就会检测到在虚拟磁盘22中有足够的分配空间来容纳写操作。在这种情况中,文件系统60可以通知虚拟机40有足够的可用空间并且写操作可以进行。否贝U,文件系统60可以指示写操作应该会失败。可替代地,文件系统60可以为虚拟磁盘22分配额外的存储空间并允许进行写操作。
[0054]如果文件系统60检测到虚拟磁盘22有足够的分配空间来容纳写操作,文件系统60在存储器20中分配实际存储数据的一个或多个物理集群或物理集群的范围。文件系统60还可以向虚拟机40发送识别物理集群的信息。虚拟机40将数据传输至文件系统60并更新虚拟集群图以便将分配给数据的虚拟集群识别为已使用。文件系统60可以将数据存储在存储器20中。可替代地,虚拟机22可以直接向存储器20传输数据。存储器20将数据存储在文件系统60所指定的那些物理集群上。
[0055]当虚拟机40不再需要特定的数据项时,例如当应用程序46发布删除文件的命令时,虚拟机40可以更新虚拟集群图以指示存储数据的虚拟机集群不再包含有效数据。虚拟集群中的数据被指定为删除并且虚拟集群被标记为可用的存储空间。
[0056]与创建虚拟机和管理虚拟机以及虚拟机资源相关的操作可以由包括容量调整管理器72的虚拟化模块70来执行。例如,当缩减虚拟磁盘(例如虚拟磁盘22)时,容量调整管理器72可以与容量调整模块(例如容量调整模块44)进行通信以缩减虚拟磁盘22。
[0057]在一个实施例中,操作系统50可以检测指示虚拟磁盘应该缩减的条件并将此信息传送至虚拟模块70。然后容量调整管理器72可以通知容量调整模块44虚拟磁盘22的缩减正在进行。接着容量调整模块44可以在占有虚拟磁盘22的基本上所有空闲空间的虚拟磁盘22中创建文件。容量调整模块44可以使用虚拟机40所维护的虚拟集群的图以便在该文件所占有的虚拟磁盘22中产生虚拟集群列表。这种列表本质上是虚拟磁盘22中虚拟磁盘22未使用的所有虚拟集群的列表,无论这些单元从未被写入到虚拟机40或已经之前被其使用以便存储数据并且然后被指定为已经被虚拟机40删除。
[0058]虚拟机40可以将虚拟集群的列表传送至操作系统50。在一个实施例中,虚拟机40首先将虚拟集群的列表转换为相应的物理集群的列表。文件系统60提供具有物理集群的虚拟机40,当虚拟机40向物理集群写入时,这些物理集群存储虚拟磁盘22的数据。这允许虚拟机40在物理集群和虚拟集群之间进行映射。该列表中的物理集群表示一些单元,这些单元包含虚拟机40不再关心的数据。
[0059]操作系统50可以从虚拟机40已经写到的虚拟磁盘22的所有单元(除了列表中识别的单元)读取数据,并且将读取的数据复制到新的虚拟磁盘,例如虚拟磁盘24。在该复制操作完成后,虚拟磁盘24仅包含虚拟机40关心的数据并且还足够大来容纳该数据。也就是说,虚拟磁盘24可能小于虚拟磁盘22,因为虚拟磁盘24只具有用于虚拟机40感兴趣的数据的存储空间,尽管虚拟磁盘22可能包括存储虚拟机40不再关心的数据的存储空间。
[0060]图2A是IOOGb虚拟磁盘的图示,例如图1的虚拟磁盘22。图2A展示了从文件系统(例如,图1的文件系统60)角度看的虚拟磁盘中的已用空间205和未用空间210。已用空间205和未用空间210代表一个或多个物理集群。在一个实施例中,虚拟磁盘是从基本为零字节的已用存储空间发展到几乎充满的动态虚拟磁盘。例如,操作系统(例如图1的操作系统50)向虚拟磁盘分配了 100Gb。操作系统可以向虚拟机授予写权限,例如图1的虚拟机40。
[0061]在操作系统创建虚拟磁盘并向该虚拟磁盘分配存储空间(例如,IOOGb)时,文件系统将该虚拟磁盘看作是具有基本为零字节的空间用于存储数据。此时,不分配物理集群来存储虚拟磁盘的数据。当虚拟机将数据写入到虚拟磁盘时,文件系统将底层存储装置(例如图1的存储器20)中的特定物理集群分配给数据并标记为已由这些物理集群(包含虚拟机写入的数据)使用。随着时间变化,虚拟磁盘从其最初容量(这种情况下文件系统将几乎零字节的存储空间标记为已使用)增长到几乎90Gb的存储空间(文件系统将其标记为已使用),如图2A所示。当虚拟机写入到虚拟磁盘时,文件系统标记已经使用的额外存储空间(例如,物理集群),并且虚拟磁盘动态地增长。
[0062]图2B从虚拟机的角度展示了图2A的虚拟磁盘。图2B展示了已用空间215和未用空间220。已用空间215和未用空间220代表一个或多个虚拟集群。写到虚拟磁盘的虚拟机还可以从虚拟磁盘删除数据。在一个实施例中,虚拟机的一个或多个删除操作针对于虚拟磁盘中未使用空间220的一些或全部。然而,这些删除操作不会传递到文件系统,所以尽管文件系统将虚拟磁盘看作是使用分配给虚拟磁盘的存储空间的90%,但虚拟机将虚拟磁盘看作是只使用了分配给虚拟磁盘的存储空间的50%,如图2B所示。
[0063]图2C从文件系统角度展示了缩减操作后图2A的虚拟磁盘,如以下所描述。图2C展示了已用空间225和未用空间230。已用空间225和未用空间230代表一个或多个物理集群。需要注意的是,尽管已用空间225在图2C中描绘为一系列连续定位的集群,但在底层物理存储装置中不需要存在这样的安排。如图2A和图2B所示,文件系统将包括在虚拟磁盘中的某些物理集群看作是由虚拟磁盘使用,即使虚拟机将相应的虚拟集群看作是未使用的。缩减操作使得文件系统将这些区域看作是未使用的。在缩减操作之后,文件系统将虚拟磁盘看作是使用了大概50%,这与缩减操作之前相反,在这种情况中文件系统认为虚拟磁盘使用了 90%。正如所看到的那样,缩减操作产生可由文件系统使用的额外空间。
[0064]图3是一种执行虚拟磁盘缩减操作的方法的流程图。在一个实施例中,由一个系统(例如图1的系统)来执行该方法。缩减操作开始于305。缩减操作可以响应于用户命令而启动。例如,系统管理员可以手动地选择虚拟磁盘,例如图1的虚拟磁盘22,并启动该虚拟磁盘的缩减操作。缩减的虚拟磁盘称为源虚拟磁盘。可替代地,缩减操作可以响应于检测到阈值条件而自动启动。例如,操作系统(例如,图1的操作系统50)可以检测虚拟磁盘或底层物理存储装置(例如,图1的存储器20)的使用已经达到某个阈值,例如90%已满。响应于检测到已达到该阈值,操作系统可以启动虚拟磁盘的缩减操作。操作系统可以通过与文件系统(例如,图1的文件系统60)的通信来检测达到该阈值,该文件系统管理虚拟磁盘所使用的存储空间(例如,图1的存储器20)。操作系统还可以周期地或响应于检测到自前一个缩减操作以来的经过时间量来启动缩减操作。
[0065]响应于操作系统检测到将要执行缩减操作,操作系统向容量调整管理器(例如,图1的容量调整管理器72)发布命令以开始缩减。然后容量调整管理器通知虚拟机(例如,图1的虚拟机40)中的容量调整模块(例如,如图1所示的容量调整模块44)进行缩减操作。容量调整管理器可以代表主操作系统来执行与缩减操作有关的操作。容量调整模块可以代表虚拟机执行与缩减操作有关的操作。
[0066]在310,如参考图4A进一步描述的,产生集群列表。该列表可以响应于接收到缩减操作的通知由容量调整模块来产生。该列表识别虚拟磁盘中虚拟机认为未使用的单元。列表中识别的这些单元中的一些可以被识别为由文件系统使用。从文件系统的角度来看,文件系统识别为已使用的单元有助于增加虚拟磁盘所利用的存储空间容量。列表识别虚拟机在虚拟磁盘中所看到的基本上全部未使用空间。在一个替代实施例中,列表可以识别虚拟机认为已使用的单元。
[0067]在405,容量调整模块(例如,图1的容量调整模块44)接收虚拟磁盘(例如,图1的虚拟磁盘22)将要缩减的通知。响应于通知,在410容量调整模块打开一个临时文件。容量调整模块将该文件的容量设置为在虚拟机(例如图1的虚拟机40)看来几乎等于虚拟磁盘中空闲空间的容量。在一个实施例中,虚拟机将所有虚拟集群标记为可用空间或不可用空间,并包括该临时文件中的虚拟集群。虚拟机通常使较少数量的虚拟集群为空闲。如果在缩减操作后任何操作使得虚拟磁盘扩大,这种剩余空间可用于存储数据。
[0068]创建文件并使虚拟集群标记为已使用也使得底层物理集群被标记为已使用。这防止可以在底层物理存储装置(例如,图1的存储器20)上运行的任何碎片整理操作移动这些单元。如果在缩减操作过程中移动了这些单元,缩减操作可能失败,或错误数据可能被复制。
[0069]容量调整模块设置文件的一个属性,该属性指定在关闭该文件时将会删除该文件。容量调整模块还设置文件的一个属性,该属性指定管理该文件的存储器的文件系统(例如,图1的文件系统60)不应该以零填充为该文件分配的未使用空间,或对分配给该文件的单元执行任何写操作。在一个实施例中,设置该属性包括在文件的元数据中设置标记。当文件系统为该临时文件分配空间时,文件系统读取该标记的值。
[0070]在一个实施例中,容量调整模块创建多个临时文件。例如,容量调整模块可以为每个连续范围的虚拟集群创建一个临时文件。在另一个示例中,虚拟磁盘可以跨越底层物理存储装置(例如图1的存储器20)的多个分区。在此示例中,容量调整模块可以为虚拟磁盘所跨越的每个分区创建一个临时文件。可替代地,虚拟磁盘可以包括在一个单一部分中。
[0071]在415,容量调整模块识别被分配用于存储文件中所包含的数据的虚拟集群并创建这些虚拟集群的列表。在420,容量调整模块将虚拟集群标识符转换为物理集群标识符并创建一个新的物理集群标识符列表。在一个实施例中,虚拟集群和逻辑集群的大小不同。在这种情况中,单一的虚拟集群编号可以对应于多个逻辑集群编号,或反之亦然。在将虚拟集群编号列表转换为逻辑集群编号列表之后,在425容量调整模块将该列表传送至容量调整管理器。
[0072]返回到图3,在315操作系统建立一个新的虚拟磁盘,例如图1的虚拟磁盘24,在315。该虚拟磁盘将用作在源虚拟磁盘上存储的数据的目的虚拟磁盘。操作系统可以为目的虚拟磁盘和源虚拟磁盘分配相同容量的存储空间,或者操作系统可以为目的虚拟磁盘分配不同容量的存储空间。操作系统可以指定目的虚拟磁盘是动态虚拟磁盘。最初,在文件系统看来,目的虚拟磁盘基本上是空的,或容量为零字节。
[0073]在320,如参考图4A进一步描述的,操作系统从源虚拟磁盘向目的虚拟磁盘复制数据。在430,容量调整管理器接收容量调整模块产生的列表。在435,操作系统中止虚拟机。当中止虚拟机时,虚拟机不能写入到虚拟磁盘。在中止虚拟机的同时,虚拟机仍可以处理从虚拟磁盘的读操作。在一个实施例中,操作系统可以完全关闭虚拟机,这样在进行缩减操作时虚拟机不执行任何操作。
[0074]文件系统维护底层物理存储装置的物理集群(用于存储虚拟磁盘的数据)列表。在440,操作系统在物理集群列表中选择第一条项,该第一条项对应于物理存储装置中的第一物理集群。在440,操作系统将这种物理集群标识符与从容量调整模块接收的未使用的物理集群列表中的条项相比较,以确定由文件系统标记为已使用的物理集群是否由虚拟机使用。如果在两个列表中都识别了物理集群,操作系统不会从源虚拟磁盘向目的虚拟磁盘复制物理集群中的数据,因为从容量调整模块接收的列表识别虚拟机不再使用的物理集群并且操作系统不会复制被识别为虚拟机未使用的集群。如果物理集群被识别为由文件系统和虚拟机使用(例如,物理集群在从容量调整模块接收的列表中未得到识别),在435操作系统将该集群从源虚拟磁盘复制到目的虚拟磁盘。操作系统从源虚拟磁盘的一些单元读取这些集群并写入由文件系统分配到目的虚拟磁盘的集群。写入到目的虚拟磁盘的每个集群使得文件系统动态地增加目的虚拟磁盘的容量。
[0075]在440,操作系统检测是否附加的集群仍然从源虚拟磁盘复制到目的虚拟磁盘。在一个实施例中,这包括遍历被文件系统识别为由源虚拟磁盘使用的所有集群的列表。如果是这样,在445操作系统在由文件系统标记为已使用的物理集群列表中选择下一个条项。
[0076]一旦需要复制到目的虚拟磁盘的所有集群都复制到目的虚拟磁盘,在435容量调整模块关闭临时文件,这导致临时文件的删除。
[0077]返回到图3,在325操作系统交换虚拟磁盘。为了这样做,操作系统授予虚拟机对目的虚拟磁盘的读和写访问权限,并取消虚拟机访问源虚拟磁盘的权限。然后在330,操作系统可以删除源虚拟磁盘。
[0078]一旦完成缩减操作,在335操作系统重新启动虚拟机。当重新启动虚拟机时,该虚拟机就可以从目的虚拟机读取并写入到它。
[0079]图5是一种计算装置的框图,该框图展示了可以如何在软件中实施容量调整管理器72。计算系统510广义上代表能够执行计算机可读指令的任何单处理器或多处理器的计算装置或系统。计算系统510的多个示例包括但不限于各种装置中的任意一种或多种,这些装置包括工作站、个人计算机、膝上型计算机、客户侧终端、服务器、分布式计算系统、手持装置(例如,个人数字助理和移动电话)、网络设备、存储控制器(例如,阵列控制器、磁带驱动控制器或硬盘驱动控制器)等。在其最基本的配置中,计算系统510可以包括至少一个处理器514以及一个系统内存516。通过执行实现容量调整管理器72的软件,计算系统510成为一个专用计算装置,该装置被配置成用于参与动态虚拟磁盘缩减操作。
[0080]处理器514总体上代表能够处理数据或解释并执行多个指令的任何类型或形式的处理单元。在某些实施例中,处理器514可以从一个软件应用程序或模块中接收指令。这些指令可以使处理器514执行在此所说明和/或展示的这些实施例中的一个或多个的功能。例如,处理器514可以执行和/或作为一种手段用于执行此处所描述的操作中的全部或一些。处理器514还可以执行和/或作为一种手段来执行在此说明和/或展示的任何其他操作、方法、或过程。
[0081]系统内存516总体上代表能够存储数据和/或其他计算机可读指令的任何类型或形式的易失性或非易失性存储装置或介质。系统内存516的多个示例包括(但不限于)随机存取存储器(RAM)、只读存储器(ROM)、闪存、或任何其他适当的存储装置。在一个实施例中,实施RAM模块135的程序指令可以载入到系统内存516中。
[0082]在某些实施例中,除了处理器514和系统内存516外,计算系统510还可以包括一个或多个组件或元件。例如,如图5所示,计算系统510可以包括内存控制器518、输入/输出(I/O)控制器520、以及通信接口 522,它们中的每一个可以通过通信基础设施512相互连接。通信基础设施512总体上代表能够帮助在计算装置的一个或多个组件之间进行通信的任意类型或形式的基础设施。通信基础设施512的示例包括但不限于通信总线(例如工业标准体系结构(ISA)、外围组件互联(PCI)、第三代总线标准(PCIe)、或类似总线)和网络。
[0083]内存控制器518总体上代表在计算系统510的一个或多个组件之间操作内存或数据或者控制通信的任意类型或形式的装置。例如,在某些实施例中,内存控制器518可以通过通信基础设施512控制处理器514、系统内存516以及I/O控制器520之间的通信。在某些实施例中,内存控制器518可以独立地或与其他元件相结合地执行和/或作为一种手段执行在此描述和/或展示的多个步骤或特征中的一个或多个。
[0084]I/O控制器520总体上代表能够协调和/或控制一种计算装置的输入和输出功能的任何类型或形式的模块。例如,在某些实施例中I/o控制器520可以控制或协助在计算系统510的一个或多个元件(如处理器514、系统内存516、通信接口 522、显示适配器526、输入接口 550、以及存储接口 554)之间的数据传送。
[0085]通信接口 522广义地代表能够协助计算系统510与一个或多个附加装置之间进行通信的任何类型或形式的通信装置或适配器。例如,在某些实施例中,通信接口 522可以协助计算系统510与包括多个附加的计算系统的私有或公共网络之间的通信。通信接口 522的示例包括但不限于有线网络接口(例如网络接口卡)、无线网络接口(例如无线网络接口卡)、调制解调器、以及任何其他适当的接口。在至少一个实施例中,通信接口 522可通过到网络(如互联网)的直接链接来提供到一台远程服务器的直接连接。通信接口 522还可以间接地提供这种连接,例如通过局域网(如以太网)、个人局域网、电话或缆线网、蜂窝电话连接、卫星数据连接、或任何其他适当的连接。
[0086]在某些实施例中,通信接口 522还可以代表一种主机适配器,该主机适配器被配置为用于通过一条外部总线或通信信道协助计算系统510与一个或多个附加网络或存储装置之间的通信。主机适配器的示例包括但不限于小型计算机系统接口(SCSI)主机适配器、通用串行总线(USB)主机设配器、电气和电子工程学会(IEEE) 1594主机适配器、串行高级技术附件(SATA)、串行附接SCSI(SAS)和外部SATA(eSATA)主机适配器、高级技术附件(ATA)和并行ATA(PATA)主机适配器、光纤通道接口适配器、以太网适配器等。
[0087]通信接口 522还可以允许计算系统510参与分布式计算或远程计算。例如,通信接口 522可以从一个远程装置接收指令或向一个远程装置发送指令用于执行。
[0088]如图5所示,计算系统510还可以包括通过显示适配器526连接至通信基础设施512的至少一个显示装置524。显示装置524总体上代表能够可视地呈现显示适配器526所转发的显示信息的任意类型或形式的装置。相似地,显示适配器526总体上代表任意类型或形式的装置,这些装置被配置用于从通信基础设施512 (或从本领域已知的帧缓冲器)转发图形、文本以及其他数据以便显示在显示装置524上。
[0089]如图5所示,计算系统510还可以包括通过输入接口 550连接至通信基础设施512的至少一个输入装置528。输入装置528总体上代表能够向计算系统510提供由计算机或人员生成的输入的任意类型或形式的输入装置。输入装置528的示例包括但不限于键盘、定位装置、语音识别装置或任意其他输入装置。
[0090]如图5所示,计算系统510还包括通过存储接口 534连接至通信基础设施512的一个数据存储装置533。存储装置533总体上代表能够存储数据和/或其他计算机可读指令的任意类型或形式的存储装置或介质。例如,存储装置533可以是磁盘驱动器(例如,所谓的硬盘驱动器)、软盘驱动器、光盘驱动器、闪存驱动器、或者类似装置。存储接口 534总体上代表用于在存储装置533和计算装置510的其他组件之间传输数据的任意类型或形式的接口或装置。
[0091]在某些实施例中,存储装置533可以被配置为用于读取自和/或写入到一个可移动存储单元,该可移动存储单元被配置为用于存储计算机软件、数据、或其他计算机可读信息。适合的可移动存储单元的示例包括但不限于软盘、磁带、光盘、闪存装置等等。存储装置533还可以包括其他类似的结构或装置,以允许计算机软件、数据或其他计算机可读指令下载到计算系统510中。例如,存储装置533可以被配置成用于读或写软件、数据或其他计算机可读信息。存储装置533还可以作为计算系统510的一部分或可以是通过其他接口系统访问的一个分离的装置。
[0092]很多其他装置或子系统可以连接至计算系统510上。相反地,为了实施在此描述和/或展示的实施例,不需要图5中所示的所有组件和装置。以上提到的这些装置和子系统还能够以不同于图5中所示的方式进行相互连接。
[0093]计算系统510还可使用任意数量的软件、固件、和/或硬件的配置。例如,在此披露的实施例中的一个或多个可以被编码为一种计算机可读介质上的计算机程序(也称为计算机软件、软件应用程序、计算机可读指令、或计算机控制逻辑)。计算机可读存储介质的示例包括磁存储介质(例如硬盘驱动器和软盘)、光存储介质(例如,⑶或DVD-ROM)、电存储介质(例如,固态驱动器和闪存)等。这样的计算程序也可以通过网络(例如互联网或载体介质)传输到计算系统510以存储在内存中。
[0094]包含计算机程序的计算机可读介质可以载入到计算系统510中。存储在计算机可读介质上的所有或部分计算机程序然后可以存储在系统内存516和/或存储装置532和533的不同部分上。当由处理器514执行时,载入到计算系统510中的计算机程序可以使处理器514执行和/或作为一种手段执行在此描述和/或展示的实施例中的一个或多个的功能。另外或可替代地,在此所说明和/或展示的实施例中的一个或多个可以在固件和/或硬件中实施。例如,可以将计算系统510配置为一种特定用途集成电路(ASIC),该电路被适配为用于实施在此所披露的这些实施例中的一个或多个。
[0095]图6是网络架构600的框图,在该网络架构中客户端系统610、620和630以及服务器640和645可以连接至网络650。客户端系统610、620和630总体上代表任意类型或形式的计算装置或系统。
[0096]类似地,服务器640和645总体上代表被配置为用于提供不同的数据库服务和/或运行某些软件应用程序的计算装置或系统,例如在计算装置(例如图5中的计算系统510)上实施的应用程序服务器或数据库服务器。网络650总体上代表任何电信或计算机网络,例如包括:内部网、广域网(WAN)、局域网(LAN)、个人区域网(PAN)、或互联网。在一个示例中,服务器640和/或645可以包括如图1所示的RAM模块135。
[0097]如图6所示,一个或多个存储装置660(1)-(N)可以直接附接至服务器640。类似地,一个或多个存储装置670 (I)-(N)可以直接附接至服务器645。存储装置660 (I) - (N)和存储装置670 (I)-(N)总体上代表能够存储数据和/或其他计算机可读指令的任意类型或形式的存储装置或介质。在某些实施例中,存储装置660 (I)-(N)和存储装置670 (I)-(N)可以代表网络附联存储(NAS)装置,这些装置被配置为利用不同协议(例如网络文件系统(NFS)、服务器消息块(SMB)、或公共互联网文件系统(CIFS))与服务器640和645进行通?目。
[0098]服务器640和645还可以连接至存储区域网络(SAN)结构680。SAN结构680总体上代表能够协助多个存储装置之间通信的任意类型或形式的计算机网络或体系结构。SAN结构680可以协助服务器640和645与多个存储装置690 (I)-(N)和/或智能存储器阵列695之间的通信。SAN结构680还可以通过网络650以及服务器640和645协助客户端系统610,620和630与存储装置690 (I)-(N)和/或智能存储器阵列695之间的通信,其方式为装置690 (I)-(N)以及阵列695对客户端系统610、620和630呈现为本地附接的装置。与存储装置660 (I)-(N)和存储装置670 (I)-(N) —样,存储装置690 (I) - (N)和存储阵列695总体上代表能够存储数据和/或其他计算机可读指令的任意类型或形式的存储装置或介质。
[0099]在某些实施例中,参考图5的计算系统510,通信接口(例如图5中的通信接口522)可以用来在每个客户端系统610、620和630以及网络650之间提供连接。客户端系统610、620和630能够利用例如网络浏览器或其他客户端软件访问服务器640或645的信息。这种软件可以允许客户端系统610、620和630访问由服务器640、服务器645、存储装置660 (I) - (N)、存储装置670 (I) - (N)、存储装置690 (I) - (N)或智能存储器阵列695管理的数据。尽管图6描绘了使用网络(例如互联网)来交换数据,但在此描述和/或展示的实施例不限于互联网或任意具 体的基于网络的环境。
[0100]在至少一个实施例中,在此披露的实施例中的一个或多个的全部或一部分可被编码为一种计算机程序并且由服务器640、服务器645、存储装置660(1)-(Ν)、存储装置670(1)-(Ν)、存储装置690(1)-(Ν)、智能存储阵列695、或它们中的任意组合加载并执行。在此披露的实施例中的一个或多个的全部或一部分还可以被编码成为一种计算机程序,它存储在服务器640中、由服务器645来运行、并在网络650上分发给客户端系统610、620、和630。
[0101]在一些示例中,图1、5和6中的计算装置的全部或一部分可以代表云计算的或基于网络的环境的多个部分。云计算环境可以通过互联网提供各种服务和应用程序。这些基于云的服务(例如,软件即服务、平台即服务、基础设施即服务等)可以通过网络浏览器或其他的远程接口进行访问。在此所述的不同功能可以通过远程桌面环境或任何其他的基于云的计算环境来提供。
[0102]另外,在此所述的这些模块中的一个或多个可以将数据、物理装置、和/或物理装置的表示从一种形式转换到另一种形式。例如,图1中的归档模块可以转换计算装置的行为以使得计算装置存储并管理RAM中的数据操作。[0103]尽管已经结合一些实施例描述了本发明,但无意将本发明限制于本文阐述的具体形式。相反的是,本发明意在涵盖可以合理地包含在所附权利要求定义的本发明范围内的这些替代形式、修改形式以及等效形式。
【权利要求】
1.一种方法,包括: 接收一个请求以便对一个第一存储对象执行一个缩减操作,其中该第一存储对象包括多个存储单元; 接收识别第一组存储单元的一个第一列表,其中 该第一组存储单元是该多个存储单元的第一子集,并且 响应于该执行一个缩减操作的请求来接收该列表; 从第二组存储单元读取数据,其中 该第二组存储单元是该多个存储单元的第二子集,并且 该第一组存储单元和第二组存储单元是互不相交的;并且 将该数据复制到一个第二存储对象。
2.如权利要求1所述的方法,其中 该第一存储对象和第二存储对象包括多个动态虚拟磁盘。
3.如权利要求1所述的方法,其中 该第一组存储单元识别一个第一文件的多个部分,并且 响应于该请求,由一个虚拟机创建该第一文件。
4.如权利要求3所述的方法,进一步包括:检测该缩减操作的完成;并且 响应于该检测而删除该文件。
5.如权利要求1所述的方法,其中 该第一组存储单元对应于该第一存储对象的多个未使用部分。
6.如权利要求1所述的方法,进一步包括: 接收一个第二列表,其中该第一列表对应于该第一存储对象的一个第一分区的多个未使用部分并且该第二列表对应于该第一存储对象的一个第二分区的多个未使用部分;并且将该第二列表与该第一列表合并。
7.如权利要求1所述的方法,进一步包括: 检测该文件的一个属性,其中该属性指示创建该文件不需要任何输入/输出(I/o)操作。
8.如权利要求1所述的方法,进一步包括: 响应于接收到该请求为该第二存储对象分配一定量的存储空间,其中 该一定量的存储空间等于分配给该第一存储对象的第一存储空间量。
9.一种存储多个程序指令的计算机可读存储介质,这些程序指令可执行用于: 接收一个请求以便对一个第一存储对象执行一个缩减操作,其中该第一存储对象包括多个存储单元; 接收识别第一组存储单元的一个第一列表,其中 该第一组存储单元是该多个存储单元的第一子集,并且 响应于该执行一个缩减操作的请求来接收该列表; 从第二组存储单元读取数据,其中 该第二组存储单元是该多个存储单元的第二子集,并且 该第一组存储单元和第二组存储单元是互不相交的;并且 将该数据复制到一个第二存储对象。
10.如权利要求9所述的计算机可读存储介质,其中 该第一存储对象和第二存储对象包括多个动态虚拟磁盘。
11.如权利要求9所述的计算机可读存储介质,其中 该第一组存储单元识别一个第一文件的多个部分,并且 响应于该请求,由一个虚拟机创建该第一文件。
12.如权利要求11所述的计算机可读存储介质,其中这些程序指令进一步可执行用于: 检测该缩减操作的完成;并且 响应于该检测而删除该文件。
13.如权利要求9所述的计算机可读存储介质,其中 该第一组存储单元对应于该第一存储对象的多个未使用部分。
14.如权利要求9所述的计算机可读存储介质,其中这些程序指令进一步可执行用于: 接收一个第二列表,其中该第一列表对应于该第一存储对象的一个第一分区的多个未使用部分并且该第二 列表对应于该第一存储对象的一个第二分区的多个未使用部分;并且 将该第二列表与该第一列表合并。
15.如权利要求9所述的计算机可读存储介质,其中这些程序指令进一步可执行用于: 检测该文件的一个属性,其中该属性指示创建该文件不需要任何输入/输出(I/O)操作。
16.如权利要求9所述的计算机可读存储介质,其中这些程序指令进一步可执行用于: 响应于接收到该请求为该第二存储对象分配一定量的存储空间,其中 该一定量的存储空间等于分配给该第一存储对象的第一存储空间量。
17.—种系统,包括: 一个或多个处理器;以及 连接至该一个或多个处理器的一个内存,其中该内存存储可由该一个或多个处理器执行的程序指令以便: 接收一个请求以便对一个第一存储对象执行一个缩减操作,其中该第一存储对象包括多个存储单元; 接收识别第一组存储单元的一个第一列表,其中 该第一组存储单元是该多个存储单元的第一子集,并且 响应于该执行一个缩减操作的请求来接收该列表; 从第二组存储单元读取数据,其中 该第二组存储单元是该多个存储单元的第二子集,并且 该第一组存储单元和第二组存储单元是互不相交的;并且 将该数据复制到一个第二存储对象。
18.如权利要求17所述的系统,其中 该第一组存储单元识别一个第一文件的多个部分, 响应于该请求,由一个虚拟机创建该第一文件,并且 这些程序指令进一步可执行用于 检测该缩减操作的完成,并且响应于该检测而删除该文件。
19.如权利要求17所述的系统,其中 该第一组存储单元对应于该第一存储对象的多个未使用部分。
20.如权利要求17所述的系统,其中这些程序指令进一步可执行用于: 接收一个第二列表,其中该第一列表对应于该第一存储对象的一个第一分区的多个未使用部分并且该第二列表对应于该第一存储对象的一个第二分区的多个未使用部分;并且将该第二列表与该第一列表合并`。
【文档编号】G06F3/06GK103443758SQ201280010562
【公开日】2013年12月11日 申请日期:2012年3月9日 优先权日:2011年3月15日
【发明者】W·E·曹贝乐 申请人:赛门铁克公司