虚拟盘存储技术 背景技术 [0001] 存储虚拟化技术允许逻辑存储与物理存储分开。存储虚拟化的一个示范性使用情 形是在虚拟机内。虚拟化软件(通常称为管理程序或虚拟机监视器)层安装在计算机系统上 和控制虚拟机如何与物理硬件交互。由于通常把访客操作系统编码为实行物理硬件上的独 占控制,所以虚拟化软件可以被配置成细分物理硬件的资源和模拟虚拟机内物理硬件的存 在。存储虚拟化的另一使用情形是在被配置成实施存储阵列的计算机系统内。在此情形中, 物理计算机系统或虚拟机可以使用iSCSI协议等连接到存储阵列。 [0002] 可以使用存储操控模块来模拟虚拟或者物理机的存储。例如,存储操控模块可以 通过对可以用来描述(即,存储)虚拟盘扩展的一个或更多个虚拟盘文件(即,诸如块的连续 存储区域)进行读取和写入来操控虚拟或物理机发出的存储IO任务。同样地,存储操控程序 可以通过向一个或更多个虚拟盘文件写入虚拟盘的位模式数据来响应写入请求,以及通过 读取一个或更多个虚拟盘文件中存储的位模式来响应读取请求。 发明内容 [0003] 本文描述用于在一个或更多个虚拟盘文件中存储虚拟盘数据的技术。在示范性配 置中,虚拟盘扩展可以与表明虚拟盘扩展是否通过虚拟盘文件来描述的状态信息相关联。 在某些情况下,可以收回用来描述虚拟盘扩展的空间,可以使用状态信息来确定如何操控 针对虚拟盘扩展的后续读取和/或写入操作。可以使用收回的空间(例如,从一个或更多个 范围建立的扩展)来描述同样或另一虚拟盘扩展。除了以上内容之外,在权利要求、具体实 施方式、以及图中还描述了其它技术。 [0004] 本领域技术人员可以明白,本公开的一个或更多个各种方面可以包括但不限于用 于实现本文中参考的方面的电路和/或编程;电路和/或编程可以根据系统设计者的设计选 择而实质上是被配置成实现本文中参考的方面的硬件、软件、和/或固件的任何组合。 [0005] 以上内容是概述,因而必定包含细节的简化、概括和省略。本领域技术人员将会明 白,发明内容只是示例性的,而并非意在以任何方式限制。 附图说明 [0006] 图1描绘了计算机系统的高级方框图。 [0007] 图2描绘了虚拟化软件程序的示范性架构的高级方框图。 [0008] 图3描绘了虚拟化软件程序的替选架构的高级方框图。 [0009] 图4描绘了被配置成实现虚拟盘的计算机系统的低级方框图。 [0010] 图5A描绘了被配置成实现虚拟盘的计算机系统的低级方框图。 [0011] 图5B描绘了被配置成实现虚拟盘的计算机系统的低级方框图。 [0012] 图6描绘了差异盘的高级方框图。 [0013] 图7描绘了虚拟盘与虚拟盘文件之间关系的高级示例。 [0014] 图8描绘了虚拟盘与虚拟盘文件之间关系的高级示例。 [0015] 图9描绘了虚拟盘与虚拟盘文件之间关系的高级示例。 [0016] 图10描绘了虚拟盘与虚拟盘文件之间关系的高级示例。 [0017] 图11描绘了可以在计算机可读存储介质中实施和/或通过计算机系统执行的操作 流程。 [0018] 图12描绘了可以结合图11所示例的那些来执行的额外操作。 [0019] 图13描绘了可以结合图12所示例的那些来执行的额外操作。 [0020] 图14描绘了可以在计算机可读存储介质中实施和/或通过计算机系统执行的操作 流程。 [0021] 图15描绘了可以结合图14所示例的那些来执行的额外操作。 [0022] 图16描绘了可以在计算机可读存储介质中实施和/或通过计算机系统执行的操作 流程。 [0023] 图17描绘了可以结合图16所示例的那些来执行的额外操作。 具体实施方式 [0024] 公开的主题可以使用一个或更多个计算机系统。图1和以下讨论意在提供可以实 施公开主题的合适运算环境的简要总体描述。 [0025] 通篇使用的术语电路可以包括诸如硬件中断控制器、硬盘驱动器、网络适配器、图 形处理器、基于硬件的视频/音频编解码器、以及用来操作这种硬件的固件的硬件组件。术 语电路还可以包括通过固件和/或软件配置的微处理器、专用集成电路、以及处理器,例如, 执行指令读取和执行的多内核通用处理单元的内核。可以通过从存储器(例如,RAM、ROM)、 固件、和/或海量存储加载的指令来配置处理器,实施可操作用于把处理器配置成执行功能 的逻辑。在电路包括硬件和软件的组合的实例实施例中,实施者可以编写实施逻辑的源代 码,其后续被编译成可以通过硬件执行的机器可读代码。由于本领域技术人员可以明白,本 领域的现状已演进到在硬件实施功能或软件实施功能之间存在微小差别的程度,所以用以 实现本文中描述的功能的硬件对软件的选择仅是一种设计选择。换言之,由于本领域技术 人员可以明白,可以把软件过程变换成等同硬件结构,可以把硬件结构本身变换成等同软 件过程,所以硬件实施对软件实施的选择留待实施者决定。 [0026] 现在参照图1,描绘了示范性运算系统100。计算机系统100可以包括处理器102,例 如,执行内核。虽然示例了一个处理器102,但在其它实施例中计算机系统100可以具有多个 处理器,例如,每处理器基板多个执行内核和/或可以各自具有多个执行内核的多个处理器 基板。如图所示,各种计算机可读存储介质110可以通过向处理器102耦合各种系统组件的 一个或更多个系统总线互连。系统总线可以是包括如下内容的数个类型总线结构中的任何 总线结构:存储器总线或存储器控制器、外围总线、以及使用各种总线架构中任何总线架构 的本地总线。在实例实施例中计算机可读存储介质110可以包括例如随机访问存储器(RAM) 104、存储装置106(例如,机电硬盘驱动器、固态硬盘驱动器等)、固件108(例如,闪存RAM或 ROM),以及诸如例如CD-ROM、软盘、DVD、闪存驱动器、外界存储装置等的可移除存储装置 118。本领域技术人员应当明白,可以使用其它类型的计算机可读存储介质,如,磁盒、闪存 卡、和/或数字视频盘。 [0027] 计算机可读存储介质110可以提供处理器可执行指令122、数据结构、程序模块和 诸如可执行指令的计算机系统100的其它数据的非易失性和易失性存储。可以在固件108中 存储包含基本例程的基本输入/输出系统(BIOS)120,其中所述基本例程帮助在计算机系统 100内的元件之间传送信息(如,在启动期间)。可以在固件108、存储装置106、RAM 104、和/ 或可移除存储装置118上存储大量程序,以及通过包括操作系统和/或应用程序的处理器 102来执行。在示范性实施例中,计算机可读存储介质110可以存储在以下段落中更详细描 述的虚拟盘解析器404,可以通过处理器102执行,从而把计算机系统100变换成被配置成用 于特定目的的计算机系统,即,根据本文件中描述的技术配置的计算机系统。 [0028] 计算机系统100可以通过可以包括但不限于键盘和指点装置的输入装置116接收 命令和信息。其它输入装置可以包括麦克风、操纵杆、游戏手柄、扫描仪等。这些和其它输入 装置常常通过耦合到系统总线的串口接口连接到处理器102,但是也可以通过其它接口 (如,并口、游戏端口、或者通用串行总线(USB))连接。显示器或其它类型的显示装置也可以 经由接口(如,可以是图形处理器单元112的一部分或者连接到图形处理器单元112的视频 适配器)连接到系统总线。除了显示器之外,计算机通常包括其它外围输出装置,如,扬声器 和打印机(未示出)。图1的示范性系统还可以包括主机适配器、小型计算机系统接口(SCSI) 总线、以及连接到SCSI总线的外界存储装置。 [0029] 计算机系统100可以使用去往一个或更多个远程计算机(如,远程计算机)的逻辑 连接在联网环境中操作。远程计算机可以是另一计算机、服务器、路由器、网络PC、对等装置 或其它公共网络节点,以及通常可以包括以上相对于计算机系统100描述的许多元件或所 有元件。 [0030] 当在LAN或WAN组网环境中使用时,计算机系统100可以通过网络接口卡114连接到 LAN或WAN。可以在内部或外部的NIC 114可以连接到系统总线。在联网环境中,可以把相对 于计算机系统100描绘的程序模块、或者其一些部分存储在远程存储器存储装置中。将会明 白,此处描述的网络连接是示范性的,还可以使用在计算机之间建立通信链路的其它方式。 此外,虽然构思了本公开的众多实施例特别是非常适合计算机化系统,但本文中没有内容 意在把本公开限制为这些实施例。 [0031] 转到图2,示例的是可以用来生成虚拟机的示范性虚拟化平台。在此实施例中,微 核管理程序202可以被配置成控制和任意访问计算机系统200的硬件。微核管理程序202可 以生成称为诸如子分区1至子分区N(其中,N是大于1的整数)的分区的执行环境。此处,子分 区是微核管理程序202支持的隔离的基本单元。微核管理程序202可以隔离一个分区中的进 程以免访问另一分区的资源。特别地,微核管理程序202可以隔离访客操作系统的核模式代 码以免于访问另一分区的资源以及用户模式进程。可以把每个子分区映射到在微核管理程 序202的控制下的一组硬件资源,例如,存储器、装置、处理器循环等。在实施例中,微核管理 程序202可以是单机软件产品、嵌入主板的固件内的操作系统的一部分、专用集成电路、或 者其组合。 [0032] 微核管理程序202可以通过约束物理计算机系统中存储器的访客操作系统视图而 强制分区。当微核管理程序202实例化虚拟机时,它可以向虚拟机分配系统物理存储器 (SPM)的页面(例如,具有开始和结束地址的存储器的定长块)作为访客物理存储器(GPM)。 此处,微核管理程序202控制系统存储器的访客约束视图。术语访客物理存储器是从虚拟机 的角度描述存储器页面的简洁方式,术语系统物理存储器是从物理系统的角度描述存储器 页面的简洁方式。因而,向虚拟机分配的存储器的页面将会具有访客物理地址(虚拟机使用 的地址)和系统物理地址(页面的实际地址)。 [0033] 访客操作系统可以虚拟化访客物理存储器。虚拟存储器是允许操作系统过量调配 (commit)存储器和允许应用对逻辑上连续的工作存储器单独访问的管理技术。在虚拟化环 境中,访客操作系统可以使用此上下文中称为访客页面表的一个或更多个页面表把称为虚 拟访客地址的虚拟地址转译成访客物理地址。在此实例中,存储器地址可以具有访客虚拟 地址、访客物理地址、以及系统物理地址。 [0034] 在描绘的实例中,还可以也视为与Xen开源管理程序的域0类似的父分区组件可以 包括主机环境204。主机环境204可以是操作系统(或一套配置工具),主机环境204可以被配 置成通过使用虚拟化业务提供器228(VSP)向在子分区1-N中执行的访客操作系统提供资 源。可以使用在开源团体中通常称作后端驱动器的VSP 228来通过虚拟化业务客户端(VSC) (在开源团体或半虚拟化装置中通常称作前端驱动器)把接口复用到硬件资源。如图所示, 虚拟化业务客户端在访客操作系统的环境中执行。然而,这些驱动器在它们经由VSP与主机 环境204通信而非与硬件或模拟硬件通信的过程中与访客中驱动器的其余驱动器不同。在 示范性实施例中可以把虚拟化业务提供器228使用以与虚拟业务客户端216和218通信的路 径视为启发(enlightened)IO路径。 [0035] 如图所示,模拟器234(例如,虚拟化IDE装置、虚拟化视频适配器、虚拟化NIC等)可 以被配置成在主机环境204内运行和附接到对访客操作系统220和222可用的模拟硬件资 源,例如,IO端口、访客物理地址范围、虚拟VRAM、模拟ROM范围等。例如,当访客OS触及映射 到访客物理地址(装置的寄存器在该地址将会用于存储器映射装置)的访客虚拟地址时,微 核管理程序202可以拦截请求并把访客试图写入的值传递给关联的模拟器。此处,可以把此 实例中的模拟硬件资源视为虚拟装置在访客物理地址空间中所处的位置。可以把以此方式 对模拟器的使用视作模拟路径。该模拟路径相比于启发IO路径而言效率低,因为它较之它 对在VSP与VSC之间传递消息而言需要较多CPU时间来模拟装置。例如,需要映射到寄存器的 存储器上的数个动作以经由模拟路径向盘写入缓存器,而这会被减少为启发IO路径中从 VSC向VSP传递的单个消息,因为VM中的驱动器被设计成访问虚拟化系统提供的IO业务而非 设计成访问硬件。 [0036] 每个子分区可以包括一个或更多个虚拟处理器(230和232),访客操作系统(220和 222)可以管理和调度在其上执行的线程。通常,虚拟处理器是提供具有具体架构的物理处 理器的表示的可执行指令和相关联状态信息。例如,一个虚拟机可以具有虚拟处理器,其具 有Intel x86处理器的特性,然而另一虚拟处理器可以具有PowerPC处理器的特性。可以把 此实例中的虚拟处理器映射到计算机系统的处理器,使得将会通过物理处理器直接执行实 现虚拟处理器的指令。因而,在包括多个处理器的实施例中,可以通过处理器同时执行虚拟 处理器,而例如其它处理器执行管理程序指令。可以把分区中的虚拟处理器和存储器的组 合视作虚拟机。 [0037] 访客操作系统(220和222)可以是诸如例如来自Microsoft®、Apple®、开源团体 等的操作系统的任何操作系统。访客操作系统可以包括用户/核操作模式和可以具有可以 包括调度器、存储器管理器等的核。总体而言,核模式可以包括授权至少对特许处理器指令 访问的处理器中的执行模式。每个访客操作系统可以具有相关联的文件系统,其上可以存 储有诸如终端服务器、电子商务服务器、电子邮件服务器等的应用,以及访客操作系统本 身。访客操作系统可以调度线程以在虚拟处理器上执行,可以实现这些应用的实例。 [0038] 现在参照图3,它示例了以上在图2中描述的替选虚拟化平台。图3描绘了图2的类 似组件;然而,在此实例实施例中管理程序302可以包括微核组件和诸如虚拟化业务提供器 228和装置驱动器224的与图2的主机环境204中类似的组件,而管理操作系统304可以包含 例如用来配置管理程序302的配置工具。在此架构中,管理程序302可以执行与图2的微核管 理程序202同样或类似的功能;然而,在此架构中管理程序304实现启发IO路径和包括计算 机系统物理硬件的驱动器。图3的管理程序302可以是单机软件产品、嵌入母板的固件内的 操作系统的一部分,或者可以通过专用集成电路实现管理程序302的一部分。 [0039] 现在转到图4,它描述计算机系统400,其示例了可以用来实现本文中描述的技术 的组件的高级方框图。简言之,计算机系统400可以包括与以上针对图1至3描述的类似的组 件。图4示出了可以视为图2或图3示例的虚拟化平台的高级表示的虚拟化系统420。例如,可 以把虚拟化系统420视为由微核管理程序202和主机环境204提供的特征的组合的高级表 示。可替选地,可以把虚拟化系统420视为管理程序302和管理OS 304的高级表示。因而,本 文通篇对术语“虚拟化系统420”的使用意指可以在任何类型的虚拟化软件层内或在任何类 型的虚拟化平台中实施以下段落中描述的虚拟盘技术。 [0040] 虚拟化系统420可以包括卸载提供器引擎422。简言之,卸载提供器引擎422可以被 配置成服务于例如应用424发出的卸载读取和卸载写入请求(有时称为代理读取和代理写 入)。卸载读取请求是创建令牌的请求,该令牌表示在卸载读取是正常读取的情况下已读取 的数据。卸载写入是用以把令牌表示的数据写到目的地点的请求。在一个使用实例中,可以 使用后面是卸载写入的卸载读取从一个地点向另一个(例如,通过使用避免通过本地RAM移 动数据的表示数据的令牌从计算机系统400向域内的目的计算机系统)复制数据。例如,假 设计算机系统400和目的计算机系统(未示出)可以访问共同数据仓库,并且用以从计算机 系统向目的地复制数据的请求被接收。并非把数据复制到目的地,应用424可以向卸载提供 器引擎422发出请求以发出如它在令牌与数据相关联时存在的一样表示数据的令牌。可以 向目的地发送令牌和通过在目的地上运行的程序使用令牌,以从共同数据存储仓库获得数 据和把数据写入到目的地。在题为“Offload Reads and Writes”的共同未决美国专利申请 No. 12/888,433和题为“Virtualization and Offload Reads and Writes”的美国专利申 请No. 12/938,383中更详细描述了副本卸载技术,其内容在它们与本文中描述的技术一致 的程度上整体经引用并入本文。 [0041] 可以使用可以是具体实例实施例中可执行指令模块的虚拟盘解析器404来实例化 来自虚拟盘文件的虚拟盘和代表虚拟机操控存储IO。如图所示,虚拟盘解析器404可以打开 诸如虚拟盘文件406的一个或更多个虚拟盘文件和生成虚拟盘402。 [0042] 虚拟盘解析器404可以经由虚拟化系统文件系统408从存储装置106获得虚拟盘文 件406。简言之,虚拟化系统文件系统408表示组织虚拟化系统420的计算机文件和数据(如, 虚拟盘文件406)的软件模块。虚拟化系统文件系统408可以把此数据存储在固定尺寸物理 扩展的阵列(即,物理存储装置上连续的存储区域)中。在具体实例中,扩展可以是作为具有 设置长度的位的字节序列的簇。示范性簇尺寸通常是512字节与64千字节之间2的幂。在具 体配置中,簇尺寸可以是4千字节。 [0043] 当接收到用以打开虚拟盘文件406的请求时,虚拟化系统文件系统408确定文件在 盘上位于何处和向盘装置驱动器发出IO任务以从盘的一个或更多个物理扩展读取数据。文 件系统408发出的IO任务确定描述存储装置106上虚拟盘文件406的永久副本地点的盘偏移 量和长度和向存储装置106发出IO任务。由于存储装置如何操作的语义,可以在高速缓冲存 储器454表示的易失性存储器的一个或更多个级别的高速缓冲存储器中缓存写入IO任务, 直到存储装置106的电路确定访问永久存储单元460(例如,磁盘片、闪存单元等)上的地点、 并把表明虚拟盘文件406的永久副本新内容的缓存位模式写入到永久存储单元460为止。 [0044] 虚拟盘解析器404可以获得表明虚拟盘文件406的位模式和暴露虚拟盘文件406中 的载荷(例如,用户数据)作为包括多个虚拟盘扩展的盘。在实施例中,这些虚拟盘扩展可以 是尺寸为512千字节直至64兆字节、并分区成多个扇区的固定尺寸块;然而,在另一实施例 中虚拟盘扩展可以是可变尺寸扩展。在示范性配置中,在启动访客操作系统412以前,设定 与虚拟盘的模拟或启发存储控制器和模拟或启发方面有关的资源,使得在虚拟机410的访 客物理地址空间内实现具有存储器映射寄存器的模拟存储控制器。启动代码可以运行和启 动访客操作系统412。虚拟化系统420可以检测对访问访客物理地址空间的此区域的尝试, 并返回使访客操作系统412确定存储装置被附接到模拟存储控制器的结果。在响应中,访客 操作系统412可以加载驱动器(半虚拟化驱动器或常规驱动器)和使用驱动器向检测的存储 装置发出存储IO请求。虚拟化系统420可以把存储IO请求发送给虚拟盘解析器404。 [0045] 在访客操作系统412在运行之后它可以经由文件系统414向虚拟盘402发出IO任 务,该文件系统与虚拟化系统文件系统414类似,原因是它组织访客操作系统412的计算机 文件和数据以及访客操作系统412上安装的应用。访客操作系统412可以通过与操作系统如 何与物理存储装置交互并最终把IO任务发送给虚拟盘解析器404类似的方式与虚拟盘402 交互。虚拟盘解析器404可以以模拟物理存储装置的方式包括用于确定如何响应IO任务的 逻辑。例如,虚拟盘解析器404可以从虚拟盘文件406读取数据和向虚拟盘文件406写入数 据。写入到虚拟盘文件406的数据继而通过虚拟化系统文件系统408发送、并向永久存储单 元460上或永久存储单元460中存储的虚拟盘文件406的永久副本交付。 [0046] 简要参照图5A,它示例了用于实施本文中描述的技术的替选架构。如图5所示,也 可以在诸如Microsoft®提供的操作系统的操作系统502中实施虚拟盘解析器404。在此实 例中,虚拟盘解析器404可以被配置成在可以包括与图1的计算机系统100类似的组件的存 储服务器500上运行。在此实例中,存储服务器500可以包括物理存储装置510的阵列和可以 被配置成使存储装置可用于服务器,从而使存储装置仿佛局部附接到操作系统508一样。虚 拟盘解析器404可以与针对图4所描述的一样操作;可以通过网络连接将文件系统414发出 的此配置读/写IO任务中的差异发送给虚拟盘解析器404。 [0047] 简要参照图5B,它示例了用于实施本文中描述的技术的又一架构。图5B与图5A的 类似之处在于在操作系统502中实施虚拟盘解析器404以及计算机系统512可以包括与图1 的计算机系统100类似的组件。然而此实例中的差异是该图示例了环回附接虚拟盘402。可 以在虚拟盘402中存储包括诸如应用424的应用的文件系统414,以及可以在计算机系统文 件系统514中存储虚拟盘文件406。 [0048] 现在转而关注虚拟盘402,虽然可以通过单个虚拟盘文件实现它,但在其它配置中 可以使用一组差异虚拟盘文件实现虚拟盘402。图6示例了可以被虚拟盘解析器404用来作 为差异盘来实现虚拟盘402的虚拟盘文件的示范性链。通常,差异虚拟盘文件表示相比于父 图像、作为一组修改扩展的虚拟盘的当前状态。父图像可以是另一差异虚拟盘文件或基本 虚拟盘文件。 [0049] 在示范性配置中,可以把父虚拟盘文件与子虚拟盘文件之间的链接存储在所述子 (child)内。特别地,所述子可以包括父(parent)的标识和描述父的地点的值。当起动虚拟 机时,虚拟盘解析器404可以接收描述链中最后虚拟盘文件的信息,即,虚拟盘文件612是包 括虚拟盘文件612、610、606、以及600的链中的最后一个,以及打开此文件。此文件可以包括 其父(即,虚拟盘文件610)的标识和去往它的路径。虚拟盘解析器404可以定位和打开所述 父等诸如此类直到定位和打开基本虚拟盘文件为止。 [0050] 虚拟盘解析器404可以使用表明在父虚拟盘文件中是否存在或存储数据的信息。 通常,以读取/修改的形式打开链中的最后虚拟盘文件,而仅以读取的形式打开其它虚拟盘 文件。因而,通常向链中的最后虚拟盘文件进行写入。读取操作类似地首先针对链中的最后 虚拟盘文件,虚拟盘解析器404将会按从最后至基础的逻辑次序在逻辑上查找虚拟盘文件 直到在未高速缓冲关于数据位于何处的信息的情况下找到数据为止。在具体实例中,虚拟 盘文件(例如,虚拟盘文件612)的块分配表(未示出)可以包括如下状态信息:该状态信息表 明是否通过虚拟盘文件的区段(section)定义虚拟盘扩展或此虚拟盘扩展是否是透明的 (例如,进一步沿着链通过不同虚拟盘文件定义)。在一种实施方式中,虚拟盘解析器404可 以确定此虚拟盘扩展是否透明和访问链中接下来的虚拟盘文件(例如,虚拟盘文件610)的 块分配表等诸如此类直到定义数据的链中的虚拟盘文件被定位为止。 [0051] 现在参照图7,它示例了由虚拟盘文件702至少部分地描述的虚拟盘402,其可与写 入/可修改的图6中描述的任何虚拟盘文件(例如虚拟盘文件602、608、或者612,或者单个虚 拟盘文件)类似。如图所示,虚拟盘402可以包括N个存储扩展(其中,N是大于0的整数),在此 具体实例中虚拟盘402包括10个扩展。把虚拟盘402示例成包括通过虚拟盘扩展内的不同模 式区分的不同文件的位模式和访客操作系统412的数据。 [0052] 由于虚拟盘402并非物理存储装置,所以可以通过虚拟盘文件702内的不同区段 “描述”(即,在虚拟盘文件702内的不同区段中存储)虚拟盘扩展的底层载荷数据。例如,通 过虚拟盘文件偏移值0或可用来存储载荷数据的第一偏移量定义的区段来描述虚拟盘扩展 1。可以在计算机系统400在操作时,可在随机访问存储器中存储的分配表416可以在任何区 段中的虚拟盘文件702中维持和可以跨越多个区段。简言之,分配表416可以包括将虚拟盘 扩展链接到虚拟盘文件702的区段的信息。例如,分配表416可以存储定义了虚拟盘文件字 节偏移量的信息,该偏移量定义存储数据的虚拟盘文件702的区段。箭头表征分配表416中 存储的关系。 [0053] 在以下段落中更详细描述的,分配表416还可以包括状态信息;然而,此配置是示 范性的。在替选配置中可以把此信息存储在虚拟盘文件702的不同区段中和加载到RAM 104 中。分配表416可以包括每个虚拟盘扩展的条目(entry);表明每个扩展所处状态的状态信 息;以及表明在虚拟盘文件702中的何处描述每个虚拟盘扩展的文件偏移量(未示例)。在替 选实施例中也可以通过多个已经映射和连续(在文件偏移量中)的表条目定义扩展。在此配 置中,可以在块载荷在文件中连续的情况下跨过块边界的读取和写入可以作为对虚拟盘文 件702的单个读/写来处置。在具体实例中,虚拟盘解析器404还可以存储表明在虚拟盘文件 的每个未使用区段中存储什么类型位模式的信息,即,自由空间图。除了以上内容之外,自 由空间图可以允许通过虚拟盘解析器404使用以确定虚拟盘文件406的哪些扇区被使用和 哪些是空闲的。此实例中的自由空间图可以被配置成跟踪非零文件中的自由空间。在示范 性实施例中,因为使用自由空间的非零部分来描述虚拟盘402的一部分(其必须是零或不必 公开来自其它虚拟盘偏移量的信息),所以分别通过零或非信息公开模式(通常是零)来覆 盖自由空间。虚拟盘解析器404可以使用此信息以确定虚拟盘文件的什么区段分配给虚拟 盘扩展。例如,如果写入处于零状态的虚拟盘扩展,则虚拟盘解析器404可以分配其中已经 有零的区段以支持(back)虚拟盘扩展。 [0054] 随着访客操作系统412或操作系统508运行,它将会生成数据和文件并向虚拟盘 402发出盘写入以存储数据。当虚拟盘文件702不具有任何额外未使用空间时,虚拟盘解析 器404可以扩展文件的末端和使用新空间来描述虚拟盘扩展。访客操作系统412或操作系统 508可以使用、删除、以及重新使用虚拟盘402的区段;然而,由于虚拟盘解析器404仅代表文 件系统414存储数据,所以虚拟盘解析器404会无法确定访客操作系统412是否仍正使用虚 拟盘文件的区段。结果是,虚拟盘解析器404可以持有虚拟盘文件702中的分配空间以描述 文件系统414不再使用的虚拟盘扩展。这样的结果是虚拟盘文件702的尺寸会增长直到它达 到虚拟盘402的尺寸为止。 [0055] 在示范性实施例中,虚拟盘解析器404可以被配置成收回虚拟盘文件的未使用区 段以及可选地重新使用它们。这样,需要扩展虚拟盘文件的频率被减小,且虚拟盘文件的总 体尺寸被减小。在实例实施例中,当文件系统告知它不再使用虚拟盘扩展时,虚拟盘解析器 404可以从虚拟盘文件释放(即,解链接)虚拟盘扩展并使虚拟盘扩展与描述应当如何对待 对虚拟盘扩展的读取操作的信息相关联。可以随后重新使用虚拟盘文件的区段以描述同样 的或另一虚拟盘扩展。 [0056] 在示范性配置中,虚拟盘解析器404可以使用文件系统发出的零命令的修剪 (TRIM)、未映射(UNMAP)、和/或同样写入(WRITE SAME)来确定何时可以从虚拟盘文件406释 放虚拟盘扩展。访客操作系统412或操作系统508可以发出修剪命令。例如,随着访客操作系 统412或操作系统508运行,文件系统414可以确定不再需要一些扇区和发出修剪命令。可替 选地或另外,虚拟盘解析器404可以被配置成请求文件系统414在预定间隔、或者在满足预 定准则时(例如,当实例化虚拟机410时、当关断虚拟机410时、在略微使用情况下等)发出修 剪命令。 [0057] 简言之,使用修剪命令来通知数据存储装置有关如下内容:哪些扇区不再考虑使 用以使得数据存储装置可以可选地丢弃其中存储的数据。文件系统414可以使用一个类型 的修剪命令(称为自由空间修剪命令)来告知文件系统414不再使用扇区,称为标准修剪命 令的其它并非如此。两个类型的修剪命令之间的差异是当扇区是自由空间修剪的主题时, 文件系统414通过防止用户空间应用等从扇区读取来提供扇区的安全性。可以利用文件系 统414确保对以此方式修剪了的扇区进行访问的事实来增加高效分配虚拟盘文件空间的能 力。在以下段落中更详细描述此特定方面。 [0058] 在示范性配置中,虚拟盘解析器404可以被配置成在修剪命令完全覆盖虚拟盘扩 展时执行收回操作。或者换言之,虚拟盘解析器404可以响应于修剪命令的接收从虚拟盘文 件解链接虚拟盘扩展,所述修剪命令定义识别虚拟盘扩展中所有扇区的虚拟盘扇区范围。 在同样或替选实施例中,当接收到覆盖虚拟盘扩展一部分的修剪命令时,虚拟盘解析器404 可以确定虚拟盘文件的什么部分对应于修剪扇区并向存储装置106发送针对虚拟盘文件部 分的修剪命令。在此实例中,底层文件系统(例如,虚拟化系统文件系统408、存储服务器文 件系统504、或者计算机系统文件系统514)可以转译修剪命令的偏移量并把转译偏移量发 送给存储装置106、经由内部数据结构更新直接收回空间、或者从高速缓冲存储器清除数 据。 [0059] 在同样或另一实施例中,当接收到覆盖虚拟盘扩展一部分的修剪命令时,虚拟盘 解析器404可以被配置成存储表明什么扇区已是修剪命令的主题以及修剪命令是否是自由 空间修剪的信息。在修剪虚拟盘扩展的剩余部分的情况下,虚拟盘解析器404可以从虚拟盘 文件释放虚拟盘扩展。 [0060] 当释放虚拟盘扩展时,虚拟盘解析器404可以使虚拟盘扩展与描述可以如何操控 针对虚拟盘扩展的读取操作的状态信息相关联。表1示例了虚拟盘解析器404可以与虚拟盘 扩展相关联和用来优化虚拟盘文件的收回的示范性状态信息。可以通过使用两个状态(描 述的和未描述的)在一个实例中完成用以收回虚拟盘扩展的能力;然而,由于在删除数据时 通常未擦除虚拟盘文件702中存储的位模式,所以可以使用额外状态来确定选择以描述虚 拟盘扩展的空间在可以重新使用它之前何时需要清除或是否可以在不覆盖其中先前存储 的数据的情况下重新使用它。在删除后未擦除数据的一个原因是它花费处理器周期以擦除 数据,由于一些存储装置被配置成基于每块执行写入操作,所以在利用新数据覆盖时擦除 数据较高效。以下状态是示范性的,所述公开不限于使用以下表定义的状态。 状态 描述 映射 此状态表明虚拟盘扩展被链接到虚拟盘文件。 透明 此状态表明通过不同虚拟盘文件定义虚拟盘扩展。 零 此状态表明未通过虚拟盘文件描述虚拟盘扩展。另外,此状态表明把虚拟盘扩展定义成零以及零是有含义的。 未映射 此状态表明未通过虚拟盘文件描述虚拟盘扩展。在实施例中,此状态可以包括锚定(anchored)和未锚定的子状态。 未初始化 此状态表明未通过虚拟盘文件描述虚拟盘扩展以及把虚拟盘扩展定义成自由空间。在实施例中,此状态也可以包括锚定和未锚定的子状态。 [0061] 表1. 结合图7参照表1,列出的第一个状态是表明通过虚拟盘文件702的区段来描述虚拟盘 扩展的“映射”状态。例如,虚拟盘扩展0是示例成处于“映射”状态的实例虚拟盘扩展。 [0062] 继续表1的描述,虚拟盘扩展可以与表明虚拟盘扩展是“透明”(即,通过不同虚拟 盘文件描述虚拟盘扩展)的状态信息相关联。在虚拟盘解析器404接收到对处于透明状态的 虚拟盘扩展的读取操作的情况下,虚拟盘解析器404可以参考不同虚拟盘文件并检查它的 分配表以确定如何响应读取。在虚拟盘解析器404接收到对虚拟盘扩展的写入的情况下,虚 拟盘解析器404可以把虚拟盘扩展从“透明”状态转变为“映射”状态。 [0063] 结合图7继续表1的描述,虚拟盘扩展还可以与“未映射”状态相关联。在此实例中, 未通过虚拟盘文件702描述虚拟盘扩展,也未通过链中的任何其它虚拟盘文件描述它。在此 实例中,可以使用未映射状态来描述虚拟盘扩展,所述虚拟盘扩展经受了未表明文件系统 414将会确保对虚拟盘扩展进行访问的修剪命令。或者换言之,用来把此虚拟盘扩展转变为 此状态的修剪命令是标准修剪命令。在虚拟盘扩展处于未映射状态且接收到表明对扩展读 取的IO任务的情况下,虚拟盘解析器404可以通过零、零令牌、一、表示全一的令牌、或者非 信息公开位模式(例如,全零、全一、或者一和零的随机生成模式)响应。在此实例中,如果分 配虚拟盘文件702的区段以支持(back)此状态下的虚拟盘扩展,则虚拟盘解析器404可以在 分配之前向虚拟盘文件702的区段写入非信息公开位模式,或选择已经包括非信息公开位 模式的区段以描述虚拟盘扩展。图7的虚拟盘扩展6被指示为处于未映射状态。 [0064] 在实施例中,可以保持定义未映射或未初始化扩展的数据,未映射或未初始化状 态可以包括两个子状态:意味着在虚拟盘文件702内仍存在数据的锚定、以及意味着可以或 无法保持数据的未锚定。在使用这些子状态的情况下,虚拟盘解析器404可以通过在不使区 段为零的情况下分配存储数据的区段而把未映射但锚定的扩展转变为映射的。类似地,虽 然虚拟盘解析器404被配置成对待未初始化的扩展就象对于虚拟盘402的至少一部分未映 射它们一样,但虚拟盘解析器404可以通过在不使区段为零的情况下分配存储数据的区段, 在该扩展向映射的转变期间避免使未初始化但锚定的扩展为零。 [0065] 表1额外描述“零”状态。在此实例中,未通过虚拟盘文件702描述虚拟盘扩展也未 通过链中的任何其它虚拟盘文件描述它;然而,需要把虚拟盘扩展读取成全零。在此实例 中,可以使用零状态来描述经受了任一类型修剪命令的虚拟盘扩展或描述程序写入了全零 的虚拟盘扩展。例如,假设删除工具程序向虚拟盘扩展4写入了全零以保证完全覆盖了它先 前存储的数据。在虚拟盘扩展处于零状态、以及接收到表明对扩展读取的IO任务的情况下, 虚拟盘解析器404可以通过零或零令牌(在卸载读取操作中)响应。在写入针对此状态的虚 拟盘扩展的情况下,虚拟盘解析器404可以使虚拟盘文件702的区段为零并使用它来描述虚 拟盘扩展或选择已经是零的虚拟盘文件702的区段,以及分配它以支持虚拟盘扩展。在此实 施例中,可以使用数据结构或虚拟盘文件702跟踪为零空间。可以在打开虚拟盘文件702时、 在关闭虚拟盘文件702时等周期性地更新数据结构。从处于未映射或未初始化状态的扩展 进行读取可以可选地使虚拟盘解析器404在虚拟盘解析器404被配置成提供处于未映射或 未初始化状态的扩展的扇区稳定性的配置中把所述扩展转变为零状态。 [0066] 表1还描述称为“未初始化”状态的状态。未初始化状态表明未通过虚拟盘文件702 描述虚拟盘扩展且文件系统414正确保对虚拟盘扩展的访问。即,文件系统414被配置成防 止用户应用读取此虚拟盘扩展内的扇区。在此实例中,可以使用未初始化状态来描述经受 了自由空间修剪命令的虚拟盘扩展。在虚拟盘扩展处于未初始化状态且表明对扩展读取的 IO任务被接收到的情况下,虚拟盘解析器404可以通过任何数据(即,来自虚拟盘文件702中 几乎任何其它位置的位模式、零、一、非信息公开位模式等)响应,因为在只可以把虚拟盘载 荷数据和非安全性影响元数据暴露给虚拟盘客户端的需求之外,虚拟盘解析器404并未正 提供针对虚拟盘扩展的安全性。在写入针对此状态下的虚拟盘扩展的情况下,虚拟盘解析 器404可以在不需要更改可以在区段内存储的任何数据的情况下简单分配虚拟盘文件702 的区段。结果是,此状态是最有益的,因为可以在虚拟盘文件内分配空间而不必预先清除 它。图7的虚拟盘扩展5被指示为处于未初始化状态,且虚拟盘文件702未正支持虚拟盘扩 展。 [0067] 一旦状态信息与每个虚拟盘扩展相关联,则虚拟盘解析器404可以被配置成向管 理员等提供关于如何布置虚拟盘402的额外信息。在实例实施例中,虚拟盘解析器404可以 被配置成基于状态信息响应包括某些参数的偏移查询。例如,用户可以通过虚拟盘402发出 以给定字节偏移量开始迭代的查询,以及定位满足诸如“映射”、“未映射”、“透明”等的具体 准则的范围。另外,用户可以选择查询应当进行得多么“深入”以把差异虚拟盘文件702考虑 在内。例如、以及参照图7,用户可以设置深度2和执行查询。在响应中,虚拟盘解析器404将 对链中的最后两个虚拟盘文件(例如,虚拟盘文件610和612)执行查询。具体查询可以包括 用以获得接下来的非透明范围、接下来的非零范围、接下来的定义范围、接下来的初始化范 围等的查询。简言之,接下来定义范围的查询可以被配置成返回包含定义数据的接下来的 范围(例如,在透明扇区解析为针对该扇区的父虚拟盘文件状态的情况下,处于映射或为零 状态的扇区)。在透明扇区解析为针对该扇区的父虚拟盘文件状态的情况下,接下来初始化 范围的查询可以返回包含除了未初始化状态以外的状态中数据的接下来的范围。 [0068] 现在转到图8,它示例了虚拟盘解析器404响应于向虚拟盘402保存的文件或其它 数据、可以将虚拟盘扩展如何从一个状态向另一个转变的具体实例。例如,假设用户使用虚 拟机410内的数据库管理程序并创建数据库。用户可以把数据库保存在文件中,且文件系统 414可以确定在虚拟盘402上何处保存文件802。文件系统414可以发出用以把文件802写入 到例如落在虚拟盘扩展3-5内的扇区的一个或更多个盘写入。在此实例中,虚拟盘扩展3被 “映射”,且虚拟盘解析器404可以把文件802的第一个部分写入到通过分配表416识别的区 段。 [0069] 另一方面,虚拟盘扩展4和5处于“零”和“未初始化”状态。在此实例中,虚拟盘解析 器404可以选择虚拟盘文件702的未使用区段以支持虚拟盘扩展4并确定虚拟盘扩展4处于 为零状态。响应于此确定,虚拟盘解析器404可以使正要用来描述虚拟盘扩展4的区段为零 或定位已经是全零的区段。在定位为零区段或使区段为零的过程完成之后,虚拟盘解析器 404可以生成如下信息:该信息识别虚拟盘文件字节偏移量,所述偏移量表明定义在虚拟盘 文件702中的何处描述虚拟盘扩展4的区段的第一个字节,并把所述信息存储在分配表416 中。虚拟盘解析器404可以随后改变与虚拟盘扩展4相关联的状态信息以表明它是“映射” 的。随后可以把向扩展4写入的部分写入到定位的区段中。 [0070] 可替选地,对于涵盖当前处于零状态中虚拟盘的整个扩展的写入的一部分,可以 选取虚拟盘文件的定位区段,可以向该区段发出写入的部分,在该写入完成后,虚拟盘解析 器404可以随后改变与虚拟盘扩展相关联的状态信息以表明该扩展是“映射”的。可替选地, 对于只涵盖当前处于零状态的虚拟盘扩展一部分的写入的一部分,可以选取虚拟盘文件的 定位区段,可以向该区段发出该写入的部分,可以向区段的剩余部分发出为零写入,在写入 完成后,虚拟盘解析器404可以随后改变与虚拟盘扩展相关联的状态信息以表明扩展是“映 射”的。本领域技术人员将会认识到,可以使用刷新或直写式(write-through)写入(如,迫 使单元访问(force-unit-access)写入)强制写入的给定排序。 [0071] 类似地,虚拟盘解析器404可以选择虚拟盘文件702的未使用区段以支持虚拟盘扩 展5,以及通过参看分配表416确定虚拟盘扩展5处于未初始化状态。响应于此确定,虚拟盘 解析器404可以在不修改选定区段的内容的情况下分配区段以描述虚拟盘扩展5。虚拟盘解 析器404可以生成如下信息:该信息识别表明区段的第一个字节的虚拟盘文件字节偏移量, 其表明在虚拟盘文件702中何处描述虚拟盘扩展4,以及把区段的文件字节偏移量存储在分 配表416中。虚拟盘解析器404可以随后改变与虚拟盘扩展5相关联的状态信息以表明它是 “映射”的。 [0072] 图9示例了虚拟盘解析器404响应于对文件802的删除操作和使虚拟盘扩展7的内 容为零的操作可以如何将虚拟盘扩展从一个状态转换到另一个的另一具体实例。例如,用 户可能已删除了文件802,文件系统414可能已发出了修剪命令。在此实例中,虚拟盘解析器 404可以接收修剪命令,该命令包括完全涵盖虚拟盘扩展4和5以及部分涵盖虚拟盘扩展3的 虚拟盘扇区范围。响应于虚拟盘扩展4和5被完全修剪的确定,虚拟盘解析器404可以被配置 成从分配表416去除链接并把虚拟盘扩展4变换为表明虚拟盘文件702未正支持此虚拟盘扩 展的状态。如虚拟盘扩展4的分配表条目所示,虚拟盘解析器404把虚拟盘扩展变换所至的 状态取决于虚拟盘解析器404被配置成使用什么状态以及文件系统414是否发出自由空间 修剪命令或标准修剪命令。例如,虚拟盘解析器404可以被配置成使用两个状态:映射的和 零以描述虚拟盘扩展。可替选地,虚拟盘解析器404可以被配置成使用三个状态:映射的、 零、未映射的以描述虚拟盘扩展。可替选地,虚拟盘解析器404可以被配置成使用四个状态: 映射的、零、未映射的、以及未初始化的。未映射的与未初始化的之间的区别对应于标准修 剪与自由空间修剪之间的区别。如果解析器被配置成不使用未初始化状态,则自由空间修 剪作为正常修剪对待。如图所示,文件702的部分仍在虚拟盘文件702中存储,这是由于从虚 拟盘文件702清除它们效率低下。 [0073] 由于所述修剪部分涵盖了虚拟盘扩展5,所以虚拟盘解析器404可以通过各种方式 中的一个方式操控此扩展。在一个配置中,虚拟盘解析器404可以使扩展5停留在映射状态 下。在此配置中,虚拟盘解析器404可以在对于整个扩展接收了修剪信息时转变扩展。可替 选地,虚拟盘解析器404可以在希望接收较多如下这种修剪信息的情况下跟踪部分涵盖扩 展的修剪信息:所述修剪信息提供可以释放描述扩展的空间的指示。 [0074] 类似地,所述修剪也部分涵盖了虚拟盘扩展。在此实例中,虚拟盘解析器404可以 使它停留在映射状态中并且还可以被配置成向底层文件系统(例如,虚拟化文件系统408、 存储服务器文件系统504、或者计算机系统文件系统514)发送描述不再使用的虚拟盘文件 702的部分的修剪信息。 [0075] 除了文件802的删除之外,图9示出了使虚拟盘扩展为零的实例。虚拟盘解析器404 可以扫描表明使虚拟盘扩展7的整个范围为零的文件系统414发出的IO任务。响应于此确 定,虚拟盘解析器404可以被配置成从扩展分配表416去除链接并把虚拟盘扩展7转变为零 状态。如图所示,虚拟盘扩展7的先前内容仍在虚拟盘文件702中存储。 [0076] 转到图10,它示例了由一组虚拟盘文件1002、1004、1006(其可以与虚拟盘文件 608、604、以及600定义的虚拟盘文件链类似)至少部分地描述的虚拟盘402。在此示范性实 施例中,在多个虚拟盘文件上拆散表示虚拟盘402的数据。在此示范性实施例中,当虚拟盘 解析器404试图读取虚拟盘扩展1和2时,虚拟盘解析器404可以访问虚拟盘文件1002的分配 表并确定这些扩展是透明的。接下来,虚拟盘解析器404可以访问虚拟盘文件1004的分配表 并确定这些扩展是透明的。最终,虚拟盘解析器404可以访问祖父级虚拟盘文件1006的分配 表并确定这些虚拟盘扩展被定义。 [0077] 以下是描绘操作流程的一系列流程图。为了容易理解,流程图被组织成使得初始 流程图经由总体“大图片”视点呈现实施方式,后续流程图提供以虚线示例的进一步的额外 内容和/或细节。再者,本领域技术人员可以明白,由虚线描绘的操作流程被认为是可选的。 [0078] 现在参照图11,它示例了用于收回虚拟盘文件内空间的操作流程,包括操作1100、 1102、1104、以及1106。操作1100开始操作流程,操作1102示出了实例化(1102)包括虚拟盘 扩展的虚拟盘(402),使虚拟盘扩展从虚拟盘文件分离。简要转到图4、图5A或图5B,虚拟盘 解析器404(例如,可执行指令和相关联实例数据)可以实例化虚拟盘402,所述解析器暴露 一个或更多个虚拟盘文件内存储的数据作为逻辑硬盘驱动器,该逻辑硬盘驱动器可以被配 置成通过模拟硬盘驱动器的行为来操控来自文件系统414的读/写操作。虚拟盘文件406(可 以是如图6中所示例的一个或更多个文件)可以存储通常在物理硬盘驱动器上得到的内容, 即,盘分区、文件系统等。转到图7,把虚拟盘402示出为包括多个扩展,使其中一些扩展从虚 拟盘文件702的任何区段分离。 [0079] 在具体示例中,假设所述扩展是块。在此实例中,可以使用可以从虚拟盘文件702 中的一个或更多个区段加载到随机访问存储器中的分配表416来存储将虚拟盘402中的盘 块链接到虚拟盘文件702的扩展尺寸(例如,块尺寸的)的区段的信息。分配表416也可以存 储虚拟盘402中每个虚拟盘块的状态信息。潜在地包括非零数据的虚拟块可以与表明块处 于映射状态的状态信息相关联。即,分配了虚拟盘文件702的区段以描述虚拟盘402的块 (即,存储虚拟盘402块的数据)。虚拟盘块0-3和7处于此状态的块的实例。如图所示,虚拟 盘块4和5、6、8和9可以是有效的虚拟盘块;然而,这些虚拟盘块不会具有虚拟盘文件702内 分配的任何空间。由于文件系统414可以向这些块写入,所以在示范性实施例中,这些虚拟 盘块可以与如下信息相关联:所述信息可以被虚拟盘解析器404用来确定如何响应对它们 的读取和/或写入操作。 [0080] 简要返回参照图11,操作1104示出了计算机系统可以额外包括如下电路:该电路 基于与虚拟盘(402)相关联的状态信息、在不覆盖虚拟盘文件的区段内预先已有位模式的 情况下分配虚拟盘文件的区段(406,600,602,604,606,608,610,612,702,1002)以描述虚 拟盘扩展。例如、以及回到图8,虚拟盘解析器404可以接收用以向虚拟盘扩展的一部分写入 的IO任务。响应于写入IO任务的接收,虚拟盘解析器404可以检查分配表416并确定尚未分 配虚拟盘文件702内的空间以描述虚拟盘扩展以及分配虚拟盘文件406的区段来支持虚拟 盘扩展。因而,虚拟盘解析器404将会把文件系统414向虚拟盘扩展写入的数据存储在虚拟 盘文件702的区段中。 [0081] 在此实例中,虚拟盘解析器404不会覆盖虚拟盘文件702的区段中已经存储的任何 数据(通过写入全零、一、或者任何其它非信息公开位模式)——在使用它以基于分配表416 中的状态信息来描述虚拟盘扩展以前。在示范性配置中,因为文件系统自由空间涵盖虚拟 盘扩展,所以状态信息可以表明文件系统414正确保对此虚拟盘扩展的访问。在具体实例 中,状态信息可以表明虚拟盘扩展处于“未初始化”状态。分配虚拟盘扩展而不清除它提供 了节省处理器周期和IO任务的附加益处,其如若不然将被用来覆盖虚拟盘文件702的区段。 [0082] 在操作1104的具体实例中、以及转到图7,假设扩展是块且文件系统414向虚拟盘 402发送IO任务以向虚拟盘块3-5写入表明文件802的位模式。响应于这种IO任务的接收, 虚拟盘解析器404可以确定虚拟盘块5不被虚拟盘文件406的任何区段支持且未初始化它。 响应于此确定,虚拟盘解析器404可以被配置成分配虚拟盘文件702的区段以描述虚拟盘块 5并在其中写入表明文件802的位模式的一部分而不覆盖先前存储在IO任务未涵盖的区段 的部分中的数据。 [0083] 再次转到图11,操作1106示出了计算机系统可以额外包括如下电路:该电路被配 置成修改(1106)与虚拟盘扩展相关联的状态信息以表明通过虚拟盘文件描述虚拟盘扩展。 例如、以及转回到图8,虚拟盘解析器404可以修改(例如,在存储器中覆盖)与虚拟盘扩展5 相关联的状态信息以反映虚拟盘文件702正描述虚拟盘扩展。在一个配置中,状态信息的写 入和修改可以同时发生。例如,虚拟盘解析器404可以在分配表416中存储表明虚拟盘扩展5 是“映射”的信息。结果是,针对虚拟盘扩展5的扇区的后续读取操作将会由虚拟盘解析器 404通过返回分配表416中识别的字节偏移量处存储的位模式来操控。虚拟盘解析器404可 以向分配以描述虚拟盘扩展的虚拟盘文件702的区段同时写入数据(例如,与触发了此流程 的写入操作相关联的位模式)和向虚拟化系统文件系统408、存储服务器文件系统504、或者 计算机系统文件系统514发出用以向虚拟盘702的区段写入位模式的IO任务。在一些时间 点,如,在完成后续发出的刷新命令之前,将会在永久存储单元460中维持位模式。 [0084] 现在转到图12,它示出了可以结合图11所示例的那些来执行的额外操作。转到操 作1208,它表明计算机系统可以包括如下电路:该电路用于通过识别非零虚拟盘的扇区、处 于非透明状态的虚拟盘的扇区、处于映射状态的虚拟盘的扇区、和/或处于初始化状态的虚 拟盘的扇区的信息来响应偏移查询命令。例如,虚拟盘解析器404可以被配置成接收用以生 成有关虚拟盘402的信息的命令:所述信息诸如在给定起始字节偏移量的情况下,处于非透 明状态(即,除了透明以外的状态)、映射状态(即,包括虚拟盘文件406中数据的虚拟盘402 的扇区)、定义状态(即,映射的或是零的虚拟盘402的扇区)、和/或初始化状态(即,除了未 初始化以外的状态)中的虚拟盘上的接下来的字节偏移量。所述命令可以是深度受限的,原 因在于只检查了特定数量的虚拟盘文件,并且除了由状态查询所表明的范围之外(无论请 求了哪个状态查询),在检查特定数量的虚拟盘文件之后仍然透明的任何范围都被上报回 请求方。响应于这种命令的接收,虚拟盘解析器404可以在虚拟盘402上的初始字节偏移量 处开始并建立响应范围或范围的集合直到与命令相关联的范围被检测到且返回期望信息 为止。 [0085] 继续图12的描述,操作1210示出了向控制虚拟盘文件(406,600,602,604,606, 608,610,612,702,1002)的文件系统(414)发送请求以发出从包括修剪命令、未映射命令、 写入同零命令(a write same of zero command)、以及零令牌卸载写入命令的命令组中选 择的至少一个命令。返回参照图4、图5A、或者图5B,虚拟盘解析器404可以被配置成向文件 系统414发出请求。此示例中的请求可以用于文件系统414发出修剪命令。例如,虚拟盘解析 器404可以在虚拟盘402的实例化之后不久、和/或在虚拟机410关断、休眠等以前,周期性地 向文件系统414发出一个或更多个请求。响应于这种请求,文件系统414可以确定它不再使 用虚拟盘402的什么扇区以及向虚拟盘解析器404发送识别这些未使用的扇区的一个或更 多个修剪命令。虚拟盘解析器404可以因此接收如下修剪信息,诸如文件系统414不再使用 的扇区范围的列表、以及文件系统414是否正阻止从扇区的范围进行读取以确保对那些扇 区的访问。虚拟盘解析器404可以接收信息,并把被该范围涵盖的虚拟盘扩展转变成可以收 回虚拟盘文件702内的空间的状态。 [0086] 继续图12的描述,操作1212示出了计算机系统可以包括用于响应于修剪第二虚拟 盘扩展的一部分的请求的接收来确定第二虚拟盘扩展的一部分对应的虚拟盘文件的一部 分的电路;以及用于向被配置成把虚拟盘文件存储在存储装置中的文件系统发送针对所确 定的虚拟盘文件部分的修剪命令的电路。例如、以及参照图8,文件系统414可以发出识别虚 拟盘扩展的一部分的修剪命令,例如,修剪命令可以只识别形成一个或更多个虚拟盘块的 扇区的一部分对应的扇区的范围。在具体实例中,假设文件系统414修剪用来存储文件802 的空间。这样,修剪命令可以只识别构建虚拟盘扩展3的扇区的一部分。在此实例中,虚拟盘 解析器404可以确定扇区的范围涵盖虚拟盘扩展的子区段并使用分配表416中的映射信息 来确定虚拟盘扩展的修剪扇区对应的虚拟盘文件702的部分。虚拟盘解析器404可以向虚拟 化系统文件系统408或存储服务器文件系统504发出用以修剪虚拟盘扩展的修剪扇区对应 的虚拟盘文件702的部分的请求。虚拟化系统文件系统408或存储服务器文件系统504可以 被配置成通过修剪支持虚拟盘文件406的扇区的一部分、刷新来自高速缓冲存储器的数据、 清除内部缓存器等使用修剪命令并从它获益。 [0087] 可替选地,虚拟盘解析器404可以存储表明虚拟盘扩展的一部分被修剪的信息以 及表明它是否是自由空间修剪的信息。随着访客操作系统412或操作系统508运行,它可以 最终使虚拟盘扩展的剩余部分为零或修剪虚拟盘扩展的剩余部分。响应于此事件,虚拟盘 解析器404可以确定把虚拟盘扩展转变成未通过虚拟盘文件702对其进行描述的状态和基 于如何修剪或使虚拟盘扩展的不同部分为零来选择状态。虚拟盘解析器404可以被配置成 选择用以在可把虚拟盘扩展的不同部分置于不同未描述状态中时转变虚拟盘扩展的最限 制性状态,其中,零状态是最限制性的,未初始化是最少限制性的,未映射在其之间某处。例 如,如果使第一部分为零以及剩余部分未初始化,则虚拟盘解析器404可以把整个虚拟盘扩 展转变成为零状态。 [0088] 继续图12的描述,操作1214示例了计算机系统400可以额外包括如下电路:该电路 被配置成响应于用以修剪涵盖虚拟盘扩展的扇区范围的请求的接收、把虚拟盘扩展从虚拟 盘文件的区段释放和修改与虚拟盘扩展相关联的状态信息以表明虚拟盘扩展在虚拟盘文 件中不具有相关联空间。例如、以及转到图9,虚拟盘解析器404可以去除将虚拟盘扩展联结 到虚拟盘文件702的区段的分配表416中的链接。此操作具有使虚拟盘扩展从虚拟盘文件 702分离的效果。除了去除链接之外,虚拟盘解析器404可以修改与虚拟盘扩展相关联的状 态信息以表明扩展在虚拟盘文件702内不具有关联空间,即,虚拟盘解析器404可以把虚拟 盘扩展置于未映射、未初始化、或者为零状态中。 [0089] 虚拟盘解析器404可以响应于用以修剪或使虚拟盘扩展的区段为零的请求的接收 而去除链接和更新状态信息。例如,可以接收识别可以涵盖一个或更多个虚拟盘扩展的字 节偏移量范围的、用以修剪或使扇区为零的请求。响应于这种IO任务的接收,虚拟盘解析器 404可以确定所述请求涵盖虚拟盘扩展的扇区和执行用于去除链接和更新状态信息的前述 操作。 [0090] 在具体实例中,假设IO任务表明修剪是自由空间修剪。例如,用户可能已删除了作 为虚拟盘扩展3-5上的位模式存储的文件802,文件系统414可以表明文件系统414不再使 用该空间。响应于自由空间修剪命令的接收,虚拟盘解析器404可以访问分配表416和确定 文件系统414已经修剪了扩展3、5的一部分和扩展4的全部。在此实例中,虚拟盘解析器404 可以去除把虚拟盘扩展4映射到虚拟盘文件702的链接以及修改与虚拟盘扩展4相关联的状 态信息以表明虚拟盘扩展未初始化。现在可以重新使用虚拟盘文件702的此区段以支持其 它虚拟盘扩展。另外,虚拟盘解析器404可以确定虚拟盘扩展3和5是部分修剪命令的主体。 在此实例中,虚拟盘解析器404可以使用分配表416以发现描述虚拟盘文件702的部分(所述 部分描述虚拟盘扩展3和5的修剪部分)的虚拟盘文件字节偏移量、并向虚拟化系统文件系 统408、存储服务器文件系统504、或者计算机系统文件514发出描述虚拟盘文件字节偏移量 的修剪命令。 [0091] 在另一具体实例中,假设文件系统414发出的IO任务表明使文件802为零。例如,文 件802可以是存储敏感信息的数据库文件,所述敏感信息诸如信用卡号和管理员,该管理员 被确定通过对文件内容写入全零来对其清零(zero out),这是通过将会在文件802中已有 的数据上写入零的全零缓存器发出写入命令来实现。响应于这种IO任务的接收,虚拟盘解 析器404可以被配置成确定使虚拟盘扩展4为零以及可以收回此扩展。在此实例中,虚拟盘 解析器404可以去除把虚拟盘扩展4映射到虚拟盘文件702的链接以及修改与虚拟盘扩展4 相关联的状态信息以表明使虚拟盘扩展为零。现在可以重新使用虚拟盘文件702的此区段 以支持其它虚拟盘扩展,虚拟盘解析器404可以通过以全零应答来响应对虚拟盘扩展4的后 续读取操作。 [0092] 在另一具体实例中,用户可以写入批量零以初始化文件802的状态,而非覆盖其中 存储的数据。在此实例中,可以使用诸如虚拟盘解析器404上报作为零读取的修剪区段的情 况下的诸如修剪命令、虚拟盘解析器404上报未映射区域是零时的未映射命令、同零写入 (WRITE SAME of zero)命令、和/或零令牌卸载写入命令把扩展转变成为零状态。 [0093] 在具体实例中,假设IO任务表明修剪是标准修剪。例如,用户可能已删除了作为虚 拟盘扩展3-5上的位模式存储的文件802;然而,修剪命令无法表明文件系统414是否正使 用空间。响应于标准修剪命令的接收,虚拟盘解析器404可以访问分配表416并确定文件系 统414已修剪了扩展3、5的一部分和扩展4的全部。在此实例中,虚拟盘解析器404可以去除 把虚拟盘扩展4映射到虚拟盘文件702的链接,并修改与虚拟盘扩展4相关联的状态信息以 表明虚拟盘扩展未映射或是零。现在可以重新使用虚拟盘文件702的此区段以描述其它虚 拟盘扩展。另外,虚拟盘解析器404可以确定虚拟盘扩展3和5是部分修剪命令的主体。在此 实例中,虚拟盘解析器404可以使用分配表416发现虚拟盘文件字节偏移量(其构成描述虚 拟盘扩展3和5的修剪部分的虚拟盘文件702的部分)并向虚拟化系统文件系统408发出指定 虚拟盘文件字节偏移量(通常以范围的形式)的修剪命令。 [0094] 现在参照图13,其示例了除图12的操作1214之外可以执行的额外操作。操作1316 示例了计算机系统可以包括用于接收向虚拟盘扩展写入数据的请求的电路;用于基于与虚 拟盘扩展相关联的状态信息使虚拟盘文件的未使用区段为零的电路,该状态信息表明使虚 拟盘扩展为零;以及用于分配虚拟盘文件的未使用区段以描述虚拟盘扩展的电路。参照图9 的上下文,虚拟盘解析器404可以接收将数据写入虚拟盘扩展(例如,图9的虚拟盘扩展4,其 在此实例中与表明使虚拟盘扩展为零的状态信息相关联)的请求。例如,当释放虚拟盘扩展 4时虚拟盘解析器404可能已确定了使虚拟盘扩展为零,即,某应用通过使用公知零令牌的 卸载写入向文件602写入全零。 [0095] 响应于确定虚拟盘扩展处于为零状态,虚拟盘解析器404可以识别虚拟盘文件702 的未使用区段(即,未主动被使用以描述虚拟盘扩展和未主动被使用以存储任何分配的元 数据的区段),以及使用该区段来支持虚拟盘扩展。虚拟盘解析器进一步保证作为全零读取 的、来自新分配的扩展的尚未写入扇区的任何读取。虚拟盘解析器404可以向该区段写入IO 写入任务的载荷;更新状态信息以表明虚拟盘扩展被映射;以及更新分配表416中的信息以 描述虚拟盘文件字节偏移量,其识别用来存储虚拟盘扩展4的区段的开始。虚拟盘解析器 404还可以创建日志条目,其保证在刷新写入以前系统故障和重启的情况中,新分配扩展的 尚未写入扇区仍作为全零读取、以及新分配扩展的写入扇区作为全零或者写入数据读取。 在第一个后续刷新命令后,虚拟盘解析器404保证继刷新完成后的系统故障将会造成从读 取写入了的数据的新分配扩展的先前写入扇区读取、以及从读取零的新分配扩展的尚未写 入扇区读取。 [0096] 继续图13的描述,操作1318示出了计算机系统可以包括用于接收向虚拟盘扩展写 入的请求的电路;以及用于基于与虚拟盘扩展相关联的状态信息在不修改虚拟盘文件未使 用区段的内容的情况下分配虚拟盘文件的未使用区段以描述虚拟盘扩展的电路,所述状态 信息表明文件系统正确保对虚拟盘扩展的访问。再次参照图9的上下文,虚拟盘解析器404 可以接收用以向虚拟盘扩展(例如,图9的虚拟盘扩展4,其在此实例中与表明文件系统414 正提供虚拟盘扩展的安全性的状态信息相关联)写入数据的IO任务。响应于检测此状态信 息,虚拟盘解析器404可以识别虚拟盘文件702的未使用区段;把IO任务的载荷写入该区段; 更新状态信息以表明虚拟盘扩展被映射;以及更新分配表416中的信息以描述虚拟盘文件 字节偏移量,该偏移量识别用来存储虚拟盘扩展4的区段的开始。 [0097] 假设在此实例中所述扩展是块且IO任务的载荷只涵盖虚拟盘块中扇区的一部分。 具体地,虚拟盘块可以是512千字节,所述写入可以涵盖虚拟盘块的前500个扇区。在此实例 中,虚拟盘解析器404可以在不擦除剩余524个扇区中存储的数据的情况下在虚拟盘文件 702分配区段的前500个扇区中写入数据。因而,如果检查了此区段则将会得到前500个扇区 包括载荷而剩余524个扇区包括先前向虚拟盘文件702的区段写入了无论什么位模式。在此 实例中,虚拟盘解析器404可以使用此区段而不清除它,因为文件系统414被配置成拒绝对 在文件系统自由空间中的扇区的读取操作。由于将会防止应用读取虚拟盘块的剩余524个 区段,所以它可以包含先前在虚拟盘中存储的任何数据。 [0098] 现在转到图13的操作1320,它示出了计算机系统可以被配置成包括用于接收向虚 拟盘扩展写入的请求的电路;用于基于与虚拟盘扩展相关联的状态信息通过非信息公开位 模式在逻辑上覆盖虚拟盘文件的未使用区段的电路,所述状态信息表明文件系统未正确保 对虚拟盘扩展的访问;以及用于分配虚拟盘文件的覆盖区段以描述虚拟盘扩展的电路。再 次参照图9的上下文,虚拟盘解析器404可以接收向虚拟盘扩展写入数据的请求,该虚拟盘 扩展在此实例中与表明文件系统414未正确保对虚拟盘扩展访问的状态信息相关联。例如, 虚拟盘解析器404可响应于标准修剪命令的接收已释放虚拟盘扩展,以及可以在分配表416 中存储了表明未映射(即,未被虚拟盘文件702中的空间支持)虚拟盘扩展的状态信息。 [0099] 响应于确定虚拟盘扩展未映射,虚拟盘解析器404可以识别要使用的虚拟盘文件 702的未使用区段以描述虚拟扩展和向该区段在逻辑上写入非信息公开位模式以保证对虚 拟盘扩展的读取不无意中泄漏任何信息。在优选实施方式中,非信息公开位模式可以是全 零或先前存储的数据。在使区段为零或向该区段在逻辑上写入一些其它非信息公开位模式 (诸如先前存储数据)之后,虚拟盘解析器404可以把IO任务的载荷在逻辑上写入到区段;更 新状态信息以表明虚拟盘扩展被映射;以及更新分配表416中的信息以描述虚拟盘文件字 节偏移量,该偏移量识别用来存储虚拟盘扩展的区段的开始。 [0100] 继续图13的描述,操作1322示出了计算机系统可以包括被配置成基于表明使虚拟 盘扩展为零的状态信息响应于与虚拟盘扩展相关联的卸载读取请求的接收向请求方发送 表示零的令牌的电路。例如、以及参照图4,卸载提供器引擎422(例如,被配置成服务于卸载 读取和卸载写入命令的电路)可以响应于请求方发出的卸载读取请求向请求方(例如,应用 424)发送表示零的令牌。可以使用卸载读取请求通过生成和向请求方发送令牌从一个地点 向另一个高效复制数据,令牌表示请求数据而非把数据复制到请求方的存储器中并随后把 数据发送给目的地。卸载读取和卸载写入命令可以用来当目的地点辨识源地点生成的令牌 时取得副本卸载以及可以把令牌表示的数据在逻辑上写入到目的地。在源生成的公知零令 牌的情形中,目的地不需要访问底层存储,例如,存储装置106,其在此具体实施中可以是 SAN目标。在此实例中,卸载读取请求可以是对具有一个或更多个虚拟盘扩展中存储的数据 的一个或更多个文件执行卸载读取操作,其中之一与表明使虚拟盘扩展为零的状态信息相 关联。在此实例中,可以通过生成公知零令牌值和向请求方返回该公知零令牌来服务于卸 载读取请求。 [0101] 可以把卸载读取请求发送给卸载提供器引擎422。卸载提供器引擎422可以接收请 求和向虚拟盘解析器404发送针对虚拟盘扩展中存储的数据的消息。虚拟盘解析器404可以 接收请求,读取虚拟盘扩展的状态信息,以及在此具体实例中确定该状态信息表明使此虚 拟盘扩展为零。虚拟盘解析器404可以向卸载提供器引擎422回送表明虚拟盘扩展是全零的 消息,卸载提供器引擎422可以生成表明请求数据是全零(例如,描述虚拟盘块的扇区的范 围是全零)的公知令牌值,以及把公知零令牌发送给请求方。 [0102] 在具体实例中,可以向SAN转发卸载请求而非通过计算机系统400、存储业务500、 或者计算机系统512处理。在此实例中,SAN可以生成令牌并把它返回给虚拟盘解析器404, 其可以随后把零令牌发送给请求方。在又一实例中,当卸载提供器引擎422接收到表明虚拟 盘扩展是全零的消息时,卸载提供器引擎422可以生成公知零令牌,其实际上通过把数据识 别成与任何其它零数据等同并共享与公知零令牌相关联的区域、实现把请求的零数据在逻 辑上复制到与令牌相关联的单独区域中。在卸载提供器引擎422随后接收到指定先前向请 求方发送的令牌的卸载写入的情况下,卸载提供器引擎422可以把数据从与令牌相关联的 区域在逻辑上复制到请求方指定的偏移量处。 [0103] 现在转到图14,它示例了用于收回虚拟盘文件空间的操作流程,包括操作1400、 1402、1404、以及1406。如图所示,操作1400开始操作流程,操作1402示出了计算机系统可以 包括用于接收表明不再使用虚拟盘扩展的一部分的信号的电路,虚拟盘扩展是虚拟盘 (402)的一部分,虚拟盘(402)存储在虚拟盘文件中。例如、以及转到图4,虚拟盘解析器404 可以被配置成实例化虚拟盘402。文件系统414可以向虚拟盘解析器404发送表明它不再正 使用虚拟盘402的一部分(即,虚拟盘扩展扇区的范围)的信号。在具体实例中,信号可以是 修剪命令。在具体实例中,虚拟盘解析器404接收的信号可以识别定义不再正使用的扇区的 范围(其可以是虚拟盘扩展的第一个部分)的字节偏移值。 [0104] 继续图14的描述,操作1404示出了计算机系统还可以包括被配置成识别描述虚拟 盘扩展部分的虚拟盘文件(406,600,602,604,606,608,610,612,702,1002)的一部分的电 路。返回参照图7,虚拟盘解析器404可以接收信号和识别例如虚拟盘扩展0的第一部分的虚 拟盘字节偏移值。响应于信号的接收,虚拟盘解析器404可以检查分配表416以确定与信号 相关联的虚拟盘字节偏移值对应的虚拟盘文件702的部分。 [0105] 现在转到图14的操作1406,它示出了计算机系统可以包括用于向被配置成把虚拟 盘文件(406,600,602,604,606,608,610,612,702,1002)存储在存储装置中的文件系统发 送用以修剪虚拟盘文件(406,600,602,604,606,608,610,612,702,1002)识别部分的请求 的电路。例如、以及再次参照图7,虚拟盘解析器404可以确定把信号识别为小于整个虚拟盘 扩展。例如,信号可以表明扇区的范围不包括虚拟盘扩展的所有扇区。响应于此确定,虚拟 盘解析器404可以向主管虚拟盘文件702的文件系统(例如,虚拟化系统文件系统408)发出 用以修剪虚拟盘扩展的修剪部分对应的虚拟盘文件702的部分的请求。虚拟化系统文件系 统408可以被配置成通过修剪虚拟盘文件406、刷新来自高速缓冲存储器的数据、清除内部 缓存器、把修剪发送给存储文件系统数据的盘等使用修剪命令和从它获益。 [0106] 在具体实例中,虚拟盘解析器404可以被配置成响应于确定用以修剪虚拟盘文件 一部分的请求未涵盖整个扩展、向底层文件系统发出修剪命令。例如,假设信号识别出不再 使用虚拟盘扩展的前600个扇区且虚拟盘解析器404可以确定虚拟盘扩展的前600个扇区小 于构建虚拟盘扩展的1024个扇区。响应于此确定,虚拟盘解析器404可以访问分配表416,以 及确定描述了描述虚拟盘扩展的虚拟盘文件702区段前600个扇区的虚拟盘文件字节偏移 量、和向主管虚拟盘文件702的文件系统发送用以修剪虚拟盘文件702此部分的请求。 [0107] 现在转到图15,它示例了可以结合图14描绘的那些来执行的额外操作。现在转到 操作1508,它示出了计算机系统可以额外包括:用于基于表明使虚拟盘扩展为零的状态信 息、响应于与虚拟盘扩展相关联的卸载读取请求的接收、向请求方发送(1508)表示零的令 牌的电路。例如、以及参照图4,卸载提供器引擎422(例如,被配置成服务于卸载读取和卸载 写入命令的电路)可以响应于请求方发出的卸载读取请求向请求方(例如,应用424)发送表 示零的令牌。可以使用卸载读取请求通过生成和向请求方发送令牌从一个地点向另一个高 效复制数据,令牌表示请求数据而非把数据复制到请求方的存储器中、随后把数据发送给 目的地。卸载读取和卸载写入命令可以用来在目的地点辨识源地点生成的令牌时实现副本 卸载,以及可以把令牌表示的数据在逻辑上写入到目的地。在源生成的公知零令牌的情形 中,目的地不需要访问底层存储,例如,存储装置106,其在此具体实施方式中可以是SAN目 标。在此实例中,卸载读取请求可以是对具有一个或更多个虚拟盘扩展中存储的数据的一 个或更多个文件执行卸载读取操作,其中之一与表明使虚拟盘扩展为零的状态信息相关 联。在此实例中,可以通过生成公知零令牌值和向请求方返回该公知零令牌来服务于卸载 读取请求。 [0108] 继续图15的描述,操作1510示出了计算机系统可以包括用于从虚拟盘文件的组中 选择(1510)子组的电路;以及用于生成(1510)识别包括数据的子组的扇区和透明子组的扇 区的信息的电路。在示范性实施例中,可以从多个虚拟盘文件实例化虚拟盘402。或者换言 之,可以从M个虚拟盘文件形成虚拟盘402(其中,M是大于1的整数)。在此示范性实施例中, 虚拟盘解析器404可以被配置成从例如管理员接收请求以确定在给定字节偏移量处开始 的、虚拟盘402上接下来的字节偏移量,其与虚拟盘文件的子组内定义的扇区相关联。例如、 以及参照图10,虚拟盘解析器404可以接收在虚拟盘扩展2的第一个扇区对应的虚拟盘偏移 量处开始的接下来定义的字节偏移量的请求和表明子组包括虚拟盘文件1002和虚拟盘文 件1004的信息。在此实例中,虚拟盘解析器404可以开始扫描(scan through)子组并确定接 下来定义的字节偏移量是虚拟盘扩展3的开始对应的扇区。由于在此实例中,虚拟盘扩展2 中的数据被虚拟盘文件1006的区段支持,所以它在查找之外且未如定义的一样返回。 [0109] 继续图15的描述,操作1512示出了计算机系统可以包括被配置成响应于确定使虚 拟盘扩展为零、使虚拟盘扩展从虚拟盘文件(406,600,602,604,606,608,610,612,702, 1002)分离并修改与虚拟盘扩展相关联的状态信息以表明使虚拟盘扩展已为零的电路。例 如、以及转到图7,在实施例中虚拟盘解析器404可以确定使虚拟盘扩展已为零。例如,虚拟 盘解析器404可以接收用以向虚拟盘扩展(例如,虚拟盘扩展7)写入公知零令牌表示的数据 的请求。虚拟盘解析器404可以根据与请求相关联的数据结构确定请求用于整个虚拟盘扩 展,即,字节偏移值可以在扩展7的第一个扇区处开始和在扩展7的最后扇区处结束。响应于 这种确定、以及并非把零写入到虚拟盘文件702的对应区段,虚拟盘解析器404可以被配置 成去除把虚拟盘扩展7映射到用来描述虚拟盘扩展7的虚拟盘文件702的区段的链接、以及 使虚拟盘扩展与表明虚拟盘扩展是全零的信息相关联。例如,虚拟盘解析器404可以在分配 表416中写入表明虚拟盘扩展包括全零的八个字节的信息。此操作的最终结果是即使虚拟 盘文件中不存在正逐位地描述扩展的部分,也可以重新使用虚拟盘文件702的区段来存储 其它虚拟盘扩展的数据,并且将会仿佛虚拟盘扩展包括全零一样来读取虚拟盘扩展。 [0110] 继续图15的描述,操作1514示出了计算机系统可以额外包括如下电路:该电路被 配置成响应于文件系统认为虚拟盘扩展为自由空间的确定、使虚拟盘扩展从虚拟盘文件分 离并修改与虚拟盘扩展相关联的状态信息以表明虚拟盘扩展是自由空间。例如、以及再次 转到图7,虚拟盘解析器404可以确定文件系统414已使虚拟盘扩展与表明它是自由空间 (即,文件系统414未使用的空间)的信息相关联。例如,虚拟盘解析器404可以接收来自文件 系统414的、表明扇区的范围涵盖虚拟盘扩展(例如虚拟盘扩展3)的信号、以及表明认为扇 区是自由空间的信息。响应于这种信号的接收,虚拟盘解析器404可以被配置成去除把虚拟 盘扩展链接到虚拟盘文件702的区段的信息。此操作的结果是可以重新使用虚拟盘文件702 的区段以存储其它虚拟盘扩展的数据。虚拟盘解析器404可以额外使虚拟盘扩展与表明虚 拟盘扩展包括任意数据(即,虚拟盘的任何部分中先前存储的数据、全零、或者全一)的信息 相关联。结果是,可以通过返回虚拟盘中先前存储的任意数据来操控针对此虚拟盘扩展的 读取操作。另外,在虚拟盘解析器404被配置成允许任意数据在每次接收到读取操作时改变 的情况下,任意数据可以可选地在每次接收到读取操作时改变。 [0111] 继续图15的描述,操作1516示出了计算机系统可以额外包括如下电路:该电路被 配置成响应于虚拟盘扩展被修剪的确定、使扩展从虚拟盘文件分离并修改与虚拟盘扩展相 关联的状态信息以表明虚拟盘扩展包括非信息公开位模式。例如、以及再次转到图7,虚拟 盘解析器404可以确定文件系统414已修剪了构成虚拟盘扩展的扇区的范围。响应于这种确 定,虚拟盘解析器404可以去除把虚拟盘扩展链接到虚拟盘文件702的区段的分配表416中 的信息。此操作的结果是可以重新使用虚拟盘文件702的区段以存储其它虚拟盘扩展的数 据。虚拟盘解析器404可以额外使虚拟盘扩展与表明虚拟盘扩展包括非信息公开位模式(例 如,全零、一、或者随机生成的位模式)的信息相关联。结果是,可以通过返回非信息公开位 模式来操控针对此虚拟盘扩展的读取操作。在具体优选实施方式中,非信息公开位模式可 以是全零。然而,这与上述零状态不同,原因在于可以使用零状态来表示有含义的零(即,有 意使虚拟盘扩展为零的情况)。 [0112] 参考操作1518,它示出了计算机系统可以额外包括被配置成向控制虚拟盘的文件 系统(414)发送(1518)用以发出修剪命令的请求的电路。返回参照图7,虚拟盘解析器404可 以被配置成发出文件系统414发出一个或更多个修剪命令的请求。在示范性配置中,虚拟盘 解析器404可以被配置成周期性地发送这种请求或基于预定准则发送这种请求,例如,当VM 410开始时或在要关断VM之前不久。响应于这种请求,文件系统414可以向虚拟盘解析器404 发出识别虚拟盘402的未使用扇区的一个或更多个修剪命令。虚拟盘解析器404可以随后接 收来自修剪命令的修剪信息,如,文件系统414不再使用的扇区范围和可选地表明是否认为 修剪扇区为自由空间的信息。虚拟盘解析器404可以接收信息和使用它来更新分配表416中 存储的状态信息以及可能收回虚拟盘文件702的未使用区段。 [0113] 现在转到图16,它示例了用于存储虚拟机数据的操作流程。操作流程通过操作 1600开始并转变为描述如下情况的操作1602:该情况下,计算机系统可以包括用于执行 (1602)包括虚拟机内文件系统的访客操作系统(220,222,412,518)的电路。例如、以及参照 图4,虚拟化系统420(其可以是图3的管理程序302或主机环境204执行的功能和图2的微核 管理程序202的组合)可以实例化虚拟机410并在其内运行访客操作系统(如,访客操作系统 412)。在此实例中,访客操作系统412可以包括文件系统414,其可以是组织和控制用于访客 操作系统412的数据的可执行指令。 [0114] 继续图16的描述,操作1604示出了计算机系统可以包括用于向访客操作系统 (220,222,412,508)暴露(1604)虚拟存储装置(402)的电路,虚拟存储装置(402)包括虚拟 盘扩展,使虚拟盘扩展从虚拟盘文件分离。转回到图4,虚拟化系统420可以把虚拟盘402暴 露给访客操作系统412。例如,虚拟盘解析器404可以与存储虚拟化业务提供器通信,该提供 器可操作用于与在访客操作系统410内运行的存储虚拟化业务客户端通信。在具体实例中, 存储虚拟化业务客户端可以是访客操作系统412内安装的驱动器,其向访客告知它可以与 存储装置通信。在此实例中,文件系统414发送的IO任务经由通信通道(例如,存储器的区域 和跨分区通知设施)首先被发送给存储虚拟化业务客户端、随后向存储虚拟化业务提供器 发送。被虚拟盘解析器404打开和用来存储虚拟盘402的数据的一个或更多个虚拟盘文件 406可以构成虚拟盘402。在具体实例中,可以通过图7的虚拟盘文件702至少部分地描述虚 拟盘402。在另一具体实例中、以及转到图10,可以通过一组虚拟盘文件(1002-1006)描述 虚拟盘402。在任一情形中、以及回到图4,虚拟盘402可以包括多个虚拟盘扩展,可以使虚拟 盘扩展中的一个分离,即,不通过它的相关联的虚拟盘文件内的任何空间逐位地描述。 [0115] 继续图16的描述,操作1606示出了计算机系统可以包括用于接收(1606)用以向虚 拟盘扩展写入数据的请求的电路。转回到图7,虚拟盘解析器404可以接收用以向在虚拟盘 文件702中不具有相关联空间的虚拟盘扩展写入数据的请求。例如,可以接收指定表明在虚 拟盘扩展内的虚拟盘扇区地址的偏移值的IO任务。 [0116] 转回到图16,操作1608示出了计算机系统可以可选地包括:用于确定(1608)与虚 拟盘扩展相关联的状态信息表明虚拟盘扩展是自由空间的电路。响应于IO任务的接收,虚 拟盘解析器404可以访问分配表416以及读取与虚拟盘扩展相关联的状态信息。在此实例 中,虚拟盘扩展可以与表明虚拟盘扩展是自由空间(即,文件系统414未正使用虚拟盘扩展, 以及可以通过任意数据应答对虚拟盘扩展的读取操作)的信息相关联。 [0117] 参照图16,操作1610示出了计算机系统可以可选地包括用于在不覆盖虚拟盘文件 的区段内的预先存在的位模式的情况下、分配(1610)虚拟盘文件(406,600,602,604,606, 608,610,612,702,1002)的区段以描述虚拟盘扩展的电路。例如、以及回到图7,响应于写入 IO任务的接收,虚拟盘解析器404可以定位未正被使用的虚拟盘文件702中的区段以及将其 分配以存储虚拟扩展的数据。例如,虚拟盘解析器404可以在分配表416中写入把虚拟盘扩 展链接到虚拟盘文件702的分配区段的字节偏移值的信息。 [0118] 在此实例中,由于状态信息表明文件系统414已把虚拟盘扩展5识别为自由空间, 所以虚拟盘解析器404不会在使用区段来描述虚拟盘扩展以前、(通过写入全零、一、或者任 何其它非信息公开位模式)覆盖虚拟盘文件702的区段中存储的、区段内已有的任何位模式 (例如,来自一些删除文件的数据和/或任意数据)。这提供节省处理器周期和IO任务的附加 益处,其否则将会用来覆盖虚拟盘扩展的区段。 [0119] 参考图16的操作1612,它示出了计算机系统可以可选地包括用于修改(1612)与虚 拟盘扩展相关联的状态信息以表明把虚拟盘扩展映射到虚拟盘文件的分配区段的电路。例 如、以及转回到图7,虚拟盘解析器404可以修改(例如,在存储器中覆盖)与虚拟盘扩展相关 联的状态信息以表明它是映射的。结果是,针对虚拟盘扩展扇区的后续读取操作将会由虚 拟盘解析器404通过返回分配区段的相应部分中存储的位模式来操控。 [0120] 现在转到图16的操作1614,它示出了把数据存储(1614)到虚拟盘文件的分配区 段。转回到图6,虚拟盘解析器404可以把数据(即,位模式)写入到虚拟盘文件702中。可以向 虚拟化系统文件系统408发出表明向虚拟盘文件702写入的IO任务,最终该改变可以通过永 久存储单元460来维持。 [0121] 现在转到图17,它示出了可以结合图16示例的那些来执行的额外操作。转而关注 操作1716,它示出了计算机系统可以可选地包括:用于响应于确定使虚拟盘扩展为零、使虚 拟盘扩展从虚拟盘文件分离并修改与虚拟盘扩展相关联的状态信息以表明使虚拟盘扩展 已为零的电路。例如、以及转到图6,在实施例中虚拟盘解析器404可以确定使虚拟盘扩展已 为零。例如,虚拟盘解析器404可以接收用以向虚拟盘扩展(例如,虚拟盘扩展7)写入由公知 零令牌表示的数据的卸载写入请求。虚拟盘解析器404可以根据与请求相关联的数据结构 来确定该请求用于整个虚拟盘扩展,即,字节偏移值可以在虚拟盘扩展7的第一个扇区处开 始和在虚拟盘扩展7的最后扇区处结束。响应于这种确定、以及并非把零写入到虚拟盘文件 702的相应区段,虚拟盘解析器404可以被配置成去除从虚拟盘扩展至分配表416中存储的 虚拟盘文件702的区段的链接、以及使虚拟盘扩展与表明虚拟盘扩展是全零的信息相关联。 [0122] 继续图17的描述,操作1718示出了计算机系统可以可选地包括用于响应于来自文 件系统(414)的、把虚拟盘扩展识别成自由空间的信号的接收、使虚拟盘扩展从虚拟盘文件 (406,600,602,604,606,608,610,612,702,1002)分离(1718)并修改与虚拟盘扩展相关联 的状态信息以表明虚拟盘扩展包括任意数据的电路。例如、以及再次转到图7,虚拟盘解析 器404可以确定文件系统414已使虚拟盘扩展与表明它是自由空间(即,文件系统414未使用 的空间)的信息相关联。例如,虚拟盘解析器404可以接收来自文件系统414的、表明涵盖虚 拟盘扩展(例如,虚拟盘扩展3)的扇区范围的信号、以及表明扇区是自由空间的信息。响应 于这种确定,虚拟盘解析器404可以被配置成去除分配表416中把虚拟盘扩展链接到虚拟盘 文件702的区段的信息、以及使虚拟盘扩展与表明可以响应于读取IO任务的接收返回该任 意数据(即,虚拟盘的任何部分中先前存储的数据、全零、或者全一)的信息相关联。 [0123] 图17的操作1720示出了计算机系统400可以可选地包括如下电路:该电路用于响 应于用以修剪虚拟盘扩展所有扇区的请求的接收、使虚拟盘扩展从虚拟盘文件(406,600, 602,604,606,608,610,612,702,1002)分离(1720)并修改与虚拟盘扩展相关联的状态信息 以表明虚拟盘扩展包括非信息公开位模式。例如、以及再次转到图7,虚拟盘解析器404可以 确定构成虚拟盘扩展的扇区已被修剪。例如,虚拟盘解析器404可以接收来自文件系统414 的、表明涵盖虚拟盘扩展的扇区范围的修剪命令。响应于这种信号的接收,虚拟盘解析器 404可以被配置成去除分配表416中把虚拟盘扩展链接到虚拟盘文件702的区段的信息、以 及使虚拟盘扩展与表明虚拟盘扩展包括非信息公开位模式的信息相关联。 [0124] 以上具体实施方式经由实例和/或操作图叙述了系统和/或过程的各种实施例。在 这种方框图、和/或实例包含一个或更多个功能和/或操作的范围内,本领域技术人员将会 理解,可以通过广泛范围的硬件、软件、固件、或者实质上其任何组合来单独地和/或统一实 施这种方框图、或者实例内的每个功能和/或操作。 [0125] 虽然已经示出和描述了本文中描述的本主题的特定方面,但对本领域技术人员而 言将会明显的是,基于本文中的教导,可以在不脱离本文中描述的主题和它的较宽泛方面 的情况下做出改变和修改,因此,所附权利要求要在它们的范围内如在本文中描述的主题 的真实精神和范围内一样涵盖所有这种改变和修改。