專利名稱:虛擬盤存儲技術(shù)的制作方法
虛擬盤存儲技術(shù)
背景技術(shù):
存儲虛擬化技術(shù)允許邏輯存儲與物理存儲分開。存儲虛擬化的一個示范性使用情形是在虛擬機內(nèi)。虛擬化軟件(通常稱為管理程序或虛擬機監(jiān)視器)層安裝在計算機系統(tǒng)上和控制虛擬機如何與物理硬件交互。由于通常把訪客操作系統(tǒng)編碼為實行物理硬件上的獨占控制,所以虛擬化軟件可以被配置成細分物理硬件的資源和模擬虛擬機內(nèi)物理硬件的存在。存儲虛擬化的另一使用情形是在被配置成實施存儲陣列的計算機系統(tǒng)內(nèi)。在此情形中,物理計算機系統(tǒng)或虛擬機可以使用iSCSI協(xié)議等連接到存儲陣列??梢允褂么鎯Σ倏啬K來模擬虛擬或者物理機的存儲。例如,存儲操控模塊可以通過對可以用來描述(即,存儲)虛擬盤擴展的一個或更多個虛擬盤文件(即,諸如塊的連續(xù) 存儲區(qū)域)進行讀取和寫入來操控虛擬或物理機發(fā)出的存儲IO任務。同樣地,存儲操控程序可以通過向一個或更多個虛擬盤文件寫入虛擬盤的位模式數(shù)據(jù)來響應寫入請求,以及通過讀取一個或更多個虛擬盤文件中存儲的位模式來響應讀取請求。
發(fā)明內(nèi)容
本文描述用于在一個或更多個虛擬盤文件中存儲虛擬盤數(shù)據(jù)的技術(shù)。在示范性配置中,虛擬盤擴展可以與表明虛擬盤擴展是否通過虛擬盤文件來描述的狀態(tài)信息相關(guān)聯(lián)。在某些情況下,可以收回用來描述虛擬盤擴展的空間,可以使用狀態(tài)信息來確定如何操控針對虛擬盤擴展的后續(xù)讀取和/或?qū)懭氩僮?。可以使用收回的空間(例如,從一個或更多個范圍建立的擴展)來描述同樣或另一虛擬盤擴展。除了以上內(nèi)容之外,在權(quán)利要求具體實施方式
、以及圖中還描述了其它技術(shù)。本領(lǐng)域技術(shù)人員可以明白,本公開的一個或更多個各種方面可以包括但不限于用于實現(xiàn)本文中參考的方面的電路和/或編程;電路和/或編程可以根據(jù)系統(tǒng)設計者的設計選擇而實質(zhì)上是被配置成實現(xiàn)本文中參考的方面的硬件、軟件、和/或固件的任何組合。以上內(nèi)容是概述,因而必定包含細節(jié)的簡化、概括和省略。本領(lǐng)域技術(shù)人員將會明白,發(fā)明內(nèi)容只是示例性的,而并非意在以任何方式限制。
圖I描繪了計算機系統(tǒng)的高級方框圖。圖2描繪了虛擬化軟件程序的示范性架構(gòu)的高級方框圖。圖3描繪了虛擬化軟件程序的替選架構(gòu)的高級方框圖。圖4描繪了被配置成實現(xiàn)虛擬盤的計算機系統(tǒng)的低級方框圖。圖5A描繪了被配置成實現(xiàn)虛擬盤的計算機系統(tǒng)的低級方框圖。圖5B描繪了被配置成實現(xiàn)虛擬盤的計算機系統(tǒng)的低級方框圖。圖6描繪了差異盤的高級方框圖。圖7描繪了虛擬盤與虛擬盤文件之間關(guān)系的高級示例。圖8描繪了虛擬盤與虛擬盤文件之間關(guān)系的高級示例。
圖9描繪了虛擬盤與虛擬盤文件之間關(guān)系的高級示例。圖10描繪了虛擬盤與虛擬盤文件之間關(guān)系的高級示例。圖11描繪了可以在計算機可讀存儲介質(zhì)中實施和/或通過計算機系統(tǒng)執(zhí)行的操作流程。圖12描繪了可以結(jié)合圖11所示例的那些來執(zhí)行的額外操作。圖13描繪了可以結(jié)合圖12所示例的那些來執(zhí)行的額外操作。圖14描繪了可以在計算機可讀存儲介質(zhì)中實施和/或通過計算機系統(tǒng)執(zhí)行的操作流程。圖15描繪了可以結(jié)合圖14所示例的那些來執(zhí)行的額外操作。
圖16描繪了可以在計算機可讀存儲介質(zhì)中實施和/或通過計算機系統(tǒng)執(zhí)行的操作流程。圖17描繪了可以結(jié)合圖16所示例的那些來執(zhí)行的額外操作。
具體實施例方式公開的主題可以使用一個或更多個計算機系統(tǒng)。圖I和以下討論意在提供可以實施公開主題的合適運算環(huán)境的簡要總體描述。通篇使用的術(shù)語電路可以包括諸如硬件中斷控制器、硬盤驅(qū)動器、網(wǎng)絡適配器、圖形處理器、基于硬件的視頻/音頻編解碼器、以及用來操作這種硬件的固件的硬件組件。術(shù)語電路還可以包括通過固件和/或軟件配置的微處理器、專用集成電路、以及處理器,例如,執(zhí)行指令讀取和執(zhí)行的多內(nèi)核通用處理單元的內(nèi)核??梢酝ㄟ^從存儲器(例如,RAM、ROM)、固件、和/或海量存儲加載的指令來配置處理器,實施可操作用于把處理器配置成執(zhí)行功能的邏輯。在電路包括硬件和軟件的組合的實例實施例中,實施者可以編寫實施邏輯的源代碼,其后續(xù)被編譯成可以通過硬件執(zhí)行的機器可讀代碼。由于本領(lǐng)域技術(shù)人員可以明白,本領(lǐng)域的現(xiàn)狀已演進到在硬件實施功能或軟件實施功能之間存在微小差別的程度,所以用以實現(xiàn)本文中描述的功能的硬件對軟件的選擇僅是一種設計選擇。換言之,由于本領(lǐng)域技術(shù)人員可以明白,可以把軟件過程變換成等同硬件結(jié)構(gòu),可以把硬件結(jié)構(gòu)本身變換成等同軟件過程,所以硬件實施對軟件實施的選擇留待實施者決定。現(xiàn)在參照圖I,描繪了示范性運算系統(tǒng)100。計算機系統(tǒng)100可以包括處理器102,例如,執(zhí)行內(nèi)核。雖然示例了一個處理器102,但在其它實施例中計算機系統(tǒng)100可以具有多個處理器,例如,每處理器基板多個執(zhí)行內(nèi)核和/或可以各自具有多個執(zhí)行內(nèi)核的多個處理器基板。如圖所示,各種計算機可讀存儲介質(zhì)110可以通過向處理器102耦合各種系統(tǒng)組件的一個或更多個系統(tǒng)總線互連。系統(tǒng)總線可以是包括如下內(nèi)容的數(shù)個類型總線結(jié)構(gòu)中的任何總線結(jié)構(gòu)存儲器總線或存儲器控制器、外圍總線、以及使用各種總線架構(gòu)中任何總線架構(gòu)的本地總線。在實例實施例中計算機可讀存儲介質(zhì)110可以包括例如隨機訪問存儲器(RAM) 104、存儲裝置106 (例如,機電硬盤驅(qū)動器、固態(tài)硬盤驅(qū)動器等)、固件108 (例如,閃存RAM或R0M),以及諸如例如CD-ROM、軟盤、DVD、閃存驅(qū)動器、外界存儲裝置等的可移除存儲裝置118。本領(lǐng)域技術(shù)人員應當明白,可以使用其它類型的計算機可讀存儲介質(zhì),如,磁盒、閃存卡、和/或數(shù)字視頻盤。計算機可讀存儲介質(zhì)110可以提供處理器可執(zhí)行指令122、數(shù)據(jù)結(jié)構(gòu)、程序模塊和諸如可執(zhí)行指令的計算機系統(tǒng)100的其它數(shù)據(jù)的非易失性和易失性存儲??梢栽诠碳?08中存儲包含基本例程的基本輸入/輸出系統(tǒng)(BIOS) 120,其中所述基本例程幫助在計算機系統(tǒng)100內(nèi)的元件之間傳送信息(如,在啟動期間)。可以在固件108、存儲裝置106、RAM104、和/或可移除存儲裝置118上存儲大量程序,以及通過包括操作系統(tǒng)和/或應用程序的處理器102來執(zhí)行。在示范性實施例中,計算機可讀存儲介質(zhì)110可以存儲在以下段落中更詳細描述的虛擬盤解析器404,可以通過處理器102執(zhí)行,從而把計算機系統(tǒng)100變換成被配置成用于特定目的的計算機系統(tǒng),即,根據(jù)本文件中描述的技術(shù)配置的計算機系統(tǒng)。計算機系統(tǒng)100可以通過可以包括但不限于鍵盤和指點裝置的輸入裝置116接收命令和信息。其它輸入裝置可以包括麥克風、操縱桿、游戲手柄、掃描儀等。這些和其它輸入裝置常常通過耦合到系統(tǒng)總線的串口接口連接到處理器102,但是也可以通過其它接口(如,并口、游戲端口、或者通用串行總線(USB))連接。顯示器或其它類型的顯示裝置也可以經(jīng)由接口(如,可以是圖形處理器單元112的一部分或者連接到圖形處理器單元112的視頻適配器)連接到系統(tǒng)總線。除了顯示器之外,計算機通常包括其它外圍輸出裝置,如,揚聲器和打印機(未示出)。圖I的示范性系統(tǒng)還可以包括主機適配器、小型計算機系統(tǒng)接口(SCSI)總線、以及連接到SCSI總線的外界存儲裝置。 計算機系統(tǒng)100可以使用去往一個或更多個遠程計算機(如,遠程計算機)的邏輯連接在聯(lián)網(wǎng)環(huán)境中操作。遠程計算機可以是另一計算機、服務器、路由器、網(wǎng)絡PC、對等裝置或其它公共網(wǎng)絡節(jié)點,以及通??梢园ㄒ陨舷鄬τ谟嬎銠C系統(tǒng)100描述的許多元件或所有元件。當在LAN或WAN組網(wǎng)環(huán)境中使用時,計算機系統(tǒng)100可以通過網(wǎng)絡接口卡114連接到LAN或WAN??梢栽趦?nèi)部或外部的NIC 114可以連接到系統(tǒng)總線。在聯(lián)網(wǎng)環(huán)境中,可以把相對于計算機系統(tǒng)100描繪的程序模塊、或者其一些部分存儲在遠程存儲器存儲裝置中。將會明白,此處描述的網(wǎng)絡連接是示范性的,還可以使用在計算機之間建立通信鏈路的其它方式。此外,雖然構(gòu)思了本公開的眾多實施例特別是非常適合計算機化系統(tǒng),但本文中沒有內(nèi)容意在把本公開限制為這些實施例。轉(zhuǎn)到圖2,示例的是可以用來生成虛擬機的示范性虛擬化平臺。在此實施例中,微核管理程序202可以被配置成控制和任意訪問計算機系統(tǒng)200的硬件。微核管理程序202可以生成稱為諸如子分區(qū)I至子分區(qū)N (其中,N是大于I的整數(shù))的分區(qū)的執(zhí)行環(huán)境。此處,子分區(qū)是微核管理程序202支持的隔離的基本單元。微核管理程序202可以隔離一個分區(qū)中的進程以免訪問另一分區(qū)的資源。特別地,微核管理程序202可以隔離訪客操作系統(tǒng)的核模式代碼以免于訪問另一分區(qū)的資源以及用戶模式進程??梢园衙總€子分區(qū)映射到在微核管理程序202的控制下的一組硬件資源,例如,存儲器、裝置、處理器循環(huán)等。在實施例中,微核管理程序202可以是單機軟件產(chǎn)品、嵌入主板的固件內(nèi)的操作系統(tǒng)的一部分、專用集成電路、或者其組合。微核管理程序202可以通過約束物理計算機系統(tǒng)中存儲器的訪客操作系統(tǒng)視圖而強制分區(qū)。當微核管理程序202實例化虛擬機時,它可以向虛擬機分配系統(tǒng)物理存儲器(SPM)的頁面(例如,具有開始和結(jié)束地址的存儲器的定長塊)作為訪客物理存儲器(GPM)。此處,微核管理程序202控制系統(tǒng)存儲器的訪客約束視圖。術(shù)語訪客物理存儲器是從虛擬機的角度描述存儲器頁面的簡潔方式,術(shù)語系統(tǒng)物理存儲器是從物理系統(tǒng)的角度描述存儲器頁面的簡潔方式。因而,向虛擬機分配的存儲器的頁面將會具有訪客物理地址(虛擬機使用的地址)和系統(tǒng)物理地址(頁面的實際地址)。訪客操作系統(tǒng)可以虛擬化訪客物理存儲器。虛擬存儲器是允許操作系統(tǒng)過量調(diào)配(commit)存儲器和允許應用對邏輯上連續(xù)的工作存儲器單獨訪問的管理技術(shù)。在虛擬化環(huán)境中,訪客操作系統(tǒng)可以使用此上下文中稱為訪客頁面表的一個或更多個頁面表把稱為虛擬訪客地址的虛擬地址轉(zhuǎn)譯成訪客物理地址。在此實例中,存儲器地址可以具有訪客虛擬地址、訪客物理地址、以及系統(tǒng)物理地址。在描繪的實例中,還可以也視為與Xen開源管理程序的域0類似的父分區(qū)組件可以包括主機環(huán)境204。主機環(huán)境204可以是操作系統(tǒng)(或一套配置工具),主機環(huán)境204可以被配置成通過使用虛擬化業(yè)務提供器228 (VSP)向在子分區(qū)I 一 N中執(zhí)行的訪客操作系統(tǒng)提供資源??梢允褂迷陂_源團體中通常稱作后端驅(qū)動器的VSP 228來通過虛擬化業(yè)務客戶端(VSC)(在開源團體或半虛擬化裝置中通常稱作前端驅(qū)動器)把接口復用到硬件資源。 如圖所示,虛擬化業(yè)務客戶端在訪客操作系統(tǒng)的環(huán)境中執(zhí)行。然而,這些驅(qū)動器在它們經(jīng)由VSP與主機環(huán)境204通信而非與硬件或模擬硬件通信的過程中與訪客中驅(qū)動器的其余驅(qū)動器不同。在示范性實施例中可以把虛擬化業(yè)務提供器228使用以與虛擬業(yè)務客戶端216和218通信的路徑視為啟發(fā)(enlightened) IO路徑。如圖所示,模擬器234 (例如,虛擬化IDE裝置、虛擬化視頻適配器、虛擬化NIC等)可以被配置成在主機環(huán)境204內(nèi)運行和附接到對訪客操作系統(tǒng)220和222可用的模擬硬件資源,例如,IO端口、訪客物理地址范圍、虛擬VRAM、模擬ROM范圍等。例如,當訪客OS觸及映射到訪客物理地址(裝置的寄存器在該地址將會用于存儲器映射裝置)的訪客虛擬地址時,微核管理程序202可以攔截請求并把訪客試圖寫入的值傳遞給關(guān)聯(lián)的模擬器。此處,可以把此實例中的模擬硬件資源視為虛擬裝置在訪客物理地址空間中所處的位置??梢园岩源朔绞綄δM器的使用視作模擬路徑。該模擬路徑相比于啟發(fā)IO路徑而言效率低,因為它較之它對在VSP與VSC之間傳遞消息而言需要較多CPU時間來模擬裝置。例如,需要映射到寄存器的存儲器上的數(shù)個動作以經(jīng)由模擬路徑向盤寫入緩存器,而這會被減少為啟發(fā)IO路徑中從VSC向VSP傳遞的單個消息,因為VM中的驅(qū)動器被設計成訪問虛擬化系統(tǒng)提供的IO業(yè)務而非設計成訪問硬件。每個子分區(qū)可以包括一個或更多個虛擬處理器(230和232),訪客操作系統(tǒng)(220和222)可以管理和調(diào)度在其上執(zhí)行的線程。通常,虛擬處理器是提供具有具體架構(gòu)的物理處理器的表示的可執(zhí)行指令和相關(guān)聯(lián)狀態(tài)信息。例如,一個虛擬機可以具有虛擬處理器,其具有Intel x86處理器的特性,然而另一虛擬處理器可以具有PowerPC處理器的特性??梢园汛藢嵗械奶摂M處理器映射到計算機系統(tǒng)的處理器,使得將會通過物理處理器直接執(zhí)行實現(xiàn)虛擬處理器的指令。因而,在包括多個處理器的實施例中,可以通過處理器同時執(zhí)行虛擬處理器,而例如其它處理器執(zhí)行管理程序指令??梢园逊謪^(qū)中的虛擬處理器和存儲器的組合視作虛擬機。訪客操作系統(tǒng)(220和222)可以是諸如例如來自Microsoft 、Apple 、開源團體等的操作系統(tǒng)的任何操作系統(tǒng)。訪客操作系統(tǒng)可以包括用戶/核操作模式和可以具有可以包括調(diào)度器、存儲器管理器等的核??傮w而言,核模式可以包括授權(quán)至少對特許處理器指令訪問的處理器中的執(zhí)行模式。每個訪客操作系統(tǒng)可以具有相關(guān)聯(lián)的文件系統(tǒng),其上可以存儲有諸如終端服務器、電子商務服務器、電子郵件服務器等的應用,以及訪客操作系統(tǒng)本身。訪客操作系統(tǒng)可以調(diào)度線程以在虛擬處理器上執(zhí)行,可以實現(xiàn)這些應用的實例。現(xiàn)在參照圖3,它示例了以上在圖2中描述的替選虛擬化平臺。圖3描繪了圖2的類似組件;然而,在此實例實施例中管理程序302可以包括微核組件和諸如虛擬化業(yè)務提供器228和裝置驅(qū)動器224的與圖2的主機環(huán)境204中類似的組件,而管理操作系統(tǒng)304可以包含例如用來配置管理程序302的配置工具。在此架構(gòu)中,管理程序302可以執(zhí)行與圖2的微核管理程序202同樣或類似的功能;然而,在此架構(gòu)中管理程序304實現(xiàn)啟發(fā)IO路徑和包括計算機系統(tǒng)物理硬件的驅(qū)動器。圖3的管理程序302可以是單機軟件產(chǎn)品、嵌入母板的固件內(nèi)的操作系統(tǒng)的一部分,或者可以通過專用集成電路實現(xiàn)管理程序302的一部分?,F(xiàn)在轉(zhuǎn)到圖4,它描述計算機系統(tǒng)400,其示例了可以用來實現(xiàn)本文中描述的技術(shù)的組件的高級方框圖。簡言之,計算機系統(tǒng)400可以包括與以上針對圖I至3描述的類似的組件。圖4示出了可以視為圖2或圖3示例的虛擬化平臺的高級表示的虛擬化系統(tǒng)420。 例如,可以把虛擬化系統(tǒng)420視為由微核管理程序202和主機環(huán)境204提供的特征的組合的高級表示??商孢x地,可以把虛擬化系統(tǒng)420視為管理程序302和管理OS 304的高級表示。因而,本文通篇對術(shù)語“虛擬化系統(tǒng)420”的使用意指可以在任何類型的虛擬化軟件層內(nèi)或在任何類型的虛擬化平臺中實施以下段落中描述的虛擬盤技術(shù)。虛擬化系統(tǒng)420可以包括卸載提供器引擎422。簡言之,卸載提供器引擎422可以被配置成服務于例如應用424發(fā)出的卸載讀取和卸載寫入請求(有時稱為代理讀取和代理寫入)。卸載讀取請求是創(chuàng)建令牌的請求,該令牌表示在卸載讀取是正常讀取的情況下已讀取的數(shù)據(jù)。卸載寫入是用以把令牌表示的數(shù)據(jù)寫到目的地點的請求。在一個使用實例中,可以使用后面是卸載寫入的卸載讀取從一個地點向另一個(例如,通過使用避免通過本地RAM移動數(shù)據(jù)的表示數(shù)據(jù)的令牌從計算機系統(tǒng)400向域內(nèi)的目的計算機系統(tǒng))復制數(shù)據(jù)。例如,假設計算機系統(tǒng)400和目的計算機系統(tǒng)(未示出)可以訪問共同數(shù)據(jù)倉庫,并且用以從計算機系統(tǒng)向目的地復制數(shù)據(jù)的請求被接收。并非把數(shù)據(jù)復制到目的地,應用424可以向卸載提供器引擎422發(fā)出請求以發(fā)出如它在令牌與數(shù)據(jù)相關(guān)聯(lián)時存在的一樣表示數(shù)據(jù)的令牌??梢韵蚰康牡匕l(fā)送令牌和通過在目的地上運行的程序使用令牌,以從共同數(shù)據(jù)存儲倉庫獲得數(shù)據(jù)和把數(shù)據(jù)寫入到目的地。在題為“Offload Reads and Writes”的共同未決美國專利申請 No. 12/888,433 和題為 “Virtualization and Offload Reads and Writes” 的美國專利申請No. 12/938, 383中更詳細描述了副本卸載技術(shù),其內(nèi)容在它們與本文中描述的技術(shù)一致的程度上整體經(jīng)引用并入本文??梢允褂每梢允蔷唧w實例實施例中可執(zhí)行指令模塊的虛擬盤解析器404來實例化來自虛擬盤文件的虛擬盤和代表虛擬機操控存儲10。如圖所示,虛擬盤解析器404可以打開諸如虛擬盤文件406的一個或更多個虛擬盤文件和生成虛擬盤402。虛擬盤解析器404可以經(jīng)由虛擬化系統(tǒng)文件系統(tǒng)408從存儲裝置106獲得虛擬盤文件406。簡言之,虛擬化系統(tǒng)文件系統(tǒng)408表示組織虛擬化系統(tǒng)420的計算機文件和數(shù)據(jù)(如,虛擬盤文件406)的軟件模塊。虛擬化系統(tǒng)文件系統(tǒng)408可以把此數(shù)據(jù)存儲在固定尺寸物理擴展的陣列(即,物理存儲裝置上連續(xù)的存儲區(qū)域)中。在具體實例中,擴展可以是作為具有設置長度的位的字節(jié)序列的簇。示范性簇尺寸通常是512字節(jié)與64千字節(jié)之間2的冪。在具體配置中,簇尺寸可以是4千字節(jié)。當接收到用以打開虛擬盤文件406的請求時,虛擬化系統(tǒng)文件系統(tǒng)408確定文件在盤上位于何處和向盤裝置驅(qū)動器發(fā)出IO任務以從盤的一個或更多個物理擴展讀取數(shù)據(jù)。文件系統(tǒng)408發(fā)出的IO任務確定描述存儲裝置106上虛擬盤文件406的永久副本地點的盤偏移量和長度和向存儲裝置106發(fā)出IO任務。由于存儲裝置如何操作的語義,可以在高速緩沖存儲器454表示的易失性存儲器的一個或更多個級別的高速緩沖存儲器中緩存寫入IO任務,直到存儲裝置106的電路確定訪問永久存儲單元460 (例如,磁盤片、閃存單元等)上的地點、并把表明虛擬盤文件406的永久副本新內(nèi)容的緩存位模式寫入到永久存儲單元460為止。虛擬盤解析器404可以獲得表明虛擬盤文件406的位模式和暴露虛擬盤文件406中的載荷(例如,用戶數(shù)據(jù))作為包括多個虛擬盤擴展的盤。在實施例中,這些虛擬盤擴展可以是尺寸為512千字節(jié)直至64兆字節(jié)、并分區(qū)成多個扇區(qū)的固定尺寸塊;然而,在另一實施例中虛擬盤擴展可以是可變尺寸擴展。在示范性配置中,在啟動訪客操作系統(tǒng)412以前,設 定與虛擬盤的模擬或啟發(fā)存儲控制器和模擬或啟發(fā)方面有關(guān)的資源,使得在虛擬機410的訪客物理地址空間內(nèi)實現(xiàn)具有存儲器映射寄存器的模擬存儲控制器。啟動代碼可以運行和啟動訪客操作系統(tǒng)412。虛擬化系統(tǒng)420可以檢測對訪問訪客物理地址空間的此區(qū)域的嘗試,并返回使訪客操作系統(tǒng)412確定存儲裝置被附接到模擬存儲控制器的結(jié)果。在響應中,訪客操作系統(tǒng)412可以加載驅(qū)動器(半虛擬化驅(qū)動器或常規(guī)驅(qū)動器)和使用驅(qū)動器向檢測的存儲裝置發(fā)出存儲IO請求。虛擬化系統(tǒng)420可以把存儲IO請求發(fā)送給虛擬盤解析器404。在訪客操作系統(tǒng)412在運行之后它可以經(jīng)由文件系統(tǒng)414向虛擬盤402發(fā)出IO任務,該文件系統(tǒng)與虛擬化系統(tǒng)文件系統(tǒng)414類似,原因是它組織訪客操作系統(tǒng)412的計算機文件和數(shù)據(jù)以及訪客操作系統(tǒng)412上安裝的應用。訪客操作系統(tǒng)412可以通過與操作系統(tǒng)如何與物理存儲裝置交互并最終把IO任務發(fā)送給虛擬盤解析器404類似的方式與虛擬盤402交互。虛擬盤解析器404可以以模擬物理存儲裝置的方式包括用于確定如何響應IO任務的邏輯。例如,虛擬盤解析器404可以從虛擬盤文件406讀取數(shù)據(jù)和向虛擬盤文件406寫入數(shù)據(jù)。寫入到虛擬盤文件406的數(shù)據(jù)繼而通過虛擬化系統(tǒng)文件系統(tǒng)408發(fā)送、并向永久存儲單元460上或永久存儲單元460中存儲的虛擬盤文件406的永久副本交付。簡要參照圖5A,它示例了用于實施本文中描述的技術(shù)的替選架構(gòu)。如圖5所示,也可以在諸如Microsoft 提供的操作系統(tǒng)的操作系統(tǒng)502中實施虛擬盤解析器404。在此實例中,虛擬盤解析器404可以被配置成在可以包括與圖I的計算機系統(tǒng)100類似的組件的存儲服務器500上運行。在此實例中,存儲服務器500可以包括物理存儲裝置510的陣列和可以被配置成使存儲裝置可用于服務器,從而使存儲裝置仿佛局部附接到操作系統(tǒng)508一樣。虛擬盤解析器404可以與針對圖4所描述的一樣操作;可以通過網(wǎng)絡連接將文件系統(tǒng)414發(fā)出的此配置讀/寫IO任務中的差異發(fā)送給虛擬盤解析器404。簡要參照圖5B,它不例了用于實施本文中描述的技術(shù)的又一架構(gòu)。圖5B與圖5A的類似之處在于在操作系統(tǒng)502中實施虛擬盤解析器404以及計算機系統(tǒng)512可以包括與圖I的計算機系統(tǒng)100類似的組件。然而此實例中的差異是該圖示例了環(huán)回附接虛擬盤402??梢栽谔摂M盤402中存儲包括諸如應用424的應用的文件系統(tǒng)414,以及可以在計算機系統(tǒng)文件系統(tǒng)514中存儲虛擬盤文件406。
現(xiàn)在轉(zhuǎn)而關(guān)注虛擬盤402,雖然可以通過單個虛擬盤文件實現(xiàn)它,但在其它配置中可以使用一組差異虛擬盤文件實現(xiàn)虛擬盤402。圖6示例了可以被虛擬盤解析器404用來作為差異盤來實現(xiàn)虛擬盤402的虛擬盤文件的示范性鏈。通常,差異虛擬盤文件表示相比于父圖像、作為一組修改擴展的虛擬盤的當前狀態(tài)。父圖像可以是另一差異虛擬盤文件或基本虛擬盤文件。在示范性配置中,可以把父虛擬盤文件與子虛擬盤文件之間的鏈接存儲在所述子(child)內(nèi)。特別地,所述子可以包括父(parent)的標識和描述父的地點的值。當起動虛擬機時,虛擬盤解析器404可以接收描述鏈中最后虛擬盤文件的信息,即,虛擬盤文件612是包括虛擬盤文件612、610、606、以及600的鏈中的最后一個,以及打開此文件。此文件可以包括其父(即,虛擬盤文件610)的標識和去往它的路徑。虛擬盤解析器404可以定位和打開所述父等諸如此類直到定位和打開基本虛擬盤文件為止。虛擬盤解析器404可以使用表明在父虛擬盤文件中是否存在或存儲數(shù)據(jù)的信息。 通常,以讀取/修改的形式打開鏈中的最后虛擬盤文件,而僅以讀取的形式打開其它虛擬 盤文件。因而,通常向鏈中的最后虛擬盤文件進行寫入。讀取操作類似地首先針對鏈中的最后虛擬盤文件,虛擬盤解析器404將會按從最后至基礎的邏輯次序在邏輯上查找虛擬盤文件直到在未高速緩沖關(guān)于數(shù)據(jù)位于何處的信息的情況下找到數(shù)據(jù)為止。在具體實例中,虛擬盤文件(例如,虛擬盤文件612)的塊分配表(未示出)可以包括如下狀態(tài)信息該狀態(tài)信息表明是否通過虛擬盤文件的區(qū)段(section)定義虛擬盤擴展或此虛擬盤擴展是否是透明的(例如,進一步沿著鏈通過不同虛擬盤文件定義)。在一種實施方式中,虛擬盤解析器404可以確定此虛擬盤擴展是否透明和訪問鏈中接下來的虛擬盤文件(例如,虛擬盤文件610)的塊分配表等諸如此類直到定義數(shù)據(jù)的鏈中的虛擬盤文件被定位為止?,F(xiàn)在參照圖7,它示例了由虛擬盤文件702至少部分地描述的虛擬盤402,其可與寫入/可修改的圖6中描述的任何虛擬盤文件(例如虛擬盤文件602、608、或者612,或者單個虛擬盤文件)類似。如圖所示,虛擬盤402可以包括N個存儲擴展(其中,N是大于0的整數(shù)),在此具體實例中虛擬盤402包括10個擴展。把虛擬盤402示例成包括通過虛擬盤擴展內(nèi)的不同模式區(qū)分的不同文件的位模式和訪客操作系統(tǒng)412的數(shù)據(jù)。由于虛擬盤402并非物理存儲裝置,所以可以通過虛擬盤文件702內(nèi)的不同區(qū)段“描述”(即,在虛擬盤文件702內(nèi)的不同區(qū)段中存儲)虛擬盤擴展的底層載荷數(shù)據(jù)。例如,通過虛擬盤文件偏移值0或可用來存儲載荷數(shù)據(jù)的第一偏移量定義的區(qū)段來描述虛擬盤擴展I??梢栽谟嬎銠C系統(tǒng)400在操作時,可在隨機訪問存儲器中存儲的分配表416可以在任何區(qū)段中的虛擬盤文件702中維持和可以跨越多個區(qū)段。簡言之,分配表416可以包括將虛擬盤擴展鏈接到虛擬盤文件702的區(qū)段的信息。例如,分配表416可以存儲定義了虛擬盤文件字節(jié)偏移量的信息,該偏移量定義存儲數(shù)據(jù)的虛擬盤文件702的區(qū)段。箭頭表征分配表416中存儲的關(guān)系。在以下段落中更詳細描述的,分配表416還可以包括狀態(tài)信息;然而,此配置是示范性的。在替選配置中可以把此信息存儲在虛擬盤文件702的不同區(qū)段中和加載到RAM104中。分配表416可以包括每個虛擬盤擴展的條目(entry);表明每個擴展所處狀態(tài)的狀態(tài)信息;以及表明在虛擬盤文件702中的何處描述每個虛擬盤擴展的文件偏移量(未示例)。在替選實施例中也可以通過多個已經(jīng)映射和連續(xù)(在文件偏移量中)的表條目定義擴展。在此配置中,可以在塊載荷在文件中連續(xù)的情況下跨過塊邊界的讀取和寫入可以作為對虛擬盤文件702的單個讀/寫來處置。在具體實例中,虛擬盤解析器404還可以存儲表明在虛擬盤文件的每個未使用區(qū)段中存儲什么類型位模式的信息,即,自由空間圖。除了以上內(nèi)容之外,自由空間圖可以允許通過虛擬盤解析器404使用以確定虛擬盤文件406的哪些扇區(qū)被使用和哪些是空閑的。此實例中的自由空間圖可以被配置成跟蹤非零文件中的自由空間。在示范性實施例中,因為使用自由空間的非零部分來描述虛擬盤402的一部分(其必須是零或不必公開來自其它虛擬盤偏 移量的信息),所以分別通過零或非信息公開模式(通常是零)來覆蓋自由空間。虛擬盤解析器404可以使用此信息以確定虛擬盤文件的什么區(qū)段分配給虛擬盤擴展。例如,如果寫入處于零狀態(tài)的虛擬盤擴展,則虛擬盤解析器404可以分配其中已經(jīng)有零的區(qū)段以支持(back)虛擬盤擴展。隨著訪客操作系統(tǒng)412或操作系統(tǒng)508運行,它將會生成數(shù)據(jù)和文件并向虛擬盤402發(fā)出盤寫入以存儲數(shù)據(jù)。當虛擬盤文件702不具有任何額外未使用空間時,虛擬盤解析器404可以擴展文件的末端和使用新空間來描述虛擬盤擴展。訪客操作系統(tǒng)412或操作系統(tǒng)508可以使用、刪除、以及重新使用虛擬盤402的區(qū)段;然而,由于虛擬盤解析器404僅代表文件系統(tǒng)414存儲數(shù)據(jù),所以虛擬盤解析器404會無法確定訪客操作系統(tǒng)412是否仍正使用虛擬盤文件的區(qū)段。結(jié)果是,虛擬盤解析器404可以持有虛擬盤文件702中的分配空間以描述文件系統(tǒng)414不再使用的虛擬盤擴展。這樣的結(jié)果是虛擬盤文件702的尺寸會增長直到它達到虛擬盤402的尺寸為止。在示范性實施例中,虛擬盤解析器404可以被配置成收回虛擬盤文件的未使用區(qū)段以及可選地重新使用它們。這樣,需要擴展虛擬盤文件的頻率被減小,且虛擬盤文件的總體尺寸被減小。在實例實施例中,當文件系統(tǒng)告知它不再使用虛擬盤擴展時,虛擬盤解析器404可以從虛擬盤文件釋放(S卩,解鏈接)虛擬盤擴展并使虛擬盤擴展與描述應當如何對待對虛擬盤擴展的讀取操作的信息相關(guān)聯(lián)。可以隨后重新使用虛擬盤文件的區(qū)段以描述同樣的或另一虛擬盤擴展。在示范性配置中,虛擬盤解析器404可以使用文件系統(tǒng)發(fā)出的零命令的修剪(TRM)、未映射(UNMAP)JP /或同樣寫入(WRITE SAME)來確定何時可以從虛擬盤文件406釋放虛擬盤擴展。訪客操作系統(tǒng)412或操作系統(tǒng)508可以發(fā)出修剪命令。例如,隨著訪客操作系統(tǒng)412或操作系統(tǒng)508運行,文件系統(tǒng)414可以確定不再需要一些扇區(qū)和發(fā)出修剪命令。可替選地或另外,虛擬盤解析器404可以被配置成請求文件系統(tǒng)414在預定間隔、或者在滿足預定準則時(例如,當實例化虛擬機410時、當關(guān)斷虛擬機410時、在略微使用情況下等)發(fā)出修剪命令。簡言之,使用修剪命令來通知數(shù)據(jù)存儲裝置有關(guān)如下內(nèi)容哪些扇區(qū)不再考慮使用以使得數(shù)據(jù)存儲裝置可以可選地丟棄其中存儲的數(shù)據(jù)。文件系統(tǒng)414可以使用一個類型的修剪命令(稱為自由空間修剪命令)來告知文件系統(tǒng)414不再使用扇區(qū),稱為標準修剪命令的其它并非如此。兩個類型的修剪命令之間的差異是當扇區(qū)是自由空間修剪的主題時,文件系統(tǒng)414通過防止用戶空間應用等從扇區(qū)讀取來提供扇區(qū)的安全性??梢岳梦募到y(tǒng)414確保對以此方式修剪了的扇區(qū)進行訪問的事實來增加高效分配虛擬盤文件空間的能力。在以下段落中更詳細描述此特定方面。在示范性配置中,虛擬盤解析器404可以被配置成在修剪命令完全覆蓋虛擬盤擴展時執(zhí)行收回操作?;蛘邠Q言之,虛擬盤解析器404可以響應于修剪命令的接收從虛擬盤文件解鏈接虛擬盤擴展,所述修剪命令定義識別虛擬盤擴展中所有扇區(qū)的虛擬盤扇區(qū)范圍。在同樣或替選實施例中,當接收到覆蓋虛擬盤擴展一部分的修剪命令時,虛擬盤解析器404可以確定虛擬盤文件的什么部分對應于修剪扇區(qū)并向存儲裝置106發(fā)送針對虛擬盤文件部分的修剪命令。在此實例中,底層文件系統(tǒng)(例如,虛擬化系統(tǒng)文件系統(tǒng)408、存儲服務器文件系統(tǒng)504、或者計算機系統(tǒng)文件系統(tǒng)514)可以轉(zhuǎn)譯修剪命令的偏移量并把轉(zhuǎn)譯偏移量發(fā)送給存儲裝置106、經(jīng)由內(nèi)部數(shù)據(jù)結(jié)構(gòu)更新直接收回空間、或者從高速緩沖存儲器清除數(shù)據(jù)。在同樣或另一實施例中,當接收到覆蓋虛擬盤擴展一部分的修剪命令時,虛擬盤解析器404可以被配置成存儲表明什么扇區(qū)已是修剪命令的主題以及修剪命令是否是自由空間修剪的信息。在修剪虛擬盤擴展的剩余部分的情況下,虛擬盤解析器404可以從虛擬盤文件釋放虛擬盤擴展。當釋放虛擬盤擴展時,虛擬盤解析器404可以使虛擬盤擴展與描述可以如何操控針對虛擬盤擴展的讀取操作的狀態(tài)信息相關(guān)聯(lián)。表I示例了虛擬盤解析器404可以與虛擬盤擴展相關(guān)聯(lián)和用來優(yōu)化虛擬盤文件的收回的示范性狀態(tài)信息??梢酝ㄟ^使用兩個狀態(tài)(描述的和未描述的)在一個實例中完成用以收回虛擬盤擴展的能力;然而,由于在刪除數(shù)據(jù)時通常未擦除虛擬盤文件702中存儲的位模式,所以可以使用額外狀態(tài)來確定選擇以描述虛擬盤擴展的空間在可以重新使用它之前何時需要清除或是否可以在不覆蓋其中先前存儲的數(shù)據(jù)的情況下重新使用它。在刪除后未擦除數(shù)據(jù)的一個原因是它花費處理器周期以擦除數(shù)據(jù),由于一些存儲裝置被配置成基于每塊執(zhí)行寫入操作,所以在利用新數(shù)據(jù)覆蓋時擦除數(shù)據(jù)較高效。以下狀態(tài)是示范性的,所述公開不限于使用以下表定義的狀態(tài)。
狀態(tài)I描述
11~ Ife狀態(tài)表明虛擬盤擴展被鏈接到虛擬盤文件。
透明此狀態(tài)表明通過不同虛擬盤文件定義虛擬盤擴展。
零 I狀態(tài)表明未通過虛擬盤文件描述虛擬盤擴展。另外,此狀態(tài)表明把虛擬盤擴展定義成零以及零是有含義的。
未映射此狀態(tài)表明未通過虛擬盤文件描述虛擬盤擴展。在實施例中,此狀態(tài)可以包括錨定(anchored)和未錨定的子狀態(tài)。_
未初始此狀態(tài)表明未通過虛擬盤文件描述虛擬盤擴展以及把虛擬盤擴展定義成自由空間。在實施例中,此狀態(tài)也可以包括錨定和未錨化 I定的子狀態(tài)。_表I.
結(jié)合圖7參照表1,列出的第一個狀態(tài)是表明通過虛擬盤文件702的區(qū)段來描述虛擬盤擴展的“映射”狀態(tài)。例如,虛擬盤擴展0是示例成處于“映射”狀態(tài)的實例虛擬盤擴展。繼續(xù)表I的描述,虛擬盤擴展可以與表明虛擬盤擴展是“透明”(即,通過不同虛擬盤文件描述虛擬盤擴展)的狀態(tài)信息相關(guān)聯(lián)。在虛擬盤解析器404接收到對處于透明狀態(tài)的虛擬盤擴展的讀取操作的情況下,虛擬盤解析器404可以參考不同虛擬盤文件并檢查它的分配表以確定如何響應讀取。在虛擬盤解析器404接收到對虛擬盤擴展的寫入的情況下,虛擬盤解析器404可以把虛擬盤擴展從“透明”狀態(tài)轉(zhuǎn)變?yōu)椤坝成洹睜顟B(tài)。結(jié)合圖7繼續(xù)表I的描述,虛擬盤擴展還可以與“未映射”狀態(tài)相關(guān)聯(lián)。在此實例中,未通過虛擬盤文件702描述虛擬盤擴展,也未通過鏈中的任何其它虛擬盤文件描述它。在此實例中,可以使用未映射狀態(tài)來描述虛擬盤擴展,所述虛擬盤擴展經(jīng)受了未表明文件系統(tǒng)414將會確保對虛擬盤擴展進行訪問的修剪命令?;蛘邠Q言之,用來把此虛擬盤擴展轉(zhuǎn)變?yōu)榇藸顟B(tài)的修剪命令是標準修剪命令。在虛擬盤擴展處于未映射狀態(tài)且接收到表明、對擴展讀取的IO任務的情況下,虛擬盤解析器404可以通過零、零令牌、一、表示全一的令牌、或者非信息公開位模式(例如,全零、全一、或者一和零的隨機生成模式)響應。在此實例中,如果分配虛擬盤文件702的區(qū)段以支持(back)此狀態(tài)下的虛擬盤擴展,則虛擬盤解析器404可以在分配之前向虛擬盤文件702的區(qū)段寫入非信息公開位模式,或選擇已經(jīng)包括非信息公開位模式的區(qū)段以描述虛擬盤擴展。圖7的虛擬盤擴展6被指示為處于未映射狀態(tài)。在實施例中,可以保持定義未映射或未初始化擴展的數(shù)據(jù),未映射或未初始化狀態(tài)可以包括兩個子狀態(tài)意味著在虛擬盤文件702內(nèi)仍存在數(shù)據(jù)的錨定、以及意味著可以或無法保持數(shù)據(jù)的未錨定。在使用這些子狀態(tài)的情況下,虛擬盤解析器404可以通過在不使區(qū)段為零的情況下分配存儲數(shù)據(jù)的區(qū)段而把未映射但錨定的擴展轉(zhuǎn)變?yōu)橛成涞?。類?地,雖然虛擬盤解析器404被配置成對待未初始化的擴展就象對于虛擬盤402的至少一部分未映射它們一樣,但虛擬盤解析器404可以通過在不使區(qū)段為零的情況下分配存儲數(shù)據(jù)的區(qū)段,在該擴展向映射的轉(zhuǎn)變期間避免使未初始化但錨定的擴展為零。表I額外描述“零”狀態(tài)。在此實例中,未通過虛擬盤文件702描述虛擬盤擴展也未通過鏈中的任何其它虛擬盤文件描述它;然而,需要把虛擬盤擴展讀取成全零。在此實例中,可以使用零狀態(tài)來描述經(jīng)受了任一類型修剪命令的虛擬盤擴展或描述程序?qū)懭肓巳愕奶摂M盤擴展。例如,假設刪除工具程序向虛擬盤擴展4寫入了全零以保證完全覆蓋了它先前存儲的數(shù)據(jù)。在虛擬盤擴展處于零狀態(tài)、以及接收到表明對擴展讀取的IO任務的情況下,虛擬盤解析器404可以通過零或零令牌(在卸載讀取操作中)響應。在寫入針對此狀態(tài)的虛擬盤擴展的情況下,虛擬盤解析器404可以使虛擬盤文件702的區(qū)段為零并使用它來描述虛擬盤擴展或選擇已經(jīng)是零的虛擬盤文件702的區(qū)段,以及分配它以支持虛擬盤擴展。在此實施例中,可以使用數(shù)據(jù)結(jié)構(gòu)或虛擬盤文件702跟蹤為零空間??梢栽诖蜷_虛擬盤文件702時、在關(guān)閉虛擬盤文件702時等周期性地更新數(shù)據(jù)結(jié)構(gòu)。從處于未映射或未初始化狀態(tài)的擴展進行讀取可以可選地使虛擬盤解析器404在虛擬盤解析器404被配置成提供處于未映射或未初始化狀態(tài)的擴展的扇區(qū)穩(wěn)定性的配置中把所述擴展轉(zhuǎn)變?yōu)榱銧顟B(tài)。表I還描述稱為“未初始化”狀態(tài)的狀態(tài)。未初始化狀態(tài)表明未通過虛擬盤文件702描述虛擬盤擴展且文件系統(tǒng)414正確保對虛擬盤擴展的訪問。即,文件系統(tǒng)414被配置成防止用戶應用讀取此虛擬盤擴展內(nèi)的扇區(qū)。在此實例中,可以使用未初始化狀態(tài)來描述經(jīng)受了自由空間修剪命令的虛擬盤擴展。在虛擬盤擴展處于未初始化狀態(tài)且表明對擴展讀取的IO任務被接收到的情況下,虛擬盤解析器404可以通過任何數(shù)據(jù)(即,來自虛擬盤文件702中幾乎任何其它位置的位模式、零、一、非信息公開位模式等)響應,因為在只可以把虛擬盤載荷數(shù)據(jù)和非安全性影響元數(shù)據(jù)暴露給虛擬盤客戶端的需求之外,虛擬盤解析器404并未正提供針對虛擬盤擴展的安全性。在寫入針對此狀態(tài)下的虛擬盤擴展的情況下,虛擬盤解析器404可以在不需要更改可以在區(qū)段內(nèi)存儲的任何數(shù)據(jù)的情況下簡單分配虛擬盤文件702的區(qū)段。結(jié)果是,此狀態(tài)是最有益的,因為可以在虛擬盤文件內(nèi)分配空間而不必預先清除它。圖7的虛擬盤擴展5被指示為處于未初始化狀態(tài),且虛擬盤文件702未正支持虛擬盤擴展。一旦狀態(tài)信息與每個虛擬盤擴展相關(guān)聯(lián),則虛擬盤解析器404可以被配置成向管理員等提供關(guān)于如何布置虛擬盤402的額外信息。在實例實施例中,虛擬盤解析器404可以被配置成基于狀態(tài)信息響應包括某些參數(shù)的偏移查詢。例如,用戶可以通過虛擬盤402發(fā)出以給定字節(jié)偏移量開始迭代的查詢,以及定位滿足諸如“映射”、“未映射”、“透明”等的具體準則的范圍。另外,用戶可以選擇查詢應當進行得多么“深入”以把差異虛擬盤文件702考慮在內(nèi)。例如、以及參照圖7,用戶可以設置深度2和執(zhí)行查詢。在響應中,虛擬盤解析器404將對鏈中的最后兩個虛擬盤文件(例如,虛擬盤文件610和612)執(zhí)行查詢。具體查詢可以包括用以獲得接下來的非透明范圍、接下來的非零范圍、接下來的定義范圍、接下來的初始化范圍等的查詢。簡言之,接下來定義范圍的查詢可以被配置成返回包含定義數(shù)據(jù)的接下來的范圍(例如,在透明扇區(qū)解析為針對該扇區(qū)的父虛擬盤文件狀態(tài)的情況下,處于映射或為零狀態(tài)的扇區(qū))。在透明扇區(qū)解析為針對該扇區(qū)的父虛擬 盤文件狀態(tài)的情況下,接下來初始化范圍的查詢可以返回包含除了未初始化狀態(tài)以外的狀態(tài)中數(shù)據(jù)的接下來的范圍?,F(xiàn)在轉(zhuǎn)到圖8,它示例了虛擬盤解析器404響應于向虛擬盤402保存的文件或其它數(shù)據(jù)、可以將虛擬盤擴展如何從一個狀態(tài)向另一個轉(zhuǎn)變的具體實例。例如,假設用戶使用虛擬機410內(nèi)的數(shù)據(jù)庫管理程序并創(chuàng)建數(shù)據(jù)庫。用戶可以把數(shù)據(jù)庫保存在文件中,且文件系統(tǒng)414可以確定在虛擬盤402上何處保存文件802。文件系統(tǒng)414可以發(fā)出用以把文件802寫入到例如落在虛擬盤擴展3 — 5內(nèi)的扇區(qū)的一個或更多個盤寫入。在此實例中,虛擬盤擴展3被“映射”,且虛擬盤解析器404可以把文件802的第一個部分寫入到通過分配表416識別的區(qū)段。另一方面,虛擬盤擴展4和5處于“零”和“未初始化”狀態(tài)。在此實例中,虛擬盤解析器404可以選擇虛擬盤文件702的未使用區(qū)段以支持虛擬盤擴展4并確定虛擬盤擴展4處于為零狀態(tài)。響應于此確定,虛擬盤解析器404可以使正要用來描述虛擬盤擴展4的區(qū)段為零或定位已經(jīng)是全零的區(qū)段。在定位為零區(qū)段或使區(qū)段為零的過程完成之后,虛擬盤解析器404可以生成如下信息該信息識別虛擬盤文件字節(jié)偏移量,所述偏移量表明定義在虛擬盤文件702中的何處描述虛擬盤擴展4的區(qū)段的第一個字節(jié),并把所述信息存儲在分配表416中。虛擬盤解析器404可以隨后改變與虛擬盤擴展4相關(guān)聯(lián)的狀態(tài)信息以表明它是“映射”的。隨后可以把向擴展4寫入的部分寫入到定位的區(qū)段中??商孢x地,對于涵蓋當前處于零狀態(tài)中虛擬盤的整個擴展的寫入的一部分,可以選取虛擬盤文件的定位區(qū)段,可以向該區(qū)段發(fā)出寫入的部分,在該寫入完成后,虛擬盤解析器404可以隨后改變與虛擬盤擴展相關(guān)聯(lián)的狀態(tài)信息以表明該擴展是“映射”的??商孢x地,對于只涵蓋當前處于零狀態(tài)的虛擬盤擴展一部分的寫入的一部分,可以選取虛擬盤文件的定位區(qū)段,可以向該區(qū)段發(fā)出該寫入的部分,可以向區(qū)段的剩余部分發(fā)出為零寫入,在寫入完成后,虛擬盤解析器404可以隨后改變與虛擬盤擴展相關(guān)聯(lián)的狀態(tài)信息以表明擴展是“映射”的。本領(lǐng)域技術(shù)人員將會認識到,可以使用刷新或直寫式(write-through)寫入(如,迫使單元訪問(force-unit-access)寫入)強制寫入的給定排序。類似地,虛擬盤解析器404可以選擇虛擬盤文件702的未使用區(qū)段以支持虛擬盤擴展5,以及通過參看分配表416確定虛擬盤擴展5處于未初始化狀態(tài)。響應于此確定,虛擬盤解析器404可以在不修改選定區(qū)段的內(nèi)容的情況下分配區(qū)段以描述虛擬盤擴展5。虛擬盤解析器404可以生成如下信息該信息識別表明區(qū)段的第一個字節(jié)的虛擬盤文件字節(jié)偏移量,其表明在虛擬盤文件702中何處描述虛擬盤擴展4,以及把區(qū)段的文件字節(jié)偏移量存儲在分配表416中。虛擬盤解析器404可以隨后改變與虛擬盤擴展5相關(guān)聯(lián)的狀態(tài)信息以表明它是“映射”的。圖9示例了虛擬盤解析器404響應于對文件802的刪除操作和使虛擬盤擴展7的內(nèi)容為零的操作可以如何將虛擬盤擴展從一個狀態(tài)轉(zhuǎn)換到另一個的另一具體實例。例如,用戶可能已刪除了文件802,文件系統(tǒng)414可能已發(fā)出了修剪命令。在此實例中,虛擬盤解析器404可以接收修剪命令,該命令包括完全涵蓋虛擬盤擴展4和5以及部分涵蓋虛擬盤擴展3的虛擬盤扇區(qū)范圍。響應于虛擬盤擴展4和5被完全修剪的確定,虛擬盤解析器404可以被配置成從分配表416去除鏈接并把虛擬盤擴展4變換為表明虛擬盤文件702未正支持此虛擬盤擴展的狀態(tài)。如虛擬盤擴展4的分配表條目所示,虛擬盤解析器404把虛擬盤擴展變換所至的狀態(tài)取決于虛擬盤解析器404被配置成使用什么狀態(tài)以及文件系統(tǒng)414是否發(fā)出自由空間修剪命令或標準修剪命令。例如,虛擬盤解析器404可以被配置成使用兩個狀態(tài)映射的和零以描述虛擬盤擴展。可替選地,虛擬盤解析器404可以被配置成使用三個狀態(tài)映射的、零、未映射的以描述虛擬盤擴展??商孢x地,虛擬盤解析器404可以被配置成使用四個狀態(tài)映射的、零、未映射的、以及未初始化的。未映射的與未初始化的之間的區(qū)別對應于標準修剪與自由空間修剪之間的區(qū)別。如果解析器被配置成不使用未初始化狀態(tài),則自由空間修剪作為正常修剪對待。如圖所示,文件702的部分仍在虛擬盤文件702中 存儲,這是由于從虛擬盤文件702清除它們效率低下。由于所述修剪部分涵蓋了虛擬盤擴展5,所以虛擬盤解析器404可以通過各種方式中的一個方式操控此擴展。在一個配置中,虛擬盤解析器404可以使擴展5停留在映射狀態(tài)下。在此配置中,虛擬盤解析器404可以在對于整個擴展接收了修剪信息時轉(zhuǎn)變擴展。可替選地,虛擬盤解析器404可以在希望接收較多如下這種修剪信息的情況下跟蹤部分涵蓋擴展的修剪信息所述修剪信息提供可以釋放描述擴展的空間的指示。類似地,所述修剪也部分涵蓋了虛擬盤擴展。在此實例中,虛擬盤解析器404可以使它停留在映射狀態(tài)中并且還可以被配置成向底層文件系統(tǒng)(例如,虛擬化文件系統(tǒng)408、存儲服務器文件系統(tǒng)504、或者計算機系統(tǒng)文件系統(tǒng)514)發(fā)送描述不再使用的虛擬盤文件702的部分的修剪信息。除了文件802的刪除之外,圖9示出了使虛擬盤擴展為零的實例。虛擬盤解析器404可以掃描表明使虛擬盤擴展7的整個范圍為零的文件系統(tǒng)414發(fā)出的IO任務。響應于此確定,虛擬盤解析器404可以被配置成從擴展分配表416去除鏈接并把虛擬盤擴展7轉(zhuǎn)變?yōu)榱銧顟B(tài)。如圖所示,虛擬盤擴展7的先前內(nèi)容仍在虛擬盤文件702中存儲。轉(zhuǎn)到圖10,它示例了由一組虛擬盤文件1002、1004、1006 (其可以與虛擬盤文件608,604,以及600定義的虛擬盤文件鏈類似)至少部分地描述的虛擬盤402。在此示范性實施例中,在多個虛擬盤文件上拆散表示虛擬盤402的數(shù)據(jù)。在此示范性實施例中,當虛擬盤解析器404試圖讀取虛擬盤擴展I和2時,虛擬盤解析器404可以訪問虛擬盤文件1002的分配表并確定這些擴展是透明的。接下來,虛擬盤解析器404可以訪問虛擬盤文件1004的分配表并確定這些擴展是透明的。最終,虛擬盤解析器404可以訪問祖父級虛擬盤文件1006的分配表并確定這些虛擬盤擴展被定義。以下是描繪操作流程的一系列流程圖。為了容易理解,流程圖被組織成使得初始流程圖經(jīng)由總體“大圖片”視點呈現(xiàn)實施方式,后續(xù)流程圖提供以虛線示例的進一步的額外內(nèi)容和/或細節(jié)。再者,本領(lǐng)域技術(shù)人員可以明白,由虛線描繪的操作流程被認為是可選的?,F(xiàn)在參照圖11,它示例了用于收回虛擬盤文件內(nèi)空間的操作流程,包括操作1100、1102、1104、以及1106。操作1100開始操作流程,操作1102示出了實例化(1102)包括虛擬盤擴展的虛擬盤(402),使虛擬盤擴展從虛擬盤文件分離。簡要轉(zhuǎn)到圖4、圖5A或圖5B,虛擬盤解析器404 (例如,可執(zhí)行指令和相關(guān)聯(lián)實例數(shù)據(jù))可以實例化虛擬盤402,所述解析器暴露一個或更多個虛擬盤文件內(nèi)存儲的數(shù)據(jù)作為邏輯硬盤驅(qū)動器,該邏輯硬盤驅(qū)動器可以被配置成通過模擬硬盤驅(qū)動器的行為來操控來自文件系統(tǒng)414的讀/寫操作。虛擬盤文件406 (可以是如圖6中所示例的一個或更多個文件)可以存儲通常在物理硬盤驅(qū)動器上得到的內(nèi)容,即,盤分區(qū)、文件系統(tǒng)等。轉(zhuǎn)到圖7,把虛擬盤402示出為包括多個擴展,使其中一些擴展從虛擬盤文件702的任何區(qū)段分離。在具體示例中,假設所述擴展是塊。在此實例中,可以使用可以從虛擬盤文件702中的一個或更多個區(qū)段加載到隨機訪問存儲器中的分配表416來存儲將虛擬盤402中的盤塊鏈接到虛擬盤文件702的擴展尺寸(例如,塊尺寸的)的區(qū)段的信息。分配表416也可以存儲虛擬盤402中每個虛擬盤塊的狀態(tài)信息。潛在地包括非零數(shù)據(jù)的虛擬塊可以與表明塊 處于映射狀態(tài)的狀態(tài)信息相關(guān)聯(lián)。即,分配了虛擬盤文件702的區(qū)段以描述虛擬盤402的塊(即,存儲虛擬盤402塊的數(shù)據(jù))。虛擬盤塊0 — 3和7處于此狀態(tài)的塊的實例。如圖所示,虛擬盤塊4和5、6、8和9可以是有效的虛擬盤塊;然而,這些虛擬盤塊不會具有虛擬盤文件702內(nèi)分配的任何空間。由于文件系統(tǒng)414可以向這些塊寫入,所以在示范性實施例中,這些虛擬盤塊可以與如下信息相關(guān)聯(lián)所述信息可以被虛擬盤解析器404用來確定如何響應對它們的讀取和/或?qū)懭氩僮?。簡要返回參照圖11,操作1104示出了計算機系統(tǒng)可以額外包括如下電路該電路基于與虛擬盤(402)相關(guān)聯(lián)的狀態(tài)信息、在不覆蓋虛擬盤文件的區(qū)段內(nèi)預先已有位模式的情況下分配虛擬盤文件的區(qū)段(406,600,602,604,606,608,610,612,702,1002)以描述虛擬盤擴展。例如、以及回到圖8,虛擬盤解析器404可以接收用以向虛擬盤擴展的一部分寫入的IO任務。響應于寫入IO任務的接收,虛擬盤解析器404可以檢查分配表416并確定尚未分配虛擬盤文件702內(nèi)的空間以描述虛擬盤擴展以及分配虛擬盤文件406的區(qū)段來支持虛擬盤擴展。因而,虛擬盤解析器404將會把文件系統(tǒng)414向虛擬盤擴展寫入的數(shù)據(jù)存儲在虛擬盤文件702的區(qū)段中。在此實例中,虛擬盤解析器404不會覆蓋虛擬盤文件702的區(qū)段中已經(jīng)存儲的任何數(shù)據(jù)(通過寫入全零、一、或者任何其它非信息公開位模式)——在使用它以基于分配表416中的狀態(tài)信息來描述虛擬盤擴展以前。在示范性配置中,因為文件系統(tǒng)自由空間涵蓋虛擬盤擴展,所以狀態(tài)信息可以表明文件系統(tǒng)414正確保對此虛擬盤擴展的訪問。在具體實例中,狀態(tài)信息可以表明虛擬盤擴展處于“未初始化”狀態(tài)。分配虛擬盤擴展而不清除它提供了節(jié)省處理器周期和IO任務的附加益處,其如若不然將被用來覆蓋虛擬盤文件702的區(qū)段。在操作1104的具體實例中、以及轉(zhuǎn)到圖7,假設擴展是塊且文件系統(tǒng)414向虛擬盤402發(fā)送IO任務以向虛擬盤塊3 - 5寫入表明文件802的位模式。響應于這種IO任務的接收,虛擬盤解析器404可以確定虛擬盤塊5不被虛擬盤文件406的任何區(qū)段支持且未初始化它。響應于此確定,虛擬盤解析器404可以被配置成分配虛擬盤文件702的區(qū)段以描述虛擬盤塊5并在其中寫入表明文件802的位模式的一部分而不覆蓋先前存儲在IO任務未涵蓋的區(qū)段的部分中的數(shù)據(jù)。再次轉(zhuǎn)到圖11,操作1106示出了計算機系統(tǒng)可以額外包括如下電路該電路被配置成修改(1106)與虛擬盤擴展相關(guān)聯(lián)的狀態(tài)信息以表明通過虛擬盤文件描述虛擬盤擴展。例如、以及轉(zhuǎn)回到圖8,虛擬盤解析器404可以修改(例如,在存儲器中覆蓋)與虛擬盤擴展5相關(guān)聯(lián)的狀態(tài)信息以反映虛擬盤文件702正描述虛擬盤擴展。在一個配置中,狀態(tài)信息的寫入和修改可以同時發(fā)生。例如,虛擬盤解析器404可以在分配表416中存儲表明虛擬盤擴展5是“映射”的信息。結(jié)果是,針對虛擬盤擴展5的扇區(qū)的后續(xù)讀取操作將會由虛擬盤解析器404通過返回分配表416中識別的字節(jié)偏移量處存儲的位模式來操控。虛擬盤解析器404可以向分配以描述虛擬盤擴展的虛擬盤文件702的區(qū)段同時寫入數(shù)據(jù)(例如,與觸發(fā)了此流程的寫入操作相關(guān)聯(lián)的位模式)和向虛擬化系統(tǒng)文件系統(tǒng)408、存儲服務器文件系統(tǒng)504、或者計算機系統(tǒng)文件系統(tǒng)514發(fā)出用以向虛擬盤702的區(qū)段寫入位模式的IO任務。在一些時間點,如,在完成后續(xù)發(fā)出的刷新命令之前,將會在永久存儲單元460中維持位模式。 現(xiàn)在轉(zhuǎn)到圖12,它示出了可以結(jié)合圖11所示例的那些來執(zhí)行的額外操作。轉(zhuǎn)到操作1208,它表明計算機系統(tǒng)可以包括如下電路該電路用于通過識別非零虛擬盤的扇區(qū)、處于非透明狀態(tài)的虛擬盤的扇區(qū)、處于映射狀態(tài)的虛擬盤的扇區(qū)、和/或處于初始化狀態(tài)的虛擬盤的扇區(qū)的信息來響應偏移查詢命令。例如,虛擬盤解析器404可以被配置成接收用以生成有關(guān)虛擬盤402的信息的命令所述信息諸如在給定起始字節(jié)偏移量的情況下,處于非透明狀態(tài)(即,除了透明以外的狀態(tài))、映射狀態(tài)(即,包括虛擬盤文件406中數(shù)據(jù)的虛擬盤402的扇區(qū))、定義狀態(tài)(即,映射的或是零的虛擬盤402的扇區(qū))、和/或初始化狀態(tài)(即,除了未初始化以外的狀態(tài))中的虛擬盤上的接下來的字節(jié)偏移量。所述命令可以是深度受限的,原因在于只檢查了特定數(shù)量的虛擬盤文件,并且除了由狀態(tài)查詢所表明的范圍之外(無論請求了哪個狀態(tài)查詢),在檢查特定數(shù)量的虛擬盤文件之后仍然透明的任何范圍都被上報回請求方。響應于這種命令的接收,虛擬盤解析器404可以在虛擬盤402上的初始字節(jié)偏移量處開始并建立響應范圍或范圍的集合直到與命令相關(guān)聯(lián)的范圍被檢測到且返回期望信息為止。繼續(xù)圖12的描述,操作1210示出了向控制虛擬盤文件(406,600,602,604,606,
608,610,612,702,1002)的文件系統(tǒng)(414)發(fā)送請求以發(fā)出從包括修剪命令、未映射命令、寫入同零命令(a write same of zero command)、以及零令牌卸載寫入命令的命令組中選擇的至少一個命令。返回參照圖4、圖5A、或者圖5B,虛擬盤解析器404可以被配置成向文件系統(tǒng)414發(fā)出請求。此示例中的請求可以用于文件系統(tǒng)414發(fā)出修剪命令。例如,虛擬盤解析器404可以在虛擬盤402的實例化之后不久、和/或在虛擬機410關(guān)斷、休眠等以前,周期性地向文件系統(tǒng)414發(fā)出一個或更多個請求。響應于這種請求,文件系統(tǒng)414可以確定它不再使用虛擬盤402的什么扇區(qū)以及向虛擬盤解析器404發(fā)送識別這些未使用的扇區(qū)的一個或更多個修剪命令。虛擬盤解析器404可以因此接收如下修剪信息,諸如文件系統(tǒng)414不再使用的扇區(qū)范圍的列表、以及文件系統(tǒng)414是否正阻止從扇區(qū)的范圍進行讀取以確保對那些扇區(qū)的訪問。虛擬盤解析器404可以接收信息,并把被該范圍涵蓋的虛擬盤擴展轉(zhuǎn)變成可以收回虛擬盤文件702內(nèi)的空間的狀態(tài)。
繼續(xù)圖12的描述,操作1212示出了計算機系統(tǒng)可以包括用于響應于修剪第二虛擬盤擴展的一部分的請求的接收來確定第二虛擬盤擴展的一部分對應的虛擬盤文件的一部分的電路;以及用于向被配置成把虛擬盤文件存儲在存儲裝置中的文件系統(tǒng)發(fā)送針對所確定的虛擬盤文件部分的修剪命令的電路。例如、以及參照圖8,文件系統(tǒng)414可以發(fā)出識別虛擬盤擴展的一部分的修剪命令,例如,修剪命令可以只識別形成一個或更多個虛擬盤塊的扇區(qū)的一部分對應的扇區(qū)的范圍。在具體實例中,假設文件系統(tǒng)414修剪用來存儲文件802的空間。這樣,修剪命令可以只識別構(gòu)建虛擬盤擴展3的扇區(qū)的一部分。在此實例中,虛擬盤解析器404可以確定扇區(qū)的范圍涵蓋虛擬盤擴展的子區(qū)段并使用分配表416中的映射信息來確定虛擬盤擴展的修剪扇區(qū)對應的虛擬盤文件702的部分。虛擬盤解析器404可以向虛擬化系統(tǒng)文件系統(tǒng)408或存儲服務器文件系統(tǒng)504發(fā)出用以修剪虛擬盤擴展的修剪扇區(qū)對應的虛擬盤文件702的部分的請求。虛擬化系統(tǒng)文件系統(tǒng)408或存儲服務器文件系統(tǒng)504可以被配置成通過修剪支持虛擬盤文件406的扇區(qū)的一部分、刷新來自高速緩沖存儲器的數(shù)據(jù)、清除內(nèi)部緩存器等使用修剪命令并從它獲益??商孢x地,虛擬盤解析器404可以存儲表明虛擬盤擴展的一部分被修剪的信息以及表明它是否是自由空間修剪的信息。隨著訪客操作系統(tǒng)412或操作系統(tǒng)508運行,它可 以最終使虛擬盤擴展的剩余部分為零或修剪虛擬盤擴展的剩余部分。響應于此事件,虛擬盤解析器404可以確定把虛擬盤擴展轉(zhuǎn)變成未通過虛擬盤文件702對其進行描述的狀態(tài)和基于如何修剪或使虛擬盤擴展的不同部分為零來選擇狀態(tài)。虛擬盤解析器404可以被配置成選擇用以在可把虛擬盤擴展的不同部分置于不同未描述狀態(tài)中時轉(zhuǎn)變虛擬盤擴展的最限制性狀態(tài),其中,零狀態(tài)是最限制性的,未初始化是最少限制性的,未映射在其之間某處。例如,如果使第一部分為零以及剩余部分未初始化,則虛擬盤解析器404可以把整個虛擬盤擴展轉(zhuǎn)變成為零狀態(tài)。繼續(xù)圖12的描述,操作1214示例了計算機系統(tǒng)400可以額外包括如下電路該電路被配置成響應于用以修剪涵蓋虛擬盤擴展的扇區(qū)范圍的請求的接收、把虛擬盤擴展從虛擬盤文件的區(qū)段釋放和修改與虛擬盤擴展相關(guān)聯(lián)的狀態(tài)信息以表明虛擬盤擴展在虛擬盤文件中不具有相關(guān)聯(lián)空間。例如、以及轉(zhuǎn)到圖9,虛擬盤解析器404可以去除將虛擬盤擴展聯(lián)結(jié)到虛擬盤文件702的區(qū)段的分配表416中的鏈接。此操作具有使虛擬盤擴展從虛擬盤文件702分離的效果。除了去除鏈接之外,虛擬盤解析器404可以修改與虛擬盤擴展相關(guān)聯(lián)的狀態(tài)信息以表明擴展在虛擬盤文件702內(nèi)不具有關(guān)聯(lián)空間,S卩,虛擬盤解析器404可以把虛擬盤擴展置于未映射、未初始化、或者為零狀態(tài)中。虛擬盤解析器404可以響應于用以修剪或使虛擬盤擴展的區(qū)段為零的請求的接收而去除鏈接和更新狀態(tài)信息。例如,可以接收識別可以涵蓋一個或更多個虛擬盤擴展的字節(jié)偏移量范圍的、用以修剪或使扇區(qū)為零的請求。響應于這種IO任務的接收,虛擬盤解析器404可以確定所述請求涵蓋虛擬盤擴展的扇區(qū)和執(zhí)行用于去除鏈接和更新狀態(tài)信息的前述操作。在具體實例中,假設IO任務表明修剪是自由空間修剪。例如,用戶可能已刪除了作為虛擬盤擴展3 — 5上的位模式存儲的文件802,文件系統(tǒng)414可以表明文件系統(tǒng)414不再使用該空間。響應于自由空間修剪命令的接收,虛擬盤解析器404可以訪問分配表416和確定文件系統(tǒng)414已經(jīng)修剪了擴展3、5的一部分和擴展4的全部。在此實例中,虛擬盤解析器404可以去除把虛擬盤擴展4映射到虛擬盤文件702的鏈接以及修改與虛擬盤擴展4相關(guān)聯(lián)的狀態(tài)信息以表明虛擬盤擴展未初始化?,F(xiàn)在可以重新使用虛擬盤文件702的此區(qū)段以支持其它虛擬盤擴展。另外,虛擬盤解析器404可以確定虛擬盤擴展3和5是部分修剪命令的主體。在此實例中,虛擬盤解析器404可以使用分配表416以發(fā)現(xiàn)描述虛擬盤文件702的部分(所述部分描述虛擬盤擴展3和5的修剪部分)的虛擬盤文件字節(jié)偏移量、并向虛擬化系統(tǒng)文件系統(tǒng)408、存儲服務器文件系統(tǒng)504、或者計算機系統(tǒng)文件514發(fā)出描述虛擬盤文件字節(jié)偏移量的修剪命令。在另一具體實例中,假設文件系統(tǒng)414發(fā)出的IO任務表明使文件802為零。例如,文件802可以是存儲敏感信息的數(shù)據(jù)庫文件,所述敏感信息諸如信用卡號和管理員,該管理員被確定通過對文件內(nèi)容寫入全零來對其清零(zero out),這是通過將會在文件802中已有的數(shù)據(jù)上寫入零的全零緩存器發(fā)出寫入命令來實現(xiàn)。響應于這種IO任務的接收,虛擬盤解析器404可以被配置成確定使虛擬盤擴展4為零以及可以收回此擴展。在此實例中,虛擬盤解析器404可以去除把虛擬盤擴展4映射到虛擬盤文件702的鏈接以及修改與虛擬盤擴展4相關(guān)聯(lián)的狀態(tài)信息以表明使虛擬盤擴展為零?,F(xiàn)在可以重新使用虛擬盤文件702的此區(qū)段以支持其它虛擬盤擴展,虛擬盤解析器404可以通過以全零應答來響應對虛擬盤擴展4的后續(xù)讀取操作。在另一具體實例中,用戶可以寫入批量零以初始化文件802的狀態(tài),而非覆蓋其中存儲的數(shù)據(jù)。在此實例中,可以使用諸如虛擬盤解析器404上報作為零讀取的修剪區(qū)段的情況下的諸如修剪命令、虛擬盤解析器404上報未映射區(qū)域是零時的未映射命令、同零寫入(WRITE SAME of zero)命令、和/或零令牌卸載寫入命令把擴展轉(zhuǎn)變成為零狀態(tài)。在具體實例中,假設IO任務表明修剪是標準修剪。例如,用戶可能已刪除了作為虛擬盤擴展3 — 5上的位模式存儲的文件802 ;然而,修剪命令無法表明文件系統(tǒng)414是否正使用空間。響應于標準修剪命令的接收,虛擬盤解析器404可以訪問分配表416并確定 文件系統(tǒng)414已修剪了擴展3、5的一部分和擴展4的全部。在此實例中,虛擬盤解析器404可以去除把虛擬盤擴展4映射到虛擬盤文件702的鏈接,并修改與虛擬盤擴展4相關(guān)聯(lián)的狀態(tài)信息以表明虛擬盤擴展未映射或是零。現(xiàn)在可以重新使用虛擬盤文件702的此區(qū)段以描述其它虛擬盤擴展。另外,虛擬盤解析器404可以確定虛擬盤擴展3和5是部分修剪命令的主體。在此實例中,虛擬盤解析器404可以使用分配表416發(fā)現(xiàn)虛擬盤文件字節(jié)偏移量(其構(gòu)成描述虛擬盤擴展3和5的修剪部分的虛擬盤文件702的部分)并向虛擬化系統(tǒng)文件系統(tǒng)408發(fā)出指定虛擬盤文件字節(jié)偏移量(通常以范圍的形式)的修剪命令?,F(xiàn)在參照圖13,其示例了除圖12的操作1214之外可以執(zhí)行的額外操作。操作1316示例了計算機系統(tǒng)可以包括用于接收向虛擬盤擴展寫入數(shù)據(jù)的請求的電路;用于基于與虛擬盤擴展相關(guān)聯(lián)的狀態(tài)信息使虛擬盤文件的未使用區(qū)段為零的電路,該狀態(tài)信息表明使虛擬盤擴展為零;以及用于分配虛擬盤文件的未使用區(qū)段以描述虛擬盤擴展的電路。參照圖9的上下文,虛擬盤解析器404可以接收將數(shù)據(jù)寫入虛擬盤擴展(例如,圖9的虛擬盤擴展4,其在此實例中與表明使虛擬盤擴展為零的狀態(tài)信息相關(guān)聯(lián))的請求。例如,當釋放虛擬盤擴展4時虛擬盤解析器404可能已確定了使虛擬盤擴展為零,即,某應用通過使用公知零令牌的卸載寫入向文件602寫入全零。響應于確定虛擬盤擴展處于為零狀態(tài),虛擬盤解析器404可以識別虛擬盤文件702的未使用區(qū)段(S卩,未主動被使用以描述虛擬盤擴展和未主動被使用以存儲任何分配的元數(shù)據(jù)的區(qū)段),以及使用該區(qū)段來支持虛擬盤擴展。虛擬盤解析器進一步保證作為全零讀取的、來自新分配的擴展的尚未寫入扇區(qū)的任何讀取。虛擬盤解析器404可以向該區(qū)段寫A IO寫入任務的載荷;更新狀態(tài)信息以表明虛擬盤擴展被映射;以及更新分配表416中的信息以描述虛擬盤文件字節(jié)偏移量,其識別用來存儲虛擬盤擴展4的區(qū)段的開始。虛擬盤解析器404還可以創(chuàng)建日志條目,其保證在刷新寫入以前系統(tǒng)故障和重啟的情況中,新分配擴展的尚未寫入扇區(qū)仍作為全零讀取、以及新分配擴展的寫入扇區(qū)作為全零或者寫入數(shù)據(jù)讀取。在第一個后續(xù)刷新命令后,虛擬盤解析器404保證繼刷新完成后的系統(tǒng)故障將會造成從讀取寫入了的數(shù)據(jù)的新分配擴展的先前寫入扇區(qū)讀取、以及從讀取零的新分配擴展的尚未寫入扇區(qū)讀取。繼續(xù)圖13的描述,操作1318示出了計算機系統(tǒng)可以包括用于接收向虛擬盤擴展寫入的請求的電路;以及用于基于與虛擬盤擴展相關(guān)聯(lián)的狀態(tài)信息在不修改虛擬盤文件未使用區(qū)段的內(nèi)容的情況下分配虛擬盤文件的未使用區(qū)段以描述虛擬盤擴展的電路,所述狀態(tài)信息表明文件系統(tǒng)正確保對虛擬盤擴展的訪問。再次參照圖9的上下文,虛擬盤解析器404可以接收用以向虛擬盤擴展(例如,圖9的虛擬盤擴展4,其在此實例中與表明文件系統(tǒng) 414正提供虛擬盤擴展的安全性的狀態(tài)信息相關(guān)聯(lián))寫入數(shù)據(jù)的IO任務。響應于檢測此狀態(tài)信息,虛擬盤解析器404可以識別虛擬盤文件702的未使用區(qū)段;把IO任務的載荷寫入該區(qū)段;更新狀態(tài)信息以表明虛擬盤擴展被映射;以及更新分配表416中的信息以描述虛擬盤文件字節(jié)偏移量,該偏移量識別用來存儲虛擬盤擴展4的區(qū)段的開始。假設在此實例中所述擴展是塊且IO任務的載荷只涵蓋虛擬盤塊中扇區(qū)的一部分。具體地,虛擬盤塊可以是512千字節(jié),所述寫入可以涵蓋虛擬盤塊的前500個扇區(qū)。在此實例中,虛擬盤解析器404可以在不擦除剩余524個扇區(qū)中存儲的數(shù)據(jù)的情況下在虛擬盤文件702分配區(qū)段的前500個扇區(qū)中寫入數(shù)據(jù)。因而,如果檢查了此區(qū)段則將會得到前500個扇區(qū)包括載荷而剩余524個扇區(qū)包括先前向虛擬盤文件702的區(qū)段寫入了無論什么位模式。在此實例中,虛擬盤解析器404可以使用此區(qū)段而不清除它,因為文件系統(tǒng)414被配置成拒絕對在文件系統(tǒng)自由空間中的扇區(qū)的讀取操作。由于將會防止應用讀取虛擬盤塊的剩余524個區(qū)段,所以它可以包含先前在虛擬盤中存儲的任何數(shù)據(jù)?,F(xiàn)在轉(zhuǎn)到圖13的操作1320,它示出了計算機系統(tǒng)可以被配置成包括用于接收向虛擬盤擴展寫入的請求的電路;用于基于與虛擬盤擴展相關(guān)聯(lián)的狀態(tài)信息通過非信息公開位模式在邏輯上覆蓋虛擬盤文件的未使用區(qū)段的電路,所述狀態(tài)信息表明文件系統(tǒng)未正確保對虛擬盤擴展的訪問;以及用于分配虛擬盤文件的覆蓋區(qū)段以描述虛擬盤擴展的電路。再次參照圖9的上下文,虛擬盤解析器404可以接收向虛擬盤擴展寫入數(shù)據(jù)的請求,該虛擬盤擴展在此實例中與表明文件系統(tǒng)414未正確保對虛擬盤擴展訪問的狀態(tài)信息相關(guān)聯(lián)。例如,虛擬盤解析器404可響應于標準修剪命令的接收已釋放虛擬盤擴展,以及可以在分配表416中存儲了表明未映射(即,未被虛擬盤文件702中的空間支持)虛擬盤擴展的狀態(tài)信肩、O響應于確定虛擬盤擴展未映射,虛擬盤解析器404可以識別要使用的虛擬盤文件702的未使用區(qū)段以描述虛擬擴展和向該區(qū)段在邏輯上寫入非信息公開位模式以保證對虛擬盤擴展的讀取不無意中泄漏任何信息。在優(yōu)選實施方式中,非信息公開位模式可以是全零或先前存儲的數(shù)據(jù)。在使區(qū)段為零或向該區(qū)段在邏輯上寫入一些其它非信息公開位模式(諸如先前存儲數(shù)據(jù))之后,虛擬盤解析器404可以把IO任務的載荷在邏輯上寫入到區(qū)段;更新狀態(tài)信息以表明虛擬盤擴展被映射;以及更新分配表416中的信息以描述虛擬盤文件字節(jié)偏移量,該偏移量識別用來存儲虛擬盤擴展的區(qū)段的開始。繼續(xù)圖13的描述,操作1322示出了計算機系統(tǒng)可以包括被配置成基于表明使虛擬盤擴展為零的狀態(tài)信息響應于與虛擬盤擴展相關(guān)聯(lián)的卸載讀取請求的接收向請求方發(fā)送表示零的令牌的電路。例如、以及參照圖4,卸載提供器引擎422 (例如,被配置成服務于卸載讀取和卸載寫入命令的電路)可以響應于請求方發(fā)出的卸載讀取請求向請求方(例如,應用424)發(fā)送表示零的令牌??梢允褂眯遁d讀取請求通過生成和向請求方發(fā)送令牌從一個地點向另一個高效復制數(shù)據(jù),令牌表示請求數(shù)據(jù)而非把數(shù)據(jù)復制到請求方的存儲器中并隨后把數(shù)據(jù)發(fā)送給目的地。卸載讀取和卸載寫入命令可以用來當目的地點辨識源地點生成的令牌時取得副本卸載以及可以把令牌表示的數(shù)據(jù)在邏輯上寫入到目的地。在源生成的公知零令牌的情形中,目的地不需要訪問底層存儲,例如,存儲裝置106,其在此具體實施中可以是SAN目標。在此實例中,卸載讀取請求可以是對具有一個或更多個虛擬盤擴展中存儲 的數(shù)據(jù)的一個或更多個文件執(zhí)行卸載讀取操作,其中之一與表明使虛擬盤擴展為零的狀態(tài)信息相關(guān)聯(lián)。在此實例中,可以通過生成公知零令牌值和向請求方返回該公知零令牌來服務于卸載讀取請求??梢园研遁d讀取請求發(fā)送給卸載提供器引擎422。卸載提供器引擎422可以接收請求和向虛擬盤解析器404發(fā)送針對虛擬盤擴展中存儲的數(shù)據(jù)的消息。虛擬盤解析器404可以接收請求,讀取虛擬盤擴展的狀態(tài)信息,以及在此具體實例中確定該狀態(tài)信息表明使此虛擬盤擴展為零。虛擬盤解析器404可以向卸載提供器引擎422回送表明虛擬盤擴展是全零的消息,卸載提供器引擎422可以生成表明請求數(shù)據(jù)是全零(例如,描述虛擬盤塊的扇區(qū)的范圍是全零)的公知令牌值,以及把公知零令牌發(fā)送給請求方。在具體實例中,可以向SAN轉(zhuǎn)發(fā)卸載請求而非通過計算機系統(tǒng)400、存儲業(yè)務500、或者計算機系統(tǒng)512處理。在此實例中,SAN可以生成令牌并把它返回給虛擬盤解析器404,其可以隨后把零令牌發(fā)送給請求方。在又一實例中,當卸載提供器引擎422接收到表明虛擬盤擴展是全零的消息時,卸載提供器引擎422可以生成公知零令牌,其實際上通過把數(shù)據(jù)識別成與任何其它零數(shù)據(jù)等同并共享與公知零令牌相關(guān)聯(lián)的區(qū)域、實現(xiàn)把請求的零數(shù)據(jù)在邏輯上復制到與令牌相關(guān)聯(lián)的單獨區(qū)域中。在卸載提供器引擎422隨后接收到指定先前向請求方發(fā)送的令牌的卸載寫入的情況下,卸載提供器引擎422可以把數(shù)據(jù)從與令牌相關(guān)聯(lián)的區(qū)域在邏輯上復制到請求方指定的偏移量處?,F(xiàn)在轉(zhuǎn)到圖14,它示例了用于收回虛擬盤文件空間的操作流程,包括操作1400、1402、1404、以及1406。如圖所示,操作1400開始操作流程,操作1402示出了計算機系統(tǒng)可以包括用于接收表明不再使用虛擬盤擴展的一部分的信號的電路,虛擬盤擴展是虛擬盤(402)的一部分,虛擬盤(402)存儲在虛擬盤文件中。例如、以及轉(zhuǎn)到圖4,虛擬盤解析器404可以被配置成實例化虛擬盤402。文件系統(tǒng)414可以向虛擬盤解析器404發(fā)送表明它不再正使用虛擬盤402的一部分(即,虛擬盤擴展扇區(qū)的范圍)的信號。在具體實例中,信號可以是修剪命令。在具體實例中,虛擬盤解析器404接收的信號可以識別定義不再正使用的扇區(qū)的范圍(其可以是虛擬盤擴展的第一個部分)的字節(jié)偏移值。
繼續(xù)圖14的描述,操作1404示出了計算機系統(tǒng)還可以包括被配置成識別描述虛擬盤擴展部分的虛擬盤文件(406,600,602,604,606,608,610,612, 702,1002)的一部分的電路。返回參照圖7,虛擬盤解析器404可以接收信號和識別例如虛擬盤擴展0的第一部分的虛擬盤字節(jié)偏移值。響應于信號的接收,虛擬盤解析器404可以檢查分配表416以確定與信號相關(guān)聯(lián)的虛擬盤字節(jié)偏移值對應的虛擬盤文件702的部分?,F(xiàn)在轉(zhuǎn)到圖14的操作1406,它示出了計算機系統(tǒng)可以包括用于向被配置成把虛擬盤文件(406,600,602,604,606,608,610,612,702,1002)存儲在存儲裝置中的文件系統(tǒng)發(fā)送用以修剪虛擬盤文件(406,600,602,604,606,608,610,612, 702,1002)識別部分的請求的電路。例如、以及再次參照圖7,虛擬盤解析器404可以確定把信號識別為小于整個虛擬盤擴展。例如,信號可以表明扇區(qū)的范圍不包括虛擬盤擴展的所有扇區(qū)。響應于此確定,虛擬盤解析器404可以向主管虛擬盤文件702的文件系統(tǒng)(例如,虛擬化系統(tǒng)文件系統(tǒng)408)發(fā)出用以修剪虛擬盤擴展的修剪部分對應的虛擬盤文件702的部分的請求。虛擬化系統(tǒng)文件系統(tǒng)408可以被配置成通過修剪虛擬盤文件406、刷新來自高速緩沖存儲器的數(shù)據(jù)、清除內(nèi)部緩存器、把修剪發(fā)送給存儲文件系統(tǒng)數(shù)據(jù)的盤等使用修剪命令和從它獲益。 在具體實例中,虛擬盤解析器404可以被配置成響應于確定用以修剪虛擬盤文件一部分的請求未涵蓋整個擴展、向底層文件系統(tǒng)發(fā)出修剪命令。例如,假設信號識別出不再使用虛擬盤擴展的前600個扇區(qū)且虛擬盤解析器404可以確定虛擬盤擴展的前600個扇區(qū)小于構(gòu)建虛擬盤擴展的1024個扇區(qū)。響應于此確定,虛擬盤解析器404可以訪問分配表416,以及確定描述了描述虛擬盤擴展的虛擬盤文件702區(qū)段前600個扇區(qū)的虛擬盤文件字節(jié)偏移量、和向主管虛擬盤文件702的文件系統(tǒng)發(fā)送用以修剪虛擬盤文件702此部分的請求?,F(xiàn)在轉(zhuǎn)到圖15,它示例了可以結(jié)合圖14描繪的那些來執(zhí)行的額外操作。現(xiàn)在轉(zhuǎn)到操作1508,它示出了計算機系統(tǒng)可以額外包括用于基于表明使虛擬盤擴展為零的狀態(tài)信息、響應于與虛擬盤擴展相關(guān)聯(lián)的卸載讀取請求的接收、向請求方發(fā)送(1508)表示零的令牌的電路。例如、以及參照圖4,卸載提供器引擎422 (例如,被配置成服務于卸載讀取和卸載寫入命令的電路)可以響應于請求方發(fā)出的卸載讀取請求向請求方(例如,應用424)發(fā)送表示零的令牌??梢允褂眯遁d讀取請求通過生成和向請求方發(fā)送令牌從一個地點向另一個高效復制數(shù)據(jù),令牌表示請求數(shù)據(jù)而非把數(shù)據(jù)復制到請求方的存儲器中、隨后把數(shù)據(jù)發(fā)送給目的地。卸載讀取和卸載寫入命令可以用來在目的地點辨識源地點生成的令牌時實現(xiàn)副本卸載,以及可以把令牌表示的數(shù)據(jù)在邏輯上寫入到目的地。在源生成的公知零令牌的情形中,目的地不需要訪問底層存儲,例如,存儲裝置106,其在此具體實施方式
中可以是SAN目標。在此實例中,卸載讀取請求可以是對具有一個或更多個虛擬盤擴展中存儲的數(shù)據(jù)的一個或更多個文件執(zhí)行卸載讀取操作,其中之一與表明使虛擬盤擴展為零的狀態(tài)信息相關(guān)聯(lián)。在此實例中,可以通過生成公知零令牌值和向請求方返回該公知零令牌來服務于卸載讀取請求。繼續(xù)圖15的描述,操作1510示出了計算機系統(tǒng)可以包括用于從虛擬盤文件的組中選擇(1510)子組的電路;以及用于生成(1510)識別包括數(shù)據(jù)的子組的扇區(qū)和透明子組的扇區(qū)的信息的電路。在示范性實施例中,可以從多個虛擬盤文件實例化虛擬盤402?;蛘邠Q言之,可以從M個虛擬盤文件形成虛擬盤402(其中,M是大于I的整數(shù))。在此示范性實施例中,虛擬盤解析器404可以被配置成從例如管理員接收請求以確定在給定字節(jié)偏移量處開始的、虛擬盤402上接下來的字節(jié)偏移量,其與虛擬盤文件的子組內(nèi)定義的扇區(qū)相關(guān)聯(lián)。例如、以及參照圖10,虛擬盤解析器404可以接收在虛擬盤擴展2的第一個扇區(qū)對應的虛擬盤偏移量處開始的接下來定義的字節(jié)偏移量的請求和表明子組包括虛擬盤文件1002和虛擬盤文件1004的信息。在此實例中,虛擬盤解析器404可以開始掃描(scan through)子組并確定接下來定義的字節(jié)偏移量是虛擬盤擴展3的開始對應的扇區(qū)。由于在此實例中,虛擬盤擴展2中的數(shù)據(jù)被虛擬盤文件1006的區(qū)段支持,所以它在查找之外且未如定義的一樣返回。繼續(xù)圖15的描述,操作1512示出了計算機系統(tǒng)可以包括被配置成響應于確定使虛擬盤擴展為零、使虛擬盤擴展從虛擬盤文件(406,600,602,604,606,608,610,612,702,1002)分離并修改與虛擬盤擴展相關(guān)聯(lián)的狀態(tài)信息以表明使虛擬盤擴展已為零的電路。例 如、以及轉(zhuǎn)到圖7,在實施例中虛擬盤解析器404可以確定使虛擬盤擴展已為零。例如,虛擬盤解析器404可以接收用以向虛擬盤擴展(例如,虛擬盤擴展7)寫入公知零令牌表示的數(shù)據(jù)的請求。虛擬盤解析器404可以根據(jù)與請求相關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu)確定請求用于整個虛擬盤擴展,即,字節(jié)偏移值可以在擴展7的第一個扇區(qū)處開始和在擴展7的最后扇區(qū)處結(jié)束。響應于這種確定、以及并非把零寫入到虛擬盤文件702的對應區(qū)段,虛擬盤解析器404可以被配置成去除把虛擬盤擴展7映射到用來描述虛擬盤擴展7的虛擬盤文件702的區(qū)段的鏈接、以及使虛擬盤擴展與表明虛擬盤擴展是全零的信息相關(guān)聯(lián)。例如,虛擬盤解析器404可以在分配表416中寫入表明虛擬盤擴展包括全零的八個字節(jié)的信息。此操作的最終結(jié)果是即使虛擬盤文件中不存在正逐位地描述擴展的部分,也可以重新使用虛擬盤文件702的區(qū)段來存儲其它虛擬盤擴展的數(shù)據(jù),并且將會仿佛虛擬盤擴展包括全零一樣來讀取虛擬盤擴展。繼續(xù)圖15的描述,操作1514示出了計算機系統(tǒng)可以額外包括如下電路該電路被配置成響應于文件系統(tǒng)認為虛擬盤擴展為自由空間的確定、使虛擬盤擴展從虛擬盤文件分離并修改與虛擬盤擴展相關(guān)聯(lián)的狀態(tài)信息以表明虛擬盤擴展是自由空間。例如、以及再次轉(zhuǎn)到圖7,虛擬盤解析器404可以確定文件系統(tǒng)414已使虛擬盤擴展與表明它是自由空間(即,文件系統(tǒng)414未使用的空間)的信息相關(guān)聯(lián)。例如,虛擬盤解析器404可以接收來自文件系統(tǒng)414的、表明扇區(qū)的范圍涵蓋虛擬盤擴展(例如虛擬盤擴展3)的信號、以及表明認為扇區(qū)是自由空間的信息。響應于這種信號的接收,虛擬盤解析器404可以被配置成去除把虛擬盤擴展鏈接到虛擬盤文件702的區(qū)段的信息。此操作的結(jié)果是可以重新使用虛擬盤文件702的區(qū)段以存儲其它虛擬盤擴展的數(shù)據(jù)。虛擬盤解析器404可以額外使虛擬盤擴展與表明虛擬盤擴展包括任意數(shù)據(jù)(即,虛擬盤的任何部分中先前存儲的數(shù)據(jù)、全零、或者全一)的信息相關(guān)聯(lián)。結(jié)果是,可以通過返回虛擬盤中先前存儲的任意數(shù)據(jù)來操控針對此虛擬盤擴展的讀取操作。另外,在虛擬盤解析器404被配置成允許任意數(shù)據(jù)在每次接收到讀取操作時改變的情況下,任意數(shù)據(jù)可以可選地在每次接收到讀取操作時改變。繼續(xù)圖15的描述,操作1516示出了計算機系統(tǒng)可以額外包括如下電路該電路被配置成響應于虛擬盤擴展被修剪的確定、使擴展從虛擬盤文件分離并修改與虛擬盤擴展相關(guān)聯(lián)的狀態(tài)信息以表明虛擬盤擴展包括非信息公開位模式。例如、以及再次轉(zhuǎn)到圖7,虛擬盤解析器404可以確定文件系統(tǒng)414已修剪了構(gòu)成虛擬盤擴展的扇區(qū)的范圍。響應于這種確定,虛擬盤解析器404可以去除把虛擬盤擴展鏈接到虛擬盤文件702的區(qū)段的分配表416中的信息。此操作的結(jié)果是可以重新使用虛擬盤文件702的區(qū)段以存儲其它虛擬盤擴展的數(shù)據(jù)。虛擬盤解析器404可以額外使虛擬盤擴展與表明虛擬盤擴展包括非信息公開位模式(例如,全零、一、或者隨機生成的位模式)的信息相關(guān)聯(lián)。結(jié)果是,可以通過返回非信息公開位模式來操控針對此虛擬盤擴展的讀取操作。在具體優(yōu)選實施方式中,非信息公開位模式可以是全零。然而,這與上述零狀態(tài)不同,原因在于可以使用零狀態(tài)來表示有含義的零(即,有意使虛擬盤擴展為零的情況)。參考操作1518,它示出了計算機系統(tǒng)可以額外包括被配置成向控制虛擬盤的文件系統(tǒng)(414)發(fā)送(1518)用以發(fā)出修剪命令的請求的電路。返回參照圖7,虛擬盤解析器404可以被配置成發(fā)出文件系統(tǒng)414發(fā)出一個或更多個修剪命令的請求。在示范性配置中,虛擬盤解析器404可以被配置成周期性地發(fā)送這種請求或基于預定準則發(fā)送這種請求,例如,當VM 410開始時或在要關(guān)斷VM之前不久。響應于這種請求,文件系統(tǒng)414可以向虛擬盤解析器404發(fā)出識別虛擬盤402的未使用扇區(qū)的一個或更多個修剪命令。虛擬盤解析器404可以隨后接收來自修剪命令的修剪信息,如,文件系統(tǒng)414不再使用的扇區(qū)范圍和可選地表明是否認為修剪扇區(qū)為自由空間的信息。虛擬盤解析器404可以接收信息和使用它來 更新分配表416中存儲的狀態(tài)信息以及可能收回虛擬盤文件702的未使用區(qū)段。現(xiàn)在轉(zhuǎn)到圖16,它示例了用于存儲虛擬機數(shù)據(jù)的操作流程。操作流程通過操作1600開始并轉(zhuǎn)變?yōu)槊枋鋈缦虑闆r的操作1602 :該情況下,計算機系統(tǒng)可以包括用于執(zhí)行(1602)包括虛擬機內(nèi)文件系統(tǒng)的訪客操作系統(tǒng)(220,222,412,518)的電路。例如、以及參照圖4,虛擬化系統(tǒng)420 (其可以是圖3的管理程序302或主機環(huán)境204執(zhí)行的功能和圖2的微核管理程序202的組合)可以實例化虛擬機410并在其內(nèi)運行訪客操作系統(tǒng)(如,訪客操作系統(tǒng)412)。在此實例中,訪客操作系統(tǒng)412可以包括文件系統(tǒng)414,其可以是組織和控制用于訪客操作系統(tǒng)412的數(shù)據(jù)的可執(zhí)行指令。繼續(xù)圖16的描述,操作1604示出了計算機系統(tǒng)可以包括用于向訪客操作系統(tǒng)(220,222,412,508)暴露(1604)虛擬存儲裝置(402)的電路,虛擬存儲裝置(402)包括虛擬盤擴展,使虛擬盤擴展從虛擬盤文件分離。轉(zhuǎn)回到圖4,虛擬化系統(tǒng)420可以把虛擬盤402暴露給訪客操作系統(tǒng)412。例如,虛擬盤解析器404可以與存儲虛擬化業(yè)務提供器通信,該提供器可操作用于與在訪客操作系統(tǒng)410內(nèi)運行的存儲虛擬化業(yè)務客戶端通信。在具體實例中,存儲虛擬化業(yè)務客戶端可以是訪客操作系統(tǒng)412內(nèi)安裝的驅(qū)動器,其向訪客告知它可以與存儲裝置通信。在此實例中,文件系統(tǒng)414發(fā)送的IO任務經(jīng)由通信通道(例如,存儲器的區(qū)域和跨分區(qū)通知設施)首先被發(fā)送給存儲虛擬化業(yè)務客戶端、隨后向存儲虛擬化業(yè)務提供器發(fā)送。被虛擬盤解析器404打開和用來存儲虛擬盤402的數(shù)據(jù)的一個或更多個虛擬盤文件406可以構(gòu)成虛擬盤402。在具體實例中,可以通過圖7的虛擬盤文件702至少部分地描述虛擬盤402。在另一具體實例中、以及轉(zhuǎn)到圖10,可以通過一組虛擬盤文件(1002 -1006)描述虛擬盤402。在任一情形中、以及回到圖4,虛擬盤402可以包括多個虛擬盤擴展,可以使虛擬盤擴展中的一個分離,即,不通過它的相關(guān)聯(lián)的虛擬盤文件內(nèi)的任何空間逐位地描述。繼續(xù)圖16的描述,操作1606示出了計算機系統(tǒng)可以包括用于接收(1606)用以向虛擬盤擴展寫入數(shù)據(jù)的請求的電路。轉(zhuǎn)回到圖7,虛擬盤解析器404可以接收用以向在虛擬盤文件702中不具有相關(guān)聯(lián)空間的虛擬盤擴展寫入數(shù)據(jù)的請求。例如,可以接收指定表明在虛擬盤擴展內(nèi)的虛擬盤扇區(qū)地址的偏移值的IO任務。轉(zhuǎn)回到圖16,操作1608示出了計算機系統(tǒng)可以可選地包括用于確定(1608)與虛擬盤擴展相關(guān)聯(lián)的狀態(tài)信息表明虛擬盤擴展是自由空間的電路。響應于IO任務的接收,虛擬盤解析器404可以訪問分配表416以及讀取與虛擬盤擴展相關(guān)聯(lián)的狀態(tài)信息。在此實例中,虛擬盤擴展可以與表明虛擬盤擴展是自由空間(即,文件系統(tǒng)414未正使用虛擬盤擴展,以及可以通過任意數(shù)據(jù)應答對虛擬盤擴展的讀取操作)的信息相關(guān)聯(lián)。參照圖16,操作1610示出了計算機系統(tǒng)可以可選地包括用于在不覆蓋虛擬盤文件的區(qū)段內(nèi)的預先存在的位模式的情況下、分配(1610)虛擬盤文件(406,600,602,604,
606,608,610,612,702,1002)的區(qū)段以描述虛擬盤擴展的電路。例如、以及回到圖7,響應于寫入IO任務的接收,虛擬盤解析器404可以定位未正被使用的虛擬盤文件702中的區(qū)段以及將其分配以存儲虛擬擴展的數(shù)據(jù)。例如,虛擬盤解析器404可以在分配表416中寫入把虛擬盤擴展鏈接到虛擬盤文件702的分配區(qū)段的字節(jié)偏移值的信息。 在此實例中,由于狀態(tài)信息表明文件系統(tǒng)414已把虛擬盤擴展5識別為自由空間,所以虛擬盤解析器404不會在使用區(qū)段來描述虛擬盤擴展以前、(通過寫入全零、一、或者任何其它非信息公開位模式)覆蓋虛擬盤文件702的區(qū)段中存儲的、區(qū)段內(nèi)已有的任何位模式(例如,來自一些刪除文件的數(shù)據(jù)和/或任意數(shù)據(jù))。這提供節(jié)省處理器周期和IO任務的附加益處,其否則將會用來覆蓋虛擬盤擴展的區(qū)段。參考圖16的操作1612,它示出了計算機系統(tǒng)可以可選地包括用于修改(1612)與虛擬盤擴展相關(guān)聯(lián)的狀態(tài)信息以表明把虛擬盤擴展映射到虛擬盤文件的分配區(qū)段的電路。例如、以及轉(zhuǎn)回到圖7,虛擬盤解析器404可以修改(例如,在存儲器中覆蓋)與虛擬盤擴展相關(guān)聯(lián)的狀態(tài)信息以表明它是映射的。結(jié)果是,針對虛擬盤擴展扇區(qū)的后續(xù)讀取操作將會由虛擬盤解析器404通過返回分配區(qū)段的相應部分中存儲的位模式來操控。現(xiàn)在轉(zhuǎn)到圖16的操作1614,它示出了把數(shù)據(jù)存儲(1614)到虛擬盤文件的分配區(qū)段。轉(zhuǎn)回到圖6,虛擬盤解析器404可以把數(shù)據(jù)(S卩,位模式)寫入到虛擬盤文件702中??梢韵蛱摂M化系統(tǒng)文件系統(tǒng)408發(fā)出表明向虛擬盤文件702寫入的IO任務,最終該改變可以通過永久存儲單元460來維持?,F(xiàn)在轉(zhuǎn)到圖17,它示出了可以結(jié)合圖16示例的那些來執(zhí)行的額外操作。轉(zhuǎn)而關(guān)注操作1716,它示出了計算機系統(tǒng)可以可選地包括用于響應于確定使虛擬盤擴展為零、使虛擬盤擴展從虛擬盤文件分離并修改與虛擬盤擴展相關(guān)聯(lián)的狀態(tài)信息以表明使虛擬盤擴展已為零的電路。例如、以及轉(zhuǎn)到圖6,在實施例中虛擬盤解析器404可以確定使虛擬盤擴展已為零。例如,虛擬盤解析器404可以接收用以向虛擬盤擴展(例如,虛擬盤擴展7)寫入由公知零令牌表示的數(shù)據(jù)的卸載寫入請求。虛擬盤解析器404可以根據(jù)與請求相關(guān)聯(lián)的數(shù)據(jù)結(jié)構(gòu)來確定該請求用于整個虛擬盤擴展,即,字節(jié)偏移值可以在虛擬盤擴展7的第一個扇區(qū)處開始和在虛擬盤擴展7的最后扇區(qū)處結(jié)束。響應于這種確定、以及并非把零寫入到虛擬盤文件702的相應區(qū)段,虛擬盤解析器404可以被配置成去除從虛擬盤擴展至分配表416中存儲的虛擬盤文件702的區(qū)段的鏈接、以及使虛擬盤擴展與表明虛擬盤擴展是全零的信息相關(guān)聯(lián)。繼續(xù)圖17的描述,操作1718示出了計算機系統(tǒng)可以可選地包括用于響應于來自文件系統(tǒng)(414)的、把虛擬盤擴展識別成自由空間的信號的接收、使虛擬盤擴展從虛擬盤文件(406,600,602,604,606,608,610,612, 702,1002)分離(1718)并修改與虛擬盤擴展相關(guān)聯(lián)的狀態(tài)信息以表明虛擬盤擴展包括任意數(shù)據(jù)的電路。例如、以及再次轉(zhuǎn)到圖7,虛擬盤解析器404可以確定文件系統(tǒng)414已使虛擬盤擴展與表明它是自由空間(即,文件系統(tǒng)414未使用的空間)的信息相關(guān)聯(lián)。例如,虛擬盤解析器404可以接收來自文件系統(tǒng)414的、表明涵蓋虛擬盤擴展(例如,虛擬盤擴展3)的扇區(qū)范圍的信號、以及表明扇區(qū)是自由空間的信息。響應于這種確定,虛擬盤解析器404可以被配置成去除分配表416中把虛擬盤擴展鏈接到虛擬盤文件702的區(qū)段的信息、以及使虛擬盤擴展與表明可以響應于讀取IO任務的接收返回該任意數(shù)據(jù)(即,虛擬盤的任何部分中先前存儲的數(shù)據(jù)、全零、或者全一)的信息相關(guān)聯(lián)。圖17的操作1720示出了計算機系統(tǒng)400可以可選地包括如下電路該電路用于響應于用以修剪虛擬盤擴展所有扇區(qū)的請求的接收、使虛擬盤擴展從虛擬盤文件(406,600,602,604,606,608,610,612,702,1002)分離(1720)并修改與虛擬盤擴展相關(guān)聯(lián)的狀態(tài)信息以表明虛擬盤擴展包括非信息公開位模式。例如、以及再次轉(zhuǎn)到圖7,虛擬盤解析器 404可以確定構(gòu)成虛擬盤擴展的扇區(qū)已被修剪。例如,虛擬盤解析器404可以接收來自文件系統(tǒng)414的、表明涵蓋虛擬盤擴展的扇區(qū)范圍的修剪命令。響應于這種信號的接收,虛擬盤解析器404可以被配置成去除分配表416中把虛擬盤擴展鏈接到虛擬盤文件702的區(qū)段的信息、以及使虛擬盤擴展與表明虛擬盤擴展包括非信息公開位模式的信息相關(guān)聯(lián)。以上具體實施方式
經(jīng)由實例和/或操作圖敘述了系統(tǒng)和/或過程的各種實施例。在這種方框圖、和/或?qū)嵗粋€或更多個功能和/或操作的范圍內(nèi),本領(lǐng)域技術(shù)人員將會理解,可以通過廣泛范圍的硬件、軟件、固件、或者實質(zhì)上其任何組合來單獨地和/或統(tǒng)一實施這種方框圖、或者實例內(nèi)的每個功能和/或操作。雖然已經(jīng)示出和描述了本文中描述的本主題的特定方面,但對本領(lǐng)域技術(shù)人員而言將會明顯的是,基于本文中的教導,可以在不脫離本文中描述的主題和它的較寬泛方面的情況下做出改變和修改,因此,所附權(quán)利要求要在它們的范圍內(nèi)如在本文中描述的主題的真實精神和范圍內(nèi)一樣涵蓋所有這種改變和修改。
權(quán)利要求
1.一種計算機實施方法,包括 實例化(1102)包括虛擬盤擴展的虛擬盤(402),使虛擬盤擴展從虛擬盤文件(406、600、602、604、606、608、610、612、702)分離; 基于與虛擬盤(402)相關(guān)聯(lián)的狀態(tài)信息,在不覆蓋虛擬盤文件(406、600、602、604、606、608、610、612、702、1002)的區(qū)段內(nèi)預先存在的位模式的情況下分配(1104)虛擬盤文件(406、600、602、604、606、608、610、612、702、1002)的區(qū)段以描述虛擬盤擴展;以及 修改(1106)與虛擬盤擴展相關(guān)聯(lián)的狀態(tài)信息以表明通過虛擬盤文件(406、600、602、604、606、608、610、612、702、1002)描述虛擬盤擴展。
2.如權(quán)利要求I所述的方法,進一步包括 向控制虛擬盤文件(406、600、602、604、606、608、610、612、702、1002)的文件系統(tǒng)(414)發(fā)送(1210)請求以發(fā)出從包括修剪命令、未映射命令、寫入同零命令、以及零令牌卸載寫入命令的命令組中選擇的至少一個命令。
3.一種計算機系統(tǒng)(100、200、300、400、512),包括 處理器(102); 存儲器(104),在把處理器(102)與存儲器(104)上電時,該存儲器耦合到處理器(102),存儲器(104)包括在通過處理器(102)執(zhí)行后使得計算機系統(tǒng)(100、200、300、400、512)進行如下步驟的指令 接收(1402)表明不再使用虛擬盤擴展的一部分的信號,虛擬盤擴展是虛擬盤(402)的一部分,把虛擬盤(402)存儲在虛擬盤文件(406、600、602、604、606、608、610、612、702、1002)中; 識別(1404)描述虛擬盤擴展的部分的虛擬盤文件(406、600、602、604、606、608、610、612,702,1002)的一部分;以及 向被配置成把虛擬盤文件(406、600、602、604、606、608、610、612、702、1002)存儲在存儲裝置(106)上的文件系統(tǒng)(414)發(fā)送(1406)用以修剪虛擬盤文件(406、600、602、604、606、608、610、612、702、1002)的識別部分的請求。
4.如權(quán)利要求3所述的計算機系統(tǒng)(100、200、300、400、512),存儲器(104)進一步包括在執(zhí)行后使得計算機系統(tǒng)(100、200、300、400、512)執(zhí)行如下步驟的指令 基于表明使虛擬盤擴展為零的狀態(tài)信息,響應于與虛擬盤擴展相關(guān)聯(lián)的卸載讀取請求的接收向請求方發(fā)送(1508)表示零的令牌。
5.如權(quán)利要求3所述的計算機系統(tǒng),虛擬盤文件是一起形成包括虛擬盤擴展的虛擬盤的一組虛擬盤文件的成員,存儲器進一步包括在執(zhí)行后使得計算機系統(tǒng)進行如下步驟的指令 從虛擬盤文件(406、600、602、604、606、608、610、612、702、1002)的組中選擇(1510)子組;以及 生成(1510)識別包括數(shù)據(jù)的子組扇區(qū)以及透明子組的扇區(qū)的信息。
6.如權(quán)利要求3所述的計算機系統(tǒng),存儲器進一步包括在執(zhí)行后使得計算機系統(tǒng)進行如下步驟的指令 響應于確定使虛擬盤擴展為零,使虛擬盤擴展從虛擬盤文件(406、600、602、604、606、608、610、612、702、1002)分離(1512)并修改與虛擬盤擴展相關(guān)聯(lián)的狀態(tài)信息以表明使虛擬盤擴展已為零。
7.如權(quán)利要求3所述的計算機系統(tǒng),存儲器進一步包括在執(zhí)行后使得計算機系統(tǒng)進行如下步驟的指令 向控制虛擬盤(402)的文件系統(tǒng)(414)發(fā)送(1518)用以發(fā)出修剪命令的請求。
8.一種用于存儲虛擬機數(shù)據(jù)的計算機實施方法,包括 執(zhí)行包括虛擬機(410,506)內(nèi)文件系統(tǒng)(414)的訪客操作系統(tǒng)(220,222,412,508); 向訪客操作系統(tǒng)(220,222,412,508)暴露(1604)虛擬存儲裝置(402),虛擬存儲裝置(402)包括虛擬盤擴展,使虛擬盤擴展從虛擬盤文件(406、600、602、604、606、608、610、612、.702、1002)分離; 接收(1606)用以向虛擬盤擴展寫入數(shù)據(jù)的請求; 確定(1608)與虛擬盤擴展相關(guān)聯(lián)的狀態(tài)信息表明虛擬盤擴展是自由空間; 在不覆蓋虛擬盤文件(406、600、602、604、606、608、610、612、702、1002)的區(qū)段內(nèi)預先存在的位模式的情況下分配(1610)虛擬盤文件(406、600、602、604、606、608、610、612、.702、1002)的區(qū)段以描述虛擬盤擴展; 修改(1612)與虛擬盤擴展相關(guān)聯(lián)的狀態(tài)信息以表明把虛擬盤擴展映射到虛擬盤文件(406、600、602、604、606、608、610、612、702、1002)的分配區(qū)段;以及 把數(shù)據(jù)存儲(1614)到虛擬盤文件(406、600、602、604、606、608、610、612、702、1002)的分配區(qū)段。
9.如權(quán)利要求8所述的方法,進一步包括 響應于來自文件系統(tǒng)(414)的、把虛擬盤擴展識別成自由空間的信號的接收,使虛擬盤擴展從虛擬盤文件(406、600、602、604、606、608、610、612、702、1002)分離(1718)并修改與虛擬盤擴展相關(guān)聯(lián)的狀態(tài)信息以表明虛擬盤擴展包括任意數(shù)據(jù)。
10.如權(quán)利要求8所述的方法,進一步包括 響應于用以修剪虛擬盤擴展的所有扇區(qū)的請求的接收,使虛擬盤擴展從虛擬盤文件(406、600、602、604、606、608、610、612、702、1002)分離(1720)并修改與虛擬盤擴展相關(guān)聯(lián)的狀態(tài)信息以表明虛擬盤擴展包括非信息公開位模式。
11.一種計算機可讀存儲介質(zhì)(110),包括在通過處理器(102)執(zhí)行后使得處理器(102)執(zhí)行按照權(quán)利要求I 一 2,8 — 10中任一項的方法。
全文摘要
本文描述用于存儲虛擬盤載荷數(shù)據(jù)的技術(shù)。在示范性配置中,每個虛擬盤擴展可以與表明虛擬盤擴展是否通過虛擬盤文件來描述的狀態(tài)信息相關(guān)聯(lián)。在某些情況下可以收回用來描述虛擬盤擴展的空間,以及可以使用狀態(tài)信息來確定如何操控針對虛擬盤擴展的讀取和/或?qū)懭氩僮鳌3艘陨蟽?nèi)容之外,在本文的權(quán)利要求、圖、以及具體實施方式
中描述了其它技術(shù)。
文檔編號G06F3/06GK102707900SQ201210060920
公開日2012年10月3日 申請日期2012年3月9日 優(yōu)先權(quán)日2011年3月11日
發(fā)明者D.L.格林, J.A.斯塔克斯, K.梅拉, M.約翰, N.R.克里斯蒂安森, S.拉賈拉姆, T.W.哈里斯, 戴中寧 申請人:微軟公司