專利名稱:用于創(chuàng)建虛擬數(shù)據(jù)拷貝的方法和裝置的制作方法
技術(shù)領(lǐng)域:
企業(yè)使用大型數(shù)據(jù)處理系統(tǒng)存儲和處理他們的數(shù)據(jù)。圖1表示了示例性數(shù)據(jù)處理系統(tǒng)10的有關(guān)組件,示例性數(shù)據(jù)處理系統(tǒng)10具有主計算機系統(tǒng)12、事務(wù)日志14和主數(shù)據(jù)存儲系統(tǒng)16以及次數(shù)據(jù)存儲系統(tǒng)18。主數(shù)據(jù)存儲系統(tǒng)和次數(shù)據(jù)存儲系統(tǒng)16和18分別包括數(shù)據(jù)存儲器22和24,數(shù)據(jù)存儲器22和24分別存儲著主數(shù)據(jù)卷和備份數(shù)據(jù)卷,下面將更完整地說明它們。主數(shù)據(jù)卷是“工作中的”數(shù)據(jù)卷或數(shù)據(jù)內(nèi)容,它們被主計算機系統(tǒng)12響應(yīng)主計算機系統(tǒng)12對事務(wù)(例如,指令)的接收而訪問,以便讀、寫或修改數(shù)據(jù)。備份數(shù)據(jù)卷是主數(shù)據(jù)卷的時點拷貝(point in time copy),并且在主數(shù)據(jù)存儲系統(tǒng)出現(xiàn)故障時或在被包括在其中的主數(shù)據(jù)卷由于操作人員的錯誤或非法的軟件行為在邏輯上受損或被破壞時使用。
主計算機系統(tǒng)12根據(jù)接收到的訪問事務(wù)訪問(例如,讀、寫或修改)存儲器22的主數(shù)據(jù)卷中的數(shù)據(jù)。當(dāng)計算機系統(tǒng)10接收到一個事務(wù)訪問(例如)主數(shù)據(jù)卷中特定的數(shù)據(jù)文件時,主計算機12首先訪問一個索引表,所述的索引表將文件的文件名映射到存儲器22中的存儲器的一個或多個物理塊的位置。一旦存儲器塊的位置是已知的了,主計算機系統(tǒng)12就可以訪問該存儲器塊,并且根據(jù)該事務(wù)向其讀或?qū)憯?shù)據(jù)。
諸如圖1中示出的數(shù)據(jù)處理系統(tǒng)通常會經(jīng)歷它們的主數(shù)據(jù)卷內(nèi)的數(shù)據(jù)的邏輯受損或破壞,或是它們的主數(shù)據(jù)存儲系統(tǒng)內(nèi)的物理故障。當(dāng)這些事件出現(xiàn)時,對主數(shù)據(jù)卷的訪問將被拒絕。如果沒有主數(shù)據(jù)的備份拷貝,依賴于其數(shù)據(jù)處理系統(tǒng)的企業(yè)將被這些事件嚴(yán)重地影響。
為了在主數(shù)據(jù)卷中出現(xiàn)邏輯損壞之后或是在它們的主數(shù)據(jù)存儲系統(tǒng)中出現(xiàn)物理故障之后繼續(xù)操作,企業(yè)通常創(chuàng)建主數(shù)據(jù)卷的時點“備份拷貝”。在圖1中存儲器22中的主數(shù)據(jù)卷的備份拷貝可以在次數(shù)據(jù)存儲系統(tǒng)18的存儲器24中被創(chuàng)建。創(chuàng)建主數(shù)據(jù)卷的備份拷貝是一個本領(lǐng)域公知的過程。主計算機系統(tǒng)12每次發(fā)出備份命令,就在存儲器24中創(chuàng)建備份拷貝。事務(wù)日志14保持著在創(chuàng)建主卷的備份拷貝之后,修改主數(shù)據(jù)卷數(shù)據(jù)的全部事務(wù)的拷貝。應(yīng)當(dāng)注意,每次備份主卷時,不必將主數(shù)據(jù)卷的完整的內(nèi)容拷貝到存儲器24中。而僅有那些與存儲器24的相應(yīng)存儲器塊的內(nèi)容不同的存儲器22的存儲器塊的內(nèi)容需要在每次主卷備份時被更新。此外,不是主計算機系統(tǒng)12每次寫或修改存儲器22中的主數(shù)據(jù)卷中的數(shù)據(jù),都備份主數(shù)據(jù)卷。
當(dāng)(例如)主數(shù)據(jù)存儲系統(tǒng)16經(jīng)歷物理故障時,次數(shù)據(jù)存儲系統(tǒng)18和創(chuàng)建于其上的備份拷貝可以被用于服務(wù)于向主計算機系統(tǒng)12所提供的讀或?qū)懯聞?wù)。然而,在備份拷貝可以使用之前,備份拷貝必須被從其創(chuàng)建的時間起進行更新,從而它的數(shù)據(jù)內(nèi)容鏡像了恰好是主數(shù)據(jù)存儲系統(tǒng)16出現(xiàn)故障之前主數(shù)據(jù)卷的內(nèi)容。在更新過程中,存儲在日志14中的、發(fā)生在創(chuàng)建備份拷貝的時間和出現(xiàn)故障的時間之間的所有事務(wù)被主計算機系統(tǒng)12應(yīng)用在次數(shù)據(jù)系統(tǒng)18的備份拷貝上。一旦所有的事務(wù)都被應(yīng)用了,備份拷貝將和主數(shù)據(jù)卷恰好在出現(xiàn)故障以前是同樣的,并且主計算機系統(tǒng)12可以使用更新過的備份拷貝繼續(xù)處理接收到的事務(wù),就像它是主數(shù)據(jù)卷一樣。
不幸的是,在備份拷貝中更新數(shù)據(jù)導(dǎo)致原始主數(shù)據(jù)卷或主數(shù)據(jù)卷的穩(wěn)定的時點拷貝的丟失。如果次數(shù)據(jù)存儲系統(tǒng)18經(jīng)歷物理故障或如果因為(例如)操作人員的失誤,更新后的備份拷貝中出現(xiàn)了邏輯上的數(shù)據(jù)損壞,主計算機系統(tǒng)12將不能(再次)處理接收到的事務(wù)請求。為了避免這種情況,實際上通常(優(yōu)選地)在附加的數(shù)據(jù)存儲系統(tǒng)中(未示出)創(chuàng)建備份拷貝數(shù)據(jù)的拷貝。此后,使用存儲在日志14中的事務(wù)更新備份拷貝的拷貝。一旦完成更新,主計算機系統(tǒng)12就可以使用該備份拷貝的拷貝處理新接收到的事務(wù)。不幸的是,可能需要大量的時間拷貝備份拷貝的整個內(nèi)容。這種時間延遲對于在(例如)其主數(shù)據(jù)存儲系統(tǒng)16出現(xiàn)故障之后,一旦可能就試圖繼續(xù)處理事務(wù)的企業(yè)來說可能是不能接受的。
發(fā)明內(nèi)容
公開于此的是一種用于創(chuàng)建存儲在第一存儲器中的數(shù)據(jù)的虛擬拷貝的方法。響應(yīng)創(chuàng)建存儲在第一存儲器中的所有數(shù)據(jù)的拷貝的請求,在第二存儲器中創(chuàng)建存儲在第一存儲器中的數(shù)據(jù)的虛擬拷貝。在一個實施例中,創(chuàng)建虛擬拷貝包括在存儲器中創(chuàng)建第一和第二表,它們中的每個都包含多個多位表項。第一表的每個表項相應(yīng)于第一存儲器的各個存儲器區(qū)域。第二表的每個表項相應(yīng)于第二存儲器的各個存儲器區(qū)域。第一表的每個第一位指示著第一表的相應(yīng)存儲器區(qū)域是否包含有效的數(shù)據(jù)。第一表的每個第二位指示著自從第一表被創(chuàng)建以來,第一存儲器的相應(yīng)存儲器區(qū)域中的數(shù)據(jù)是否被修改過。第二表的每個第一位指示著第二存儲器的相應(yīng)的存儲器區(qū)域是否包含從第一存儲器拷貝的數(shù)據(jù)。第二表的每個第二位指示著自從第二表被創(chuàng)建以來,第二存儲器的相應(yīng)存儲器區(qū)域中的數(shù)據(jù)是否被修改過。此外,使用本發(fā)明,可以一次創(chuàng)建存儲在第一存儲器中的數(shù)據(jù)的多于一個的虛擬拷貝。另外,使用本發(fā)明,可以創(chuàng)建虛擬拷貝的虛擬拷貝。
通過參考附圖,可以更好地理解本發(fā)明,并且本領(lǐng)域的技術(shù)人員將明了其多個目的、特征和優(yōu)點。
圖1是使用了用于存儲主數(shù)據(jù)卷和次數(shù)據(jù)卷的存儲子系統(tǒng)的數(shù)據(jù)處理系統(tǒng);圖2是使用了本發(fā)明的一個實施例的數(shù)據(jù)處理系統(tǒng);圖3是說明了圖2所示的存儲系統(tǒng)的存儲器結(jié)構(gòu)的方塊圖;圖4A是說明了向圖3的存儲器40中寫數(shù)據(jù)的操作方面的流程圖;圖4B是說明了向圖3的存儲器42中寫數(shù)據(jù)的操作方面的流程圖;圖4C是說明了從圖3的存儲器42中讀數(shù)據(jù)的操作方面的流程圖;圖5以方塊圖的形式表示了根據(jù)本發(fā)明的一個實施例創(chuàng)建的有效性/修改表;圖6表示了使用本發(fā)明的一個實施例的數(shù)據(jù)處理系統(tǒng);圖7是一個流程圖,說明了修改圖6的一個存儲器中的數(shù)據(jù)的操作方面;圖8是一個流程圖,說明了從圖6的一個存儲器中讀數(shù)據(jù)的操作方面;圖9A是使用本發(fā)明的一個實施例的數(shù)據(jù)處理系統(tǒng)的方塊圖;圖9B是帶有附加于其上的附加數(shù)據(jù)存儲系統(tǒng)的圖9A的數(shù)據(jù)處理系統(tǒng);圖11是一個流程圖,說明了將圖6中的一個存儲器的卷恢復(fù)到圖6的另一存儲器的卷的內(nèi)容的操作方面;圖12A是說明驗證/修改表的方塊圖;圖12B是說明修改/驗證表的方塊圖;圖13是一個流程圖,說明了向圖6的存儲器中的卷寫數(shù)據(jù)的操作方面;圖14是說明了從圖6的存儲器中讀數(shù)據(jù)的操作方面。
不同附圖中使用同樣的符號指示類似或同樣的項。
具體實施例方式
本發(fā)明涉及用于創(chuàng)建數(shù)據(jù)卷的虛擬拷貝的裝置和方法,所述的虛擬拷貝在其創(chuàng)建之后可以被立刻訪問。所述的虛擬拷貝最終可以被轉(zhuǎn)換為數(shù)據(jù)卷的實際拷貝。然而,本發(fā)明允許在虛擬拷貝被轉(zhuǎn)換為實際拷貝之前訪問虛擬拷貝。下面將更全面地說明其含義。
圖2示出了使用本發(fā)明的一個實施例的數(shù)據(jù)處理系統(tǒng)30的有關(guān)組件。數(shù)據(jù)處理系統(tǒng)30包括主計算機系統(tǒng)32和數(shù)據(jù)存儲系統(tǒng)34、36和38。數(shù)據(jù)存儲系統(tǒng)34、36和38分別包括數(shù)據(jù)存儲器40、42和44。數(shù)據(jù)存儲器40-44可以采用動態(tài)或靜態(tài)隨機訪問存儲器、磁性的或光學(xué)數(shù)據(jù)存儲盤或磁性的或光學(xué)數(shù)據(jù)存儲帶的形式。應(yīng)當(dāng)理解,數(shù)據(jù)存儲器40-44將不限于這些硬件組件。而是數(shù)據(jù)存儲器40-44可以采用任何可以在其中存儲數(shù)據(jù)和訪問數(shù)據(jù)的硬件、軟件或硬件和軟件的組合。數(shù)據(jù)存儲器可以采用在軟件的指揮下工作的幾個硬件組件的復(fù)合結(jié)構(gòu)的形式。數(shù)據(jù)存儲器可以采用鏡像的硬件的形式。
圖3以方塊圖的形式表示了數(shù)據(jù)存儲器40-44的邏輯結(jié)構(gòu)。如可以從圖3中看出的,數(shù)據(jù)存儲器40和42中的每個都包括nmax個存儲器區(qū)域或塊,其中存儲著數(shù)據(jù)。如圖3所示,存儲器塊不必是連續(xù)的。數(shù)據(jù)存儲器40-44中相應(yīng)的存儲器塊的大小是相等的。因此,存儲器40的存儲器塊1的大小等于存儲器42和44的存儲器塊1的大小。存儲器40內(nèi)的每個存儲器塊的大小彼此相等??商鎿Q的,存儲器40中的存儲器塊的大小可以改變。
出于說明的目的,假設(shè)存儲器40包括在從存儲器塊1到nmax的每個存儲器塊間分布的數(shù)據(jù)卷,并且存儲器42不包括數(shù)據(jù)。在一個實施例中,主計算機32響應(yīng)一個請求,通過在存儲器(或是主計算機32的存儲器或是存儲器42)中創(chuàng)建一對有效/已修改(V/M)表(諸如圖5中的表52和54),在存儲器42中創(chuàng)建存儲在存儲器40中的數(shù)據(jù)卷的虛擬拷貝。主計算機將表52和54分別與存儲器40和42相關(guān)聯(lián)。每個V/M表52和54具有nmax個表項,每個表項具有兩位。表52的每個表項相應(yīng)于存儲器40的各自的存儲器塊,而表54的表項相應(yīng)于存儲器42的各自的存儲器塊。最初,表52的所有位和表54的全部m(n)個位可以被設(shè)置為邏輯0。最初,表52的全部v(n)個位可以被設(shè)置為邏輯1。
每個表的第一位被指定為v(n),而每個表的第二位被指定為m(n)。取決于表項的狀態(tài),每個表項中的v(n)指示著相關(guān)聯(lián)的存儲器的相應(yīng)存儲器塊是否包含有效數(shù)據(jù)。例如,當(dāng)被設(shè)置為邏輯1,表52的v(2)指示著存儲器40的存儲器塊2包含有效數(shù)據(jù),并且當(dāng)被設(shè)置為邏輯0時,表52的v(2)指示著存儲器40的存儲器塊2不包含有效數(shù)據(jù)。每個表項中的m(n),取決于表項的狀態(tài),指示著相關(guān)聯(lián)的存儲器的相應(yīng)存儲器塊中的數(shù)據(jù)是否被修改過。例如,當(dāng)被設(shè)置為邏輯1,表54的m(3)指示著存儲器42的存儲器塊3包括修改后的數(shù)據(jù),并且當(dāng)被設(shè)置為邏輯0時,表54的m(3)指示著存儲器42的存儲器塊3包括沒有被修改的數(shù)據(jù)。
在創(chuàng)建虛擬拷貝之后,主計算機32可以運行后臺處理,將存儲器40中的存儲器塊的數(shù)據(jù)內(nèi)容拷貝到存儲器42的相應(yīng)存儲器塊中。最后,這個后臺處理將完整地將數(shù)據(jù)卷內(nèi)容拷貝到存儲器42,從而將虛擬拷貝轉(zhuǎn)換為實際的拷貝。然而,在開始后臺拷貝處理之前,或在完成后臺拷貝處理之前,根據(jù)接收到的事務(wù),主計算機32可以或是向存儲器40中的數(shù)據(jù)卷,或是其在存儲器42中的虛擬拷貝讀或?qū)憯?shù)據(jù)。主計算機從存儲器40的卷或其在存儲器42中的虛擬拷貝中讀或?qū)憯?shù)據(jù)的有關(guān)方面將參考圖4A-4C說明。
圖4A說明了主計算機系統(tǒng)32響應(yīng)對一個請求的接收,在在存儲器42中創(chuàng)建了其虛擬拷貝之后,執(zhí)行寫或修改包含在存儲器40中的主數(shù)據(jù)卷的塊n中的數(shù)據(jù)的操作方面。響應(yīng)向存儲器40的主數(shù)據(jù)卷的塊n寫數(shù)據(jù)的請求,主計算機為虛擬拷貝訪問V/M表,以確定存儲器42中的虛擬拷貝的相應(yīng)塊n是否包含有效數(shù)據(jù)。換言之,主計算機32確定v(n)是否被設(shè)置為1。如果存儲器40的塊n的內(nèi)容以前通過上面提及的后臺拷貝處理,或響應(yīng)以前寫或修改存儲器40或42的塊n中的數(shù)據(jù)的請求被拷貝到存儲器42的塊n中,存儲器42的塊n將包含有效數(shù)據(jù)(即,v(n)被設(shè)置為1)。
如果v(n)被設(shè)置為1,如步驟60所示,主計算機系統(tǒng)32修改存儲器40的塊n中的數(shù)據(jù)。然而如果主計算機系統(tǒng)32確定虛擬拷貝的v(n)被設(shè)置為0,則主計算機系統(tǒng)32將存儲器40的塊n的內(nèi)容拷貝到存儲器42的塊n,并且為虛擬拷貝相應(yīng)地設(shè)置v(n)。此后,主計算機系統(tǒng)32為數(shù)據(jù)卷將位m(n)修改為1。最后如步驟60所示,主計算機系統(tǒng)32修改存儲器40的塊n中的數(shù)據(jù)。應(yīng)當(dāng)注意,主計算機32可以在修改存儲器40的塊n中的數(shù)據(jù)之后,將位m(n)設(shè)置為1。然而,出于解釋的目的,將假設(shè)主計算機系統(tǒng)32在修改相應(yīng)的存儲器塊中的數(shù)據(jù)之前設(shè)置修改位,應(yīng)當(dāng)理解本發(fā)明將不限于此。
圖4B說明了主計算機系統(tǒng)32響應(yīng)對一個請求的接收,執(zhí)行寫或修改包含在存儲器42中的虛擬拷貝的塊n中的數(shù)據(jù)的操作方面。更具體地,在步驟62,響應(yīng)主計算機系統(tǒng)32對請求的接收,主計算機系統(tǒng)32為虛擬拷貝確定有效位v(n)是否等于1。如果v(n)被設(shè)置為1,則如步驟64所示,主處理器32根據(jù)其接收到的寫請求,修改存儲器42中的塊n的數(shù)據(jù)。然而如果v(n)位為虛擬拷貝設(shè)置為0,則主計算機在步驟66首先將存儲器40中的塊n的內(nèi)容拷貝到存儲器42的塊n,并且為虛擬拷貝將v(n)設(shè)置為1。一旦v(n)被設(shè)置為1,主計算機系統(tǒng)32將m(n)設(shè)置為等于1。最后,如步驟64所示,主計算機修改存儲器42中的塊n的數(shù)據(jù)。
圖4C說明了主計算機系統(tǒng)32響應(yīng)對一個請求的接收,執(zhí)行從包含在存儲器42的虛擬拷貝的塊n中讀數(shù)據(jù)的操作方面。主計算機系統(tǒng)32響應(yīng)對一個請求的接收,從存儲器42的塊n中讀取數(shù)據(jù),在步驟68為虛擬拷貝訪問v(n)表,以便確定v(n)是否等于1。如果v(n)等于1,則從存儲器42的塊n中讀數(shù)據(jù)。然而如果v(n)不等于1,則從存儲器40的塊n中讀數(shù)據(jù)。
使用參考圖4A-4C說明的方法,主計算機系統(tǒng)32,或可以分別訪問存儲器40和42以及它們相應(yīng)的表52和54的任何其它計算機系統(tǒng),可以在所有數(shù)據(jù)被從存儲器40拷貝之前(一個取決于存儲器40中的數(shù)據(jù)卷的大小,可能需要大量的時間來完成的處理),訪問存儲器42中的虛擬拷貝。如下面將更詳細(xì)地說明的,修改位,諸如表52和54中的那些修改位,可以被用于快速地、有效地執(zhí)行諸如卷恢復(fù)的功能。
在上面的一個擴展中,可以由主計算機系統(tǒng)32創(chuàng)建虛擬拷貝的虛擬拷貝。例如,在創(chuàng)建了包含在存儲器40中的數(shù)據(jù)卷的虛擬拷貝之后,主計算機系統(tǒng)32可以接收命令以創(chuàng)建包含在存儲器42中的虛擬拷貝的虛擬拷貝。這個虛擬拷貝的虛擬拷貝可以在圖2所示的數(shù)據(jù)存儲系統(tǒng)38的存儲器44中被創(chuàng)建。在請求創(chuàng)建虛擬拷貝的虛擬拷貝之后,主計算機系統(tǒng)32創(chuàng)建表56,表56類似于圖5中所示的表。最初,表56的全部表項被設(shè)置為邏輯0。與表52和54類似,表56中每個表項的第一位被指定為v(n),而表56中每個表項的第二位被指定為m(n)。與表52和54類似,表56的v(n)當(dāng)被設(shè)置為1時指示著存儲器44的塊n包含有來自于存儲器42的相應(yīng)存儲器塊n的數(shù)據(jù)的有效拷貝。此外,與表52和54類似,表56的m(n)當(dāng)被設(shè)置為1時指示著包含在存儲器44的塊n中的數(shù)據(jù)被修改過。
主計算機系統(tǒng)32對虛擬拷貝或虛擬拷貝的虛擬拷貝的訪問與參考圖4A-4C的說明類似。另外,主計算機系統(tǒng)32可以在創(chuàng)建了虛擬拷貝的虛擬拷貝之后立刻訪問和修改它。例如,就在在存儲器44中創(chuàng)建了虛擬拷貝的虛擬拷貝之后,主計算機系統(tǒng)42可能接收到了訪問并修改包含在存儲器44的塊n中的數(shù)據(jù)的請求。主計算機響應(yīng)這個訪問請求,首先訪問表56以確定v(n)是否被設(shè)置為1。如果v(n)被設(shè)置為邏輯0,則如果塊n包含有效數(shù)據(jù),塊n的數(shù)據(jù)內(nèi)容被從存儲器42拷貝到存儲器44。如果存儲器的塊n不包含有效數(shù)據(jù)(即,存儲器42的塊n的v(n)被設(shè)置為0),數(shù)據(jù)就被從存儲器40的塊n拷貝。一旦數(shù)據(jù)被拷貝到了塊n,主計算機系統(tǒng)將v(n)更新為邏輯1。此后,主計算機系統(tǒng)32將m(n)設(shè)置為邏輯1,并且修改拷貝到存儲器44的存儲器塊n的數(shù)據(jù)。圖2所示的主計算機系統(tǒng)32能夠訪問由主計算機系統(tǒng)32創(chuàng)建的任意虛擬拷貝中的數(shù)據(jù)。
圖6說明了具有附加于其上的附加數(shù)據(jù)存儲系統(tǒng)70-74的圖2所示的數(shù)據(jù)處理系統(tǒng)30。數(shù)據(jù)存儲系統(tǒng)70-74分別包括存儲器80-84,它們中的每個可以存儲由主計算機系統(tǒng)32創(chuàng)建的數(shù)據(jù)的虛擬拷貝。主計算機系統(tǒng)32,或另一計算機系統(tǒng)(未示出),能夠訪問每個虛擬拷貝。
存儲器42-44和70-74中的虛擬拷貝彼此相關(guān)。例如,存儲器80包含存儲器44中的數(shù)據(jù)卷的虛擬拷貝。從一個方面來說,包含在存儲器80中的虛擬拷貝是包含在存儲器44中的雙親數(shù)據(jù)卷的孩子。任何虛擬拷貝都具有稱為雙親/孩子的關(guān)系,其中虛擬拷貝是被拷貝的雙親數(shù)據(jù)卷的孩子。存儲器44包含存儲器42中的數(shù)據(jù)卷的虛擬拷貝。存儲器42包含存儲器40中的數(shù)據(jù)卷的虛擬拷貝。存儲器84包含存儲器82中的數(shù)據(jù)卷的虛擬拷貝。最后,存儲器82包含存儲器40中的數(shù)據(jù)卷的虛擬拷貝。存儲器42和82中的虛擬拷貝是存儲器40的數(shù)據(jù)卷的孩子。
存儲在存儲器42-44和80中的虛擬拷貝是由主計算機系統(tǒng)32順序地創(chuàng)建的,存儲器80中的虛擬拷貝在存儲器44中的虛擬拷貝的創(chuàng)建之后被創(chuàng)建。類似地,存儲在存儲器84中的虛擬拷貝被在包含在存儲器82中的虛擬拷貝的創(chuàng)建之后被創(chuàng)建。存儲器82和84中的虛擬拷貝可以在存儲器80中的虛擬拷貝的創(chuàng)建之前或之后被創(chuàng)建。雖然沒有示出,主計算機系統(tǒng)32在創(chuàng)建存儲器80-84中的每個虛擬拷貝的同時,創(chuàng)建類似于圖5示出的V/M表的V/M表。與存儲器42和82相關(guān)聯(lián)的V/M表將存儲器42和82中的兩個孩子虛擬拷貝與存儲器40中的單個雙親數(shù)據(jù)卷關(guān)聯(lián)起來。
提供圖6以說明可以創(chuàng)建大量的虛擬拷貝,它們中的每個都可由主計算機系統(tǒng)32(或圖6中未示出的另一計算機系統(tǒng))在它們的創(chuàng)建之后立刻訪問。下面,圖6和圖7說明了訪問圖6的任意數(shù)據(jù)卷的有關(guān)步驟。
圖7是一個流程圖,說明了當(dāng)主計算機系統(tǒng)32接收到一個請求,修改存儲器40中的數(shù)據(jù)卷中的數(shù)據(jù),或包含在圖6的存儲器中的任意虛擬拷貝內(nèi)的數(shù)據(jù)的主計算機系統(tǒng)32的操作方面。為了解釋的簡便,用卷(X)表示存儲器X中的數(shù)據(jù)卷,其中X可以是存儲器40-44或80-84中的任何一個。另外,vx(n)和mx(n)分別表示存儲器X中塊n的有效位和修改位,其中X可以是存儲器40-44或80-84中的任何一個。
在步驟90,主計算機系統(tǒng)接收請求,修改存儲在圖6的一個存儲器X內(nèi)的數(shù)據(jù)卷(X)內(nèi)的存儲器塊n的數(shù)據(jù)。作為響應(yīng),主計算機32為卷(X)訪問V/Mx表以確定相應(yīng)于卷(X)的塊n的有效位vx(n)是否被設(shè)置為1。如果卷(X)的塊n不包含有效拷貝(即,vx(n)被設(shè)置為0),則主計算機開始一組步驟94-104,以便從卷(X)的雙親數(shù)據(jù)卷拷貝數(shù)據(jù)到卷(X)的塊n中。為了說明的簡便,卷(X-1)被指定為卷(X)的雙親卷。
主計算機系統(tǒng)32在步驟94-104為卷(X)所依賴的相關(guān)數(shù)據(jù)卷順序地訪問V/M表,直到找到了所尋找的數(shù)據(jù)的有效拷貝為止。因此在步驟94,主計算機系統(tǒng)將虛擬變量a設(shè)置為X,即對存儲器存儲卷(X)的標(biāo)識。此后,在步驟96,主計算機系統(tǒng)將該值減1。在a被減1之后,卷(a)是卷(X)的雙親。在步驟100,主計算機系統(tǒng)確定相應(yīng)于卷(a)的V/Ma表是否指示著與卷(a)的塊n相關(guān)聯(lián)的有效位va(n)是否被設(shè)置為1。如果是的,如步驟102所示,主計算機系統(tǒng)32將卷(a)的塊n的內(nèi)容拷貝到卷(X)的塊n。如果卷(a)的有效位va(n)被設(shè)置為0,因此指示著卷(a)不包含塊n中的數(shù)據(jù)的有效拷貝,則重復(fù)步驟96和100直到發(fā)現(xiàn)在塊n中包含有效數(shù)據(jù)的相關(guān)卷(例如,卷(a-1)、卷(a-2)等)。
一旦在步驟102來自相關(guān)卷的存儲器塊n的內(nèi)容被拷貝到卷(X)的塊n,如步驟104所示,主計算機系統(tǒng)32將卷(X)的有效位vx(n)設(shè)置為1。此后,或響應(yīng)主計算機系統(tǒng)32在步驟92對卷(X)的有效位vx(n)被設(shè)置為1的確認(rèn),在步驟106主計算機32確定是否在卷(X)之后創(chuàng)建了孩子數(shù)據(jù)卷,數(shù)據(jù)卷(X+1)。如果主計算機系統(tǒng)32確定已經(jīng)創(chuàng)建了卷(X+1),則主計算機系統(tǒng)32必須確定卷(X+1)的塊n是否包含有效數(shù)據(jù)。在步驟110,主計算機系統(tǒng)32為卷(X+1)訪問V/Mx+1表,并且檢查有效位vx+1(n)的狀態(tài)。如果有效位根據(jù)步驟110被設(shè)置為1,則主計算機系統(tǒng)32進入步驟112,并且設(shè)置卷(X)的修改位mx(n)為1,并且修改卷(X)的塊n中的數(shù)據(jù)。然而如果在步驟110,主計算機系統(tǒng)32確定卷(X+1)的有效位vx+1(n)被設(shè)置為0,則如步驟116所示,主計算機拷貝卷(X)的塊n的內(nèi)容到卷(X+1)的存儲器塊n。此后,主計算機系統(tǒng)32將相應(yīng)于卷(X+1)的V/M表的有效位vx+1(n)設(shè)置為1,并且如步驟112中所做的,修改卷(X)的塊n的數(shù)據(jù)。
主計算機系統(tǒng)32被配置為讀取圖6中所示的存儲器的任意數(shù)據(jù)卷中的數(shù)據(jù)。圖8是一個流程圖,說明了主計算機系統(tǒng)32響應(yīng)接收到的事務(wù)請求從卷中讀數(shù)據(jù)的操作方面。更具體的,如步驟120所示,主計算機32接收請求,讀取圖6中的一個卷(卷(X))內(nèi)的存儲器塊n的數(shù)據(jù)。作為響應(yīng),主計算機系統(tǒng)32為卷(X)訪問V/Mx表以確定有效位vx(n)是否被設(shè)置為1。如果有效位被設(shè)置為1,則主計算機系統(tǒng)從卷(X)的存儲器塊n中讀取數(shù)據(jù),并且處理結(jié)束。
然而如果卷(X)的有效位vx(n)被設(shè)置為0,則主計算機系統(tǒng)從卷(X)依賴的在前的卷中的一個卷的塊n讀取數(shù)據(jù)。在步驟124,與前面相一致,主計算機系統(tǒng)32將虛擬變量a設(shè)置為值X,并且在步驟126,主計算機系統(tǒng)32將該虛擬變量減1。在步驟130,主計算機系統(tǒng)32檢查卷(a)的有效位va(n)。如果這個有效位被設(shè)置為1,則卷(a)包括所尋找的數(shù)據(jù)的拷貝。如果這個有效位被設(shè)置為0,則處理在步驟126-130重復(fù),直到發(fā)現(xiàn)了在塊n中包含數(shù)據(jù)的有效拷貝有關(guān)數(shù)據(jù)卷(例如,卷(a-1)、卷(a-2)等)。一旦發(fā)現(xiàn)了這個數(shù)據(jù),在步驟132,主計算機系統(tǒng)32就從塊n讀數(shù)據(jù),并且處理結(jié)束。
如在上面的背景技術(shù)中提到的,主數(shù)據(jù)存儲系統(tǒng)故障、或包含在其中的主數(shù)據(jù)卷的邏輯損壞是必須快速糾正的問題。圖9A示出了圖2的數(shù)據(jù)處理系統(tǒng)30以及附加于其上的事務(wù)日志140。在圖9A中,存儲器40存儲著可由主計算機系統(tǒng)32響應(yīng)接收到的讀和寫事務(wù)請求而訪問的主數(shù)據(jù)卷。存儲器42存儲著存儲器40的主數(shù)據(jù)卷的備份卷。備份卷是每次發(fā)出備份命令,由主計算機系統(tǒng)32創(chuàng)建的。事務(wù)日志140存儲著在存儲器42中進行備份之后,修改主數(shù)據(jù)卷中的數(shù)據(jù)的所有事務(wù)請求的拷貝。
在現(xiàn)有技術(shù)中,用于從主數(shù)據(jù)存儲系統(tǒng)故障或其中的數(shù)據(jù)損壞中恢復(fù)的優(yōu)選方法涉及首先創(chuàng)建備份數(shù)據(jù)卷的內(nèi)容的實際拷貝。包含在存儲器42中的備份數(shù)據(jù)卷可以被完整地拷貝到(例如)存儲器44。此后,可以使用包含在事務(wù)日志140中的事務(wù)更新存儲器44中的實際拷貝。一旦被更新后,存儲器44中的卷就鏡像了剛好在主數(shù)據(jù)存儲系統(tǒng)34出現(xiàn)故障之前或包含在其中的數(shù)據(jù)損壞之前的時刻存儲器40中的主卷。此后主計算機系統(tǒng)32可以使用存儲器44中更新的卷繼續(xù)處理事務(wù)。如上面所提到的,這種用于響應(yīng)主數(shù)據(jù)卷的故障或損壞的處理,極大地延遲了企業(yè)使用數(shù)據(jù)處理系統(tǒng)對事務(wù)處理的繼續(xù)執(zhí)行。
使用上面說明的方法,數(shù)據(jù)處理系統(tǒng)30可以從存儲系統(tǒng)34的故障或主數(shù)據(jù)卷的損壞中以較短的時間得以恢復(fù)。為了進行說明,假設(shè)圖9A中的主計算機系統(tǒng)32就在主數(shù)據(jù)存儲34出現(xiàn)故障或其中的數(shù)據(jù)受損之后,使用上面說明的方法創(chuàng)建了包含在存儲器42中的備份的虛擬拷貝。這個虛擬拷貝被立刻在存儲器44中創(chuàng)建。
此后,主計算機系統(tǒng)32使用參考圖4B說明的方法將存儲在事務(wù)日志140中的事務(wù)應(yīng)用到在存儲器44中創(chuàng)建的虛擬拷貝上。如所預(yù)料的,在存儲器44中的數(shù)據(jù)可以被日志140的事務(wù)修改之前,來自存儲器42的某些存儲器塊的數(shù)據(jù)必須被首先拷貝到存儲器44中它們相應(yīng)的塊內(nèi)。一旦來自日志140的所有事務(wù)都被應(yīng)用了,包含在存儲器44中的數(shù)據(jù)的虛擬拷貝就可以被看成其內(nèi)容鏡像了存儲系統(tǒng)34出現(xiàn)故障或其上的數(shù)據(jù)受損的時刻存儲器40的內(nèi)容。然后主計算機系統(tǒng)32可以在存儲系統(tǒng)34出現(xiàn)故障或其上的主數(shù)據(jù)卷受損之后,根據(jù)接收到的事務(wù)訪問存儲器40。主計算機系統(tǒng)32不必等待存儲器42中的備份卷的整個內(nèi)容被實際地拷貝到存儲器44。因此,當(dāng)與現(xiàn)有技術(shù)比較時,主計算機系統(tǒng)32可以在主數(shù)據(jù)存儲系統(tǒng)34出現(xiàn)故障或其上的數(shù)據(jù)受損之后不久就繼續(xù)處理事務(wù)(使用參考圖4B和4C所說明的方法)。
存儲器44中的虛擬拷貝可以被用于恢復(fù)存儲器40內(nèi)的主卷的內(nèi)容。假設(shè)主計算機系統(tǒng)32響應(yīng)數(shù)據(jù)存儲系統(tǒng)34的物理故障在存儲器44中創(chuàng)建了虛擬拷貝。如上面提到的,可以在存儲器44中創(chuàng)建備份的虛擬拷貝,所述的虛擬拷貝被根據(jù)日志140中的全部事件進行更新。然而,在如上所述出現(xiàn)物理故障之后,不是根據(jù)主計算機系統(tǒng)32接收到的事務(wù)修改存儲器44中的虛擬拷貝的數(shù)據(jù),而是由主計算機創(chuàng)建更新后的虛擬拷貝的虛擬拷貝。圖9B是具有附加于其上的附加數(shù)據(jù)存儲系統(tǒng)70的圖9A的數(shù)據(jù)處理系統(tǒng)。參考圖9B,可以根據(jù)上面的方法在數(shù)據(jù)存儲系統(tǒng)70的存儲器80中創(chuàng)建虛擬拷貝的虛擬拷貝。主計算機系統(tǒng)32為存儲器80中的虛擬拷貝創(chuàng)建V/M表。此后,主計算機系統(tǒng)32根據(jù)主計算機系統(tǒng)32在數(shù)據(jù)存儲系統(tǒng)34出現(xiàn)故障之后接收到的事務(wù),修改存儲器80的虛擬拷貝中的數(shù)據(jù)。主計算機使用圖7中說明的方法修改存儲器80中的數(shù)據(jù)。結(jié)果,新創(chuàng)建的V/M表的幾個修改位m(n)將被設(shè)置為1。
還假設(shè)存儲系統(tǒng)34最終被修復(fù)了,從而主計算機系統(tǒng)32可以繼續(xù)訪問它。當(dāng)被修復(fù)時,存儲器40可以被快速地恢復(fù)為存儲器80的內(nèi)容?;謴?fù)過程包括主計算機32以存儲器80中相應(yīng)的存儲器塊的內(nèi)容(其具有相應(yīng)的設(shè)置為1的修改位m(n))替換存儲器40中的存儲器塊的內(nèi)容。例如,假設(shè)只有存儲器80的指定的存儲器塊3、4和9中的數(shù)據(jù)自從存儲器80內(nèi)的虛擬拷貝的創(chuàng)建以來被修改過。如新創(chuàng)建的V/M表中只有修改位m(3)、m(4)和m(9)被設(shè)置為1。為了將存儲器40的內(nèi)容恢復(fù)成存儲器80的內(nèi)容,主計算機系統(tǒng)32僅需要分別將存儲器80的存儲器塊3、4和9的內(nèi)容拷貝到存儲器40的存儲器塊3、4和9。使用這種方法,在系統(tǒng)34從它的故障中恢復(fù)之后,存儲器40的主數(shù)據(jù)卷可以被恢復(fù)。
圖9B及其相應(yīng)的描述說明了一種方法,通過該方法一個主數(shù)據(jù)卷可以被恢復(fù)為虛擬數(shù)據(jù)卷的內(nèi)容。這種方法使用V/M表的修改位m(n)。一般地,V/M表的修改位使得一個卷可以被快速地恢復(fù)成另一個卷的內(nèi)容。圖11是一個流程圖,說明了主計算機系統(tǒng)32將卷(X)恢復(fù)成卷(Z)的內(nèi)容的操作方面。出于解釋的目的,卷(X)和卷(Z)是包含在圖6的存儲器40-44和80-84中的兩個數(shù)據(jù)卷。圖12A示出了在主計算機系統(tǒng)32接收一個請求,將卷(X)恢復(fù)成卷(Z)的內(nèi)容的時刻,分別相應(yīng)于卷(X)和卷(Z)的V/M表120和122。在一個實施例中,主計算機系統(tǒng)32可以在發(fā)出命令以將卷(X)恢復(fù)為卷(Z)的內(nèi)容之后,立刻訪問卷(X)。為此,當(dāng)發(fā)出恢復(fù)命令時,主計算機系統(tǒng)12在相應(yīng)于卷(X)的V/M表中增加第三列。圖12B說明了具有附加于其上的、被指定為rx(n)的第三列的表120。Rx(n)當(dāng)被設(shè)置為1時,指示卷(X)的相應(yīng)的存儲器塊n已經(jīng)被恢復(fù)為卷(Z)的存儲器塊n的內(nèi)容。一旦整個數(shù)據(jù)卷(X)都被恢復(fù)了,就可以從表120中刪掉rx(n)列。然而,如下面將會更加明白的,列rx(n)允許在主計算機系統(tǒng)32發(fā)出了恢復(fù)命令之后立刻訪問卷(X)。
參考圖11,最初主計算機系統(tǒng)在步驟150將n設(shè)置為0。在步驟152,主計算機系統(tǒng)確定n的當(dāng)前值是否等于nmax,如果是的,則恢復(fù)過程已經(jīng)完成。然而最初n等于0,處理進入步驟152,其中主計算機系統(tǒng)32將n增加1。主計算機系統(tǒng)32在步驟154檢查rx(n)的狀態(tài)以確定它是被設(shè)置為1還是0。如果它被設(shè)置為1,則卷(X)的相應(yīng)的存儲器塊n已經(jīng)被恢復(fù),并且處理可以進入下一存儲器塊。如果rx(n)被設(shè)置為0,則塊n的內(nèi)容沒有被恢復(fù),并且處理進入步驟156,在其中做出關(guān)于卷(Z)的有效位vz(n)是被設(shè)置為1還是0的確定。如果卷(Z)的vz(n)被設(shè)置為1,則處理進入步驟160,在其中確定卷(Z)中的塊n的修改位mz(n)。如果卷(Z)內(nèi)的塊n中的數(shù)據(jù)被修改了,則mz(n)被設(shè)置為1,并且處理進入步驟162,在其中做出關(guān)于卷(Z)是否是卷(X)的虛擬拷貝的確定。如果卷(Z)不是卷(X)的虛擬拷貝,則因為卷(Z)的塊n包含有效的并修改過的數(shù)據(jù),在步驟166卷(Z)的塊n的內(nèi)容被拷貝到卷(X)的塊n,并且rx(n)被設(shè)置為1,指示卷(X)的塊n的內(nèi)容已經(jīng)被恢復(fù)。然后處理從步驟152開始重復(fù)進行。
然而如果在步驟162主計算機系統(tǒng)確定卷(Z)是卷(X)的虛擬拷貝,則主計算機在步驟164確定卷(X)的塊n的數(shù)據(jù)是否被修改了。如果它沒有被修改過,則卷(X)和卷(Z)的塊n中的內(nèi)容是相同的,并且不需要執(zhí)行拷貝。然而,如果在步驟164,mx(n)被設(shè)置為1,則卷(X)和卷(Z)的塊n中的內(nèi)容不同,因此卷(Z)的塊n中的數(shù)據(jù)內(nèi)容需要被拷貝到卷(X)的塊n。
回到步驟156,如果在該處理中主計算機系統(tǒng)32確定卷(Z)的塊n不包含有效數(shù)據(jù)(即,vz(n)被設(shè)置為0),則處理進入步驟172,其中主計算機系統(tǒng)32將虛擬變量a設(shè)置為Z,即包含卷(Z)的存儲器。此后主計算機系統(tǒng)32在步驟174將虛擬變量減1,并且在步驟176檢查卷(a)的va(n)的狀態(tài)。此時,卷(a)是卷(z)的雙親。如果卷(a)的va(n)被設(shè)置為0,則卷(a)的塊n不包含有效數(shù)據(jù),并且主計算機系統(tǒng)32重復(fù)步驟174和步驟176,直到主計算機系統(tǒng)32在相關(guān)卷的塊n中發(fā)現(xiàn)有效數(shù)據(jù)為止。
一旦在有關(guān)的卷的塊n中發(fā)現(xiàn)了有效數(shù)據(jù),則處理進入步驟182,其中主計算機系統(tǒng)32確定卷(a)是否是卷(X)的虛擬拷貝。如果卷(a)不是卷(X)的虛擬拷貝,則因為卷(a)在塊n中包含有效的并修改過的數(shù)據(jù),卷(a)的塊n的內(nèi)容在步驟184被拷貝到卷(X)的塊n,并且在步驟170主計算機系統(tǒng)32為卷(X)設(shè)置rx(n)為1。然而如果卷(a)是卷(X)的虛擬拷貝,則在步驟184主計算機系統(tǒng)32確定卷(X)的塊n的數(shù)據(jù)是否修改過。如果是的,卷(a)和卷(X)的塊n中的內(nèi)容的內(nèi)容不同,因此如步驟186所示,需要將數(shù)據(jù)從卷(a)的塊n拷貝到卷(X)的塊n。最后,在步驟170,主計算機系統(tǒng)32為卷(X)將rx(n)設(shè)置為1,并且處理進入步驟152以便確定卷(X)的所有塊是否都已被恢復(fù)。
如前面提到的,主計算機系統(tǒng)32可以在發(fā)出恢復(fù)命令之后,并且在完成該恢復(fù)命令之前立刻訪問恢復(fù)的卷(X)。圖13說明了在發(fā)出恢復(fù)命令,以便將卷(X)恢復(fù)為卷(Z)的內(nèi)容之后,而在完成卷(X)的恢復(fù)之前,寫卷(X)的操作方面。更具體地,在步驟190,主計算機系統(tǒng)32確定相應(yīng)于卷(X)的塊n的恢復(fù)位rx(n)是否被設(shè)置為1。這假設(shè)在相應(yīng)于卷(X)的表中出現(xiàn)了附加的列rx(n)。如果列rx(n)沒有出現(xiàn),則當(dāng)主計算機系統(tǒng)32接收一個請求,寫數(shù)據(jù)卷(X)的塊n時,卷(X)不是恢復(fù)的對象。如果在步驟190,rx(n)被確定為是1,則處理進入步驟192,并且主計算機系統(tǒng)32根據(jù)主計算機系統(tǒng)32接收到的寫命令,將數(shù)據(jù)寫到卷(X)的塊n。此時執(zhí)行步驟192,因為卷(X)的塊n以前已經(jīng)被恢復(fù)了。如果在執(zhí)行寫命令之前塊n沒有被恢復(fù),則卷(X)的塊n內(nèi)的數(shù)據(jù)可能會受到損壞。
在步驟190,確定了rx(n)沒有被設(shè)置為1,因此指示著卷(X)的塊n沒有被恢復(fù),處理進入步驟194,在其中檢查卷(Z)中的塊n的有效性。如果卷(Z)的塊n包含有效數(shù)據(jù),則處理進入步驟196,其中主計算機系統(tǒng)32確定卷(Z)的塊n內(nèi)的數(shù)據(jù)是否修改過。如果它被修改過,則卷(Z)的塊n和卷(X)的塊n中包含的數(shù)據(jù)之間存在著差別。結(jié)果,在步驟200主計算機系統(tǒng)從卷(Z)將塊n的內(nèi)容拷貝到卷(X)的塊n。本質(zhì)上,主計算機系統(tǒng)32在步驟200執(zhí)行塊n的恢復(fù)。當(dāng)被恢復(fù)后,在步驟192根據(jù)主計算機系統(tǒng)32的命令,主計算機系統(tǒng)32可以向卷(X)的塊n寫數(shù)據(jù)。然而如果在步驟196,確定卷(Z)的塊n中的有效數(shù)據(jù)已經(jīng)修改過了,則主計算機在步驟202確定卷(Z)是否是卷(X)的虛擬拷貝。再次,如果卷(Z)不是卷(X)的虛擬拷貝,則主計算機系統(tǒng)32在步驟200拷貝該內(nèi)容,并且主計算機系統(tǒng)32根據(jù)步驟192向卷(X)的塊n寫數(shù)據(jù)。如果在步驟222確定確定卷(Z)是卷(X)的虛擬拷貝,則在步驟204主計算機確定卷(X)的塊n的數(shù)據(jù)是否被修改過。如果卷(X)的塊n的數(shù)據(jù)被修改過,則卷(X)和Z的塊n內(nèi)的數(shù)據(jù)不同。同樣的,卷Z的內(nèi)容必須被拷貝到卷(X)的塊n。在步驟200,在數(shù)據(jù)被寫到卷(X)的塊n之前根據(jù)主計算機系統(tǒng)32接收到的寫命令。
如果在步驟194,主計算機系統(tǒng)確定卷(Z)的塊n不包含有效數(shù)據(jù),則主計算機系統(tǒng)32必須找到如果必要可以從其中拷貝數(shù)據(jù)的有關(guān)的卷。為此,主計算機系統(tǒng)32在步驟206將虛擬變量a設(shè)置為Z。然后主計算機在步驟212將該虛擬變量減1,并且訪問相應(yīng)于卷(a)的V/M表以確定其上的塊n是否包含有效數(shù)據(jù)。如果卷(a)包含塊n中的數(shù)據(jù)的有效拷貝,則主計算機在步驟214確定數(shù)據(jù)是否被修改過。如果根據(jù)步驟214所做出的確定,數(shù)據(jù)被修改過,則塊n和卷(X)的內(nèi)容是不同的,因此在步驟216需要將卷(a)的塊n的數(shù)據(jù)內(nèi)容拷貝到卷(X)的塊n。此后,卷(X)的塊n已經(jīng)被恢復(fù),并且主計算機系統(tǒng)32可以向卷(X)的塊n寫數(shù)據(jù)。如果在步驟214主計算機確定卷(a)的塊n內(nèi)的數(shù)據(jù)沒有被修改過,則主計算機系統(tǒng)在步驟220確定卷(a)是否是卷(X)的虛擬拷貝。如果它不是,數(shù)據(jù)被從卷(a)的塊n拷貝到卷(X)的塊n。然而如果卷(a)是卷(X)的虛擬拷貝,則在步驟222主計算機確定卷(X)的塊n中的數(shù)據(jù)是否被修改過。如果是的,卷(X)的塊n中的數(shù)據(jù)內(nèi)容與數(shù)據(jù)卷a內(nèi)的塊n中的數(shù)據(jù)內(nèi)容不同,并且在步驟216主計算機32將卷(a)的塊n的內(nèi)容拷貝到卷(X)的塊n。然而如果卷(X)的塊n中的數(shù)據(jù)內(nèi)容沒有被修改過,則卷(a)和卷(X)的塊n的內(nèi)容是相同的,并且在步驟192的寫操作之前不必被恢復(fù)。
如上所述,主計算機系統(tǒng)32可以執(zhí)行一個請求,在已經(jīng)啟動卷(X)的恢復(fù)之后,但是在將卷(X)的整個卷被恢復(fù)成卷(Z)的內(nèi)容之前讀塊n中的數(shù)據(jù)。圖14是一個流程圖,說明了用于在啟動了將卷(X)恢復(fù)成卷(Z)的內(nèi)容之后,從卷(X)的塊n讀數(shù)據(jù)的一個實施例的操作方面。在步驟230,主計算機系統(tǒng)32首先確定用于卷(X)的rx(n)是否被設(shè)置為1,或讀命令的存儲器塊n以前是否被恢復(fù)成了卷(Z)的塊n的內(nèi)容。如果已經(jīng)發(fā)生了卷(X)的塊n的恢復(fù),則如步驟232所示,主計算機可以執(zhí)行讀命令,并且因此從卷(X)的塊n讀數(shù)據(jù)。然而如果在步驟230確定了卷(X)的塊n將被恢復(fù),則在步驟234,主計算機32確定卷(Z)的塊n是否包含有效數(shù)據(jù)。如果是的,則在步驟236主計算機從卷(Z)的塊n中讀取數(shù)據(jù)。然而如果在步驟234主計算機確定卷(Z)的存儲器塊n不包含有效的數(shù)據(jù),則在步驟240主計算機將z減1,并且重復(fù)處理步驟234,直到發(fā)現(xiàn)了在塊n中包含有效數(shù)據(jù)的中間卷為止。
雖然已經(jīng)以幾個實施例說明了本發(fā)明,但是本發(fā)明并不旨在限于此處提出的特定形式,而是相反地,旨在覆蓋可以被合理地包括在由所附權(quán)利要求定義的本發(fā)明的范圍內(nèi)的替代方案、改型和等同方案。
權(quán)利要求
1.一種方法,包括將數(shù)據(jù)從第一存儲器的存儲器區(qū)域拷貝到第二存儲器的存儲器區(qū)域;在相應(yīng)于第二存儲器的存儲器區(qū)域的存儲器中設(shè)置第一位,其中第一位被設(shè)置為指示著第二存儲器的存儲器區(qū)域存儲著從第一存儲器的存儲器區(qū)域拷貝的數(shù)據(jù);在將數(shù)據(jù)從第一存儲器的存儲器區(qū)域拷貝到第二存儲器的存儲器區(qū)域之后,修改存儲在第二存儲器的存儲器區(qū)域內(nèi)的數(shù)據(jù);在存儲器中設(shè)置第二位,其中第二位被設(shè)置為指示著自從存儲在第二存儲器的存儲器區(qū)域內(nèi)的數(shù)據(jù)被從第一存儲器的存儲器區(qū)域拷貝以來,存儲在第二存儲器的存儲器區(qū)域內(nèi)的數(shù)據(jù)已被修改過。
2.如權(quán)利要求1的方法,還包括從第一存儲器的第二存儲器區(qū)域?qū)?shù)據(jù)拷貝到第二存儲器的第二存儲器區(qū)域;其中對存儲在第二存儲器的存儲器區(qū)域內(nèi)的數(shù)據(jù)的修改發(fā)生在將數(shù)據(jù)從第一存儲器的第二存儲器區(qū)域拷貝到第二存儲器的第二存儲器區(qū)域之前。
3.如權(quán)利要求1的方法,還包括產(chǎn)生將在第一存儲器內(nèi)的全部數(shù)據(jù)拷貝到第二存儲器的請求;其中,在產(chǎn)生了拷貝全部數(shù)據(jù)的請求之后,但是在第一存儲器內(nèi)的剩余數(shù)據(jù)被拷貝到第二存儲器之前,修改存儲在第二存儲器的存儲器區(qū)域內(nèi)的數(shù)據(jù)。
4.如權(quán)利要求1的方法,還包括修改存儲在第一存儲器的存儲器區(qū)域內(nèi)的數(shù)據(jù),其中在第一存儲器的存儲器區(qū)域內(nèi)修改數(shù)據(jù)之前,數(shù)據(jù)被從第一存儲器的存儲器區(qū)域拷貝到第二存儲器的存儲器區(qū)域。
5.如權(quán)利要求1的方法,還包括在存儲器中創(chuàng)建第一和第二表,所述每個表包括多個多位的表項;其中,所述的第一和第二存儲器中的每個存儲器包括多個存儲器區(qū)域;其中,第一表的每個表項相應(yīng)于第一存儲器的各自的存儲器區(qū)域;其中,第二表的每個表項相應(yīng)于第二存儲器的各自的存儲器區(qū)域;其中,第一和第二位組成了第二表的一個表項;其中,響應(yīng)將第一存儲器內(nèi)的全部數(shù)據(jù)拷貝到第二存儲器的請求,創(chuàng)建第二表。
6.一種用于存儲可由計算機系統(tǒng)執(zhí)行的指令的計算機可讀存儲器,其中所述的計算機系統(tǒng)響應(yīng)對所述指令的執(zhí)行,執(zhí)行一種方法,所述的方法包括創(chuàng)建存儲在第一存儲器內(nèi)的數(shù)據(jù)的第一虛擬拷貝,其中第一虛擬拷貝是在第二存儲器中被創(chuàng)建的;創(chuàng)建存儲在第一存儲器內(nèi)的數(shù)據(jù)的第二虛擬拷貝,其中第二虛擬拷貝是在第三存儲器內(nèi)被創(chuàng)建的,并且其中在創(chuàng)建了第一虛擬拷貝之后創(chuàng)建第二虛擬拷貝。
7.一種用于存儲可由計算機系統(tǒng)執(zhí)行的指令的計算機可讀存儲器,其中響應(yīng)對所述指令的執(zhí)行,執(zhí)行一種方法,所述的方法包括創(chuàng)建存儲在第一存儲器內(nèi)的數(shù)據(jù)的虛擬拷貝,其中響應(yīng)創(chuàng)建存儲在第一存儲器內(nèi)的全部數(shù)據(jù)的拷貝的請求,在第二存儲器中創(chuàng)建存儲在第一存儲器內(nèi)的數(shù)據(jù)的虛擬拷貝。
8.如權(quán)利要求7的計算機可讀存儲器,其中創(chuàng)建第一存儲器內(nèi)的數(shù)據(jù)的虛擬拷貝包括在存儲器中創(chuàng)建第一和第二表,每個表包括多個多位的表項;其中,第一表的每個表項相應(yīng)于第一存儲器的各自的存儲器區(qū)域;其中,第二表的每個表項相應(yīng)于第二存儲器的各自的存儲器區(qū)域;其中,第一表的每個第一位指示著第一存儲器的相應(yīng)的存儲器區(qū)域是否包含數(shù)據(jù);其中,第一表的每個第二位指示著自從第一表被創(chuàng)建以來,第一存儲器的相應(yīng)的存儲器區(qū)域內(nèi)的數(shù)據(jù)是否修改過;其中第二表的每個第一位指示著第二存儲器的相應(yīng)的存儲器區(qū)域是否包含從第一存儲器拷貝的數(shù)據(jù);其中第二表的每個第二位指示著自從第二表被創(chuàng)建以來,第二存儲器的相應(yīng)的存儲器區(qū)域內(nèi)的數(shù)據(jù)是否被修改過。
9.如權(quán)利要求8的計算機可讀存儲器,其中所述的方法還包括響應(yīng)修改第二存儲器的存儲器區(qū)域內(nèi)的數(shù)據(jù)的請求,將數(shù)據(jù)從第一存儲器的存儲器區(qū)域拷貝到第二存儲器的存儲器區(qū)域;設(shè)置相應(yīng)于第二存儲器的存儲器區(qū)域的第二表的一個表項的第一位,其中第二表的一個表項的第一位被設(shè)置為指示著第二存儲器的存儲器區(qū)域存儲著拷貝自第一存儲器的存儲器區(qū)域的數(shù)據(jù);在數(shù)據(jù)被從第一存儲器的存儲器區(qū)域拷貝到第二存儲器的存儲器區(qū)域之后,修改存儲在第二存儲器的存儲器區(qū)域內(nèi)的數(shù)據(jù);設(shè)置第二表的一個表項的第二位,其中第二表的一個表項的第二位被設(shè)置為指示著自從將數(shù)據(jù)從第一存儲器的存儲器區(qū)域拷貝到第二存儲器的存儲器區(qū)域以來,存儲在第二存儲器的存儲器區(qū)域內(nèi)的數(shù)據(jù)已經(jīng)被修改過了。
10.如權(quán)利要求7的計算機可讀存儲器,其中所述的方法還包括將數(shù)據(jù)從第一存儲器的存儲器區(qū)域拷貝到第二存儲器的存儲器區(qū)域;在相應(yīng)于第二存儲器的存儲器區(qū)域的存儲器中設(shè)置第一位,其中第一位被設(shè)置為指示著第二存儲器的存儲器區(qū)域存儲著拷貝自第一存儲器的存儲器區(qū)域的數(shù)據(jù);在將數(shù)據(jù)從第一存儲器的存儲器區(qū)域拷貝到第二存儲器的存儲器區(qū)域之后,修改存儲在第二存儲器的存儲器區(qū)域內(nèi)的數(shù)據(jù);在存儲器中設(shè)置第二位,其中第二位被設(shè)置為指示著自從數(shù)據(jù)被從第一存儲器的存儲器區(qū)域拷貝到第二存儲器的存儲器區(qū)域以來,存儲在第二存儲器的存儲器區(qū)域內(nèi)的數(shù)據(jù)已經(jīng)被修改過。
12.一種系統(tǒng),包括計算機系統(tǒng);第一數(shù)據(jù)存儲系統(tǒng),連接于所述的計算機系統(tǒng)上,其中第一數(shù)據(jù)存儲系統(tǒng)包括第一存儲器;第二數(shù)據(jù)存儲系統(tǒng),連接到所述的計算機系統(tǒng)上,其中第二數(shù)據(jù)存儲系統(tǒng)包括第二存儲器;其中,所述的計算機系統(tǒng)包括用于執(zhí)行指令的處理器和存儲可由處理器執(zhí)行的指令以便執(zhí)行一種方法的存儲器,所述的方法包括創(chuàng)建存儲在第一存儲器內(nèi)的數(shù)據(jù)的虛擬拷貝,其中響應(yīng)創(chuàng)建存儲在第一存儲器內(nèi)的數(shù)據(jù)的拷貝的請求,在第二存儲器內(nèi)創(chuàng)建存儲在第一存儲器內(nèi)的數(shù)據(jù)的虛擬拷貝。
13.如權(quán)利要求1的方法,還包括產(chǎn)生將第一存儲器內(nèi)的全部數(shù)據(jù)拷貝到第二存儲器的請求;其中在第一存儲器內(nèi)的全部數(shù)據(jù)被拷貝到第二存儲器之前,從第一存儲器拷貝到第二存儲器的數(shù)據(jù)是可訪問的或是可修改的。
全文摘要
公開了一種用于創(chuàng)建存儲在第一存儲器內(nèi)的數(shù)據(jù)的虛擬拷貝的方法。響應(yīng)創(chuàng)建存儲在第一存儲器內(nèi)的全部數(shù)據(jù)的拷貝的請求,在第二存儲器內(nèi)創(chuàng)建存儲在第一存儲器內(nèi)的數(shù)據(jù)的虛擬拷貝。在一個實施例中創(chuàng)建虛擬拷貝包括,在存儲器中創(chuàng)建第一和第二表,每個表包括多個多位的表項。第一表的每個表項相應(yīng)于第一存儲器的各個存儲器區(qū)域。第二表的每個表項相應(yīng)于第二存儲器的各個存儲器區(qū)域。第一表的每個第一位指示著第一存儲器的相應(yīng)的存儲器區(qū)域是否包含有效數(shù)據(jù)。第二表的每個第二位指示著自從第一表被創(chuàng)建以來,第一存儲器的相應(yīng)的存儲器區(qū)域內(nèi)的數(shù)據(jù)是否被修改過。第二表的每個第一位指示著自從第二表被創(chuàng)建以來,第二存儲器的相應(yīng)的存儲器區(qū)域是否被修改過。此外,使用本發(fā)明,可以一次創(chuàng)建存儲在第一存儲器的數(shù)據(jù)的多于一個的虛擬拷貝。另外,使用本發(fā)明可以創(chuàng)建虛擬拷貝的虛擬拷貝。
文檔編號G06FGK1653427SQ03810575
公開日2005年8月10日 申請日期2003年5月9日 優(yōu)先權(quán)日2002年5月10日
發(fā)明者A·A·凱克, J·A·科爾格羅夫, O·基謝廖夫, R·S·卡爾, N·S·彭達卡爾 申請人:維里塔斯管理公司