虛擬磁盤存儲技術(shù)的制作方法
【專利摘要】本文檔描述了用于實(shí)現(xiàn)虛擬磁盤的技術(shù)。在示范性配置中,虛擬磁盤文件能夠與充當(dāng)日志和檢查點(diǎn)記錄兩者的日志相關(guān)聯(lián)。當(dāng)日志條目被生成時,識別尾部的信息能夠被存儲在其中。這個信息能夠在虛擬磁盤文件被不正確地關(guān)閉即崩潰或掉電發(fā)生的情況下被用來發(fā)現(xiàn)日志條目的序列以供重放。附加于前述,其它技術(shù)在權(quán)利要求書、【具體實(shí)施方式】以及圖中被描述。
【專利說明】虛擬磁盤存儲技術(shù)
【背景技術(shù)】
[0001]存儲虛擬化技術(shù)允許邏輯存儲裝置與物理存儲裝置的分離。針對存儲虛擬化的一個示范性用例是在虛擬機(jī)內(nèi)。虛擬化軟件(典型地被稱作管理程序或虛擬機(jī)監(jiān)視器)的層被安裝在計(jì)算機(jī)系統(tǒng)上并且控制虛擬機(jī)如何與物理硬件交互。因?yàn)榭蛻舨僮飨到y(tǒng)典型地被編碼成對物理硬件實(shí)行互斥控制,所以虛擬化軟件能夠被配置成細(xì)分物理硬件的資源并且在虛擬機(jī)內(nèi)模擬物理硬件的存在。針對存儲虛擬化的另一用例是在被配置成實(shí)施存儲陣列的計(jì)算機(jī)系統(tǒng)內(nèi)。在這種情況下,物理計(jì)算機(jī)系統(tǒng)或虛擬機(jī)能夠使用iSCSI協(xié)議等等而被連接到存儲陣列。
[0002]存儲處理模塊能夠被用來模擬用于虛擬機(jī)或物理機(jī)的存儲裝置。例如,存儲處理模塊能夠通過對一個或多個虛擬磁盤文件進(jìn)行讀取和寫入來處理由虛擬機(jī)或物理機(jī)所發(fā)布的存儲IO作業(yè),所述虛擬磁盤文件能夠被用來描述即存儲虛擬磁盤的盤區(qū),即,諸如塊這樣的存儲裝置的相連區(qū)。同樣地,存儲處理程序能夠通過將針對虛擬磁盤的位模式數(shù)據(jù)寫到一個或多個虛擬磁盤文件來響應(yīng)寫請求,并且通過讀取在一個或多個虛擬磁盤文件中存儲的位模式來響應(yīng)讀請求。
【發(fā)明內(nèi)容】
[0003]這個文檔描述了用于實(shí)現(xiàn)虛擬磁盤的技術(shù)。在示范性配置中,虛擬磁盤文件能夠與充當(dāng)日志和檢查點(diǎn)記錄兩者的日志相關(guān)聯(lián)。當(dāng)日志條目被生成時,識別尾部的信息能夠被存儲在所述日志條目中。這個信息能夠在所述虛擬磁盤文件被不正確地關(guān)閉(即崩潰或掉電發(fā)生)的情況下被使用,以便發(fā)現(xiàn)日志條目的序列來重放。附加于前述內(nèi)容,其它技術(shù)在權(quán)利要求書、【具體實(shí)施方式】以及圖中被描述。
[0004]本領(lǐng)域的技術(shù)人員能夠理解,本公開的一個或多個各種方面可以包括但不限于用于實(shí)現(xiàn)在此引用的方面的電路和/或程序設(shè)計(jì);所述電路和/或程序設(shè)計(jì)實(shí)際上可以是被配置成實(shí)現(xiàn)在此引用的方面的硬件、軟件和/或固件的任意組合,其取決于系統(tǒng)設(shè)計(jì)者的設(shè)計(jì)選擇。
[0005]前述是概要并且因此必然地包含細(xì)節(jié)的簡化、概括以及省略。本領(lǐng)域的技術(shù)人員將理解,本概要僅僅是說明性的并且不旨在以任何方式進(jìn)行限制。
【專利附圖】
【附圖說明】
[0006]圖1描繪了計(jì)算機(jī)系統(tǒng)的高級框圖。
[0007]圖2描繪了針對虛擬化軟件程序的示范性架構(gòu)的高級框圖。
[0008]圖3描繪了針對虛擬化軟件程序的替換架構(gòu)的高級框圖。
[0009]圖4描繪了被配置成實(shí)現(xiàn)虛擬磁盤的計(jì)算機(jī)系統(tǒng)的較低級框圖。
[0010]圖5A描繪了被配置成實(shí)現(xiàn)虛擬磁盤的計(jì)算機(jī)系統(tǒng)的較低級框圖。
[0011]圖5B圖示了被配置成實(shí)現(xiàn)虛擬磁盤的計(jì)算機(jī)系統(tǒng)的較低級框圖。
[0012]圖6描繪了虛擬磁盤與虛擬磁盤文件之間的關(guān)系的高級圖示。[0013]圖7描繪了示范性日志條目格式。
[0014]圖8描繪了在一段時間內(nèi)將日志條目寫到示范性日志的特定例子。
[0015]圖9描繪了選擇日志條目的序列的特定例子,所述日志條目的序列能夠被選擇以
供重放。
[0016]圖10描繪了擴(kuò)充的日志如何能夠被生成的特定例子。
[0017]圖11描繪了收縮日志如何能夠被生成的特定例子。
[0018]圖12描繪了能夠被體現(xiàn)在計(jì)算機(jī)可讀存儲介質(zhì)內(nèi)和/或由計(jì)算機(jī)系統(tǒng)執(zhí)行的操作過程。
[0019]圖13描繪了能夠與由圖12所圖示的那些相結(jié)合地執(zhí)行的附加的操作。
[0020]圖14描繪了能夠與由圖13所圖示的那些相結(jié)合地執(zhí)行的附加的操作。
[0021]圖15描繪了能夠被體現(xiàn)在計(jì)算機(jī)可讀存儲介質(zhì)內(nèi)和/或由計(jì)算機(jī)系統(tǒng)執(zhí)行的操作過程。
[0022]圖16描繪了能夠與由圖15所圖示的那些相結(jié)合地執(zhí)行的附加的操作。
[0023]圖17描繪了能夠被體現(xiàn)在計(jì)算機(jī)可讀存儲介質(zhì)內(nèi)和/或由計(jì)算機(jī)系統(tǒng)執(zhí)行的操作過程。
[0024]圖18描繪了能夠與由圖17所圖示的那些相結(jié)合地執(zhí)行的附加的操作。
【具體實(shí)施方式】
[0025]自始至終使用的術(shù)語電路能夠包括諸如硬件中斷控制器、硬盤驅(qū)動器、網(wǎng)絡(luò)適配器、圖形處理器、基于硬件的視頻/音頻編解碼器之類的硬件構(gòu)件以及用來操作這樣的硬件的固件。術(shù)語電路還能夠包括微處理器、專用集成電路以及處理器,例如讀取和執(zhí)行指令的執(zhí)行單元,其由固件和/或軟件所配置。(一個或多個)處理器等等能夠由從存儲器(例如RAM、ROM、固件和/或海量存儲裝置)中加載的指令來配置,并且指令能夠體現(xiàn)可操作來配置處理器以便執(zhí)行一個或多個功能的邏輯。電路的特定例子能夠包括硬件和軟件的組合。在這個特定例子中,實(shí)施者可以寫源代碼,所述源代碼體現(xiàn)被隨后編譯成能夠被處理器執(zhí)行的機(jī)器可讀代碼的邏輯。
[0026]本領(lǐng)域的技術(shù)人員能夠理解,現(xiàn)有技術(shù)已演進(jìn)到了在用硬件實(shí)施的功能與用軟件(其隨后被硬件執(zhí)行)實(shí)施的功能之間存在小的差異。因此,如被用硬件或軟件實(shí)施的功能的描述僅僅是設(shè)計(jì)選擇。簡單地說,因?yàn)檐浖^程能夠被變換成等同的硬件結(jié)構(gòu)以及硬件結(jié)構(gòu)能夠本身被變換成等同的軟件過程,所以如用指令體現(xiàn)的所描述的功能能夠替換地被用硬件實(shí)施并且反之亦然。
[0027]所公開的主題可以使用一個或多個計(jì)算機(jī)系統(tǒng)。圖1和以下討論旨在提供所公開主題可以在其中實(shí)施的適合的計(jì)算環(huán)境的簡短的一般描述。
[0028]現(xiàn)參考圖1,示范性計(jì)算系統(tǒng)100被描繪。計(jì)算機(jī)系統(tǒng)100能夠包括處理器102,例如,執(zhí)行核心。雖然一個處理器102被圖示了,但是在其它實(shí)施例中計(jì)算機(jī)系統(tǒng)100可以具有多個處理器,例如,每個處理器基片的多個執(zhí)行核心和/或能夠各具有多個執(zhí)行核心的多個處理器基片。如圖所示,各種計(jì)算機(jī)可讀存儲媒體110能夠被一個或多個系統(tǒng)總線互連,所述一個或多個系統(tǒng)總線將各種系統(tǒng)構(gòu)件耦合到處理器102。系統(tǒng)總線可以為若干類型的總線結(jié)構(gòu)中的任一個,所述若干類型的總線結(jié)構(gòu)包括存儲器總線或存儲器控制器、夕卜圍總線以及使用各種各樣的總線架構(gòu)中的任一個的局部總線。在示例性的實(shí)施例中,計(jì)算機(jī)可讀存儲媒體Iio能夠包括例如隨機(jī)存取存儲器(RAM) 104、存儲設(shè)備106 (例如機(jī)電硬盤驅(qū)動器、固態(tài)硬盤驅(qū)動器等)、固件108 (例如FLASH RAM或ROM)、以及諸如例如⑶-ROM、軟盤、DVD、FLASH驅(qū)動器、外部存儲設(shè)備等這樣的可移除存儲設(shè)備118。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,能夠使用其它類型的計(jì)算機(jī)可讀存儲媒體,諸如磁盒、閃速存儲器卡和/或數(shù)字視頻盤。
[0029]計(jì)算機(jī)可讀存儲媒體110能夠提供處理器可執(zhí)行指令122、數(shù)據(jù)結(jié)構(gòu)、程序模塊以及諸如可執(zhí)行指令這樣的針對計(jì)算機(jī)100的其它數(shù)據(jù)的非易失性和易失性存儲裝置。包含例如在啟動期間幫助在計(jì)算機(jī)系統(tǒng)100內(nèi)的元件之間傳送信息的基本例行程序的基本輸入/輸出系統(tǒng)(BIOS) 120能夠被存儲在固件108中。大量的程序可以被存儲在固件108、存儲設(shè)備106、RAM 104和/或可移除存儲設(shè)備118上,并且可以被包括操作系統(tǒng)和/或應(yīng)用程序的處理器102執(zhí)行。在示范性的實(shí)施例中,計(jì)算機(jī)可讀存儲媒體110能夠存儲虛擬磁盤分析器404,其在以下段落中被更詳細(xì)地描述,并且能夠被處理器102執(zhí)行從而將計(jì)算機(jī)系統(tǒng)100變換成被配置用于特定目的的計(jì)算機(jī)系統(tǒng),S卩,根據(jù)在本文檔中所描述的技術(shù)而配置的計(jì)算機(jī)系統(tǒng)。
[0030]命令和信息可以由計(jì)算機(jī)100通過輸入設(shè)備116來接收,所述輸入設(shè)備116能夠包括但不限于鍵盤和指向設(shè)備。其它輸入設(shè)備可以包括話筒、操縱桿、游戲手柄、掃描器等等。這些和其它輸入設(shè)備常常通過被耦合到系統(tǒng)總線的串行端口接口而被連接到處理器102,但也可以通過諸如并行端口、游戲端口或通用串行總線(USB)之類的其它接口被連接。顯示器或其它類型的顯示設(shè)備也能夠經(jīng)由諸如視頻適配器這樣的接口而被連接到系統(tǒng)總線,所述視頻適配器可以是圖形處理器單元112的部分或者被連接到圖形處理器單元112。附加于顯示器,計(jì)算機(jī)典型地包括其它外圍輸出設(shè)備,諸如揚(yáng)聲器和打印機(jī)(未示出)。圖1的示范性系統(tǒng)還能夠包括主機(jī)適配器、小型計(jì)算機(jī)系統(tǒng)接口(SCSI)總線、以及連接到該SCSI總線的外部存儲設(shè)備。
[0031]計(jì)算機(jī)系統(tǒng)100可以在使用到諸如遠(yuǎn)程計(jì)算機(jī)這樣的一個或多個遠(yuǎn)程計(jì)算機(jī)的邏輯連接的聯(lián)網(wǎng)環(huán)境中進(jìn)行操作。遠(yuǎn)程計(jì)算機(jī)可以為另一計(jì)算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對等設(shè)備或其它公共網(wǎng)絡(luò)節(jié)點(diǎn),并且典型地能夠包括上面相對于計(jì)算機(jī)系統(tǒng)100所描述的元件中的多數(shù)或全部。
[0032]當(dāng)被用在LAN或WAN聯(lián)網(wǎng)環(huán)境中時,計(jì)算機(jī)系統(tǒng)100能夠通過網(wǎng)絡(luò)接口卡114而被連接到LAN或WAN??赡苁莾?nèi)部的或外部的NIC 114能夠被連接到系統(tǒng)總線。在聯(lián)網(wǎng)的環(huán)境中,相對于計(jì)算機(jī)系統(tǒng)100所描繪的程序模塊或其部分可以被存儲在遠(yuǎn)程存儲器存儲設(shè)備中。應(yīng)當(dāng)理解,在這里描述的網(wǎng)絡(luò)連接是示范性的,并且在計(jì)算機(jī)之間建立通信鏈路的其它手段可以被使用。而且,雖然設(shè)想本公開的許多實(shí)施例特別地非常適合于計(jì)算機(jī)化的系統(tǒng),但是本文檔中沒有東西旨在將本公開限制于這樣的實(shí)施例。
[0033]轉(zhuǎn)向圖2,所圖示的是能夠被用來生成虛擬機(jī)的示范性虛擬化平臺。在這個實(shí)施例中,微內(nèi)核管理程序202能夠被配置成控制并且仲裁對計(jì)算機(jī)系統(tǒng)200的硬件的訪問。微內(nèi)核管理程序202能夠生成稱作諸如子分區(qū)I至子分區(qū)N (其中N是大于I的整數(shù))這樣的分區(qū)的執(zhí)行環(huán)境。在這里,子分區(qū)是由微內(nèi)核管理程序202所支持的隔離的基本單元。微內(nèi)核管理程序202能夠隔離一個分區(qū)中的進(jìn)程以免訪問另一分區(qū)的資源。特別地,微內(nèi)核管理程序202能夠隔離客戶操作系統(tǒng)的內(nèi)核模式代碼以免訪問另一分區(qū)的資源以及用戶模式進(jìn)程。每個子分區(qū)能夠被映射到一組硬件資源,例如存儲器、設(shè)備、處理器周期等,所述一組硬件資源在微內(nèi)核管理程序202的控制之下。在實(shí)施例中,微內(nèi)核管理程序202可以是嵌入在母板的固件、專用集成電路或其組合之內(nèi)的獨(dú)立軟件產(chǎn)品、操作系統(tǒng)的一部分。
[0034]微內(nèi)核管理程序202能夠通過在物理計(jì)算機(jī)系統(tǒng)中限制客戶操作系統(tǒng)的存儲器視圖來強(qiáng)制實(shí)施分區(qū)。當(dāng)微內(nèi)核管理程序202實(shí)例化虛擬機(jī)時,它能夠?qū)⑾到y(tǒng)物理存儲器(SPM)的頁面(例如具有起始地址和結(jié)束地址的存儲器的固定長度塊)分配給虛擬機(jī)作為客戶物理存儲器(GPM)。在這里,客戶的、系統(tǒng)存儲器的限制視圖被微內(nèi)核管理程序202控制。術(shù)語客戶物理存儲器是從虛擬機(jī)的視點(diǎn)來描述存儲器的頁面的速記方式,而術(shù)語系統(tǒng)物理存儲器是從物理系統(tǒng)的視點(diǎn)來描述存儲器的頁面的速記方式。因此,分配給虛擬機(jī)的存儲器的頁面將具有客戶物理地址(由虛擬機(jī)所使用的地址)和系統(tǒng)物理地址(頁面的實(shí)際地址)。
[0035]客戶操作系統(tǒng)可以虛擬化客戶物理存儲器。虛擬存儲器是允許操作系統(tǒng)過度提交(over commit)存儲器并且給予應(yīng)用對邏輯上連續(xù)的工作存儲器的單一訪問的管理技術(shù)。在虛擬化的環(huán)境中,客戶操作系統(tǒng)能夠使用一個或多個頁表,以便將稱為虛擬客戶地址的虛擬地址轉(zhuǎn)換成客戶物理地址,在這個上下文中所述頁表被稱作客戶頁表。在這個例子中,存儲器地址可以具有客戶虛擬地址、客戶物理地址以及系統(tǒng)物理地址。
[0036]在所描繪的例子中,還能夠被認(rèn)為是與Xen的開源管理程序的域O類似的父分區(qū)構(gòu)件能夠包括主機(jī)環(huán)境204。主機(jī)環(huán)境204可以是操作系統(tǒng)(或一組配置實(shí)用程序),并且主機(jī)環(huán)境204能夠被配置成通過使用虛擬化服務(wù)提供者228 (VSP)將資源提供給在子分區(qū)1-N中執(zhí)行的客戶操作系統(tǒng)。在開源社區(qū)中被典型地稱為后端驅(qū)動器的VSP 228能夠被用來通過虛擬化服務(wù)客戶端(VSC)(在開源社區(qū)或半虛擬化設(shè)備中被典型地稱為前端驅(qū)動器)將接口復(fù)用到硬件資源。如圖所示,虛擬化服務(wù)客戶端在客戶操作系統(tǒng)的上下文內(nèi)執(zhí)行。然而,這些驅(qū)動器不同于客戶中的其余驅(qū)動器,因?yàn)樗鼈兘?jīng)由VSP與主機(jī)環(huán)境204進(jìn)行通信而不是用硬件或模擬的硬件進(jìn)行通信。在示范性實(shí)施例中,被虛擬化服務(wù)提供者228用來與虛擬化服務(wù)客戶端216和218進(jìn)行通信的路徑能夠被認(rèn)為是進(jìn)步的(enlightened)IO路徑。
[0037]如圖所示,模擬器234 (例如虛擬化的IDE設(shè)備、虛擬化的視頻適配器、虛擬化的NIC等)能夠被配置成在主機(jī)環(huán)境204內(nèi)運(yùn)行并且被附連到對于客戶操作系統(tǒng)220和222可用的模擬的硬件資源,例如IO端口、客戶物理地址范圍、虛擬VRAM、模擬的ROM范圍等。例如,當(dāng)客戶OS接觸到被映射成客戶物理地址(其中設(shè)備的寄存器將是針對存儲器映射的設(shè)備的)的客戶虛擬地址時,則微內(nèi)核管理程序202能夠攔截請求并且傳遞客戶試圖寫到關(guān)聯(lián)的模擬器的值。在這里,這個例子中的模擬的硬件資源能夠被認(rèn)為是其中虛擬設(shè)備位于客戶物理地址空間中。以這種方式對模擬器的使用能夠被認(rèn)為是模擬路徑。該模擬路徑與進(jìn)步的IO路徑相比是效率低的,因?yàn)楸人赩SP與VSC之間傳遞消息它需要更多的CPU時間來模擬設(shè)備。例如,映射到寄存器的存儲器上的若干動作是必需的以便經(jīng)由模擬路徑將緩沖器寫到磁盤,同時這個可以被簡化為在進(jìn)步的IO路徑中從VSC傳遞到VSP的單個消息,因?yàn)閂M中的驅(qū)動器被設(shè)計(jì)成訪問由虛擬化系統(tǒng)所提供的IO服務(wù)而不是被設(shè)計(jì)成訪問硬件。[0038]每個子分區(qū)能夠包括客戶操作系統(tǒng)(220和222)能夠管理并且調(diào)度線程以便在其上執(zhí)行的一個或多個虛擬處理器(230和232)。通常,虛擬處理器是提供具有特定架構(gòu)的物理處理器的表示的可執(zhí)行指令和關(guān)聯(lián)的狀態(tài)信息。例如,一個虛擬機(jī)可以有具有英特爾x86處理器的特性的虛擬處理器,然而另一虛擬處理器可以具有PowerPC處理器的特性。在這個例子中的虛擬處理器能夠被映射到計(jì)算機(jī)系統(tǒng)的處理器,使得實(shí)現(xiàn)虛擬處理器的指令將被物理處理器直接執(zhí)行。因此,在包括多個處理器的實(shí)施例中,虛擬處理器能夠被處理器同時地執(zhí)行,同時例如其它處理器執(zhí)行管理程序指令。分區(qū)中虛擬處理器和存儲器的組合能夠被認(rèn)為是虛擬機(jī)。
[0039]客戶操作系統(tǒng)(220和222)可以是任何操作系統(tǒng),諸如例如來自Microsoft?、Apple?、開源社區(qū)等的操作系統(tǒng)??蛻舨僮飨到y(tǒng)能夠包括用戶/內(nèi)核操作模式,并且能夠具有可以包括調(diào)度器、存儲器管理器等的內(nèi)核。一般地說,內(nèi)核模式在處理器中能夠包括執(zhí)行模式,所述執(zhí)行模式允許對至少有特權(quán)的處理器指令的訪問。每個客戶操作系統(tǒng)能夠具有關(guān)聯(lián)的文件系統(tǒng)以及客戶操作系統(tǒng)它們本身,所述關(guān)聯(lián)的文件系統(tǒng)能夠具有存儲在其上的應(yīng)用,所述應(yīng)用諸如終端服務(wù)器、電子商務(wù)服務(wù)器、電子郵件服務(wù)器等。客戶操作系統(tǒng)能夠調(diào)度線程以便在虛擬處理器上執(zhí)行,并且這樣的應(yīng)用的實(shí)例能夠被實(shí)現(xiàn)。
[0040]現(xiàn)參考圖3,它圖示了上面在圖2中所描述的虛擬化平臺的替換虛擬化平臺。圖3描繪了與圖2的那些類似的構(gòu)件;然而,在這個示例性的實(shí)施例中,管理程序302能夠包括微內(nèi)核構(gòu)件和與圖2的主機(jī)環(huán)境204中的那些類似的構(gòu)件,諸如虛擬化服務(wù)提供者228和設(shè)備驅(qū)動器224,而管理操作系統(tǒng)304可以包含例如用來配置管理程序302的配置實(shí)用程序(configuration utilities)。在這個架構(gòu)中,管理程序302能夠執(zhí)行與圖2的微內(nèi)核管理程序202相同的或類似的功能;然而,在這個架構(gòu)中,管理程序304實(shí)現(xiàn)進(jìn)步的10路徑并且包括針對計(jì)算機(jī)系統(tǒng)的物理硬件的驅(qū)動器。圖3的管理程序302可以是嵌入在母板的固件內(nèi)的獨(dú)立軟件產(chǎn)品、操作系統(tǒng)的一部分,或者管理程序302的一部分能夠由專用集成電路來實(shí)現(xiàn)。
[0041]現(xiàn)轉(zhuǎn)向圖4,它描述了計(jì)算機(jī)系統(tǒng)400,其圖示了能夠被用來實(shí)現(xiàn)在本文檔中所描述的技術(shù)的構(gòu)件的高級框圖。簡要地,計(jì)算機(jī)系統(tǒng)400能夠包括與上面相對于圖1至圖3所描述的那些類似的構(gòu)件。圖4示出了虛擬化系統(tǒng)420,其能夠被認(rèn)為是由圖2或圖3所圖示的虛擬化平臺的高級表示。例如,虛擬化系統(tǒng)420能夠被認(rèn)為是由管理程序微內(nèi)核202和主機(jī)204所提供的特征的組合的高級表示。替換地,虛擬化系統(tǒng)420能夠被認(rèn)為是管理程序302和管理OS 304的高級表示。因此,術(shù)語“虛擬化系統(tǒng)420”貫穿本文檔的使用用信號表示(signal) 了在以下段落中所描述的虛擬磁盤技術(shù)能夠被實(shí)施在任何類型的虛擬化軟件層內(nèi)或者在任何類型的虛擬化平臺中。
[0042]在特定的示例性實(shí)施例中可以是可執(zhí)行指令的虛擬磁盤分析器404能夠被用來從虛擬磁盤文件中實(shí)例化虛擬磁盤并且代表虛擬機(jī)處理存儲10。如圖所示,虛擬磁盤分析器404能夠打開諸如(一個或多個)虛擬磁盤文件406這樣的一個或多個虛擬磁盤文件并且生成虛擬磁盤402。
[0043]虛擬磁盤分析器404能夠經(jīng)由虛擬化系統(tǒng)文件系統(tǒng)408從存儲設(shè)備106獲得(一個或多個)虛擬磁盤文件406。簡要地,虛擬化系統(tǒng)文件系統(tǒng)408表示可執(zhí)行指令,所述可執(zhí)行指令組織(organize)虛擬化系統(tǒng)420的計(jì)算機(jī)文件和數(shù)據(jù),諸如(一個或多個)虛擬磁盤文件406。虛擬化系統(tǒng)文件系統(tǒng)408能夠?qū)⒋藬?shù)據(jù)存儲在固定大小物理盤區(qū)的陣列中,即,物理存儲設(shè)備上存儲裝置的連續(xù)區(qū)域。在特定例子中,盤區(qū)可以是簇(cluster),所述簇是具有設(shè)定長度的比特的字節(jié)序列。示范性的簇大小典型地是介于512個字節(jié)與64千字節(jié)之間的2的冪。在特定配置中,簇大小可以是4千字節(jié)。
[0044]當(dāng)打開虛擬磁盤文件406的請求被接收時,虛擬化系統(tǒng)文件系統(tǒng)408確定該文件在磁盤上位于哪里并且將IO作業(yè)發(fā)布給磁盤設(shè)備驅(qū)動器以便從該磁盤的一個或多個物理盤區(qū)讀取數(shù)據(jù)。由文件系統(tǒng)408所發(fā)布的IO作業(yè)確定描述虛擬磁盤文件406的持久性拷貝在存儲設(shè)備106上的位置的磁盤偏移和長度,并且將該IO作業(yè)發(fā)布給存儲設(shè)備106。歸因于存儲設(shè)備如何操作的語義,寫IO作業(yè)能夠被在易失性存儲器的高速緩存器的一級或多級中被緩沖,其由高速緩存器454所表示,直到存儲設(shè)備106的電路確定訪問例如唱片、閃速存儲器單元等持久性存儲單元460上的位置,并且將指示(一個或多個)虛擬磁盤文件406的持久性拷貝的新內(nèi)容的經(jīng)緩沖的位模式寫到持久性存儲單元460為止。
[0045]虛擬磁盤分析器404能夠獲得指示(一個或多個)虛擬磁盤文件406的位模式,并且使(一個或多個)虛擬磁盤文件406中的有效負(fù)荷(例如用戶數(shù)據(jù))作為包括多個虛擬磁盤盤區(qū)的磁盤顯露。在實(shí)施例中,這些虛擬磁盤盤區(qū)在大小上可以是固定大小塊512千字節(jié)直到64兆字節(jié)并且被分割成多個扇區(qū);然而,在另一實(shí)施例中,虛擬磁盤盤區(qū)可以是可變大小的盤區(qū)。在示范性的配置中,在引導(dǎo)客戶操作系統(tǒng)412之前,與模擬或進(jìn)步的存儲控制器和虛擬磁盤的模擬或進(jìn)步的方面相關(guān)的資源被建立,使得具有存儲器映射寄存器的模擬存儲控制器在虛擬機(jī)410的客戶物理地址空間內(nèi)被實(shí)現(xiàn)。引導(dǎo)代碼能夠運(yùn)行并且引導(dǎo)客戶操作系統(tǒng)412。虛擬化系統(tǒng)420能夠檢測訪問客戶物理地址空間的這個區(qū)的企圖,并且返回使客戶操作系統(tǒng)412確定存儲設(shè)備被附連到模擬存儲控制器的結(jié)果。作為響應(yīng),客戶操作系統(tǒng)412能夠加載驅(qū)動器(半虛擬化驅(qū)動器或正規(guī)驅(qū)動器),并且使用該驅(qū)動器來將存儲IO請求發(fā)布給所檢測到的存儲設(shè)備。虛擬化系統(tǒng)420能夠?qū)⒋鎯O請求路由到虛擬磁盤分析器404。
[0046]在客戶操作系統(tǒng)412正在運(yùn)行之后,它能夠經(jīng)由文件系統(tǒng)414將IO作業(yè)發(fā)布給虛擬磁盤402,所述文件系統(tǒng)414與虛擬化系統(tǒng)文件系統(tǒng)414類似,在于它組織客戶操作系統(tǒng)412的計(jì)算機(jī)文件和數(shù)據(jù)以及安裝在客戶操作系統(tǒng)412上的應(yīng)用。客戶操作系統(tǒng)412能夠以與操作系統(tǒng)如何與物理存儲設(shè)備交互類似的方式與虛擬磁盤402交互,并且最后IO作業(yè)被路由到虛擬磁盤分析器404。虛擬磁盤分析器404能夠包括用于確定如何以模擬物理存儲設(shè)備的方式來響應(yīng)IO作業(yè)的邏輯。例如,虛擬磁盤分析器404能夠從(一個或多個)虛擬磁盤文件406讀取數(shù)據(jù)以及將數(shù)據(jù)寫到(一個或多個)虛擬磁盤文件406。寫到(一個或多個)虛擬磁盤文件406的數(shù)據(jù)繼而通過虛擬化系統(tǒng)文件系統(tǒng)408而被路由并且被提交給存儲在持久性存儲單元460上或持久性存儲單元460中的(一個或多個)虛擬磁盤文件406的持久性拷貝。
[0047]簡要地參考圖5A,它圖示了用于實(shí)施本文檔中所描述的技術(shù)的替換架構(gòu)。如由圖5所示出的那樣,虛擬磁盤分析器404還能夠被實(shí)施在諸如由Microsoft ?所提供的操作系統(tǒng)這樣的操作系統(tǒng)502中。在這個例子中,虛擬磁盤分析器404能夠被配置成在存儲服務(wù)器500上運(yùn)行,所述存儲服務(wù)器500能夠包括與圖1的計(jì)算機(jī)系統(tǒng)100類似的構(gòu)件。在這個例子中,存儲服務(wù)器500能夠包括物理存儲設(shè)備510的陣列并且能夠被配置成使存儲裝置可用于服務(wù)器,使得該存儲裝置看起來像是本地附連到操作系統(tǒng)508。虛擬磁盤分析器404能夠與它相對于圖4被描述的一樣操作;在這個配置中為由文件系統(tǒng)414所發(fā)布的讀/寫IO作業(yè)的差異能夠通過網(wǎng)絡(luò)連接被路由到虛擬磁盤分析器404。
[0048]簡要地參考圖5B,它圖示了用于實(shí)施本文檔中所描述的技術(shù)的又一架構(gòu)。圖5B與圖5A類似,在于虛擬磁盤分析器404被實(shí)施在操作系統(tǒng)502中并且計(jì)算機(jī)系統(tǒng)512能夠包括與圖1的計(jì)算機(jī)系統(tǒng)100類似的構(gòu)件。然而,這個例子中的差異是該圖圖示了環(huán)回附連的虛擬磁盤402。包括諸如應(yīng)用424這樣的應(yīng)用的文件系統(tǒng)414能夠被存儲在虛擬磁盤402中,而(一個或多個)虛擬磁盤文件406能夠被存儲在計(jì)算機(jī)系統(tǒng)文件系統(tǒng)514中。
[0049]轉(zhuǎn)向圖6,它圖示了至少部分地通過虛擬磁盤文件406所描述的虛擬磁盤。如圖所示,虛擬磁盤402能夠包括N個存儲裝置的盤區(qū)(其中N是大于O的整數(shù)),并且在這個特定例子中虛擬磁盤402包括10個盤區(qū)。虛擬磁盤402被圖示為包括針對不同文件的位模式和針對客戶操作系統(tǒng)412的數(shù)據(jù),它們通過虛擬磁盤盤區(qū)內(nèi)的不同模式而被區(qū)分。
[0050]因?yàn)樘摂M磁盤402不是物理存儲設(shè)備,所以針對虛擬磁盤盤區(qū)的底層(underlying)有效負(fù)荷數(shù)據(jù)能夠由虛擬磁盤文件406內(nèi)的不同段“描述”,即存儲在其中。例如,虛擬磁盤塊I通過由能夠被用來存儲有效負(fù)荷數(shù)據(jù)的第一偏移或虛擬磁盤文件偏移值O定義的部分來描述。當(dāng)計(jì)算機(jī)系統(tǒng)400是在操作中時,能夠被存儲在隨機(jī)存取存儲器中的分配表416能夠在虛擬磁盤文件406中被持久化在任何段中并且能夠跨越多個段。簡要地,分配表416能夠包括將虛擬磁盤盤區(qū)鏈接到虛擬磁盤文件406的各段的信息。例如,分配表416能夠存儲虛擬磁盤塊號和定義虛擬磁盤文件字節(jié)偏移的信息,所述虛擬磁盤文件字節(jié)偏移定義虛擬磁盤文件406的存儲數(shù)據(jù)的段。箭頭表明在分配表416中存儲的關(guān)系。
[0051]問題存在在于,當(dāng)向虛擬磁盤文件作出對于分配表416或其它元數(shù)據(jù)的改變時,直到高速緩存器454被沖刷(flush)才保證該改變將被持久性存儲單元460持久化。如果虛擬磁盤文件在元數(shù)據(jù)更新被持久化之前未被正確地關(guān)閉,諸如當(dāng)電力意外地失去時,存儲在持久性存儲單元460的扇區(qū)中的所有元數(shù)據(jù)條目都可能被破壞,并且,尤其是如果元數(shù)據(jù)是針對分配表416的時,將多個虛擬磁盤盤區(qū)鏈接到虛擬磁盤文件406的信息可能被丟失。因此,單個扇區(qū)的丟失能夠使許多虛擬磁盤盤區(qū)成為無法使用的。
[0052]在示范性的實(shí)施例中,日志420能夠被用來降低虛擬磁盤文件元數(shù)據(jù)的段的損壞對磁盤文件402的多個段損壞的機(jī)會。因此,虛擬磁盤分析器404能夠生成包括指示對虛擬磁盤文件402的元數(shù)據(jù)作出的改變的位模式的日志條目并且將它們記錄在日志420內(nèi)。在虛擬磁盤文件未被正確地關(guān)閉的實(shí)例中,當(dāng)虛擬磁盤分析器404被重新啟動時,日志420能夠被用來重放對元數(shù)據(jù)的改變。
[0053]如圖所示,日志420能夠被構(gòu)建為日志條目的有序序列(在所圖示的例子中為日志條目1-6)。每個日志條目能夠包括識別它是否是第一、第二、第三等個日志條目的序號。附加地,在運(yùn)行時期間用來存儲日志420的隨機(jī)存取存儲器能夠被虛擬磁盤分析器404用作為循環(huán)緩沖器。因此,當(dāng)日志420是滿的時,虛擬磁盤分析器404能夠開始在日志420開端處蓋寫(overwrite)較舊的日志條目。因?yàn)檩^早的條目能夠被蓋寫并且虛擬磁盤分析器404隨后對它們排序,所以虛擬磁盤分析器404能夠用日志條目7蓋寫日志條目1,用日志條目8蓋寫日志條目2等等并且依此類推。
[0054]在示范性實(shí)施例中,虛擬磁盤分析器404能夠被配置成響應(yīng)于沖刷而將日志條目應(yīng)用到虛擬磁盤文件406。簡要地,沖刷是指導(dǎo)存儲設(shè)備將其內(nèi)部高速緩存器的內(nèi)容寫到持久性存儲裝置的請求。因?yàn)榇鎯υO(shè)備在由IO作業(yè)所描述的位模式被持久化時不會用信號通知,所以除非沖刷被發(fā)布,否則不保證IO作業(yè)被存儲到持久性存儲設(shè)備460。在示范性的配置中,虛擬磁盤分析器404生成日志并且更新虛擬磁盤文件406的方式的副作用是寫入描述對元數(shù)據(jù)的改變的日志條目的行為能夠相當(dāng)于將該改變寫到虛擬磁盤文件406。因?yàn)檫@個,改變能夠被分批地應(yīng)用于虛擬磁盤文件406以便降低通過將單獨(dú)的改變應(yīng)用到虛擬磁盤文件406所引起的對性能的影響。因此,在這個示范性實(shí)施例中,響應(yīng)于例如沖刷,對虛擬磁盤文件406的改變能夠被延遲并且一起被寫入。在其中元數(shù)據(jù)被存儲在分配表416中的特定例子中,虛擬磁盤分析器404能夠被配置成將日志條目寫到日志420并且更新分配表416的存儲器中的拷貝;確定沖刷發(fā)生了 ;并且更新虛擬磁盤文件406。對虛擬磁盤文件406的更新繼而使指示由剛被沖刷的日志條目所描述的改變的IO作業(yè)被發(fā)送到存儲設(shè)備106,使得它們能夠被應(yīng)用于存儲在持久性存儲單元460中的虛擬磁盤文件的持久性拷貝。
[0055]在示范性實(shí)施例中,當(dāng)日志條目已被持久性存儲單元460成功地存儲時,虛擬磁盤分析器404能夠用新的日志條目蓋寫日志條目。如上面所陳述的那樣,因?yàn)榘l(fā)布到存儲設(shè)備106的IO作業(yè)可以被存儲在易失性存儲器(例如高速緩存器454)的一級或多級中,而且因?yàn)橐恍┐鎯υO(shè)備不會報(bào)告IO作業(yè)何時被完成,所以在示范性配置中虛擬磁盤分析器404能夠被配置成將已被沖刷的日志條目蓋寫到持久性存儲單元460。
[0056]轉(zhuǎn)向圖7,它圖示了不同的日志條目格式。在示范性實(shí)施例中,虛擬磁盤分析器404能夠被配置成寫入與日志條目702、704、706和/或708類似的日志條目。然而,本公開不限于使用具有與由圖7所描繪的日志條目中的任一個類似的結(jié)構(gòu)的日志條目。如由圖7所示出的那樣,每個日志條目都能夠包括頭部。頭部能夠包括:日志條目的序號,例如日志號I至M (其中M是大于I的整數(shù));識別日志條目是當(dāng)前運(yùn)行的部分的唯一標(biāo)識符,即指示日志是用于這個運(yùn)行時實(shí)例的信息,而不是虛擬磁盤402被實(shí)例化的前一時間;以及針對“尾部”(即日志中尚未被沖刷的最舊的日志條目)的標(biāo)識符,其在以下段落中被更詳細(xì)地描述。附加地,在可選的實(shí)施例中,虛擬磁盤分析器404能夠?qū)⑽募Y(jié)束(EOF)信息(例如指示虛擬磁盤文件406的結(jié)束的虛擬磁盤文件字節(jié)偏移)寫到每個日志條目。在虛擬磁盤文件406的EOF與由日志420所識別的EOF不匹配的情況下,EOF信息能夠被用來糾正虛擬磁盤文件406的長度。
[0057]如由圖7所示出的那樣,一些日志條目包括頭部和描述符。描述符段能夠包括針對有效負(fù)荷(即位模式)應(yīng)該在虛擬磁盤文件406中被寫入哪里的虛擬磁盤文件偏移的引用。在示范性實(shí)施例中,有效負(fù)荷能夠包括與扇區(qū)等值的數(shù)據(jù)(a sector’s worth ofdata)。例如,如果存儲設(shè)備106使用4kb大小的扇區(qū),則每個日志條目中的有效負(fù)荷可以為針對虛擬磁盤文件406的4kb更新,即位模式。日志條目702和706圖示了日志條目的有效負(fù)荷取決于底層存儲設(shè)備(例如存儲設(shè)備106)的扇區(qū)大小而可以是不同的。例如,日志條目702可以描述4k更新然而日志條目706可以描述8k更新。
[0058]另一方面,日志條目704包括多個描述符和多個有效負(fù)荷位模式。日志條目704圖示了示范性日志條目能夠描述對多個扇區(qū)的更新。虛擬磁盤分析器404可以被配置成在更新被要求時創(chuàng)建這樣的日志條目以便被同時提交。這樣的更新的特定例子是這樣的更新,其中虛擬磁盤分析器404數(shù)據(jù)被從一個虛擬磁盤塊移動到另一虛擬磁盤塊并且虛擬磁盤分析器404改變將虛擬磁盤盤區(qū)鏈接到虛擬磁盤文件406的信息,而不是將該虛擬磁盤文件的段中的有效負(fù)荷拷貝到另一段。
[0059]日志條目708圖示了在示范性實(shí)施例中日志條目可以不包括有效負(fù)荷;相反地,描述符可以包括虛擬磁盤文件偏移和指示針對所述扇區(qū)的有效負(fù)荷為全零、為全一等的標(biāo)識符。例如,虛擬磁盤分析器404可以確定修改虛擬磁盤文件的一部分成包括全零,例如以便擴(kuò)展文件結(jié)束。在這個實(shí)例中,虛擬磁盤分析器404能夠生成包括標(biāo)識符的日志條目,所述標(biāo)識符可以是針對有效負(fù)荷的代替品。這樣,該日志條目將在日志420內(nèi)占較少空間。
[0060]日志條目還能夠與日志條目710類似。這種類型的日志條目能夠被用來更新尾部位置,這在以下段落中被更詳細(xì)地描述。簡要地,在其中日志420是滿的或接近于為滿的并且日志條目不能夠被蓋寫(即,日志條目尚未被沖刷到持久性存儲單元460)的實(shí)例中,與日志條目710類似的日志條目能夠被用來將尾部提前。在這個能夠如何工作的特定例子中,虛擬磁盤分析器404能夠通過確定在日志420內(nèi)有多少自由空間是可用的并且將所述值與門限相比較來確定日志420是滿的或者接近于是滿的。在確定日志420是滿的或接近于為滿的之后,虛擬磁盤分析器404能夠通過確定條目尚未被沖刷來確定較早的條目不能夠被蓋寫。虛擬磁盤分析器404然后能夠?qū)_刷發(fā)布給虛擬化系統(tǒng)文件系統(tǒng)408或存儲服務(wù)器文件系統(tǒng)504。在完成沖刷之后,虛擬磁盤分析器404能夠生成與日志條目710類似的日志條目并且將指示沖刷發(fā)生了并且這個條目是新的尾部的信息寫入在其內(nèi)(這個方面被與圖8的描述相結(jié)合地更詳細(xì)地描述)。
[0061]附加于前述內(nèi)容,數(shù)據(jù)能夠被以一定方式存儲在日志條目中,以便向虛擬磁盤分析器404用信號表示日志420內(nèi)的字節(jié)的序列是單個有效的日志條目。例如,頭部能夠包括能夠被用來驗(yàn)證日志條目的校驗(yàn)碼和其它數(shù)據(jù)以及用來將它識別為頭部的唯一標(biāo)識符。描述符也能夠被分配將它識別為與頭部相關(guān)聯(lián)的唯一標(biāo)識符,并且描述符的唯一標(biāo)識符的拷貝能夠被放置在例如有效負(fù)荷段的第一字節(jié)內(nèi),而且有效負(fù)荷的第一字節(jié)能夠被存儲在該描述符中。因此,實(shí)際的有效負(fù)荷可以是有效負(fù)荷段中的有效負(fù)荷減去第一字節(jié)加上存儲在描述符中的字節(jié)的組合。
[0062]在實(shí)施例中,日志420能夠被用作為日志和檢驗(yàn)點(diǎn)記錄兩者。虛擬磁盤分析器404能夠?qū)ⅰ拔膊俊钡臉?biāo)識符添加到所生成的每個日志條目,所述尾部的標(biāo)識符是與存儲在尚未被沖刷的日志中的最舊的日志條目相關(guān)聯(lián)的標(biāo)識符。標(biāo)識符能夠在崩潰之后被虛擬磁盤分析器404用來確定什么日志條目已被應(yīng)用于虛擬磁盤文件406的磁盤上拷貝和什么日志條目應(yīng)該被重放。
[0063]現(xiàn)轉(zhuǎn)向圖8,其描述了隨著時間的推移虛擬磁盤分析器404能夠如何向日志420進(jìn)行寫入。在這個特定例子中,日志420被示出在八個時間點(diǎn)(420-A至420-H)處。在由日志420-A所圖示的時間段之前,虛擬磁盤分析器404能夠打開虛擬磁盤文件406并且虛擬磁盤402能夠被實(shí)例化。在特定的例子中,虛擬磁盤402能夠在虛擬機(jī)410內(nèi)被實(shí)例化,即,計(jì)算機(jī)系統(tǒng)400能夠被配置成將IO作業(yè)從虛擬機(jī)410路由到虛擬磁盤分析器404并且模擬存儲設(shè)備在虛擬機(jī)410內(nèi)的存在。在另一配置中,操作系統(tǒng)508能夠引導(dǎo)虛擬磁盤402并且開始在客戶端計(jì)算機(jī)系統(tǒng)506上運(yùn)行。
[0064]假設(shè)導(dǎo)致對虛擬磁盤文件406的元數(shù)據(jù)的改變的IO作業(yè)被發(fā)布。這繼而使虛擬磁盤分析器404將指示對元數(shù)據(jù)的改變的位模式寫入虛擬磁盤文件406。在這種情況下,虛擬磁盤分析器404能夠生成針對改變將被應(yīng)用于的虛擬磁盤文件的扇區(qū)大小部分的位模式并且生成日志條目I。此外,對于為什么扇區(qū)大小的更新被使用的原因是因?yàn)樯葏^(qū)可能是存儲設(shè)備106可以在單個事務(wù)中提交給持久性存儲單元460的數(shù)據(jù)量。因此,即使元數(shù)據(jù)改變在大小上是數(shù)個字節(jié),但表示該改變的位模式能夠包括已經(jīng)存儲在虛擬磁盤文件406中的剩余數(shù)據(jù)和所述更新。返回到例子,虛擬磁盤分析器404能夠通過檢查識別尾部的存儲器指針來確定尾部(自最后沖刷以來尚未被提交給存儲設(shè)備106的最舊的日志條目)的標(biāo)識。在這個例子中,尾部已被初始化為日志420的開始。因此,虛擬磁盤分析器404能夠向日志條目I內(nèi)添加標(biāo)識符初始化點(diǎn)(這由從日志條目I的中間指向其開始的彎曲箭頭來圖示);將日志條目I寫到日志420;并且將指示對日志420的改變的IO作業(yè)發(fā)布給存儲設(shè)備106以便更新日志420的磁盤上拷貝。在示例性的實(shí)施例中,所述標(biāo)識符可能是日志條目I的序號,它可能是指示日志條目I的第一扇區(qū)的、日志420內(nèi)的字節(jié)偏移等。附加地,如果更新是對分配表416的,則虛擬磁盤分析器404能夠更新分配表416的存儲器中拷貝以便包括所述改變。
[0065]繼續(xù)圖8的描述并且轉(zhuǎn)向日志420-B,假設(shè)虛擬磁盤分析器404接收到導(dǎo)致對存儲在虛擬磁盤文件406中的元數(shù)據(jù)的改變的另一 IO作業(yè)。例如,假設(shè)對分配表416的改變被作出以便將虛擬磁盤塊鏈接到虛擬磁盤文件406的段。作為響應(yīng),虛擬磁盤分析器404能夠生成包括有效負(fù)荷的日志條目2,所述有效負(fù)荷包括指示將虛擬磁盤塊鏈接到虛擬磁盤文件406的段的信息的針對虛擬磁盤文件406的位模式以及已經(jīng)在磁盤上的來自扇區(qū)的數(shù)據(jù),并且虛擬磁盤分析器404能夠確定最舊的未沖刷的日志條目的標(biāo)識是在日志420的開始處,所述日志420的開始還被稱為日志條目I。例如,虛擬磁盤分析器404能夠檢查指向最舊的未沖刷的日志條目的開始的存儲器指針;將標(biāo)識符添加到日志條目2 ;將日志條目2寫到日志420;并且發(fā)布IO作業(yè)以便更新日志420的磁盤上拷貝。在這個例子中的條目I和2兩者是檢查點(diǎn)記錄,因?yàn)樗鼈儍烧叨济鞔_地識別最舊的未沖刷的日志條目。
[0066]轉(zhuǎn)向日志420-C,現(xiàn)假設(shè)發(fā)起沖刷操作的命令被處理。例如,假設(shè)虛擬磁盤分析器404基于定時器的期滿或者因?yàn)橛脕泶鎯ξ礇_刷的日志條目的空間的預(yù)定量被超過而確定將沖刷命令發(fā)布給存儲設(shè)備106。替換地,假設(shè)沖刷由虛擬機(jī)410的文件系統(tǒng)414發(fā)布。不管什么進(jìn)程發(fā)起沖刷,虛擬磁盤分析器404被配置成使用沖刷過程的發(fā)起來使日志條目持久化并且更新虛擬磁盤文件406的磁盤上拷貝。例如,響應(yīng)于處理發(fā)起沖刷的命令,虛擬磁盤分析器404能夠發(fā)布使存儲設(shè)備106將內(nèi)容高速緩存器454寫到持久性存儲單元460的沖刷。這繼而確保指示日志條目I和日志條目2的IO作業(yè)被持久化。虛擬磁盤分析器404能夠?qū)⒋鎯ζ髦械闹羔樃碌街甘踞槍ο乱粋€日志條目(即日志條目3)將被寫入的地方的第一虛擬磁盤文件偏移的位置。
[0067]現(xiàn)轉(zhuǎn)向日志420-D,能夠?qū)μ摂M磁盤文件元數(shù)據(jù)作出導(dǎo)致對虛擬磁盤文件406的改變的另一更新。與上面所描述的操作過程類似,虛擬磁盤分析器404能夠生成日志條目3并且虛擬磁盤分析器404能夠確定既未提交(即,在沖刷操作期間尚未被提交給存儲設(shè)備106)且未應(yīng)用(即,尚未被應(yīng)用于虛擬磁盤文件406)的最舊的日志條目的標(biāo)識。例如,虛擬磁盤分析器404能夠檢查指向指示日志條目2的結(jié)束的文件偏移的存儲器指針并且將針對日志條目3的標(biāo)識符添加到日志條目3,S卩,在日志條目3的頭部內(nèi)。在這個例子中存儲器指針已移動通過了條目I和2兩者的事實(shí)指示日志條目I和2兩者已被提交給磁盤。虛擬磁盤分析器404然后能夠?qū)⑷罩緱l目3寫到RAM 104中的日志420,并且將指示日志條目3的IO作業(yè)發(fā)布給存儲設(shè)備106。
[0068]轉(zhuǎn)向日志420-E,現(xiàn)假設(shè)發(fā)起沖刷操作的另一命令被處理。響應(yīng)于處理發(fā)布沖刷的請求,虛擬磁盤分析器404能夠發(fā)布該沖刷并且使存儲設(shè)備106將高速緩存器460的內(nèi)容寫到磁盤。在存儲設(shè)備106發(fā)送了指示沖刷完成的確認(rèn)之后,虛擬磁盤分析器404能夠更新尾部指針以便指向指示針對下一個日志條目(即日志條目4)的虛擬磁盤文件字節(jié)偏移的文件偏移。
[0069]現(xiàn)轉(zhuǎn)向日志420-F,能夠?qū)μ摂M磁盤文件元數(shù)據(jù)作出導(dǎo)致對虛擬磁盤文件406的改變的另一更新。與上面所描述的操作過程類似,虛擬磁盤分析器404能夠生成日志條目4并且虛擬磁盤分析器404能夠確定尚未被沖刷的最舊的日志條目(例如這個例子中的日志條目4)的標(biāo)識;將針對日志條目4的標(biāo)識符添加到日志條目4并且將日志條目4寫到日志420。
[0070]假設(shè)日志420的大小是有限的并且被以循環(huán)的方式踩入(tread)。日志420-G示出了虛擬磁盤分析器404能夠被配置成用新條目蓋寫較舊的沖刷條目。在這個例子中,虛擬磁盤分析器404被示出成已接收到比先前的改變更大的對元數(shù)據(jù)的改變。例如,假設(shè)日志條目5包括兩個有效負(fù)荷。虛擬磁盤分析器404能夠確定沒有足夠的空間來寫入日志條目5。響應(yīng)于這個確定,虛擬磁盤分析器404能夠通過檢查尾部指針并且確定在尾部指針虛擬磁盤文件偏移值之前在日志420中存在空間而確定在日志420中是否存在沖刷的日志條目。虛擬磁盤分析器404能夠被配置成然后生成日志條目5,以及確定最舊的未沖刷的日志條目是日志條目4并且在將日志條目5寫到日志420之前將針對日志條目4的標(biāo)識符添加到日志條目5。如由圖所示出的那樣,在這種情況下,標(biāo)識符指向看起來似乎它是在日志條目5之后被寫到日志420的日志條目。然而,并且被與圖9的描述相結(jié)合地更詳細(xì)地描述,虛擬磁盤分析器404能夠確定日志條目5實(shí)際上在日志條目4之后被寫入。
[0071]當(dāng)頭部指針到達(dá)尾部指針時,這樣的情形被創(chuàng)建,其中不存在未被沖刷的日志條目,因此虛擬磁盤分析器404不再能夠蓋寫條目。在這種情形下,虛擬磁盤分析器404能夠被配置成通過寫入被用來更新尾部的日志條目而在日志420內(nèi)創(chuàng)建空間。如由日志條目420-H所示出的那樣,虛擬磁盤分析器404可以發(fā)布沖刷;將指示由沖刷的日志條目(在這個例子中是日志條目4和5)所描述的改變的IO作業(yè)發(fā)布給存儲設(shè)備106以便更新虛擬磁盤文件406的磁盤上拷貝;生成日志條目6,所述日志條目6可能看來與圖6的日志條目610類似,因?yàn)樗^部;將針對日志條目6的標(biāo)識符添加到日志條目6 ;并且將該日志條目寫到日志420。因此,虛擬磁盤分析器404現(xiàn)在可以使用先前存儲日志條目3的剩余部分、5以及5的空間來存儲后續(xù)日志條目。
[0072]現(xiàn)轉(zhuǎn)向圖9,在日志條目被創(chuàng)建之后,虛擬磁盤文件406可能由于掉電或崩潰而被不正確地關(guān)閉。當(dāng)虛擬磁盤分析器404重開虛擬磁盤文件406時,可能遇到持久化的日志902或906。示范性的持久化的日志902或906可能尚未從圖8的示范性高級綜述生成,并且持久化的日志902和906是不同例子的部分。虛擬磁盤分析器404能夠被配置成掃描這些條目;確定什么日志條目已被應(yīng)用于虛擬磁盤文件406以及什么日志條目能夠基于在持久化的日志條目中存儲的尾部指針而被重放。[0073]日志902被圖示為包括6個有效日志條目和包括損壞數(shù)據(jù)的一個條目,即日志條目4。在檢測到日志902之后,虛擬磁盤分析器404能夠被配置成掃描日志420以便定位最新的有效日志條目并且應(yīng)用序列,即,零個或最新的有效日志條目是其一部分的更多個有序的日志條目。簡要地,虛擬磁盤分析器404能夠通過選擇其中每個日志條目包括尾部的標(biāo)識符的一組日志條目而不是被識別為尾部的日志條目來確定最新的有效日志條目所屬于的序列,所述日志條目能夠包括對于本身或某個其它日志條目的標(biāo)識符。
[0074]與表904相結(jié)合地參考日志902,虛擬磁盤分析器404能夠走過(walk)日志902并且填充表906。在表906被選擇之后,虛擬磁盤分析器404能夠選擇包括最新的有效日志條目的序列。例如,虛擬磁盤分析器404能夠被初始化,使得所述序列被設(shè)置為O并且間斷被設(shè)置為日志902的開始。簡要地,間斷是其中數(shù)據(jù)不表示有效日志條目的虛擬磁盤文件內(nèi)的斑點(diǎn)(spot)。例如,在間斷處的數(shù)據(jù)可能是來自不同運(yùn)行時的條目、條目的部分、隨機(jī)數(shù)據(jù)等。虛擬磁盤分析器404能夠追蹤最近的間斷點(diǎn)并且使用它的位置來確定給定序列是否包括所有有效條目。
[0075]虛擬磁盤分析器404能夠讀取日志條目I并且確定它是否是有效日志條目。例如,虛擬磁盤分析器404能夠檢查頭部、描述符和/或其有效負(fù)荷中的信息并且確定它是否符合指示有效日志條目的格式。日志條目I是有效的確定被作出后,虛擬磁盤分析器404能夠讀取存儲在其中的信息并且當(dāng)日志條目I被提交時確定尾部指針是什么。在這個例子中,日志條目I指向它本身。因此,虛擬磁盤分析器404能夠存儲指示包括最新的有效日志條目的事件序列起始于日志條目I并且包括日志條目I的信息。因?yàn)殚g斷被初始化為O并且日志條目I是有效的,所以虛擬磁盤分析器404能夠使間斷偏移保持等于O。
[0076]虛擬磁盤分析器404然后能夠掃描日志條目2并且確定它是有效的并且指向日志條目I。響應(yīng)于這個確定,虛擬磁盤分析器404能夠確定包括最近的有效日志條目的序列為I至2并且將這個信息存儲在表904中。在這個例子中,因?yàn)樘摂M磁盤分析器404已經(jīng)在開始處啟動掃描,所以“最新的”日志條目迄今是日志條目2。虛擬磁盤分析器404能夠讀取日志條目3并且確定它是有效的并且確定它指示尾部位于指示日志條目2的文件偏移處。在這個例子中,虛擬磁盤分析器404能夠基于其序號、時間戳等來確定日志條目3是所檢測到的最新的有效日志條目,并且確定該序列由于針對存在于日志條目3內(nèi)的、日志條目2的標(biāo)識符的存在而從日志條目2開始。此外,指向日志條目2 (而不是I)的日志條目3的存在指示沖刷操作有時發(fā)生在日志條目2被生成之后但在日志條目3被創(chuàng)建之前。因此,日志條目3在日志條目I已被提交給虛擬磁盤406的磁盤上拷貝之后被創(chuàng)建。
[0077]轉(zhuǎn)向應(yīng)該包括日志條目4的空間,虛擬磁盤分析器404能夠掃描日志420的這個段并且確定它沒有描述有效日志條目。例如,它包括錯誤的會話標(biāo)識符、無效的校驗(yàn)碼或者是隨機(jī)數(shù)據(jù)。響應(yīng)于這個確定,虛擬磁盤分析器404能夠?qū)㈤g斷點(diǎn)更新為表示日志條目5的第一扇區(qū)的文件偏移并且留下序列值空白,因?yàn)檫@個條目沒有描述有效序列。
[0078]與前述操作類似,虛擬磁盤分析器404能夠掃描日志條目5并且確定它是有效的且指向日志條目2。在這個例子中,虛擬磁盤分析器404能夠被配置成確定所述序列由于針對日志條目2的標(biāo)識符存在于日志條目5內(nèi)而從日志條目2開始。因?yàn)樾蛄?2-5)中的每個日志條目都不是有效條目,所以虛擬磁盤分析器404能夠從考慮中排除這個序列。然而,因?yàn)槿罩緱l目5是有效的并且是最近的條目,所以虛擬磁盤分析器404能夠?qū)⑺鎯楹蜻x序列以供重放。對于排除具有無效條目的序列的一個原因是因?yàn)樘摂M磁盤分析器404能夠被配置成在所選序列中應(yīng)用每個日志條目的有效負(fù)荷,以及用壞數(shù)據(jù)重放序列能夠使虛擬磁盤文件406成為無用的。
[0079]繼續(xù)本例子的說明,虛擬磁盤分析器404能夠讀取日志條目6并且確定它是有效的且指向日志條目5。響應(yīng)于這個確定,虛擬磁盤分析器404能夠確定最新的日志條目是日志條目6 ;日志條目6包括針對日志條目5的標(biāo)識符;并且序列5-6不包括間斷。響應(yīng)于確定了這個信息,虛擬磁盤分析器404能夠更新表904中的“序列”值以便識別序列5至6現(xiàn)在是供重放的侯選序列。在更新表904之后,虛擬磁盤分析器404能夠讀取日志條目7并且確定它是有效的而且指向日志條目5。響應(yīng)于這個確定,虛擬磁盤分析器404能夠確定最新的日志條目是日志條目7 ;日志條目7包括針對日志條目5的標(biāo)識符;并且序列5、6、7不包括間斷。響應(yīng)于確定了這個信息,虛擬磁盤分析器404能夠更新表904中的“序列”值以便識別序列5至7現(xiàn)在是供重放的侯選序列。
[0080]因?yàn)槿罩?是存儲在持久化的日志902中的最后一個條目并且描述最近的有效序列,所以虛擬分析器404能夠選擇侯選序列(在這個例子中是日志條目5-7)并且將它們的有效負(fù)荷應(yīng)用到虛擬磁盤文件406。在示范性實(shí)施例中,虛擬磁盤分析器404能夠通過讀取每個日志條目的描述符和有效負(fù)荷并且將有效負(fù)荷寫到在該描述符中識別的文件偏移來應(yīng)用改變。例如,如果描述符包括4096的文件偏移并且有效負(fù)荷是4kb,則虛擬磁盤分析器404能夠從文件偏移4096開始寫入4kb有效負(fù)荷。
[0081]繼續(xù)圖9的描述,并且轉(zhuǎn)向持久化的日志906,它圖示了示范性的持久化的日志906和被執(zhí)行來在持久化的日志906的第一和第二通過(pass)期間填充表808的操作。與表904類似,表908能夠被初始化成以O(shè)開始。當(dāng)虛擬磁盤分析器404掃描日志條目12時,其能夠確定它是有效的并且它包括針對指向日志條目9的尾部的標(biāo)識符,所述日志條目9為仍然尚未被虛擬磁盤分析器404遇到的條目。因此,虛擬磁盤分析器404能夠確定最新的日志條目是日志條目12 ;日志條目12包括針對日志條目9的標(biāo)識符;以及序列9至12包括間斷,即指示日志條目10和11的日志條目。響應(yīng)于確定了這個信息,虛擬磁盤分析器404能夠更新表904中的“序列”值以便識別序列12本身是供重放的侯選序列。
[0082]隨著虛擬磁盤分析器404掃描日志906的日志條目,表908的剩余部分能夠被填充,并且當(dāng)?shù)竭_(dá)結(jié)束時虛擬磁盤分析器404能夠被配置成再次重新掃描每個條目以便調(diào)整表908來說明日志906的循環(huán)性質(zhì)。在這個例子中,當(dāng)日志條目12被再讀取時,虛擬磁盤分析器404能夠確定它是有效的并且它包括針對指向日志條目9的尾部的標(biāo)識符且所述序列不包括間斷。如圖所示,虛擬磁盤分析器404能夠確定序列9至14能夠被重放,因?yàn)樗ㄗ钚碌挠行l目(14)并且序列(9-14)中的每個日志條目都是有效的。
[0083]現(xiàn)轉(zhuǎn)向圖10,它圖示了用于擴(kuò)充日志條目的大小以便說明對由底層存儲設(shè)備所使用的扇區(qū)大小的改變的技術(shù)。例如,虛擬磁盤文件406可以被拷貝到包括具有較大扇區(qū)大小的存儲設(shè)備的新計(jì)算機(jī)系統(tǒng)。如果底層存儲設(shè)備被改變并且包括較大的扇區(qū)大小,則虛擬磁盤分析器404能夠擴(kuò)充由每個日志條目所存儲的有效負(fù)荷以便與扇區(qū)大小相匹配。在這點(diǎn)上,日志條目能夠繼續(xù)與底層存儲設(shè)備對齊。
[0084]通常,當(dāng)虛擬磁盤分析器404打開虛擬磁盤文件406并且確定扇區(qū)大小已經(jīng)擴(kuò)充時,虛擬磁盤分析器404能夠被配置成生成新日志并且將存儲在舊日志中的日志條目轉(zhuǎn)換成擴(kuò)充的日志條目。擴(kuò)充過程被完成后,虛擬磁盤分析器404能夠被配置成確定任何日志條目是否需要被重放;重放日志條目;并且然后進(jìn)入運(yùn)行時操作模式且執(zhí)行與相對于圖7所描述的那些類似的操作。
[0085]在實(shí)施例中,擴(kuò)充過程能夠包括確定舊扇區(qū)大小與新扇區(qū)大小之間的差并且使用這個信息來創(chuàng)建與舊日志條目等同的日志條目。例如,虛擬磁盤分析器404能夠按照新扇區(qū)大小劃分虛擬磁盤文件并且確定每個新扇區(qū)將在哪里開始。對于新日志中的第一條目,虛擬磁盤分析器404能夠根據(jù)描述符確定舊日志條目將在擴(kuò)充的扇區(qū)中位于哪里并且創(chuàng)建有效負(fù)荷,從而將條目的有效負(fù)荷寫到它將在新扇區(qū)內(nèi)位于的地方并且用來自磁盤的數(shù)據(jù)填充有效負(fù)荷的剩余部分。對于每個后續(xù)日志條目,虛擬磁盤分析器404能夠創(chuàng)建包括有效負(fù)荷的擴(kuò)充的條目,并且確定先前生成的擴(kuò)充的日志條目是否描述對這個扇區(qū)的改變。在它這樣做的例子中,虛擬磁盤分析器404能夠拷貝來自先前生成的一個或多個擴(kuò)充的條目的有效負(fù)荷并且拷貝來自磁盤的任何剩余部分。
[0086]在特定例子中,假設(shè)虛擬機(jī)410被從包括使用4kb扇區(qū)的存儲設(shè)備的計(jì)算機(jī)系統(tǒng)遷移到使用8kb扇區(qū)的計(jì)算機(jī)系統(tǒng)。在這個特定例子中,虛擬磁盤分析器404能夠通過例如查詢針對新存儲設(shè)備的設(shè)備信息來確定扇區(qū)大小已增加了并且確定擴(kuò)充由日志420所使用的扇區(qū)大小。虛擬磁盤分析器能夠掃描虛擬磁盤文件406以得到未使用段并且確定將它用于新日志。虛擬磁盤分析器404能夠在虛擬磁盤文件406的未使用的段中創(chuàng)建擴(kuò)充的日志910并且開始擴(kuò)充日志條目902和904。例如,虛擬磁盤分析器404能夠掃描日志條目1002并且確定它位于文件偏移16kb處。虛擬磁盤分析器404能夠確定16kb表示8kb對齊扇區(qū)的第一部分(例如虛擬磁盤分析器404能夠?qū)?6kb除以Skb并且確定答案是整數(shù),即2)。虛擬磁盤分析器404然后能夠創(chuàng)建擴(kuò)充的日志條目1006,并且將針對日志條目1002的有效負(fù)荷(A’)拷貝到日志條目1006中。因?yàn)閿U(kuò)充的日志1010中的日志條目是8kb,所以第二部分需要被添加到日志條目1006使得當(dāng)擴(kuò)充的日志1010被重放時,寫到存儲器中持久化的虛擬磁盤文件的拷貝的數(shù)據(jù)將是正確的。為了把這個問題考慮在內(nèi),虛擬磁盤分析器404能夠被配置成掃描擴(kuò)充的日志1010中的日志條目以得到更新文件偏移20kb的有效負(fù)荷并且確定沒有任何東西存在。響應(yīng)于這個確定,虛擬磁盤分析器404能夠讀取持久化的虛擬磁盤文件1000中的文件偏移20kb并且將它拷貝到日志條目1006中。
[0087]在日志條目1006被創(chuàng)建之后,虛擬磁盤分析器404能夠讀取日志條目1004并且確定它包括對虛擬文件偏移20kb的更新。虛擬磁盤分析器404能夠確定20kb表示8kb對齊扇區(qū)的第二部分;創(chuàng)建擴(kuò)充的日志條目1008 ;并且將針對日志條目1004的有效負(fù)荷(B’ )拷貝到日志條目1008中成為日志條目1008的第二 4kb大小的部分。虛擬磁盤分析器404能夠被配置成掃描擴(kuò)充的日志1010中的日志條目,以得到更新文件偏移20kb的有效負(fù)荷并且確定日志條目1006修改了偏移16kb。響應(yīng)于這個確定,虛擬磁盤分析器404能夠?qū)’拷貝到日志條目1008的第一部分中。因此,當(dāng)這兩個日志條目被虛擬磁盤分析器404應(yīng)用時,虛擬磁盤文件將在虛擬磁盤偏移16kb處包括A’和B’。在每個日志條目都被擴(kuò)充并且應(yīng)用于磁盤之后,虛擬磁盤420能夠被虛擬機(jī)410使用。
[0088]轉(zhuǎn)向圖11,它圖示了用于收縮日志條目的技術(shù)。用于收縮日志條目的底層基本原理與上面相對于圖10所討論的原理相同并且類似操作能夠被用來收縮日志。在圖11中,假設(shè)虛擬機(jī)410被從包括使用Skb扇區(qū)(或二的任何其它冪大小的扇區(qū))的存儲設(shè)備的計(jì)算機(jī)系統(tǒng)遷移到使用4kb扇區(qū)的計(jì)算機(jī)系統(tǒng)。虛擬磁盤分析器404能夠打開持久化的虛擬磁盤文件1100并且通過將日志條目中的一個的頭部中的信息與由新存儲設(shè)備所提供的信息相比較來確定扇區(qū)大小已被改變。響應(yīng)于所述比較,虛擬磁盤分析器404能夠被配置成收縮由日志420所使用的扇區(qū)大小。虛擬磁盤分析器404能夠掃描虛擬磁盤文件406以得到未使用的段并且確定將它用于新日志。虛擬磁盤分析器404能夠在虛擬磁盤文件406的未使用段中創(chuàng)建收縮日志1110并且開始掃描日志。虛擬磁盤分析器404能夠掃描日志條目1102,并且確定它位于文件偏移16kb處且第一部分表不對文件偏移16kb的改變而隱含地第二部分表示對文件偏移20kb的改變。虛擬磁盤分析器404然后能夠創(chuàng)建收縮日志條目1104和1106并且將日志條目1102的第一部分拷貝到日志條目1104以及將日志條目1102的第二部分拷貝到日志條目1106。因此,當(dāng)這兩個日志條目被虛擬磁盤分析器404應(yīng)用時,虛擬磁盤文件406將分別在虛擬磁盤文件偏移16kb和虛擬磁盤文件20kb處包括A’和B。在每個日志條目都被收縮并且應(yīng)用于虛擬磁盤文件在RAM中的拷貝(虛擬磁盤文件406)之后,虛擬磁盤402能夠被虛擬機(jī)410使用。
[0089]以下是描繪了操作過程的一系列流程圖。為了便于理解,流程圖被組織使得初始流程圖經(jīng)由總體“大圖”視點(diǎn)來呈現(xiàn)各實(shí)施方案,而后續(xù)流程圖提供了被用虛線圖示的另外的附加和/或細(xì)節(jié)。此外,本領(lǐng)域內(nèi)的技術(shù)人員能夠理解,由虛線所描繪的操作過程被認(rèn)為是可選的。
[0090]現(xiàn)轉(zhuǎn)向圖12,它圖示了包括操作1200、1202、1204、1206以及1208的操作過程。操作1200開始操作過程,以及操作1202示出了計(jì)算機(jī)系統(tǒng)能夠包括被配置成在隨機(jī)存取存儲器中實(shí)例化針對虛擬磁盤文件的日志的電路,所述日志包括有序的日志條目。例如,并且簡要地參考圖4,計(jì)算機(jī)系統(tǒng)400能夠包括虛擬磁盤分析器404,其能夠在隨機(jī)存取存儲器中實(shí)例化來自虛擬磁盤文件406的日志420。轉(zhuǎn)向圖6,虛擬磁盤分析器404能夠打開虛擬磁盤文件406到隨機(jī)存取存儲器中并且檢測存儲在其中的日志420。虛擬磁盤分析器404然后能夠?qū)⑷罩?20拷貝到隨機(jī)存取存儲器104中。如由圖6所示出的那樣,存儲在日志420中的日志條目能夠被排序,例如,每個條目能夠包括序號或某個其它標(biāo)識符,諸如指示日志條目被以其寫入的順序的時間戳。
[0091]繼續(xù)圖12的描述,操作1204示出了計(jì)算機(jī)系統(tǒng)能夠包括被配置成識別日志中的日志條目的電路,所述日志條目是日志中的在將緩存的輸入/輸出作業(yè)提交給存儲設(shè)備的請求被發(fā)布之后生成的最舊的日志條目。虛擬磁盤分析器404能夠在處理器102上執(zhí)行并且讀取指示尾部的位置的指針。在這個例子中,尾部能夠指向指示尚未被沖刷到存儲磁盤106的日志條目的開始的虛擬磁盤文件偏移。換句話說,尾部能夠指向未被沖刷的最舊的日志條目。轉(zhuǎn)向圖8,假設(shè)日志420處于與日志420-B類似的狀態(tài)。在這個例子中,虛擬磁盤分析器404能夠確定尾部是在日志420-A的開始處,例如針對日志條目I的第一偏移或虛擬磁盤文件偏移O處。
[0092]往回轉(zhuǎn)向圖12,操作1206示出了計(jì)算機(jī)系統(tǒng)能夠包括用于將針對經(jīng)識別的日志條目的標(biāo)識符添加到新生成的日志條目的電路。例如,虛擬磁盤分析器404能夠?qū)?biāo)識符(例如,指示用來存儲日志條目I的、日志420中第一字節(jié)的虛擬磁盤文件偏移)、經(jīng)識別的日志條目的序號等添加到新生成的日志條目。在特定例子中,并且轉(zhuǎn)向圖8,假設(shè)日志420處于由日志420-A所圖示的狀態(tài),在這個例子中虛擬磁盤分析器404能夠生成日志條目2并且將針對日志條目I的標(biāo)識符添加到日志條目2的頭部。
[0093]繼續(xù)圖12的描述,操作1208示出了計(jì)算機(jī)系統(tǒng)400能夠包括用于將新生成的日志條目寫到日志的電路。虛擬磁盤分析器404能夠?qū)⑿律傻娜罩緱l目寫到日志420。響應(yīng)于寫入日志條目,描述日志條目的一個或多個輸入/輸出作業(yè)能夠被發(fā)布給存儲設(shè)備106。所述一個或多個IO作業(yè)能夠被處理并且存儲在存儲設(shè)備106的各種高速緩存器中,直到它們最后被提交給持久性存儲單元460,例如磁盤唱片、閃速存儲器的一個或多個單元等。當(dāng)新生成的日志條目被存儲設(shè)備106提交時,其既充當(dāng)檢查點(diǎn)記錄(指示在尾部之前的事件日志已被提交給存儲設(shè)備106并且被應(yīng)用于虛擬磁盤文件406)且充當(dāng)日志條目。
[0094]現(xiàn)轉(zhuǎn)向圖13,它圖示了能夠與由圖12所圖示的那些相結(jié)合地執(zhí)行的附加的操作。操作1310圖示了在實(shí)施例中計(jì)算機(jī)系統(tǒng)能夠包括用于將新生成的日志條目寫到日志的電路,所述新生成的日志條目包括具有至少和存儲設(shè)備的扇區(qū)的大小一樣大的大小的位模式。例如,并且轉(zhuǎn)向圖7,在這個例子中日志條目能夠包括有效負(fù)荷(例如位模式),其與持久性存儲單元460的扇區(qū)具有相同的大小。在特定例子中,日志條目能夠與日志條目702、704或706類似。在這個日志條目被重放的實(shí)例中,虛擬磁盤分析器404能夠?qū)⒂行ж?fù)荷的內(nèi)容寫到由日志420所識別的虛擬磁盤文件406中的虛擬磁盤文件偏移。
[0095]繼續(xù)圖13的描述,操作1312指示計(jì)算機(jī)系統(tǒng)還能夠包括用于將新生成的日志條目寫到日志的電路,所述新生成的日志條目包括指示器,所述指示器識別針對日志條目的位模式是全零。例如,虛擬磁盤分析器404能夠確定生成包括全部為零的有效負(fù)荷的日志條目。在這個例子中,不是創(chuàng)建這樣的日志條目,而是虛擬磁盤分析器404能夠生成在描述符中包括指示有效負(fù)荷為全零的標(biāo)識符的日志條目。這種類型的日志條目能夠被用來降低日志條目在日志420中占用的空間量。在特定例子中,該日志條目可能與圖7的日志條目708類似。
[0096]如由操作1314所示出的那樣,計(jì)算機(jī)系統(tǒng)能夠附加地包括用于將新生成的日志條目寫到日志的電路,所述新生成的日志條目包括第一扇區(qū)大小的位模式和第二扇區(qū)大小的位模式。例如,虛擬磁盤分析器404能夠接收對虛擬磁盤文件元數(shù)據(jù)作出兩個改變(例如,對分配表416的兩個改變)的請求,所述兩個改變?nèi)Q于彼此。虛擬磁盤分析器404能夠被配置成當(dāng)多個扇區(qū)需要被改變以便捕獲對虛擬磁盤文件元數(shù)據(jù)的單個修改時或者當(dāng)離散的改變以事物的方式取決于彼此時確定改變?nèi)Q于彼此并且生成包括兩個或更多個有效負(fù)荷的單個日志條目。在特定例子中,由虛擬磁盤分析器404所生成的日志條目可能與圖7的日志條目704類似。
[0097]繼續(xù)圖13的描述,操作1316示出了計(jì)算機(jī)系統(tǒng)能夠包括被配置成將識別針對虛擬磁盤文件的文件結(jié)束偏移的信息添加到新生成的日志條目的電路。例如,虛擬磁盤分析器404能夠?qū)⒆R別針對虛擬磁盤文件406的文件結(jié)束的信息在將它寫到日志420之前添加到新生成的日志條目。例如,虛擬磁盤文件406能夠基于虛擬磁盤402如何被虛擬機(jī)410使用而被擴(kuò)展。與對虛擬磁盤文件406的其它寫入類似,擴(kuò)展EOF (文件結(jié)束)的寫入直到?jīng)_刷被存儲設(shè)備106完成之后才被保證已被持久化。因此,在虛擬磁盤文件406的EOF不同于虛擬磁盤文件406中日志條目中的EOF的實(shí)例中,虛擬磁盤分析器404能夠被配置成當(dāng)日志條目被創(chuàng)建時添加識別EOF的信息以便改正EOF。
[0098]轉(zhuǎn)向操作1318,它示出了計(jì)算機(jī)系統(tǒng)還能夠包括被配置成響應(yīng)于接收到迫使緩存的輸入/輸出作業(yè)被提交的請求而將改變應(yīng)用于由日志條目和新生成的日志條目所識別的虛擬磁盤文件的電路。例如,有時在日志條目被寫到日志420之后,沖刷命令能夠被發(fā)布。沖刷被發(fā)布給存儲設(shè)備106后,虛擬磁盤分析器404就能夠?qū)⒆宰詈鬀_刷以來被記錄的日志條目的有效負(fù)荷段中的改變應(yīng)用到虛擬磁盤文件406,從而使指示所述改變的IO作業(yè)被發(fā)布給存儲設(shè)備106。在特定例子中,并且轉(zhuǎn)向圖7的日志420-D和420-E,假設(shè)沖刷命令在尾部指針正指向指示日志條目3的第一扇區(qū)時被發(fā)布。響應(yīng)于沖刷的發(fā)布,虛擬磁盤分析器404能夠識別自最后沖刷以來被記錄的日志條目(即日志條目3),因?yàn)槲膊恐羔樦甘緵_刷在日志條目2之后被完成,并且能夠?qū)⑷罩緱l目3的有效負(fù)荷應(yīng)用到虛擬磁盤文件406。在特定例子中,有效負(fù)荷能夠是對分配表416的更新。在日志條目3的有效負(fù)荷被應(yīng)用于虛擬磁盤文件406之后,虛擬磁盤分析器404能夠更新尾部指針以便指向日志條目4將被寫入的地方,像由日志420-E所示出的那樣。虛擬磁盤分析器404然后能夠發(fā)布另一沖刷;然而,因?yàn)闆_刷日志條目等同于將由日志條目所描述的改變沖刷到虛擬磁盤文件406,所以虛擬磁盤解析404未被要求發(fā)布另一沖刷。
[0099]在特定的例子中,虛擬磁盤分析器404可以發(fā)布沖刷命令。例如,虛擬磁盤分析器404可以包括被設(shè)置為預(yù)定時間段的定時器。當(dāng)定時器期滿時,虛擬磁盤分析器404能夠被配置成發(fā)布沖刷命令。本領(lǐng)域的技術(shù)人員能夠理解,預(yù)定時間間隔能夠基于計(jì)算機(jī)系統(tǒng)中硬件的類型而被設(shè)置并且考慮它完成沖刷花費(fèi)的成本(在時間方面)。附加地,或者在供替代的選擇中,虛擬磁盤分析器404能夠被配置成響應(yīng)于日志420內(nèi)的存儲器壓力將沖刷命令發(fā)布給存儲設(shè)備106。例如,日志420的大小可能是有限制的,并且虛擬磁盤分析器404可以被配置成在預(yù)定空間量在日志420內(nèi)被分配來存儲日志文件的實(shí)例中發(fā)布沖刷命令。類似地,預(yù)定空間量能夠基于計(jì)算機(jī)系統(tǒng)中硬件的類型、日志420的大小、它完成沖刷花費(fèi)的時間量等而被設(shè)置。簡要地轉(zhuǎn)向圖7,與日志條目710類似的日志條目能夠被用來在日志420內(nèi)的存儲器壓力超過門限的實(shí)例中發(fā)起沖刷操作。
[0100]沖刷還能夠通過虛擬機(jī)410或客戶端計(jì)算機(jī)系統(tǒng)506而被發(fā)布。例如,假設(shè)應(yīng)用424是被設(shè)置成每十分鐘自動保存的文字處理程序。當(dāng)定時器期滿時,文字處理程序能夠?qū)_刷發(fā)布給客戶操作系統(tǒng)412以便于保存文件的內(nèi)容。響應(yīng)于接收到?jīng)_刷請求,客戶操作系統(tǒng)412能夠命令文件系統(tǒng)414沖刷并且虛擬磁盤分析器404最后能夠接收對沖刷的請求。虛擬磁盤分析器404能夠繼而將沖刷發(fā)布給虛擬化系統(tǒng)文件系統(tǒng)408。因此,對虛擬磁盤文件元數(shù)據(jù)的改變能夠非法關(guān)閉(piggy-back off)由虛擬機(jī)410或計(jì)算機(jī)系統(tǒng)506所啟動的沖刷操作。虛擬磁盤分析器404能夠接收指示存儲設(shè)備106完成沖刷的確認(rèn)信號并且將沖刷的完成報(bào)告給文件系統(tǒng)414。
[0101]現(xiàn)參考圖14,它圖示了能夠與圖13的操作1318相結(jié)合地執(zhí)行的附加的操作。如由操作1420所示出的那樣,計(jì)算機(jī)系統(tǒng)還能夠包括用于將附加的日志條目寫到日志的電路,所述附加的日志條目包括針對附加的日志條目的標(biāo)識符,所述附加的日志條目是日志中的在提交緩存的輸入/輸出作業(yè)的請求被發(fā)布給存儲設(shè)備之后生成的最舊的日志條目。例如,有時在沖刷之后,對虛擬磁盤文件406的元數(shù)據(jù)的另一改變能夠通過虛擬磁盤分析器404而被作出。在這個例子中,虛擬磁盤分析器404能夠生成包括指示改變的有效負(fù)荷的另一日志條目并且檢查針對尾部的存儲器指針以便確定哪一個標(biāo)識符將寫到附加的日志條目。因?yàn)槿罩緱l目和新生成的日志已經(jīng)被沖刷,所以虛擬磁盤分析器404能夠?qū)⑨槍Ω郊拥娜罩緱l目的標(biāo)識符添加到附加的日志條目并且將它寫到日志420。返回到圖8并且特別地返回到日志420-E,假設(shè)虛擬磁盤分析器404生成日志條目4并且確定日志條目1_3已被提交和應(yīng)用。響應(yīng)于這個確定,虛擬磁盤分析器404能夠?qū)⒅甘救罩緱l目4的起始位置的虛擬磁盤文件偏移添加到日志條目4的頭部并且將日志條目4寫到日志420。
[0102]往回轉(zhuǎn)向圖14,操作1422它指示在實(shí)施例中計(jì)算機(jī)系統(tǒng)能夠包括用于響應(yīng)于日志條目既已被提交給存儲設(shè)備且已應(yīng)用于虛擬磁盤文件的確定來蓋寫日志條目的電路。例如,虛擬磁盤分析器404能夠被配置成蓋寫已被沖刷的日志條目。在實(shí)施例中,尾部指針的放置能夠被用來區(qū)分沖刷的日志條目與未被沖刷的那些日志條目。虛擬磁盤分析器404能夠被配置成蓋寫具有比指示尾部指針的虛擬磁盤文件偏移值小的虛擬磁盤文件偏移值的日志條目。簡要地轉(zhuǎn)向圖8,并且尤其是日志420-F和420-G,虛擬磁盤分析器404能夠生成日志條目5并且確定到達(dá)了日志420的結(jié)束。虛擬磁盤分析器404然后能夠確定針對尾部的地址并且確定日志條目1-3由于尾部指針的位置已被沖刷了。虛擬磁盤分析器404然后能夠?qū)⑷罩緱l目5寫到日志420,如由日志420-G所示出的那樣。
[0103]繼續(xù)圖14的描述,操作1424示出了計(jì)算機(jī)系統(tǒng)能夠包括用于響應(yīng)于虛擬磁盤文件被不正確地關(guān)閉的確定而掃描日志的電路;用于識別有效日志條目的序列的電路,所述序列包括被寫到日志的最新的有效日志條目和在間斷之后被寫到日志的序列中的每個日志條目;以及用于將改變應(yīng)用于由日志條目的序列所識別的虛擬磁盤文件的電路。例如,掉電可能有時發(fā)生在計(jì)算機(jī)系統(tǒng)400的操作期間。計(jì)算機(jī)系統(tǒng)400可能被重新啟動并且虛擬化系統(tǒng)420可能被執(zhí)行。虛擬磁盤分析器404能夠啟動運(yùn)行并且啟動虛擬機(jī)410的請求可能被接收到。虛擬磁盤分析器404能夠打開存儲在存儲設(shè)備106上的虛擬磁盤文件406以及打開日志420。虛擬磁盤分析器404能夠讀取存儲在持久化的日志420中的日志條目并且確定是否有有效條目的序列存儲在其中。虛擬磁盤分析器404然后能夠選擇有效條目的序列,即,所述序列中的每個條目都是有效的,所述序列包括最近的條目,并且所述序列中的每個日志條目在最近的間斷點(diǎn)之后被寫入。所述序列被識別后,虛擬磁盤分析器404就能夠從所述序列中的日志條目中提取一個或多個有效負(fù)荷并且將它們應(yīng)用于虛擬磁盤文件406,從而使一個或多個IO作業(yè)被發(fā)布給存儲磁盤106以便改變虛擬磁盤文件406的磁盤上拷貝。
[0104]在特定例子中,并且參考圖9,假設(shè)在重啟之后日志420看起來與持久化的日志902類似。在這個例子中,虛擬磁盤分析器404可以識別包括最新的有效條目(日志條目7)的有效條目序列(日志條目5-7)并且所述序列中的每個日志條目都在最近的間斷(日志條目4)之后被寫入。在這個特定例子中,虛擬磁盤分析器404能夠被配置成選擇日志條目5-7并且從每個日志條目中提取有效負(fù)荷和虛擬磁盤文件偏移。虛擬磁盤分析器404然后能夠順序地將每個負(fù)載應(yīng)用于虛擬磁盤文件406。
[0105]繼續(xù)圖14的描述,操作1426指示計(jì)算機(jī)系統(tǒng)能夠包括用于響應(yīng)于虛擬磁盤文件被移動到第二存儲設(shè)備的確定而生成第二日志的電路,所述第二存儲設(shè)備具有擴(kuò)充的扇區(qū)大??;以及用于將擴(kuò)充的日志條目寫到第二日志的電路,所述擴(kuò)充的日志條目包括從日志條目獲得的位模式和從虛擬磁盤文件獲得的位模式。例如,假設(shè)虛擬磁盤文件406被從計(jì)算機(jī)系統(tǒng)400拷貝到具有類似配置的不同計(jì)算機(jī)系統(tǒng),并且其存儲設(shè)備的扇區(qū)大小是較大的。例如,假設(shè)存儲設(shè)備106的扇區(qū)大小是4kb以及較大存儲設(shè)備的扇區(qū)大小是8kb。在這個例子中,虛擬磁盤分析器404能夠打開虛擬磁盤文件406到存儲器中并且讀取日志420。虛擬磁盤分析器404能夠確定針對較大存儲設(shè)備的扇區(qū)大小大于日志條目中的有效負(fù)荷并且確定擴(kuò)充日志條目的大小。在特定例子中,虛擬磁盤分析器404能夠識別事件的序列以便應(yīng)用于虛擬磁盤文件406,并且然后生成包括反映所選序列的擴(kuò)充的日志的新的擴(kuò)充的日志。在特定例子中,擴(kuò)充的日志能夠與由圖10所示出的擴(kuò)充的日志1010類似,并且擴(kuò)充的日志條目能夠與日志條目1006類似。在擴(kuò)充的日志被生成之后,虛擬磁盤分析器404能夠被配置成生成包括來自日志條目的有效負(fù)荷和來自虛擬磁盤文件406的數(shù)據(jù)的日志條目。
[0106]繼續(xù)圖14的描述,操作1428指示計(jì)算機(jī)系統(tǒng)能夠包括用于響應(yīng)于虛擬磁盤文件被移動到第二存儲設(shè)備的確定而生成第二日志的電路,所述第二存儲設(shè)備具有擴(kuò)充的扇區(qū)大??;以及用于將擴(kuò)充的日志條目寫到第二日志的電路,所述擴(kuò)充的日志條目包括從第二日志條目獲得的針對第二扇區(qū)的位模式和從第一日志條目獲得的針對第一扇區(qū)的位模式。例如,假設(shè)虛擬磁盤文件406被從計(jì)算機(jī)系統(tǒng)400拷貝到具有類似配置的不同計(jì)算機(jī)系統(tǒng)并且其存儲設(shè)備的扇區(qū)大小是較大的。例如,假設(shè)存儲設(shè)備106的扇區(qū)大小是4kb而較大存儲設(shè)備的扇區(qū)大小是8kb。在這個例子中,虛擬磁盤分析器404能夠打開虛擬磁盤文件406到存儲器中并且讀取日志420。虛擬磁盤分析器404能夠確定針對較大存儲設(shè)備的扇區(qū)大小大于日志條目中的有效負(fù)荷并且確定擴(kuò)充日志條目的大小。虛擬磁盤分析器404然后能夠創(chuàng)建擴(kuò)充的日志條目,其包括來自從日志420獲得的多個日志條目的數(shù)據(jù)。在特定例子中,擴(kuò)充的日志能夠與由圖10所示出的擴(kuò)充的日志1010類似,并且擴(kuò)充的日志條目能夠與日志條目1008類似。
[0107]現(xiàn)轉(zhuǎn)向圖15,它圖示了包括操作1500、1502、1504、1506以及1508的操作過程。操作1500開始過程,以及操作1502圖示了計(jì)算機(jī)系統(tǒng)能夠包括被配置成訪問針對虛擬磁盤文件的日志的電路,所述日志包括被以順序次序?qū)懭氲娜罩緱l目。例如,虛擬磁盤分析器404能夠打開虛擬磁盤文件406到隨機(jī)存取存儲器104中。虛擬磁盤分析器404能夠讀取虛擬磁盤文件406并且檢測存儲在其中的日志420。在特定例子中,日志420能夠與圖9的日志902或906類似。
[0108]繼續(xù)圖15的描述,操作1504示出了計(jì)算機(jī)系統(tǒng)能夠包括用于響應(yīng)于序列中的每個日志條目都是有效的以及每個日志條目在日志文件中的間斷之后被寫到日志的確定而選擇日志條目的序列的電路,所述序列包括最新的有效日志條目。例如,虛擬磁盤分析器404能夠掃描日志420中的每個日志條目并且生成識別每個有效日志條目所屬于的序列的信息的表。例如,并且假定日志420與日志906類似,虛擬磁盤分析器404能夠創(chuàng)建與表908類似的表。在表908被填充并且掃描第二次之后,虛擬磁盤分析器404能夠選擇包括最新的有效日志條目的有效條目的序列并且每個日志條目在間斷之后被寫到日志。在這個特定例子中,虛擬磁盤分析器404能夠選擇序列9-14,因?yàn)樗ㄗ罱挠行罩緱l目(日志條目14)并且每個條目在最近的間斷(位于日志條目8應(yīng)該在的地方的間斷)之后被寫入。
[0109]現(xiàn)轉(zhuǎn)向操作1506,它說明了計(jì)算機(jī)系統(tǒng)400還能夠包括用于將改變應(yīng)用于由日志條目的序列所識別的虛擬磁盤文件的扇區(qū)的電路。返回到圖9,在其中日志420與日志908類似的實(shí)例中,虛擬磁盤分析器404能夠確定重放日志事件9-14。虛擬磁盤分析器404能夠提取有效負(fù)荷和虛擬磁盤文件偏移值并且將有效負(fù)荷寫到虛擬磁盤406。寫入有效負(fù)荷導(dǎo)致IO作業(yè)被發(fā)布到存儲設(shè)備106以便將它們提交給磁盤。
[0110]現(xiàn)轉(zhuǎn)向圖16,它圖示了能夠被計(jì)算機(jī)系統(tǒng)執(zhí)行的替換的操作?,F(xiàn)轉(zhuǎn)向操作1608,它示出了計(jì)算機(jī)系統(tǒng)能夠被配置成包括用于基于存儲在日志條目的序列中的日志條目中的文件結(jié)束標(biāo)識符來修改針對虛擬磁盤文件的文件結(jié)束標(biāo)識符的電路。例如,虛擬磁盤分析器404能夠響應(yīng)于檢測到指示虛擬磁盤文件406的EOF不同于所記錄的東西的所選序列中的一個日或多個日志條目而改變虛擬磁盤文件406的EOF。例如,如果信息指示EOF已被擴(kuò)展,則虛擬磁盤分析器404能夠擴(kuò)展虛擬磁盤文件406以便和日志條目中的東西相匹配。
[0111]轉(zhuǎn)向操作1610,它示出了在實(shí)施例中計(jì)算機(jī)系統(tǒng)能夠包括用于響應(yīng)于存儲虛擬磁盤文件的存儲設(shè)備的扇區(qū)大小已增加的確定而生成第二日志的電路;以及用于將擴(kuò)充的日志條目寫到第二日志的電路,所述擴(kuò)充的日志條目包括從虛擬磁盤文件獲得的位模式和從日志中的日志條目獲得的位模式。例如,虛擬磁盤分析器404能夠打開虛擬磁盤文件406并且掃描日志420。虛擬磁盤分析器404能夠確定日志420被創(chuàng)建在其上的存儲設(shè)備的扇區(qū)大小并且將它與當(dāng)前存儲虛擬磁盤文件406的存儲設(shè)備的扇區(qū)大小相比較。在這個例子中,假設(shè)日志420在不同計(jì)算機(jī)系統(tǒng)上被生成并且存儲設(shè)備106的扇區(qū)大小大于由不同計(jì)算機(jī)系統(tǒng)所使用的扇區(qū)大小。例如,假設(shè)存儲設(shè)備106的扇區(qū)大小是8kb而先前存儲虛擬磁盤文件406的存儲設(shè)備的扇區(qū)大小是4kb。響應(yīng)于這個確定,虛擬磁盤分析器404能夠通過生成新的擴(kuò)充的日志來擴(kuò)充日志條目的大小。
[0112]在示范性配置中,虛擬磁盤分析器404能夠確定日志420中的日志條目的序列來重放并且為所述序列中的每個日志條目創(chuàng)建擴(kuò)充的條目。虛擬磁盤分析器404能夠?yàn)樾蛄兄械拿總€日志條目生成具有等于由存儲設(shè)備106所使用的扇區(qū)大小的倍數(shù)(在特定例子中等于8kb的倍數(shù))的有效負(fù)荷的擴(kuò)充的日志條目。然后,對于序列中的每個日志條目,虛擬磁盤分析器404能夠使用由存儲設(shè)備106所使用的扇區(qū)大小和來自舊的日志條目的描述符來確定在哪里將有效負(fù)荷插入到新的日志條目中,使得新的日志條目與存儲設(shè)備106的扇區(qū)大小對齊。對于第一個新的日志條目,虛擬磁盤分析器404能夠使用來自虛擬磁盤文件406的數(shù)據(jù)來填充有效負(fù)荷的剩余部分,以及對于每個后續(xù)條目,虛擬磁盤分析器404能夠使用磁盤上數(shù)據(jù)和來自序列內(nèi)的較早日志條目的數(shù)據(jù)的組合。
[0113]繼續(xù)圖16的描述,操作1612示出了計(jì)算機(jī)系統(tǒng)能夠包括用于響應(yīng)于存儲虛擬磁盤文件的存儲設(shè)備的扇區(qū)大小已減少的確定而生成第二日志的電路;以及用于將第一收縮日志條目和第二收縮日志條目寫到第二日志的電路,所述第一收縮日志條目包括從日志中的日志條目獲得的位模式的一部分,以及第二收縮日志條目包括從日志中的日志條目獲得的位模式的剩余部分。例如,虛擬磁盤分析器404能夠配置成確定由底層存儲設(shè)備所使用的扇區(qū)大小小于在日志420中指示的扇區(qū)大小。在可選配置中,虛擬磁盤分析器404能夠在虛擬磁盤文件406內(nèi)創(chuàng)建新的收縮日志,并且通過使用存儲設(shè)備106的扇區(qū)大小來將每個日志條目分割成多個日志條目而將被選擇來重放的日志條目的序列轉(zhuǎn)換成收縮日志條目。收縮日志條目被生成后,虛擬磁盤分析器404就能夠通過將有效負(fù)荷應(yīng)用于虛擬磁盤文件406來重放它們。寫入與收縮日志條目相關(guān)聯(lián)的有效負(fù)荷的行為使一個或多個IO作業(yè)被發(fā)布給存儲設(shè)備106。存儲設(shè)備106能夠?qū)O作業(yè)存儲在高速緩存器454中,并且然后最終將它們提交給虛擬磁盤文件406的磁盤上拷貝。雖然日志420能夠被收縮,但是它不是必須被收縮。用較小扇區(qū)大小來重放在設(shè)備上針對較大扇區(qū)大小所創(chuàng)建的日志是安全的。[0114]繼續(xù)圖16的描述,操作1614示出了計(jì)算機(jī)系統(tǒng)能夠附加地包括用于在將每個日志條目寫到日志之前將針對最舊的未沖刷的日志條目的標(biāo)識符添加到每個日志條目的電路。例如,當(dāng)虛擬磁盤分析器404確定更新虛擬磁盤文件406的元數(shù)據(jù)(例如對分配表416的更新)時,虛擬磁盤分析器404能夠檢查識別日志420中的最舊的未沖刷的日志條目的存儲器指針。在這個例子中,虛擬磁盤分析器404能夠被配置成將最舊的未沖刷的日志條目的標(biāo)識符添加到被生成的每個日志條目,所述標(biāo)識符例如是指示用來存儲經(jīng)識別的日志條目的第一扇區(qū)的虛擬磁盤文件偏移、經(jīng)識別的日志條目的序號等。
[0115]繼續(xù)圖16的描述,操作1616示出了計(jì)算機(jī)系統(tǒng)400能夠附加地包括用于響應(yīng)于隨后寫入的日志條目包括指示沖刷的日志條目被提交給存儲設(shè)備并且被應(yīng)用于虛擬磁盤文件的信息的確定而蓋寫沖刷的日志條目的電路。例如,虛擬磁盤分析器404能夠被配置成在另一日志條目包括指示沖刷的日志條目實(shí)際上被沖刷了的信息的實(shí)例中蓋寫已被沖刷的日志條目。在示范性實(shí)施例中,所述信息可以是針對更近的日志條目的標(biāo)識符的存在。針對更近的日志條目的標(biāo)識符在另一日志條目內(nèi)的存在指示在更近的日志條目之前的日志條目被沖刷到磁盤的事實(shí)。例如,并且轉(zhuǎn)向圖8的日志420-F。針對日志條目4的標(biāo)識符在日志條目4內(nèi)的存在指示日志條目1-3已被沖刷并且已被應(yīng)用于虛擬磁盤文件406。
[0116]轉(zhuǎn)向圖17,它示出了計(jì)算機(jī)系統(tǒng)400能夠被配置成執(zhí)行的操作過程,其包括操作1700、1702、1704以及1706。轉(zhuǎn)向操作1700,它開始操作過程,以及操作1702示出了計(jì)算機(jī)系統(tǒng)能夠包括用于實(shí)例化針對虛擬機(jī)的虛擬磁盤的電路,所述虛擬磁盤被虛擬磁盤文件支持。例如,并且簡要地參考圖4,計(jì)算機(jī)系統(tǒng)400能夠包括虛擬磁盤分析器404,其能夠?qū)嵗摂M機(jī)410內(nèi)的虛擬磁盤402。轉(zhuǎn)向圖5,這個圖圖示了虛擬磁盤402能夠被虛擬磁盤文件406支持?;蛘邠Q句話說,虛擬磁盤文件406能夠存儲針對虛擬磁盤402的底層數(shù)據(jù)。
[0117]繼續(xù)圖17的描述,操作1704示出了計(jì)算機(jī)系統(tǒng)能夠附加地包括但不限于用于確定寫到虛擬磁盤文件的位模式的電路。虛擬磁盤分析器404能夠響應(yīng)于從虛擬機(jī)410接收到IO作業(yè)或某個其它信號而確定修改虛擬磁盤文件406的元數(shù)據(jù)。在特定例子中,假設(shè)虛擬磁盤402的塊通過虛擬機(jī)410被寫入并且這個塊未由虛擬磁盤文件406的任何部分來描述。虛擬磁盤分析器404可以選擇虛擬磁盤文件的段以便使用來描述該虛擬磁盤塊;更新分配表416的存儲器中拷貝并且生成指示將虛擬磁盤塊鏈接到虛擬磁盤文件的段的信息的位模式以便寫到分配表416的磁盤上拷貝,所述分配表416被存儲在虛擬磁盤文件406中。
[0118]繼續(xù)圖17的描述,操作1706指示計(jì)算機(jī)系統(tǒng)能夠包括用于生成日志條目的電路,所述日子條目包括寫到日志的位模式,所述日志包括有序的日志條目,所述日志被存儲在隨機(jī)存取存儲器中。例如,虛擬磁盤分析器404能夠被配置成生成日志條目并且將位模式寫到日志條目的有效負(fù)荷段。轉(zhuǎn)向圖7,在特定的示例性實(shí)施例中,虛擬磁盤分析器404能夠生成具有與日志條目702、704或706類似的格式的日志條目。在這個例子中,日志條目能夠包括:頭部,其識別數(shù)據(jù)是日志條目、序號、時間戳、會話號(識別條目所針對的會話)等;識別在虛擬磁盤文件406中寫入位模式的位置的描述符;以及包括位模式或其一部分的有效負(fù)荷段。
[0119]往回轉(zhuǎn)向圖17,操作1708識別計(jì)算機(jī)系統(tǒng)能夠附加地包括但不限于用于將針對最舊的未沖刷的日志條目的標(biāo)識符添加到日志的電路。例如,虛擬磁盤分析器404能夠檢查識別日志420中的最舊的未沖刷的日志條目的存儲器指針,并且存儲能夠被用來在日志條目內(nèi)識別這個未沖刷的條目的信息。在這個例子中,虛擬磁盤分析器404能夠被配置成將最舊的未沖刷的日志條目的標(biāo)識符添加到被生成的每個日志條目,所述標(biāo)識符例如是指示用來存儲經(jīng)識別的日志條目的第一扇區(qū)的虛擬磁盤文件偏移、經(jīng)識別的日志條目的序號等。在特定例子中,并且轉(zhuǎn)向圖8,假設(shè)日志420處于由日志420-A所圖示的狀態(tài),在這個例子中虛擬磁盤分析器404能夠生成日志條目2并且將尾部的地址添加到其頭部,即識別日志條目I是最舊的未沖刷的條目的標(biāo)識符。
[0120]現(xiàn)轉(zhuǎn)向操作1710,它示出了計(jì)算機(jī)系統(tǒng)能夠附加地包括用于將日志條目寫到日志的電路。虛擬磁盤分析器404能夠?qū)⑷罩緱l目寫到日志420。指示日志條目的一個或多個輸入/輸出作業(yè)能夠被發(fā)布給存儲設(shè)備106,并且這些一個或多個IO作業(yè)能夠被存儲在高速緩存器454中直到它們最后被提交給持久性存儲單元460,例如磁盤唱片、FLASH RAM等為止。
[0121]現(xiàn)參考圖18,它示出了能夠與由圖17所圖示的那些相結(jié)合地執(zhí)行的附加的操作。操作1812說明計(jì)算機(jī)系統(tǒng)能夠被配置成包括但不限于用于將沖刷命令發(fā)布給存儲設(shè)備的電路;以及用于響應(yīng)于接收到指示存儲設(shè)備完成沖刷操作的信號而將來自日志條目的位模式應(yīng)用于虛擬磁盤文件的電路。例如,有時在日志條目被寫到日志420之后,虛擬磁盤分析器404能夠?qū)_刷命令發(fā)布給存儲設(shè)備106,從而使存儲設(shè)備106將未決的IO作業(yè)寫到持久性存儲單元460并且往回報(bào)告操作的完成。當(dāng)虛擬磁盤分析器404接收到指示沖刷操作完成的確認(rèn)時,虛擬磁盤分析器404能夠?qū)偙粵_刷的日志條目的有效負(fù)荷段中的改變應(yīng)用于虛擬磁盤文件406。這導(dǎo)致指示對虛擬磁盤文件406的改變的IO作業(yè)被發(fā)布給存儲設(shè)備106。虛擬磁盤分析器404能夠可選地發(fā)布引起這些IO作業(yè)的另一沖刷以便確保這些IO作業(yè)被提交給持久性存儲單元460;然而,因?yàn)樗鼈兺ㄟ^持久性日志被描述,所以沖刷操作不是必要的。
[0122]繼續(xù)圖18的描述,操作1814說明在其中計(jì)算機(jī)系統(tǒng)包括用于執(zhí)行操作1812的電路的示例性實(shí)施例中,它能夠附加地包括用于響應(yīng)于掉電發(fā)生了的確定而掃描存儲在存儲設(shè)備中的日志的拷貝的電路;用于響應(yīng)于序列中的每個日志條目都是有效的并且每個日志條目都在日志文件中的間斷之后被寫到日志的確定而從日志的拷貝中選擇日志條目的序列的電路,所述序列包括最新的有效日志條目;以及用于將改變應(yīng)用于由日志條目的序列所識別的虛擬磁盤文件的扇區(qū)的電路。例如,掉電可能有時發(fā)生在計(jì)算機(jī)系統(tǒng)400的操作期間,但在日志條目被沖刷之后。計(jì)算機(jī)系統(tǒng)400可以被重新啟動并且虛擬化系統(tǒng)420可以被執(zhí)行。虛擬磁盤分析器404能夠開始運(yùn)行以及啟動虛擬機(jī)410的請求可能被接收到。虛擬磁盤分析器404能夠打開存儲在存儲設(shè)備106上的虛擬磁盤文件406的持久化的拷貝并且讀取日志420。虛擬磁盤分析器404能夠讀取日志條目并且選擇有效條目的序列來重放。虛擬磁盤分析器404能夠選擇包括一個或多個有效日志條目的序列,其中所述序列包括最新的日志條目并且所述序列不包括間斷點(diǎn)。序列被識別后,虛擬磁盤分析器404能夠從所述序列中提取一個或多個有效負(fù)荷并且將它們應(yīng)用于虛擬磁盤文件406。
[0123]前述的詳細(xì)描述已經(jīng)經(jīng)由例子和/或操作圖闡述了系統(tǒng)和/或過程的各種實(shí)施例。在這樣的框圖和/或例子包含一個或多個功能和/或操作的范圍內(nèi),本領(lǐng)域的技術(shù)人員將理解,這樣的框圖或例子內(nèi)的每個功能和/或操作都能夠通過廣泛的硬件、軟件、固件或?qū)嶋H上其任何組合而被單獨(dú)地和/或共同地實(shí)施。
[0124]雖然已經(jīng)示出并且描述了本文中所描述的本主題的特定方面,但是對本領(lǐng)域的技術(shù)人員而言將明顯的是,基于本文中的教導(dǎo),在不背離本文中所描述的主題及其更廣泛方面的情況下可以做出改變和修改,并且因此,所附權(quán)利要求將在它們的范圍內(nèi)包含如在本文中所描述的主題的真實(shí)精神和范圍內(nèi)的所有這樣的改變和修改。
【權(quán)利要求】
1.一種包括指令的計(jì)算機(jī)可讀存儲介質(zhì),在所述指令被處理器執(zhí)行時使所述處理器: 在隨機(jī)存取存儲器中實(shí)例化針對虛擬磁盤文件的日志,所述日志包括有序的日志條目; 在所述日志中識別日志條目,所述日志條目是所述日志中在將緩存的輸入/輸出作業(yè)提交給存儲設(shè)備的請求被發(fā)布之后生成的最舊的日志條目; 將針對經(jīng)識別的日志條目的標(biāo)識符添加到新生成的日志條目;以及 將所述新生成的日志條目寫到所述日志。
2.根據(jù)權(quán)利要求1所述的計(jì)算機(jī)可讀存儲介質(zhì),進(jìn)一步包括指令,在所述指令執(zhí)行時使所述處理器: 響應(yīng)于接收到迫使緩存的輸入/輸出作業(yè)被提交的請求,將改變應(yīng)用于由所述日志條目和所述新生成的日志條目所識別的所述虛擬磁盤文件。
3.一種計(jì)算機(jī)系統(tǒng),其包括: 處理器; 當(dāng)所述處理器供應(yīng)有電力時與所述處理器進(jìn)行通信的存儲器,所述存儲器包括指令,在所述指令執(zhí)行時使所述處理器: 訪問針對虛擬磁盤文件的日 志,所述日志包括以順序次序被寫入的日志條目; 響應(yīng)于確定所述序列中的每個日志條目都是有效的并且每個日志條目都在所述日志文件中的間斷之后被寫到所述日志的確定來選擇日志條目的序列,所述序列包括最新的有效日志條目;以及 將改變應(yīng)用于由日志條目的所述序列所識別的所述虛擬磁盤文件的扇區(qū)。
4.根據(jù)權(quán)利要求3所述的計(jì)算機(jī)系統(tǒng),進(jìn)一步在所述存儲器中包括指令,在所述指令執(zhí)行時使所述處理器: 基于存儲在日志條目的所述序列中的日志條目中的文件結(jié)束標(biāo)識符來修改針對所述虛擬磁盤文件的文件結(jié)束標(biāo)識符。
5.根據(jù)權(quán)利要求3所述的計(jì)算機(jī)系統(tǒng),進(jìn)一步在所述存儲器中包括指令,在所述指令執(zhí)行時使所述處理器: 響應(yīng)于存儲所述虛擬磁盤文件的存儲設(shè)備的扇區(qū)大小已經(jīng)增加的確定而生成第二日志;以及 將擴(kuò)充的日志條目寫到所述第二日志,所述擴(kuò)充的日志條目包括從所述虛擬磁盤文件獲得的位模式和從所述日志中的日志條目獲得的位模式。
6.根據(jù)權(quán)利要求3所述的計(jì)算機(jī)系統(tǒng),進(jìn)一步在所述存儲器中包括指令,在所述指令執(zhí)行時使所述處理器: 在將每個日志條目寫到所述日志之前將針對最舊的未沖刷的日志條目的標(biāo)識符寫到每個日志條目。
7.根據(jù)權(quán)利要求3所述的計(jì)算機(jī)系統(tǒng),進(jìn)一步在所述存儲器中包括指令,在所述指令執(zhí)行時使所述處理器: 響應(yīng)于存儲所述虛擬磁盤文件的存儲設(shè)備的扇區(qū)大小已經(jīng)減少的確定而生成第二日志;并且將第一收縮日志條目和第二收縮日志條目寫到所述第二日志,所述第一收縮日志條目包括從所述日志中的日志條目獲得的位模式的一部分,以及第二收縮日志條目包括來自所述日志中的所述日志條目的所述位模式的剩余部分。
8.一種計(jì)算機(jī)實(shí)施的方法,包括: 實(shí)例化針對虛擬機(jī)的虛擬磁盤,所述虛擬磁盤被虛擬磁盤文件支持; 確定寫到所述虛擬磁盤文件的位模式; 生成包括寫到日志的所述位模式的日志條目,所述日志包括有序的日志條目,所述日志被存儲在隨機(jī)存取存儲器中; 將針對最舊的未沖刷的日志條目的標(biāo)識符寫到所述日志;以及 將所述日志條目寫到所述日志。
9.根據(jù)權(quán)利要求8所述的計(jì)算機(jī)實(shí)施的方法,進(jìn)一步包括: 將沖刷命令發(fā)布給存儲設(shè)備; 響應(yīng)于接收到指示所述存儲設(shè)備完成沖刷操作的信號,將來自所述日志條目的所述位模式應(yīng)用于所述虛擬磁盤文件。
10.根據(jù)權(quán)利要求9所述的計(jì)算機(jī)實(shí)施的方法,進(jìn)一步包括: 響應(yīng)于掉電發(fā)生了的確定而掃描存儲在所述存儲設(shè)備中的所述日志的拷貝; 響應(yīng)于所述序列中的每個日志條目都是有效的并且所述每個日志條目都在所述日志文件的間斷之后被寫到所述日志的確定而從所述日志的所述拷貝選擇日志條目的序列,所述序列包括最新的有效日志條目;以及 將改變應(yīng)用于由日志條目的所述序列所識別的虛擬磁盤文件的扇區(qū)。
【文檔編號】G06F9/06GK103493027SQ201180070384
【公開日】2014年1月1日 申請日期:2011年10月10日 優(yōu)先權(quán)日:2011年4月25日
【發(fā)明者】J.A.斯塔克斯, D.L.格林, T.W.哈里斯, M.約翰, S.拉加拉姆 申請人:微軟公司