專利名稱:在數(shù)據(jù)存儲器中保持臨時數(shù)據(jù)的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機系統(tǒng)領(lǐng)域,尤其涉及數(shù)據(jù)存儲系統(tǒng)。
背景技術(shù):
在典型的現(xiàn)有技術(shù)的數(shù)據(jù)卷(data volume)中,只要數(shù)據(jù)改變,相應(yīng)的塊也改變。這就現(xiàn)今的應(yīng)用程序如關(guān)系數(shù)據(jù)庫和文件系統(tǒng)而言是適當?shù)?。然而,常?guī)的數(shù)據(jù)卷管理技術(shù)不提供保持和處理臨時或隨時間變化的信息。應(yīng)用程序-諸如數(shù)據(jù)挖掘、數(shù)據(jù)倉庫、媒體庫、醫(yī)療記錄等等-可能需要保持和/或處理臨時或隨時間變化的信息。在現(xiàn)有技術(shù)中沒有一種基礎(chǔ)設(shè)施(infrastructure)能夠允許這些領(lǐng)域中的應(yīng)用程序管理臨時數(shù)據(jù)。由于在存儲器中缺少基礎(chǔ)設(shè)施,所以現(xiàn)有技術(shù)的應(yīng)用程序典型地使用對支持臨時范型無效的蠻力(brute force)方法。因此,需要提供一種邏輯設(shè)備級基礎(chǔ)設(shè)施,用于一般地管理跨越多種應(yīng)用程序的臨時數(shù)據(jù)。
發(fā)明內(nèi)容
本發(fā)明描述了用于在邏輯設(shè)備級在數(shù)據(jù)存儲器中保存臨時數(shù)據(jù)的系統(tǒng)和方法的實施例。實施例可以提供用于在邏輯設(shè)備(卷)級時間標記(timestamping)數(shù)據(jù)以提供內(nèi)容保存的一般機制。實施例可以提供管理和存取臨時卷的機制。一些實施例可以與卷管理器集成。用于管理和存取臨時卷的機制可以被稱作臨時卷管理器。臨時卷管理器的實施例可以提供允許應(yīng)用程序和/或應(yīng)用程序代理與臨時卷管理器通信的接口,以管理和跟蹤一個或多個臨時卷上的臨時信息。實施例可以提供用于作用于數(shù)據(jù)歷史記錄-諸如臨時數(shù)據(jù)庫、版本管理(versioning)文件系統(tǒng)/存儲庫、數(shù)據(jù)檔案和流媒體-的應(yīng)用程序的基礎(chǔ)設(shè)施,以管理臨時數(shù)據(jù)。
臨時卷可以是除了當前數(shù)據(jù)以外還保存非當前數(shù)據(jù)的卷。臨時卷可以保持存儲在其上的數(shù)據(jù)的歷史記錄,因而為應(yīng)用程序提供檢索過去任何時間的數(shù)據(jù)拷貝的方法。在臨時卷中,只要一塊數(shù)據(jù)要被改變,則首先保存現(xiàn)有塊,然后覆寫新的數(shù)據(jù)。即使應(yīng)用程序從數(shù)據(jù)中刪除該塊,也保持塊的舊版本。這實現(xiàn)了保持數(shù)據(jù)過去的一個或多個狀態(tài)的數(shù)據(jù)拷貝的作用。臨時卷可以被用于例如基于主機的、基于網(wǎng)絡(luò)的(開關(guān)或器具)以及陣列存儲器的環(huán)境中。此外,應(yīng)當注意,臨時卷可以被用于帶內(nèi)和帶外虛擬化。
在一個實施例中,如果應(yīng)用程序不希望直接使用臨時卷(作為設(shè)備),則可以使用應(yīng)用程序代理(如下所述)以幫助它們利用卷的臨時特征。這消除了應(yīng)用程序的臨時數(shù)據(jù)管理的負擔,使得它們能夠集中于如何消耗數(shù)據(jù),而不是如果存儲數(shù)據(jù)。
在實施例中,可以以多種方式保持臨時卷中數(shù)據(jù)的歷史記錄,包括但不限于I/O控制的檢查點設(shè)置、應(yīng)用程序控制的檢查點設(shè)置以及周期檢查點設(shè)置。在I/O控制的檢查點設(shè)置中,使用臨時卷的應(yīng)用程序可以在向臨時卷寫入和/或從臨時卷讀取時提供時間戳。作為對于每次寫入都提供時間戳的替代方案,應(yīng)用程序可以發(fā)出I/O請求或命令,諸如UNIX環(huán)境中的IOCTL(I/O控制命令),在需要或者希望時為區(qū)域(或整個卷)指定時間戳。這種方法可以被稱作應(yīng)用程序控制的檢查點設(shè)置。另一種可選方案是對于臨時卷管理器周期地進行自動檢查點設(shè)置,例如每10秒鐘或每10分鐘。這可以被稱作周期檢查點設(shè)置。
臨時卷具有作為維度(dimension)的時間。在一個實施例中,臨時卷管理器可以提供允許用戶在臨時卷內(nèi)遍歷時間維度(歷史記錄)的接口。一個實施例可以提供產(chǎn)生臨時卷的臨時圖像的機制,其中臨時圖像具有它們自己獨立的歷史記錄。一個實施例可以提供生成兩個時間戳之間臨時卷的時間片(slice-in-time)圖像的機制。一個實施例可以提供生成臨時卷的時間點(point-in-time)臨時圖像的機制。時間點圖像是卷在一個時間點時的圖像,并且可以被認為是臨時卷的一維圖像??梢允褂脮r間片和時間點圖像作為臨時圖像的基礎(chǔ)。
以下的詳細描述參考附圖,現(xiàn)在簡要地介紹附圖。
附圖1表示根據(jù)一個實施例的、管理臨時卷中臨時操作的臨時卷管理器。
附圖2表示根據(jù)一個實施例的、使用應(yīng)用程序代理來與臨時卷管理器相互作用的應(yīng)用程序。
附圖3是根據(jù)一個實施例的、使用I/O控制的檢查點設(shè)置來在邏輯設(shè)備級管理臨時卷的方法的流程圖。
附圖4是根據(jù)一個實施例、使用應(yīng)用程序控制的檢查點設(shè)置來在邏輯設(shè)備級管理臨時卷的方法的流程圖。
附圖5是根據(jù)一個實施例、使用周期檢查點設(shè)置來在邏輯設(shè)備級管理臨時卷的方法的流程圖。
附圖6是根據(jù)一個實施例、生成臨時卷的時間片圖像的方法的流程圖。
附圖7是根據(jù)一個實施例、生成臨時卷的時間點圖像的方法的流程圖。
附圖8表示根據(jù)一個實施例的示范性高速緩存對象。
附圖9表示根據(jù)一個實施例的臨時卷TVOL的構(gòu)造。
附圖10表示根據(jù)一個實施例處理臨時卷上數(shù)據(jù)塊的變化,并且進一步表示在給定時間高速緩存對象下面的結(jié)構(gòu)。
附圖11表示根據(jù)一個實施例的非臨時快照。
附圖12表示根據(jù)一個實施例從臨時卷導出空間優(yōu)化的臨時快照。
雖然在此通過對幾個實施例和說明性附圖的舉例描述了本發(fā)明,但是本領(lǐng)域的技術(shù)人員應(yīng)當認識到本發(fā)明不限于所描述的實施例或附圖。應(yīng)當理解,附圖及其詳細描述不是為了將本發(fā)明限制到所公開的特定形式,相反,本發(fā)明覆蓋所有落入后面所附權(quán)利要求書所限定的本發(fā)明的精神和范圍內(nèi)的修改、等價物以及可選方案。在此使用的標題僅是為了編排目的,而不是用于限制說明書或權(quán)利要求的范圍。如本申請全文中所使用的那樣,詞語“可以”是用于容許的意思(即,表示具有這種可能),而不是強制性的意思(即表示必須)。同樣,詞語“包括”表示包括但不限于。
具體實施例方式
描述了在邏輯設(shè)備級保持數(shù)據(jù)存儲器中的臨時數(shù)據(jù)的系統(tǒng)和方法的實施例。實施例可以提供一般機制,用于在邏輯設(shè)備(卷)級對數(shù)據(jù)進行時間標記,以提供內(nèi)容保存。在實施例中,也可以被稱作臨時卷的臨時數(shù)據(jù)卷可以提供用于管理、I/O操作、復(fù)制的接口,以及對包括但不限于備份、恢復(fù)和分層存儲管理(HSM)操作的支持。實施例可以提供管理和存取臨時卷的機制。一些實施例可以與卷管理器-諸如Veritas VERITAS卷管理器-結(jié)合。在本文獻中,用于管理和存取臨時卷的機制可以被稱作臨時卷管理器。臨時卷管理器的實施例可以提供允許應(yīng)用程序與臨時卷管理器通信的接口,以管理和跟蹤一個或多個臨時卷上的臨時信息。
應(yīng)當注意,在本文獻的末尾提供了術(shù)語表,該術(shù)語表定義了在本文獻中所使用的多個術(shù)語。
實施例可以提供用于作用于數(shù)據(jù)歷史記錄-包括但不限于臨時數(shù)據(jù)庫(不管它們使用的臨時模型)、版本管理文件系統(tǒng)/存儲庫、數(shù)據(jù)檔案和流媒體-的應(yīng)用程序的基礎(chǔ)設(shè)施,以管理臨時數(shù)據(jù)。實施例也可以被用作需要臨時數(shù)據(jù)管理的進一步應(yīng)用程序的構(gòu)建模塊。
臨時卷可以是除了當前數(shù)據(jù)以外也保持非當前數(shù)據(jù)的卷。臨時卷可以保持在其上存儲的數(shù)據(jù)的歷史記錄,因而為應(yīng)用程序提供一種檢索過去任何時候數(shù)據(jù)的拷貝的方法。在正常卷中,只要數(shù)據(jù)改變,相應(yīng)的數(shù)據(jù)塊也就地改變。在臨時卷中,只要一塊數(shù)據(jù)將被改變,首先保存現(xiàn)有的塊,然后覆寫新的數(shù)據(jù)。保持塊的舊版本,即使該塊被應(yīng)用程序從數(shù)據(jù)中刪除。這實現(xiàn)了保持過去數(shù)據(jù)的一個或多個狀態(tài)的拷貝的作用。該過程也可以被認為是在卷上進行數(shù)據(jù)的連續(xù)版本管理,并且進行卷的快照,只要其改變。在另一實施例中,可以將新數(shù)據(jù)寫到單獨的位置,并且可以操縱臨時卷中的元數(shù)據(jù)(諸如到數(shù)據(jù)區(qū)的指針)。
臨時卷可以被用于存儲環(huán)境中,包括但不限于基于主機的、基于網(wǎng)絡(luò)的(開關(guān)或器具)和陣列存儲環(huán)境。同樣,應(yīng)當注意到,臨時卷可以被用于帶內(nèi)以及帶外虛擬化。
附圖1表示根據(jù)一個實施例的臨時卷管理器,臨時卷管理器管理臨時卷中的臨時操作。臨時卷管理器100可以為應(yīng)用程序106和/或操作/文件系統(tǒng)104管理臨時卷102上的臨時數(shù)據(jù)操作。應(yīng)用程序106可以是對保持數(shù)據(jù)的歷史記錄-諸如臨時數(shù)據(jù)庫、版本管理文件系統(tǒng)/存儲庫、數(shù)據(jù)檔案和流媒體-以管理臨時數(shù)據(jù)感興趣的任何類型的應(yīng)用程序。臨時卷管理器100可以為應(yīng)用程序106和/或操作/文件系統(tǒng)104提供一個或多個API,以在臨時卷102上執(zhí)行各種讀取、寫入或其它操作。
臨時卷可以被認為是任何對時間維度感興趣的應(yīng)用程序可以使用的一般臨時數(shù)據(jù)基礎(chǔ)設(shè)施。在一個實施例中,如果應(yīng)用程序不希望直接使用臨時卷(作為設(shè)備),則可以使用應(yīng)用程序代理(如下所述)來幫助它們利用卷的臨時特征。應(yīng)用程序代理去除了應(yīng)用程序的臨時數(shù)據(jù)管理的負擔,以便它們可以專心于如何消耗數(shù)據(jù),而不是如何存儲數(shù)據(jù)。例如,數(shù)據(jù)庫可以專心于有效的查詢處理,而不是擔心如何存儲表格的拷貝,文件系統(tǒng)可以專心于文件操作,而不是擔心如何版本管理文件,存儲庫可以專心于更快的索引,而不是存檔數(shù)據(jù)歷史記錄。
附圖2表示根據(jù)一個實施例的、使用應(yīng)用程序代理來與臨時卷管理器相互作用的應(yīng)用程序。臨時卷管理器200可以為應(yīng)用程序206管理臨時卷202上的臨時數(shù)據(jù)操作。應(yīng)用程序206可以是對保持數(shù)據(jù)歷史記錄-諸如臨時數(shù)據(jù)庫、版本管理文件系統(tǒng)/存儲庫、數(shù)據(jù)檔案和流媒體-以管理臨時數(shù)據(jù)感興趣的任何類型的應(yīng)用程序。臨時卷管理器200可以提供一個或多個API,用于在臨時卷202上執(zhí)行各種讀取、寫入或其它操作。應(yīng)用程序代理204是代表應(yīng)用程序206與臨時管理器200交互作用、并且支持應(yīng)用程序206的(一些或全部)語義的中介器。應(yīng)用程序代理204優(yōu)選地使應(yīng)用程序206更容易與臨時卷202交互作用。此外,應(yīng)用程序代理204可以允許應(yīng)用程序206以需要的格式提取數(shù)據(jù),而不僅是原始數(shù)據(jù)。
在存儲器(邏輯設(shè)備)級存儲數(shù)據(jù)歷史記錄也可以使管理更簡單。在應(yīng)用程序級,這暫時推掉了管理存儲器的努力。例如,數(shù)據(jù)庫不必復(fù)制其元數(shù)據(jù)的分支,諸如B樹,文件系統(tǒng)不必保持其i節(jié)點的拷貝,存儲庫不必復(fù)制其索引。對于系統(tǒng)管理員來說,這意味著僅管理一個數(shù)據(jù)臨時源,而不是管理不同的臨時數(shù)據(jù)庫、不同版本的FS以及不同存檔的存儲庫。
臨時卷提供用于保持和存取臨時信息的基礎(chǔ)設(shè)施。臨時卷可以在所有級中被應(yīng)用程序使用,包括文件系統(tǒng)和數(shù)據(jù)庫。此外,通過與文件系統(tǒng)和備份產(chǎn)品(例如VERITAS的文件系統(tǒng)和網(wǎng)絡(luò)備份產(chǎn)品)結(jié)合,臨時卷也可以被用作數(shù)據(jù)檔案、版本管理、復(fù)制、備份和HSM的構(gòu)建模塊。臨時卷保存臨時內(nèi)容,以便在稍后的時間點,該內(nèi)容可以被用于快照、增量備份、復(fù)制、恢復(fù)破壞的卷或刪除的文件。
通過利用諸如HSM的處理自動地將數(shù)據(jù)遷移到離線存儲器/從離線存儲器取回數(shù)據(jù),臨時卷可以為應(yīng)用程序提供虛擬無限的存儲容量。臨時卷也可以與備份實用程序-諸如VERITAS NetBackup-結(jié)合,以提供自動備份,包括增量備份??梢岳门R時窗口和/或周期檢查點設(shè)置為臨時卷提供周期復(fù)制。
臨時卷可以被用于包括但不限于以下中一個或多個的領(lǐng)域中的應(yīng)用程序商業(yè)智能/數(shù)據(jù)挖掘-這是關(guān)于從客戶數(shù)據(jù)中找出模式和行為。找到這種結(jié)果典型地需要臨時數(shù)據(jù)。例如,通過使用臨時數(shù)據(jù),零售商可以進行數(shù)據(jù)挖掘,以找出其客戶的使用模式,銀行可以分析客戶數(shù)據(jù),以找出信用歷史記錄、欺詐等等。
數(shù)據(jù)倉庫-數(shù)據(jù)倉庫是企業(yè)數(shù)據(jù)庫,通常用于存儲關(guān)于特定公司的所有信息。數(shù)據(jù)倉庫是通過數(shù)據(jù)挖掘工具收集并且用于知識發(fā)現(xiàn)的有價值信息的存儲庫。它們也可以用作不同企業(yè)的后端程序(backends)。是在數(shù)據(jù)倉庫中,時間維度可以被存儲和用于查詢數(shù)據(jù),并且每個數(shù)據(jù)倉庫具有使數(shù)據(jù)倉庫成為臨時數(shù)據(jù)庫的時間維度,并因此適于這里所述的臨時卷。
多媒體和成像-流式音頻/視頻、圖像、電子書以及醫(yī)療數(shù)據(jù)-諸如X射線和MRI-是可以具有某種與其相關(guān)的版本管理或流式(隨時間變化的分量)的數(shù)據(jù)的例子。媒體庫以臨時形式存儲媒體文件,并且基于因素-諸如連接速度-使它們流動,圖像數(shù)據(jù)庫-諸如衛(wèi)星成像和環(huán)境成像-保持相同位置的多個版本的圖像,醫(yī)療或臨床數(shù)據(jù)庫保持具有X射線、身體掃描等等的患者歷史記錄。這些是可以以某種形式使用隨時間變化的媒體、并因此適于這里所述的臨時卷的應(yīng)用程序的幾個例子。
固定內(nèi)容,也被稱作一次寫入多次讀取(Write-Once-Read-ManyWORM)存儲器。通過使用這里所述的臨時卷,可以跟蹤WORM存儲器上的數(shù)據(jù)到過去的點。
科學計算和實驗室-臨時卷可以解決存儲遺傳數(shù)據(jù)庫、數(shù)據(jù)分析、模式查找、預(yù)測、強計算、簡單實驗室試驗、數(shù)據(jù)監(jiān)控、信號處理、數(shù)學、生物信息學等的問題,所有這些可能具有隨時間變化的數(shù)據(jù)。
數(shù)據(jù)歸檔和審計-由于臨時卷保存其存儲的數(shù)據(jù)的歷史記錄,因而該歷史記錄可以被用于歸檔,例如通過使歷史記錄離線,并且將其存儲在磁帶或其它介質(zhì)上。隨后,可以將該歸檔用于分析或?qū)徲?。例子包括但不限于老職工?shù)據(jù)庫、舊銷售數(shù)據(jù)、普查數(shù)據(jù)、日志以及服務(wù)器歷史記錄。另一例子是不同法律和法規(guī)所需要的調(diào)整歸檔。
數(shù)據(jù)版本管理-可以在臨時卷上實現(xiàn)文檔版本管理。
在一個實施例中,在臨時卷管理級,可以使用索引系統(tǒng)或結(jié)構(gòu)(例如高速緩存對象、陣列等)保存臨時卷的內(nèi)容??梢詫⒏咚倬彺鎸ο蠖x為在使用有限存儲器空間時向其用戶表達無限存儲器假象的對象。通過在高速緩存對象上分配存儲器,高速緩存對象可以被用于產(chǎn)生空間優(yōu)化的快照。高速緩存對象從被稱作高速緩存卷的基礎(chǔ)卷得到其存儲器。高速緩存卷可以增長,只要需要跟上基于策略的無限容量約定。
在一個實施例中,卷可以被分成一個或多個區(qū)域。區(qū)域可以是從磁盤的一個物理塊到千字節(jié)、兆字節(jié)、千兆字節(jié)區(qū)域等等的任何地方。卷可以被分成區(qū)域,每個區(qū)域可以具有與其相關(guān)聯(lián)的時間戳。在一個實施例中,應(yīng)用程序(文件系統(tǒng)、數(shù)據(jù)庫等)可以指定什么時間戳將與區(qū)域相關(guān)聯(lián)。在一個實施例中,時間戳可以在數(shù)據(jù)被寫入到臨時卷時由應(yīng)用程序指定。應(yīng)該注意,現(xiàn)有技術(shù)的系統(tǒng)不允許應(yīng)用程序在寫入時指定時間戳。
在實施例中,臨時卷中的數(shù)據(jù)歷史記錄可以以多種方式被保存,方式包括但不限于I/O控制的檢查點設(shè)置、應(yīng)用程序控制的檢查點設(shè)置、以及周期檢查點設(shè)置。
在I/O控制的檢查點設(shè)置中,使用臨時卷的應(yīng)用程序可以在向臨時卷寫入和/或從臨時卷讀取時提供時間戳。在I/O控制的檢查點設(shè)置中,應(yīng)用程序可以通過每個I/O請求或者可選地僅通過要處理臨時數(shù)據(jù)的I/O請求而為臨時卷管理器提供時間戳。在本文中,術(shù)語I/O請求被用于表示任何I/O請求、命令、I/O控制請求、IOCTL、或者應(yīng)用程序或其它實體用于與卷相互作用-例如讀取數(shù)據(jù)和將數(shù)據(jù)寫入到卷中-的其他機制。在一個實施例中,通過任何I/O請求(例如讀取或?qū)懭?,應(yīng)用程序可以指定被寫入的區(qū)域?qū)⑼ㄟ^所提供的時間戳而被時間標記。在一個實施例中,在I/O控制的檢查點設(shè)置中,臨時卷管理器可以提供I/O請求接口,其允許應(yīng)用程序發(fā)出指定時間戳的I/O請求(I/O控制命令或請求,諸如UNIX IOCTL)。在一個實施例中,可以通過使用到臨時卷管理器的臨時讀取和臨時寫入接口而實現(xiàn)I/O控制的檢查點設(shè)置。例如,臨時數(shù)據(jù)庫可以使用I/O控制的檢查點設(shè)置來通過每次寫入而指定時間戳。
附圖3是根據(jù)一個實施例、通過使用I/O控制的檢查點設(shè)置而在邏輯設(shè)備級管理臨時卷的方法的流程圖。如300所示,可以首先生成臨時卷,以存儲應(yīng)用程序的臨時數(shù)據(jù)。如302所示,臨時卷管理器可以從應(yīng)用程序(或如果使用代理,則從應(yīng)用程序的代理)接收I/O請求。如果I/O請求是臨時請求,則I/O請求可以為臨時卷上的臨時數(shù)據(jù)指定一個或多個時間戳。臨時卷管理器可以為應(yīng)用程序(或應(yīng)用程序代理)提供API,用于存取和請求臨時卷上的臨時操作。如果I/O請求是臨時讀取請求,則臨時卷管理器可以將由I/O請求所指定的一個或多個時間戳指示的臨時數(shù)據(jù)返回到應(yīng)用程序,如306所示。如果I/O請求是臨時寫入請求,則可以根據(jù)I/O請求所指定的時間戳生成臨時卷的區(qū)域的檢查點,如308所示,并且臨時卷管理器可以將I/O請求所指定的數(shù)據(jù)寫入臨時卷,如310所示。
作為通過每次寫入而提供時間戳的替代,應(yīng)用程序可以發(fā)出在要求或希望時為區(qū)域或者整個卷指定時間戳的I/O請求。該方法可以被稱作應(yīng)用程序控制的檢查點設(shè)置。在應(yīng)用程序控制的檢查點設(shè)置中,可以發(fā)出在臨時卷內(nèi)指定新的檢查點(時間點拷貝)的I/O請求,而不是通過每次寫入而提供時間戳。在應(yīng)用程序控制的檢查點設(shè)置中,應(yīng)用程序告訴臨時卷何時創(chuàng)建檢查點/版本(臨時卷的時間點拷貝)。在一個實施例中,這可以通過使用I/O請求-諸如I/O控制(IOCTL)操作-而完成。通過每個應(yīng)用程序控制的I/O請求來對一個或多個區(qū)域進行時間標記。在一個實施例中,可以自動地在多于一個臨時卷上完成應(yīng)用程序控制的檢查點設(shè)置。
附圖4是根據(jù)一個實施例、通過使用應(yīng)用程序控制的檢查點設(shè)置來在邏輯設(shè)備級管理臨時卷的方法的流程圖。如400所示,可以首先生成臨時卷,以存儲應(yīng)用程序的臨時數(shù)據(jù)。然后,應(yīng)用程序可以對臨時卷進行一個或多個“標準”讀取和/或?qū)懭耄@可以不指定時間戳,并因而不生成臨時卷的檢查點。如402所示,臨時卷管理器可以從應(yīng)用程序接收對于臨時卷的指定要產(chǎn)生新檢查點的I/O請求。然后,臨時卷管理器可以根據(jù)由I/O請求所指定的時間戳而產(chǎn)生臨時卷的檢查點,如404所示。
另一種方法是周期地進行自動檢查點設(shè)置,例如每10秒鐘或每10分鐘。這可以被稱作周期檢查點設(shè)置。在周期檢查點設(shè)置中,臨時卷管理器可以提供接口,以允許在邏輯設(shè)備(卷)級通過臨時卷管理器的周期檢查點設(shè)置的配置。在周期檢查點設(shè)置中,臨時卷基礎(chǔ)設(shè)施(例如臨時卷管理器)周期地創(chuàng)建數(shù)據(jù)的新檢查點。這優(yōu)選地節(jié)省了通過存儲對數(shù)據(jù)的每個變化而可能已經(jīng)浪費的存儲空間。注意,在現(xiàn)有技術(shù)中,每次寫入典型地被保存。
附圖5是根據(jù)一個實施例、通過使用周期檢查點設(shè)置而在邏輯設(shè)備級管理臨時卷的方法的流程圖。如500所示,可以首先產(chǎn)生臨時卷,以存儲應(yīng)用程序的臨時數(shù)據(jù)。如502所示,臨時卷管理器然后可以從應(yīng)用程序接收可以不指定時間戳、并因而不產(chǎn)生臨時卷的檢查點的I/O請求。在一個實施例中,I/O請求可以指定應(yīng)該獲取檢查點的時間間隔(或周期)。如504所示,臨時卷管理器可以周期地產(chǎn)生臨時卷的檢查點(例如每n分鐘、小時或天)。注意,在一個實施例中,臨時卷管理器可以從應(yīng)用程序接收指定時間戳并且指定在正使用周期檢查點設(shè)置時將產(chǎn)生檢查點的I/O請求。
如果應(yīng)用程序正使用臨時寫入接口,則應(yīng)用程序可以隨寫入數(shù)據(jù)指定時間戳,并且卷管理器執(zhí)行臨時寫入。在一個實施例中,時間戳應(yīng)用于特定寫入,被存儲在卷上的其他數(shù)據(jù)可以具有或不具有與其一起存儲的臨時信息。換句話說,在一個實施例中,卷上的一些數(shù)據(jù)可以是臨時的,而卷上的其它數(shù)據(jù)可以不是臨時的。如果數(shù)據(jù)不是臨時的,則其不被時間標記。在一個實施例中,數(shù)據(jù)將只在應(yīng)用程序發(fā)出I/O請求以對數(shù)據(jù)進行時間標記的情況下、或者在執(zhí)行周期檢查點設(shè)置的情況下才被時間標記。這可以應(yīng)用于一個或多個區(qū)域或整個卷。
臨時卷具有作為維度的時間。在一個實施例中,臨時卷管理器可以提供接口,以允許用戶遍歷臨時卷內(nèi)的時間維度(歷史記錄)。例如,用戶可以通過使用接口而遍歷臨時卷的時間維度,以對臨時卷歷史記錄的先前時間點上臨時卷的數(shù)據(jù)執(zhí)行一個或多個操作。這種操作的例子可以包括以下一個或多個,但不限于以下為臨時卷上數(shù)據(jù)的特定版本或值搜索時間維度;將臨時卷恢復(fù)到臨時卷歷史記錄中特定時間點的狀態(tài);產(chǎn)生臨時卷的時間片或時間點圖像等等。一個實施例可以提供產(chǎn)生臨時卷的臨時圖像的機制,其中臨時圖像具有其自己獨立的歷史記錄。
一個實施例可以提供產(chǎn)生臨時卷的時間片圖像的機制。在一個實施例中,臨時卷管理器可以提供允許用戶/應(yīng)用程序請求區(qū)域-例如時間戳T1和T2之間-的內(nèi)容的接口(時間片圖像)。時間片圖像本身是臨時卷,但是其范圍被最初限制在時間戳T1和T2之間。時間片圖像是臨時卷在兩個時間戳之間的片段。臨時卷的時間片圖像表示臨時卷上數(shù)據(jù)的歷史記錄的片段。時間片圖像可以被看作是也可以保存其自己的歷史記錄的單獨臨時卷。在一個實施例中,可以在時間片圖像上執(zhí)行讀取和寫入??梢栽跁r間片圖像上執(zhí)行其它操作,例如數(shù)據(jù)挖掘。例如,可以在一個周期上收集數(shù)據(jù),可以取該周期內(nèi)一個月(例如八月)的時間片圖像,并且可以對時間片圖像執(zhí)行數(shù)據(jù)挖掘或其它操作。
附圖6是根據(jù)一個實施例、產(chǎn)生臨時卷的時間片圖像的方法的流程圖。如600所示,可以首先產(chǎn)生臨時卷,以存儲應(yīng)用程序的臨時數(shù)據(jù)。如602所示,然后臨時卷管理器可以從應(yīng)用程序接收臨時和/或非臨時的I/O請求,至少一些這些I/O請求可以產(chǎn)生臨時卷的檢查點。注意,如果正在使用周期檢查點設(shè)置,則臨時卷管理器周期地產(chǎn)生臨時卷內(nèi)的檢查點。如604所示,臨時卷管理器可以從應(yīng)用程序接收對于臨時卷的請求創(chuàng)建臨時卷的時間片圖像的I/O請求。響應(yīng)于I/O請求,臨時卷管理器可以根據(jù)I/O請求所指定的兩個時間戳產(chǎn)生臨時卷的時間片圖像,如606所示。
一個實施例可以提供產(chǎn)生臨時卷的時間點臨時圖像的機制。時間點圖像是卷在單個時間處的圖像,并且可以被認為是臨時卷的一維圖像。時間點圖像可以被用作臨時圖像的基礎(chǔ)。于是,時間點圖像可以被認為是被初始化到圖像所基于的那個時間點的臨時卷。如果通過每個I/O(寫入)提供時間戳,則存在卷的有限數(shù)量的時間點圖像。臨時卷可以被認為是包括兩個或多個時間點圖像的數(shù)據(jù)卷。兩個或多個時間點圖像可以被組合。臨時卷的時間片圖像可以包括兩個或多個時間點圖像。
附圖7是根據(jù)一個實施例、產(chǎn)生臨時卷的時間點圖像的方法的流程圖。如700所示,可以首先產(chǎn)生臨時卷,以存儲應(yīng)用程序的臨時數(shù)據(jù)。如702所示,然后臨時卷管理器可以從應(yīng)用程序接收臨時和/或非臨時的I/O請求,至少一些這些I/O請求可以產(chǎn)生臨時卷的檢查點。注意,如果正在使用周期檢查點設(shè)置,則臨時卷管理器周期地在臨時卷內(nèi)產(chǎn)生檢查點。如704所示,臨時卷管理器可以從應(yīng)用程序接收對于臨時卷的、請求創(chuàng)建臨時卷的時間點圖像的I/O請求。響應(yīng)于I/O請求,臨時卷管理器可以根據(jù)I/O請求所指定的時間戳產(chǎn)生臨時卷的時間點圖像,如706所示。
一個實施例可以提供確定臨時卷上數(shù)據(jù)的兩個版本之間的增量變化的機制。確定增量變化可以被用于應(yīng)用程序,諸如增量備份、復(fù)制等等。在一個實施例中,臨時卷管理器可以提供接口,用于確定臨時卷在任意兩個時間點之間的變化是什么。例如,可以在一段時間周期上執(zhí)行時間標記。用戶可能希望備份或者歸檔兩個時間之間的數(shù)據(jù)??梢詣?chuàng)建增量圖像。增量圖像是差別圖像。增量圖像可以被用于產(chǎn)生從時間T1到時間T2(例如從一個時間點到前一備份時間)的備份或復(fù)制。臨時卷內(nèi)容可以被用于識別差異。這種機制優(yōu)選地使得更容易實現(xiàn)增量備份或復(fù)制應(yīng)用程序或?qū)嵱贸绦?;代替必須計算出變化并且管理快照的?yīng)用程序或?qū)嵱贸绦颍R時卷管理器管理快照。備份或復(fù)制應(yīng)用程序只想臨時卷管理器請求臨時卷在時間T1和T2之間的內(nèi)容(或內(nèi)容的差異或變量增加)。
在一個實施例中,可以截取保持在臨時卷內(nèi)的數(shù)據(jù)的歷史記錄,例如使用I/O請求,諸如IOCTL。可能要求或希望截取,因為空間不足或者因為不再需要該歷史記錄。在一個實施例中,基礎(chǔ)設(shè)施可以允許臨時卷的用戶設(shè)定確定保持多少歷史記錄的臨時窗口??梢宰詣咏厝÷淙氲脚R時窗口之外的變化。在一個實施例中,臨時卷管理器可以提供截取臨時卷以釋放空間的接口。例如,接口可以允許應(yīng)用程序指定信息將被臨時卷保持三個月。三個月以前的信息可以被臨時卷管理器刪除。周期地,例如每天或每周,可以刪除三個月以前的數(shù)據(jù)。
一個實施例可以提供從其一個時間點圖像和/或從兩個特定時間戳之間的時間片圖像中快速恢復(fù)卷的機制。例如,如果應(yīng)用程序每十分鐘對其數(shù)據(jù)進行時間標記,并且卷由于某種原因被破壞,則可以通過利用臨時數(shù)據(jù)(例如,最近未被破壞的時間標記的臨時數(shù)據(jù))而進行卷的恢復(fù)。
臨時卷和臨時卷管理器下面描述通過使用卷管理器和高速緩存對象而在邏輯設(shè)備級保持數(shù)據(jù)存儲器中的臨時數(shù)據(jù)的系統(tǒng)和方法的示范性實施例。注意,這些實施例是示范性的,并且可以使用能夠?qū)崿F(xiàn)臨時卷的其它機制。這些實施例提供用于從應(yīng)用程序接收對于臨時卷的I/O請求的裝置,以及用于響應(yīng)于I/O請求而對臨時卷執(zhí)行邏輯設(shè)備級臨時操作的裝置,。
實施例可以提供創(chuàng)建和使用臨時卷的機制,例如通過使用卷管理器-例如VERITAS的卷管理器(VxVM)。一個實施例可以使用高速緩存對象,用于歸檔數(shù)據(jù)的歷史記錄。一個實施例可以提供允許臨時卷的應(yīng)用程序或用戶除了正常卷操作之外還執(zhí)行基于時間的操作的一個或多個接口。
在卷管理器-例如VxVm-內(nèi),可以通過使用索引系統(tǒng)或結(jié)構(gòu)(例如,高速緩存對象、陣列,B+樹等等)實現(xiàn)臨時卷。在一個實施例中,高速緩存對象可以被用于實現(xiàn)臨時卷。附圖8表示根據(jù)一個實施例的示范性高速緩存對象。如圖8所示,高速緩存對象是在使用有限存儲器空間時向其用戶表現(xiàn)“無限的”存儲器的對象。高速緩存對象也可以被認為是空間優(yōu)化的永久存儲。在一個實施例中,高速緩存對象可以允許用戶創(chuàng)建空間優(yōu)化的快照。在高速緩存對象上被創(chuàng)建,空間優(yōu)化的快照優(yōu)選地不使用與其原始卷一樣多的存儲器。僅當實際數(shù)據(jù)在原始卷上改變時,實際數(shù)據(jù)才被寫到空間優(yōu)化的快照上(被稱作根據(jù)寫入進行拷貝(copy-on-write))。基礎(chǔ)高速緩存對象提供空間優(yōu)化的快照所需要的任何存儲器空間。高速緩存對象又從高速緩存卷中導出其存儲器。根據(jù)某些用戶定義的策略,高速緩存對象通過在需要時增加高速緩存卷而保持無限存儲器的假象。
在一個實施例中,支持高速緩存對象中空間優(yōu)化的基礎(chǔ)技術(shù)是I/O塊的重新定向。高速緩存對象通過使用永久轉(zhuǎn)換映射完成重新定向。這些轉(zhuǎn)換映射可以被存儲在相同的物理存儲器(高速緩存卷),該物理存儲器將存儲在根據(jù)寫入進行拷貝時寫入空間優(yōu)化快照的數(shù)據(jù)。此外,高速緩存對象允許通過允許在其頂部劃出(carve out)多個存儲單元而在其頂部創(chuàng)建多個空間優(yōu)化的快照。
高速緩存對象可以允許在其頂部創(chuàng)建多個存儲單元。這意味著,高速緩存對象可以為不同卷提供多個虛擬可尋址范圍。這樣,每個轉(zhuǎn)換由包括存儲單元標識符的搜索關(guān)鍵字和映射到高速緩存卷上數(shù)據(jù)的物理偏移的卷偏移組成。根據(jù)檢索關(guān)鍵字的大小,可檢索的地址空間可以非常大,并且如果提供巨大的存儲器空間(如果不是無限的),則可以更大。這意味著,將用于重新定向或轉(zhuǎn)換到實際數(shù)據(jù)塊的結(jié)構(gòu)應(yīng)該是高度可檢索和有效的。B+樹是適于這種要求的一種結(jié)構(gòu),并且為了示范性目的而在這里被用于實施例中,但是應(yīng)當注意,在其它實施例中可以使用其它結(jié)構(gòu)。
在一個實施例中,高速緩存對象的B+樹可以與其它元數(shù)據(jù)-諸如超塊、恢復(fù)日志區(qū)域、自由塊列表等等-一起被存儲在高速緩存卷上。元數(shù)據(jù)之后的區(qū)域被用于存儲數(shù)據(jù)區(qū)域。高速緩存對象中每個B+樹節(jié)點是頁面大小的(例如由卷管理器確定)。該樹中的葉節(jié)點指向高速緩存卷上的實際物理數(shù)據(jù)塊。
在一個實施例中,高速緩存對象上的每個I/O被重新定向??梢酝ㄟ^使用B+樹完成重新定向,并且I/O執(zhí)行B+樹路徑(walk),以首先定位高速緩存卷上數(shù)據(jù)的物理偏移。對“有效”區(qū)域的所有讀取和寫入可能都需要被重新定向。如果應(yīng)用程序想?yún)^(qū)域?qū)懭胍淮位蚨啻危瑒t認為該區(qū)域是“有效的”,否則認為其是“無效的”。在向卷的無效區(qū)域?qū)懭氲那闆r下,高速緩存對象可以為新的偏移分配B+樹中的新入口;這可以被稱作為分配寫入。
進一步的寫入可以覆寫先前的內(nèi)容。在一個實施例中,所有寫入被作為獨立的分配寫入處理,以便保存早期的內(nèi)容。
附圖9表示根據(jù)一個實施例的臨時卷TVOL的構(gòu)造。TVOL可以具有正常的數(shù)據(jù)叢P1、P2等等。叢在下面的術(shù)語表中定義。還有被稱作Pt的特定叢,其保持臨時數(shù)據(jù)。Pt具有一個存儲單元SDt,其可以在高速緩存對象上被創(chuàng)建。該高速緩存對象又從高速緩存卷中導出其存儲器。在一個實施例中,高速緩存對象可以通過使用前面所述的B+樹而重新定向?qū)懭搿T诹硪粚嵤├?,可以僅存在Pt,而沒有到臨時卷的正常數(shù)據(jù)叢。
只要通過使用正常的寫入對卷進行改變,改變就可以被反映到所有叢,包括Pt。雖然正常的叢-如P1或P2-可以只用新數(shù)據(jù)覆寫現(xiàn)有數(shù)據(jù),但是Pt可以在還未被時間標記的最新數(shù)據(jù)上寫入。如果該最新數(shù)據(jù)已經(jīng)被時間標記,則新數(shù)據(jù)可以被寫入在新位置,而不需要向其分配任何時間戳。
在一個實施例中,對于臨時操作來說,將對所有的叢-包括Pt-進行寫入。臨時操作要求指定時間戳。在一個實施例中,可以處理臨時寫入,如圖10所示。
附圖10表示根據(jù)一個實施例、對臨時卷上數(shù)據(jù)塊的變化的處理,并且還表示在給定的時間高速緩存對象下的結(jié)構(gòu)。高速緩存對象下面的高速緩存卷可以包括樹狀結(jié)構(gòu),其葉子保持指向磁盤上實際數(shù)據(jù)塊的指針。對還不在高速緩存對象中的區(qū)域B的寫入(分配寫入)可以通過時間戳T0分配入口B0。如果B的內(nèi)容改變,則可以在高速緩存卷(B1)上分配新的區(qū)域,而不是通過時間戳T1覆寫B(tài)0。高速緩存對象可以將B1添加到列表。B1包含塊的最新拷貝,而B0是先前的拷貝。在對塊B進行更多改變時,這種鏈接可以繼續(xù)。如果進行n個改變,則可以通過時間戳Tn至T0按順序Bn...B2,B1,B0鏈接塊。這種鏈接可能導致非常長的鏈。在一個實施例中,在這種情況下,鏈本身可以被轉(zhuǎn)換成樹,以更快索引。在一個實施例中,如稍后所述的時間戳可以通過拷貝列表中的每個節(jié)點而被保持,以便識別內(nèi)容。
在一個實施例中,當塊改變時,可以在高速緩存對象下鏈接舊版本。實際上,高速緩存對象正保持卷下面所有數(shù)據(jù)塊的歷史記錄。在一個實施例中,雖然可以在正常叢P1、P2等等中找到最新拷貝,但是只有更舊的版本可以被存儲在Pt下(參照附圖9)。這樣,在當前數(shù)據(jù)和歷史記錄數(shù)據(jù)之間存在簡單的描繪。這還允許直接在Pt上進行新的臨時操作,而不是操作所有叢或叢的子集。
在一個實施例中,臨時卷可以使用時間戳,以實現(xiàn)版本管理。臨時卷上的正常寫入不實現(xiàn)臨時性。在一個實施例中,為了保持改變的數(shù)據(jù)的歷史記錄,用戶或應(yīng)用程序可以使用臨時寫入接口(以下進一步描述)。當使用正常寫入時,新的數(shù)據(jù)簡單地覆寫舊的數(shù)據(jù)。在臨時寫入時,新數(shù)據(jù)被鏈接到舊數(shù)據(jù),并且被標記以給定的時間戳。在一個實施例中,可以通過應(yīng)用程序提供時間戳。
在一個實施例中,時間戳是可彼此比較的,并且可以被設(shè)置,使得它們可以以臨時順序排列。這對臨時讀取操作和對于獲得關(guān)于數(shù)據(jù)歷史記錄的信息可能是希望的或者要求的??梢员挥糜跁r間戳的數(shù)據(jù)類型可以包括但不限于整數(shù)數(shù)據(jù)類型。在實施例中,時間戳可以是實際系統(tǒng)時間、版本號、增量計數(shù)器、或任何其它適當?shù)男问?。在一個實施例中,可以不需要時間戳可被卷管理器解釋。不必解釋時間戳的卷管理器也可以允許用戶具有有效的數(shù)據(jù)時間,其可以是將來的時間。然而,不必解釋時間戳的卷管理器也意味著,臨時卷不能保證時間戳所示時間的相干性。因此,在一個實施例中,由應(yīng)用程序或用戶保持相干的時間戳。在一個實施例中,用戶可以使用稍后所述的應(yīng)用程序代理框架,以便推掉時間戳維護。
在一個實施例中,雖然臨時卷可以保持“無限的”歷史記錄(由于高速緩存對象所提供“無限的”存儲器),但是用戶可能希望只保留歷史記錄的一部分或窗口。例如,一些應(yīng)用程序可能僅對當前的和前一版本的數(shù)據(jù)感興趣,從而需要一個改變/版本的臨時窗口??蛇x地,一些應(yīng)用程序可能希望保持僅一段時間的歷史記錄,例如最近n分鐘、小時、天等等,在這種情況下,臨時窗口是n分鐘、小時、天等等。
在一個實施例中,臨時窗口可以在臨時卷創(chuàng)建期間被設(shè)置,并且如果希望或要求可以在隨后被改變。臨時窗口外臨時數(shù)據(jù)的任何改變不被存儲,并因此被丟失。因此,如果臨時窗口例如是5分鐘,則5分鐘前的任何改變是不可獲得的。在一個實施例中,缺省地,臨時窗口被認為是“無限的”。增加臨時窗口就增加了歷史記錄的量,而減少臨時窗口則可以要求臨時卷截取歷史記錄。
臨時窗口的使用通過上面給出的例子是顯而易見的。對于1-變化的臨時窗口來說,僅保持數(shù)據(jù)的當前和上一版本。例如,這可能對于使用兩個版本之間差異的增量備份或復(fù)制是有用的。由于僅差異正被使用,因而可以優(yōu)選地優(yōu)化帶寬使用。在第二例子中,臨時窗口是5分鐘。這可能對于例如周期增量備份或周期復(fù)制是有用的。如果用戶希望每n分鐘、小時、天等等遞增地備份數(shù)據(jù),則可以使用略大于n的臨時窗口,并且版本之間的差異可以被用于增量備份。
卷的臨時窗口可以被表示為一對時間戳<Ta,Tb>,其中Ta是最早的時間戳,Tb是最晚的時間戳。當創(chuàng)建臨時卷時,可以不定義臨時窗口,直到對卷的第一臨時寫入。在具有時間戳TX的第一寫入上,臨時窗口被初始化為<TX,TX>。進一步的臨時寫入(例如具有時間戳Ti)將臨時窗口改變?yōu)?amp;lt;TX,Ti>。當從TX到Ty截取歷史記錄時(稍后詳細描述),臨時窗口變成<Ty,Ti>。
一個實施例可以提供允許臨時卷上臨時I/O操作的一個或多個接口。在一個實施例中,正常卷上允許的操作在臨時卷中可以被類似地或相同地處理。在一個實施例中,臨時卷上的正常(非臨時)讀取可以與其在正常卷中所進行的那樣類似或相同地進行。如果沒有正常叢(但是僅有臨時叢Pt),則可以返回沒有時間戳的數(shù)據(jù)。如果不存在任何沒有時間戳的數(shù)據(jù),則可以返回具有最后的時間戳的數(shù)據(jù)。在一個實施例中,臨時卷上的正常寫入可以與在正常卷上類似或者相同地進行,除了創(chuàng)建沒有數(shù)據(jù)的空間優(yōu)化的快照(在本文中稍后描述)。在一個實施例中,雖然在臨時卷上可以如在正常卷中那樣進行正常讀取,但是對于檢索數(shù)據(jù)的過去拷貝,可以定義一個或多個I/O請求。
一個實施例可以提供允許用戶讀取過去特定時間范圍的內(nèi)容的接口。在一個實施例中,可以通過卷上的偏移(offset)及其長度(length)指定范圍。在一個實施例中,可以通過使用時間戳來指定需要內(nèi)容的時間,并且時間戳的解釋可以留給用戶。在一個實施例中,時間戳類型優(yōu)選地是由卷管理器(例如VxVM)指定的類型,使得可以在其上進行整數(shù)比較。時間戳的例子可以包括但不限于對數(shù)據(jù)庫,時間戳可以表示被表示為與紀元相距的秒鐘數(shù)量的事務(wù)時間;對于版本管理系統(tǒng),時間戳可以表示版本號;對于文件系統(tǒng),時間戳可以是系統(tǒng)時鐘所表示的時間;以及對于一些其它應(yīng)用程序,時間戳可以是整數(shù)計數(shù)器。
在一個實施例中,如果時間戳是0,則可以返回數(shù)據(jù)的當前拷貝。這等價于正常讀取。如果時間戳是負的,如-n,則返回數(shù)據(jù)的前面第n個拷貝。這可能對于例如對實際時間不感興趣而僅對變化或版本感興趣的應(yīng)用程序是有用的。
下面是示范性的API,其中實施例可以提供設(shè)備級的臨時卷上的多種臨時操作。注意,這些API是示范性的,而不是限制性的。
一個實施例可以提供可以被用于返回作為未解釋字節(jié)緩沖器的范圍的內(nèi)容??梢酝ㄟ^使用其設(shè)備號(裝置)來指定卷。下面是UNIX環(huán)境中API的示范性形式void*vol_temporal_read(voldevno_t device,timestamp_t timestamp,voff_t offset,size_t length);
在一個實施例中,vol_temporal_read可以使用設(shè)備上的IOCTL(例如VOL_TEMPORAL_READ)。VOL_TEMPORAL_READ是示范性的IOCTL,用于將[offset,length]對所指定的數(shù)據(jù)讀取到用戶所提供的緩沖器中。可以通過時間戳指定要讀取的拷貝。VOL_TEMPORAL_READ返回與所指定的時間戳匹配(或者最接近時間戳)的區(qū)域。下面是被返回的結(jié)構(gòu)的示范性形式struct vol_temporal_io{int flags;/*Flags*/timestamp_t timestamp;/*Timestamp*/caddr_t buf; /*Buffer*/size_t buf_len; /*Length of the buffer*/voff_t offset; /*Offset*/}一個實施例可以提供可以用于從一段時間讀取的API。這種接口可以允許用戶讀取兩個時間點之間范圍的所有版本。可以通過使用偏移和長度來指定范圍。在該接口中,可以提供兩個時間戳,第一個對應(yīng)于時間周期的開始,第二個對應(yīng)于結(jié)束。在一個實施例中,包括二者。在一個實施例中,如果這兩個時間戳(例如period_start和period_end)相等,則返回周期開始時的拷貝。如果這兩個時間戳都是0,則返回當前拷貝。如果兩個時間戳是負的,比如說分別是-m和-n(m>n),則返回前面第m個和第n個拷貝之間的所有拷貝(在一個實施例中,包括二者)。下面是API的示范性形式void*vol_temporal_period_read(voldevno_tdevice,timestamp_tperiod_start,timestamp_tperiod_end,voff_t offset,size_t length);
在一個實施例中,vol_temporal_period_read可以使用設(shè)備上的IOCTL(例如VOL_TEMPORAL_PERIOD_READ)。IOCTL返回兩個時間點之間范圍[offset,len](周期)的所有拷貝。通過使用開始和結(jié)束時間戳來指定周期。在返回實際數(shù)據(jù)之前,IOCTL可以被用于找出緩沖器的大小。對此,可以提交空緩沖器,并且IOCTL僅返回其可以找到的區(qū)域的數(shù)量(reg_num)。一旦用戶已經(jīng)找出區(qū)域的數(shù)量,可以在緩沖器中內(nèi)存,并且可以再次調(diào)用IOCTL。用戶優(yōu)選地為將描述緩沖器內(nèi)區(qū)域拷貝布局的結(jié)構(gòu)(例如period_reg_t)分配足夠的內(nèi)存。第二時間,IOCTL將返回兩個指針第一個是用戶緩沖器本身(buf),其可以被區(qū)域內(nèi)容的拷貝相繼地填充。每個拷貝可以具有不同的大小,因為可以從區(qū)域中刪除塊。第二個指針(reg_ptr)是指向描述用戶緩沖器內(nèi)區(qū)域布局及其拷貝的結(jié)構(gòu)。該結(jié)構(gòu)可以被認為是矩陣,其中每行描述范圍的單個拷貝,列描述一個拷貝內(nèi)的區(qū)域。下面是被返回的結(jié)構(gòu)vol_temporal_region_period_io的示范性形式typedef struct period_reg{voff_t vtbr_offset;/*Region offset*/timestamp_t vtbr_timestamp; /*Copy timestamp*/struct period_reg*vtbr_next_region; /*Next region*/struct period_reg*vtbr_prev_region; /*Previous region*/struct period_reg*vtbr_next_copy;/*Next copy*/struct period_reg*vtbr_prev_copy;/*previous copy*/}*period_reg_t;
struct vol_temporal_region_period_io{int flags; /*Flags*/timestamp_t start_timestamp;/*Period start*/timestamp_t end_timestamp; /*Period end*/caddr_t buf;/*Buffer*/period_reg_t reg_ptr;/*Data layout*/size_t buf_len;/*Buffer length*/caddr_t reg_num;/*Number of register*/voff_t offset; /*Extent offset*/size_t len;/*Extent length*/}在一個實施例中,臨時寫入與正常寫入一樣,但是包含用戶定義的時間戳。臨時寫入的示范性接口是size_t vol_temporal_write(voldevno_tdevice,timestamp_ttimestamp,void *buffer,voff_t offset,size_t length);
可以通過使用其設(shè)備號(設(shè)備)來指定該卷,并且可以在緩沖器中提供要寫入的數(shù)據(jù)。要寫入的時間與范圍一起被提供在時間戳中,并且優(yōu)選地不小于范圍的當前時間戳(如果存在的話)。可以如通常的那樣通過使用[offset,length]對來指定范圍。用于該函數(shù)的內(nèi)核IOCTL(例如VOL_TEMPORAL_WRITE)通過使用給定的時間戳而想臨時卷上的區(qū)域?qū)懭搿?br>
struct vol_temporal_region_io{intflags;/*Flags*/timestamp_ttimestamp;/*Timestamp*/caddr_tbuf; /*Buffer*/size_t buf_len; /*Length of the buffer*/voff_t offset; /*Offset*/}下面是可以用于在時間戳所指定的時間之前截取臨時卷(設(shè)備)的歷史記錄的示例性接口int_vol_temporal_truncate_history(voldevno_t device,timestamp_t timestamp);
返回值是狀態(tài)指示。該函數(shù)又使用IOCTL(例如VOL_TEMPORAL_TRUNCATE);該IOCTL截取臨時卷的歷史記錄。用戶可以指定這樣的時間,即在該時間之前應(yīng)當通過使用時間戳而刪除歷史記錄。
struct vol_temporal_truncate{int flags; /*Flags*/timestamp_t timestamp; /*Timestamp*/}下面是改變臨時窗口的示范性接口int vol_temporal_change_window(voldevno_t device,timestamp_t new_window,twindow_twindow_type);
可以通過使用時間戳類型來指定新的臨時窗口(new_window)。其解釋取決于窗口類型。例如,其可以是基于時間的、基于改變數(shù)量的,或者基于當前和最老時間戳之間差異的(由于不解釋時間戳)。該函數(shù)可以使用IOCTL(例如VOL_TEMPORAL_CHANGE_WINDOW)來改變臨時卷的臨時窗口。如果新窗口小于舊窗口,則該IOCTL可以執(zhí)行必要的歷史記錄截取動作。下面是IOCTL的示范性結(jié)構(gòu)形式
struct vol_emporal_change_window{intflags; /*Flags*/timestamp_twindow;/*New Window*/twindow_t type; /*Window type*/}為了中止臨時卷(設(shè)備)內(nèi)改變或版本管理的保持,可以使用下面的示范性接口int vol_temporal_pause_history(voldevno_t device);
int vol_temporal_resume_history(voldevno_t device);
這兩個函數(shù)返回相應(yīng)操作的狀態(tài)。它們使用內(nèi)核IOCTL(例如VOL_TEMPORAL_PAUSE,VOL_TEMPORAL_RESUME);這些IOCTL分別使歷史記錄保持中止或恢復(fù)。該操作可以是有用的,例如對于為了歸檔目的使整個歷史記錄離線。在卷中止期間,通過落入被中止間隔中的時間戳對卷進行的任何改變可能被丟失??蛇x方案是使那些I/O失效。
為了在臨時卷內(nèi)得到關(guān)于數(shù)據(jù)歷史記錄的信息,可以使用下面的示范性接口int vol_temporal_info( voldevno_t device,voff_t offset,unsigned int *copy_num,timestamp_t *min_timestamp,timestamp_t *max_timestamp,timestamp_t **change_timestamps,voff_t **changed_regions);
可以通過使用其設(shè)備號(設(shè)備)來指定臨時卷。如果特定區(qū)域需要歷史記錄,則可以通過使用其偏移來指定。如果該偏移是負的,則可以為整個卷返回信息。返回的第一片信息是區(qū)域的拷貝數(shù)量(copy_num)。區(qū)域上的最小和最大時間戳分別是min_timestamp和max_timestamp。change_timestamps是區(qū)域上所有時間戳的列表。如果整個卷需要信息,則可以返回所有被改變區(qū)域的列表(changed_regions)。上面的接口可以使用IOCTL(例如VOL_TEMPORAL_INFO),以得到關(guān)于歷史記錄的信息,諸如拷貝數(shù)量、時間戳、被改變塊列表等等。下面是VOL_TEMPORAL_INFO的示范性結(jié)構(gòu)struct vol_temporal_info{voff_t offset; /*Offset of region*/caddr_t copy_num; /*Number of copies*/caddr_t start_timestamp; /*First modification*/caddr_t end_timestamp;/*Last modification*/caddr_t change_timestamps;/*List of timestamps*/caddr_t changed_regions; /*List of changed region offsets*/}由于臨時卷保持過去所有卷拷貝,因而一個實施例可以提供獲取特定時間點處卷的完整圖像的機制。該圖像可以是表示特定瞬間卷內(nèi)容的單獨卷。該圖像可以是全數(shù)據(jù)的(data-full),在這種情況下,所有塊被拷貝到新存儲器上,或者是無數(shù)據(jù)的,在這種情況下,不存在實際數(shù)據(jù)拷貝,而僅存在指向原始臨時卷的一些跟蹤結(jié)構(gòu)。
附圖11表示根據(jù)一個實施例的非臨時快照。如果原始卷是臨時卷,則可以避免在覆寫快照原始卷上的數(shù)據(jù)時所進行的數(shù)據(jù)的根據(jù)寫入進行拷貝。如圖11所示,TVOL是其上出現(xiàn)正常I/O的臨時卷。在不存在臨時卷的臨時應(yīng)用程序的情況下,在叢Pt下不保持歷史記錄,并且區(qū)域在其上不具有時間戳。當在T0獲取快照時,Pt下的所有區(qū)域被標以時間戳T0,因此避免了在這些區(qū)域上的任何進一步的寫入。如果如果對TVOL進行任何新的寫入,例如在T1時,則其將發(fā)現(xiàn)被用T0時間標記的區(qū)域,并且不將覆寫。作為代替,其將與舊數(shù)據(jù)鏈接(在T0)。
如果TVOL是正常卷,則當在T1發(fā)生寫入時,其將已經(jīng)將區(qū)域的舊內(nèi)容(在T0的那些)推到STVOL(快照臨時卷,或者臨時快照),這是因為根據(jù)寫入進行拷貝的策略。這可能是需要的,因為STVOL表示T0的TVOL圖像。然而,由于TVOL是臨時卷,因而不需要根據(jù)寫入進行拷貝。當在T1發(fā)生寫入時,TVOL可以自動地對區(qū)域進行版本管理(version),因為其已經(jīng)被時間標記以T0,并且因此T0時的區(qū)域內(nèi)容仍然可以在Pt下得到。在正常情況下,只有在區(qū)域是無效的情況下,才從TVOL滿足讀取。因此,在STVOL的情況下,所有區(qū)域最初都被標記為無效的。只要從STVOL讀取區(qū)域,其就與時間標記T0一起被重定向到TVOL。這將讀取T0時的區(qū)域內(nèi)容,而不是當前內(nèi)容(在T1)。
如果在STVOL上發(fā)生寫入,則首先從TVOL中取出相應(yīng)的塊(具有時間戳T0),然后將其寫入。然后,該區(qū)域被標記為有效的,因為其拷貝在STVOL內(nèi),并且起不需要被重定向到TVOL。如果整個區(qū)域被寫入,則這可以被進一步優(yōu)化。在這種情況下,可以跳過提取部分。
附圖12表示根據(jù)一個實施例從臨時卷中導出空間優(yōu)化的臨時快照。原始臨時卷是具有臨時窗口<Ta,Tb>的TVOL。當在Tn創(chuàng)建臨時快照STVOL時,其臨時窗口變成<Tn,Tn>,其中Ta<=Tn<=Tb??煺談?chuàng)建操作首先創(chuàng)建叢(p2,Px等等),然后是高速緩存對象和快照卷STVOL。然后,其將STVOL的所有區(qū)域設(shè)置成“無效的”。在一個實施例中,STVOL上的I/O可以如下地進行對時間Tx時STVOL的臨時讀取,如果區(qū)域是-無效的,則執(zhí)行對Tn時TVOL的臨時讀取,并且返回數(shù)據(jù)。Tn是產(chǎn)生快照的時間。
-有效的,則如果Tx>Tn,就執(zhí)行Tx時STVOL的臨時讀取,其中Tx是在STVOL上修改區(qū)域的時間;這將是區(qū)域的最新拷貝。否則,執(zhí)行從TVOL的臨時讀取。
對時間Tx時STVOL的臨時寫入,如果區(qū)域是-無效的,則通過使用Tn時的臨時讀取而從TVOL得到區(qū)域的舊數(shù)據(jù),將新數(shù)據(jù)覆蓋在舊數(shù)據(jù)上,通過通過使用臨時寫入和時間戳Tx(Tx>Tn)來向STVOL寫入。在映射中將該區(qū)域設(shè)置成有效的,并且將STVOL的臨時窗口變成<Tn,Tx>。
-有效的,則通過時間戳Tx在STVOL自身上進行臨時寫入,并且將STVOL的臨時窗口改變成<Tn,Tn>。
片是原始臨時卷在一個時間段上的切割,而與快照不同,快照是時間點圖像。因此,具有臨時窗口<Ta,Tb>的臨時卷的片保持從Ti到Tj的歷史記錄子集,其中Ti>=Ta,Tj<=Tb。
在一個實施例中,創(chuàng)建臨時卷的一個片可以與創(chuàng)建快照相似。首先進行分配,包括創(chuàng)建叢、高速緩存對象,并最后創(chuàng)建卷STVOL(快照臨時卷,或臨時快照)。然后,映射中的所有區(qū)域被標記為無效的,并且片的臨時窗口被設(shè)置成<Ti,Tj>。在一個實施例中,STVOL上的I/O可以如下地進行對時間Tx時STVOL的臨時讀取。如果區(qū)域被標記為-無效的,則通過時間戳Tx執(zhí)行TVOL上的臨時讀取-MODIFLED,則如果Tx>Ti,就執(zhí)行對Tx時STVOL的臨時讀取,其中Tx是在STVOL上修改區(qū)域的時間;這將是區(qū)域的最新拷貝。否則,執(zhí)行從TVOL的臨時讀取。
對時間Tx時STVOL的臨時寫入。如果區(qū)域被標記為-無效的,則通過使用Ti時的臨時讀取而從TVOL得到區(qū)域的舊數(shù)據(jù),將新數(shù)據(jù)覆蓋在舊數(shù)據(jù)上,通過使用臨時寫入和時間戳Tx(Tx>Tj)而向STVOL寫入。在映射中將區(qū)域設(shè)置成有效的,并且將STVOL的臨時窗口改變成<Ti,Tx>。
-有效的,通過時間戳Tx執(zhí)行STVOL自身上的臨時寫入,并且將STVOL的臨時窗口改變成<Ti,Tx>。
在一個實施例中,由于臨時卷上的數(shù)據(jù)歷史記錄被保存在卷自身中,因而可以將卷返回到其過去的狀態(tài)。如果臨時卷(TVOL)具有臨時窗口<Ta,Tb>,并且用戶希望將卷恢復(fù)到其在時間Tk的狀態(tài),其中Ta<=Tk<=Tb,則在一個實施例中可以以下面的方式進行該過程如果用戶希望刪除歷史記錄-參考TVOL的映射,并且對于每個有效區(qū)域,刪除時間戳>Tk的所有區(qū)域拷貝(這基本上意味著將數(shù)據(jù)塊返回到空閑池)。
如果用戶希望保留歷史記錄-參考TVOL的映射,并且對于每個有效區(qū)域,找到在時間Tk時的區(qū)域拷貝的偏移(在高速緩存對象上);例如,如果其是Bx,則將時間Tr時區(qū)域拷貝的偏移設(shè)置成Bx,其中Tr是開始恢復(fù)的時間。
一個實施例可以提供從其時間點圖像之一恢復(fù)臨時卷的機制。該過程可以與前面部分中所描述的類似。代替使用TVOL的映射,可以使用快照的映射。然而,這種類型的恢復(fù)可以包括數(shù)據(jù)移動,因為可能已經(jīng)獨立地修改了快照。一個實施例可以提供從其片之一恢復(fù)臨時卷的機制。片可以已經(jīng)被修改或未修改。恢復(fù)可以改變一部分或全部歷史記錄,并且可能要求復(fù)雜的數(shù)據(jù)移動。
前面已經(jīng)描述了用于在臨時卷上進行I/O和相關(guān)操作的接口的示例性實施例。下面描述示范性的用戶級接口,其從應(yīng)用程序的觀點看是可以有用的,而不是先前所描述的一般接口,并且其不是限制性的。
如果應(yīng)用程序希望連續(xù)地跟蹤卷的區(qū)域的變化,則應(yīng)用程序必須提供時間戳,并且使用臨時寫入接口,以向卷寫入。對僅對保持歷史記錄感興趣的應(yīng)用程序來說,這可能產(chǎn)生大的開銷。下面描述的示范性接口不要求用戶在向臨時卷(dev name)寫入時指定時間戳。下面是不需要時間戳的、用于向臨時卷寫入的示范性APIint temporal_sys_write(char*dev_name,void*buffer,unsigned intoffset,unsigned intlength);
當讀取時,用戶可以通過使用時間串來指定時間戳(例如“Jan 202003,2:10pm”),如下面用于從臨時卷讀取的示范性API中所示void temporal_sys_read(char *dev_name,char*time_string,unsigned intoffset,unsigned intlength);
對于數(shù)據(jù)庫來說,可能希望在塊上進行I/O。一個實施例可以為臨時卷提供塊級APIs,以由數(shù)據(jù)庫(或其它應(yīng)用程序)使用。在一個實施例中,可以提供下面的示范性接口作為塊級APIs
void temporal_block_read(char *dev_name,unsigned int block_offset);
void temporal_block_period_read( char *dev name,timestamp_t period_start,timestamp_t period_end,unsigned intblock_offset,unsigned int*copy_num);
int temporal block write(char*dev_name,void *buffer,timestamp_t timestamp,unsigned int block_offset);
int temporal_block_info(char *dev_name,unsigned intblock_offset,imestamp_t *min_timestamp,timestamp_t *max_timestamp,timestamp_t **change_timestamps);
雖然應(yīng)用程序可以通過使用前述接口來存取臨時特征,并且在一個實施例中,使用一個或多個卷管理器庫(例如VxVM庫),但是可能發(fā)生以下情況,即所提供的接口或API不足夠,并且應(yīng)用程序希望調(diào)整接口以滿足他們的需要。例如,數(shù)據(jù)庫可能對查詢處理的塊提取更感興趣,文件系統(tǒng)可能根據(jù)范圍進行它們的業(yè)務(wù),存儲庫可能提取整個對象。一個實施例可以提供基于代理的框架,其可以允許應(yīng)用程序?qū)懭氪?,其中代理更特定于?yīng)用程序的特殊請求。
在本文中,代理是代表應(yīng)用程序與臨時卷交互作用、并且支持應(yīng)用程序的(一些或全部)語義的中介器。代理優(yōu)選地使應(yīng)用程序更易于與臨時卷交互作用。此外,代理可以允許應(yīng)用程序以所需的形式提取數(shù)據(jù),而不僅是作為原始數(shù)據(jù)。對臨時卷來說,這可以沒有任何差異,但對應(yīng)用程序來說,這可以是有利的。
在一個實施例中,在應(yīng)用程序側(cè),代理可以輸出任何適于應(yīng)用程序需要的接口。在卷側(cè),代理可以使用由臨時卷基礎(chǔ)設(shè)施已經(jīng)提供的接口,例如前述接口。代理的形式可以是庫、實用程序或者甚至腳本。代理可以作為異常分支點(hooks)而被寫入應(yīng)用程序中(如俘獲特定調(diào)用),或者可選擇地,代理可以被緊密地集成到應(yīng)用程序中。在一個實施例中,臨時卷可以提供標準庫和命令集,可以通過使用該標準庫和命令組寫代理。
代理可以被用于例如不支持臨時操作、但是希望通過使用在此描述的臨時卷而支持臨時操作的現(xiàn)有系統(tǒng)。下面是可以使用代理的一些示范性情況。
在第一種示范性的情況中,一些數(shù)據(jù)庫可能不支持臨時操作或數(shù)據(jù),但是希望使用臨時卷。對這些數(shù)據(jù)庫來說,可以創(chuàng)建數(shù)據(jù)庫,并且數(shù)據(jù)庫代理可以被用于重新定向具有與其關(guān)聯(lián)的時間維度的操作。這樣,現(xiàn)有的不是臨時的數(shù)據(jù)庫可以添加數(shù)據(jù)庫代理層,該數(shù)據(jù)庫代理層用作臨時卷的接口,以支持臨時操作。
在第二種示范性的情況,存儲庫可以使用代理作為臨時卷的接口,以臨時地存儲和檢索它們的數(shù)據(jù)對象。只要對象改變,就可以將改變要求重新路由到對象代理,該對象代理將對象寫到與舊對象所位于的位置完全相同的位置。由于在臨時卷上創(chuàng)建存儲庫,因而僅版本管理已經(jīng)改變的塊。在提取特定時間戳的對象版本時,對象代理將適當?shù)臅r間戳添加到卷讀取,因此返回對象的舊版本,而沒有降低索引或提取性能。
在一個實施例中,前面所描述的、臨時卷的臨時窗口參數(shù)和/或周期檢查點設(shè)置工具可以被用于執(zhí)行周期復(fù)制。周期復(fù)制周期地復(fù)制一組卷,而不是在改變發(fā)生時在改變上傳送。這種方式具有的優(yōu)點包括但不限于減少的I/O等待時間(與同步復(fù)制比較),以及日志不是必需的(與異步復(fù)制相反)。可以將臨時窗口設(shè)置成略大于復(fù)制周期;這樣,僅保存周期內(nèi)發(fā)生的變化。僅將變化發(fā)送到區(qū)域,而不是整個區(qū)域拷貝,這可以進一步優(yōu)化復(fù)制??梢酝ㄟ^使用數(shù)據(jù)的最新拷貝以及上上次復(fù)制時(上一周期的末尾)的數(shù)據(jù)拷貝來計算這些改變。
臨時應(yīng)用程序可以生成過量數(shù)據(jù),該數(shù)據(jù)可能被要求在臨時卷內(nèi)保留延長的周期。使較老的歷史記錄離線同時保持最近的歷史記錄在線可以是有用的,例如,如果用戶不希望失去變化,但是希望使用最近的歷史記錄。在這種情況下,臨時窗口是“無限的”。這導致在臨時卷內(nèi)具有過去數(shù)據(jù)的全部狀態(tài),這可能需要大量存儲器。在一個實施例中,可以將HSM(分層存儲器管理)用于在應(yīng)用程序在線時將偶爾存取的數(shù)據(jù)和/或歷史記錄透明地移動到其它介質(zhì)(例如磁帶或光盤)。
在一個實施例中,臨時卷可以與備份實用程序集成。備份實用程序可以使用增量備份技術(shù),以便僅存儲對文件所進行的變化,由此優(yōu)化進行備份所需的寬帶。網(wǎng)絡(luò)備份實用程序可以在中心(沒必是單一的)備份服務(wù)器存儲備份,這允許許多應(yīng)用程序客戶端僅分享備份的一個實例。通過使用臨時卷,可以在邏輯設(shè)備級自動地進行增量保存,并且因而不需要顯式地計算和存儲文件的增量。臨時卷也可以被用于版本管理多客戶端的變增量。如果多個用戶獨立地改變一個文件,則可以將多個版本存儲在相同臨時卷內(nèi),這有助于隨后提取文件版本。
在一個實施例中,臨時窗口可以允許備份實用程序跟蹤客戶端側(cè)上文件的變化。一個變化的臨時窗口可以被用于連續(xù)地跟蹤變化??梢詢?yōu)化獲取增量,因為原始內(nèi)容無需(不必)被從服務(wù)器中取出,但是代替地可以通過使用數(shù)據(jù)先前狀態(tài)的臨時讀取而被檢索。在一個實施例中,可以在客戶端側(cè)上創(chuàng)建增量。
術(shù)語表分層存儲器管理(Hierarchical Stroge ManagementHSM)-一組提供企業(yè)范圍存儲器管理服務(wù)-諸如自動的基于策略的數(shù)據(jù)遷移、自動備份、壓縮、安全以及歸檔的軟件和/或硬件。所有HSM解決方案所共有的特征是數(shù)據(jù)遷移、基于數(shù)據(jù)存取模式將數(shù)據(jù)卸載到較廉價或近線性的存儲器-諸如磁帶、CD或WORM驅(qū)動器-的能力。HSM當其被存取時透明地重新調(diào)用這種數(shù)據(jù)。
鏡像,叢(Mirror,Plex)-卷數(shù)據(jù)的邏輯映射或拷貝。在卷中可以存在一個或多個叢。每個單獨的鏡像不必具有完整的拷貝,但是可以具有由于物理介質(zhì)上的某種誤差或者由于鏡像幾何的特性而其中不映射數(shù)據(jù)的孔。這可以被稱作稀疏叢。然而,在卷中必須存在完整叢。
原始卷(Original Volume)-由于快照或分離操作而正從中分離一個或多個鏡像的卷。
復(fù)制(Replication)-保持原始位置上數(shù)據(jù)卷與其在地理上間隔的第二位置上的圖像之間一致性的處理。具有三種模式或復(fù)制同步、異步和周期。同步復(fù)制僅當?shù)诙恢靡惨呀?jīng)被更新時才返回寫入。異步復(fù)制將變化記入日志中,立即返回寫入,并且隨后更新第二位置(在后臺)。周期復(fù)制將增量變化傳送到第二位置,以便保持一致性。
恢復(fù)(Restore)-卷管理器操作,其中邏輯破壞之后的原始卷返回其先前時間點圖像中的一個。
再同步(Resvnc,Resvnchronization)-卷管理器操作,其與卷內(nèi)容同步地放置失效叢或(通過瞬時快照)與另一卷同步地放置卷。
快照卷(Snapshot Volume)-原始卷的時間點圖像。
快照(Snapshot)-創(chuàng)建快照卷的卷管理器操作。
卷(Volume)-卷管理器偽設(shè)備,其工作類似于物理塊存儲設(shè)備(磁盤),但是具有任意復(fù)雜的、并且可能冗余的內(nèi)部幾何。卷最終將其邏輯空間映射到實際磁盤驅(qū)動器上的物理空間(雖然卷管理器看作是物理磁盤的東西又可能是由另一設(shè)備或由存儲器陣列所創(chuàng)建的偽設(shè)備)。
VxFS-VERITAS文件系統(tǒng),日志式文件系統(tǒng)通過允許回退和重做而保存文件的目的或?qū)ζ涞牟僮鳌xFS還允許克隆,這等價于得到文件系統(tǒng)的時間點圖像。
檢查點設(shè)置(Checkpointing)-獲取數(shù)據(jù)卷的邏輯時間點圖像的處理。
無效區(qū)域(Invalid region)-還沒有被應(yīng)用程序?qū)懭?、并因而不包含任何有效?yīng)用程序數(shù)據(jù)的的數(shù)據(jù)卷區(qū)域。
有效區(qū)域(Valid region)-包含對應(yīng)用程序有效的數(shù)據(jù)的數(shù)據(jù)卷區(qū)域。
結(jié)論各種實施例可以進一步包括根據(jù)前面的描述在承載介質(zhì)上實現(xiàn)的接收、發(fā)送或存儲指令和/或數(shù)據(jù)。一般而言,承載介質(zhì)可以包括存儲介質(zhì)或內(nèi)存介質(zhì),諸如磁或光介質(zhì),例如磁盤或CD-ROM,易失性或非易失性介質(zhì),諸如RAM(例如SDRAM,DDR SDRAM,RDRAM,SRAM等等),ROM等等,以及傳送介質(zhì)或信號,諸如經(jīng)由通信介質(zhì)-諸如網(wǎng)絡(luò)和/或無線鏈路傳送的電、電磁、或數(shù)字信號。
附圖中所示出并且在此描述的各種方法表示方法的示范性實施例。這些方法可以在軟件、硬件或其組合中實現(xiàn)??梢愿淖兎椒ǖ捻樞?,并且可以各個元件可以被添加、記錄、組合、省略、修改等等。
可以進行各種修改和改變,如本領(lǐng)域技術(shù)人員了解本說明書的情況下所顯而易見的。這意味著本發(fā)明包括所有這樣的修改和改變,并且相應(yīng)地,以上描述被看作是說明性的,而不是限制性的。
權(quán)利要求
1.一種系統(tǒng),包括應(yīng)用程序;用于存儲臨時數(shù)據(jù)的臨時卷;以及臨時卷管理器,所述臨時卷管理器被配置為從所述應(yīng)用程序接收I/O請求,其中所述I/O請求為所述臨時卷上的臨時數(shù)據(jù)指定一個或多個時間戳;以及響應(yīng)于所述I/O請求,在所述臨時卷上執(zhí)行邏輯設(shè)備級臨時操作。
2.如權(quán)利要求1所述的系統(tǒng),其中所述I/O請求是寫入請求,并且在所述臨時操作中,所述臨時卷管理器被進一步配置為將由所述I/O請求所指定的臨時數(shù)據(jù)寫入到所述臨時卷。
3.如權(quán)利要求2所述的系統(tǒng),其中在所述臨時操作中,所述臨時卷管理器被進一步配置為對應(yīng)于由所述I/O請求所指定的時間戳生成所述臨時卷上臨時數(shù)據(jù)的檢查點。
4.如權(quán)利要求1所述的系統(tǒng),其中所述I/O請求是讀取請求,并且在所述臨時操作中,所述臨時卷管理器被進一步配置為將由所述I/O請求所指定的臨時數(shù)據(jù)返回到所述應(yīng)用程序。
5.如權(quán)利要求1所述的系統(tǒng),其中所述I/O請求指定要對應(yīng)于由所述I/O請求所指定的時間戳而創(chuàng)建所述臨時卷的檢查點,并且其中在所述臨時操作中,所述臨時卷管理器被進一步配置為對應(yīng)于所述指定的時間戳而生成所述臨時卷的檢查點。
6.如權(quán)利要求1所述的系統(tǒng),其中所述臨時卷管理器被進一步配置為以由I/O請求所指定的時間間隔生成所述臨時卷的檢查點。
7.如權(quán)利要求1所述的系統(tǒng),其中所述I/O請求指定要對應(yīng)于由所述I/O請求所指定的時間戳而生成所述臨時卷的時間點圖像,并且其中在所述臨時操作中,所述臨時卷管理器被進一步配置為對應(yīng)于所述指定的時間戳而生成所述臨時卷的時間點圖像。
8.如權(quán)利要求1所述的系統(tǒng),其中所述I/O請求指定要創(chuàng)建由所述I/O請求中兩個時間戳所指定的臨時卷時間片圖像,并且其中在所述臨時操作中,所述臨時卷管理器被進一步配置為生成由所述兩個時間戳所指定的臨時卷時間片圖像。
9.如權(quán)利要求1所述的系統(tǒng),其中所述I/O請求指定要在由所述I/O請求所指定的時間點截取所述臨時卷的歷史記錄,并且其中在所述臨時操作,所述臨時卷管理器被進一步配置為在由所述I/O請求所指定的時間點截取所述臨時卷的歷史記錄。
10.如權(quán)利要求1所述的系統(tǒng),其中所述I/O請求指定要遍歷所述臨時卷的歷史記錄直到由所述I/O請求所指定的時間點,并且其中所述臨時卷管理器被進一步配置為在所述臨時卷的歷史記錄中由所述I/O請求所指定的所述時間點執(zhí)行所述臨時操作。
11.如權(quán)利要求1所述的系統(tǒng),其中所述I/O請求指示所述臨時卷的一個或多個區(qū)域,其中在所述區(qū)域上要執(zhí)行所述臨時操作。
12.一種系統(tǒng),包括用于從應(yīng)用程序為臨時卷接收I/O請求的裝置,其中所述I/O請求為臨時卷上的臨時數(shù)據(jù)指定一個或多個時間戳;以及用于響應(yīng)于所述I/O請求而在所述臨時卷上執(zhí)行邏輯設(shè)備級操作的裝置。
13.一種方法,包括臨時卷管理器從應(yīng)用程序接收I/O請求,其中所述I/O請求為臨時卷上的臨時數(shù)據(jù)指定一個或多個時間戳;以及所述臨時卷管理器響應(yīng)于所述I/O請求而在所述臨時卷上執(zhí)行邏輯設(shè)備級臨時操作。
14.如權(quán)利要求13所述的方法,其中所述I/O請求是寫入請求,并且所述在臨時卷上執(zhí)行邏輯設(shè)備級臨時操作的步驟包括所述臨時卷管理器將由所述I/O請求所指定的臨時數(shù)據(jù)寫入到所述臨時卷。
15.如權(quán)利要求14所述的方法,其中所述在臨時卷上執(zhí)行邏輯設(shè)備級臨時操作的步驟進一步包括對應(yīng)于由所述I/O請求所指定的時間戳而生成所述臨時卷上臨時數(shù)據(jù)的檢查點。
16.如權(quán)利要求13所述的方法,其中所述I/O請求是讀取請求,并且所述在臨時卷上執(zhí)行邏輯設(shè)備級臨時操作的步驟包括將由所述I/O請求所指定的臨時數(shù)據(jù)返回到所述應(yīng)用程序。
17.如權(quán)利要求13所述的方法,其中所述I/O請求指定將對應(yīng)于由所述I/O請求所指定的時間戳而創(chuàng)建所述臨時卷的檢查點,并且其中所述在臨時卷上執(zhí)行邏輯設(shè)備級臨時操作的步驟包括對應(yīng)于所述指定的時間戳而生成所述臨時卷的檢查點。
18.如權(quán)利要求13所述的方法,進一步包括所述臨時卷管理器以由I/O請求所指定的時間間隔生成所述臨時卷的檢查點。
19.如權(quán)利要求13所述的方法,其中所述I/O請求指定將對應(yīng)于由所述I/O請求所指定的時間戳而生成所述臨時卷的時間點圖像,并且其中所述在臨時卷上執(zhí)行邏輯設(shè)備級臨時操作的步驟包括對應(yīng)于所述指定的時間戳而生成所述臨時卷的時間點圖像。
20.如權(quán)利要求13所述的方法,其中所述I/O請求指定將創(chuàng)建由所述I/O請求中兩個時間戳所指定的臨時卷時間片圖像,并且其中所述在臨時卷上執(zhí)行邏輯設(shè)備級臨時操作的步驟包括生成由所述兩個時間戳所指定的臨時卷時間片圖像。
21.如權(quán)利要求13所述的方法,其中所述I/O請求指定要在由所述I/O請求所指定的時間點截取所述臨時卷的歷史記錄,并且其中所述在臨時卷上執(zhí)行邏輯設(shè)備級臨時操作的步驟包括在由所述I/O請求所指定的時間點截取所述臨時卷的歷史記錄。
22.如權(quán)利要求13所述的方法,其中所述I/O請求指定要遍歷所述臨時卷的歷史記錄直到由所述I/O請求所指定的時間點,并且其中所述在臨時卷上執(zhí)行邏輯設(shè)備級臨時操作的步驟包括在所述臨時卷的歷史記錄中由所述I/O請求所指定的所述時間點執(zhí)行所述臨時操作。
23.如權(quán)利要求13的方法,進一步包括在由所述I/O請求所指示的所述臨時卷的一個或多個區(qū)域上執(zhí)行所述邏輯設(shè)備級臨時操作。
24.一種包括程序指令的計算機可存取介質(zhì),其中所述程序指令被配置為執(zhí)行臨時卷管理器從應(yīng)用程序接收I/O請求,其中所述I/O請求為臨時卷上的臨時數(shù)據(jù)指定一個或多個時間戳;以及所述臨時卷管理器響應(yīng)于所述I/O請求而在所述臨時卷上執(zhí)行邏輯設(shè)備級臨時操作。
25.如權(quán)利要求24所述的計算機可存取介質(zhì),其中所述I/O請求是寫入請求,并且在所述在臨時卷上執(zhí)行邏輯設(shè)備級臨時操作的步驟中,所述程序指令被進一步配置為實現(xiàn)所述臨時卷管理器將由所述I/O請求所指定的臨時數(shù)據(jù)寫入到所述臨時卷。
26.如權(quán)利要求25所述的計算機可存取介質(zhì),其中在所述在臨時卷上執(zhí)行邏輯設(shè)備級臨時操作的步驟中,所述程序指令被進一步配置為實現(xiàn)對應(yīng)于由所述I/O請求所指定的時間戳而生成所述臨時卷上臨時數(shù)據(jù)的檢查點。
27.如權(quán)利要求24所述的計算機可存取介質(zhì),其中所述I/O請求是讀取請求,并且在所述在臨時卷上執(zhí)行邏輯設(shè)備級臨時操作的步驟中,所述程序指令被進一步配置為實現(xiàn)將由所述I/O請求所指定的臨時數(shù)據(jù)返回到所述應(yīng)用程序。
28.如權(quán)利要求24所述的計算機可存取介質(zhì),其中所述I/O請求指定將對應(yīng)于由所述I/O請求所指定的時間戳而創(chuàng)建所述臨時卷的檢查點,并且其中在所述在臨時卷上執(zhí)行邏輯設(shè)備級臨時操作的步驟中,所述程序指令被進一步配置為實現(xiàn)對應(yīng)于所述指定的時間戳而生成所述臨時卷的檢查點。
29.如權(quán)利要求24所述的計算機可存取介質(zhì),其中所述程序指令被進一步配置為實現(xiàn)所述臨時卷管理器以由I/O請求所指定的時間間隔生成所述臨時卷的檢查點。
30.如權(quán)利要求24所述的計算機可存取介質(zhì),其中所述I/O請求指定將對應(yīng)于由所述I/O請求所指定的時間戳而創(chuàng)建所述臨時卷的時間點圖像,并且其中在所述在臨時卷上執(zhí)行邏輯設(shè)備級操作的步驟中,所述程序指令被進一步配置為實現(xiàn)對應(yīng)于所述指定的時間戳而生成所述臨時卷的時間點圖像。
31.如權(quán)利要求24所述的計算機可存取介質(zhì),其中所述I/O請求指定將創(chuàng)建由所述I/O請求中兩個時間戳所指定的臨時卷時間片圖像,并且其中在所述在臨時卷上執(zhí)行邏輯設(shè)備級臨時操作的步驟中,所述程序指令被進一步配置為實現(xiàn)生成由所述兩個時間戳所指定的臨時卷時間片圖像。
32.如權(quán)利要求24所述的計算機可存取介質(zhì),其中所述I/O請求指定將在由所述I/O請求所指定的時間點截取所述臨時卷的歷史記錄,并且其中在所述在臨時卷上執(zhí)行邏輯設(shè)備級操作的步驟中,所述程序指令被進一步配置為實現(xiàn)在由所述I/O請求所指定的時間點截取所述臨時卷的歷史記錄。
33.如權(quán)利要求24所述的計算機可存取介質(zhì),其中所述I/O請求指定將遍歷所述臨時卷的歷史記錄直到由所述I/O請求所指定的時間點,并且其中在所述在臨時卷上執(zhí)行邏輯設(shè)備級臨時操作的步驟中,所述程序指令被進一步配置為在所述臨時卷的歷史記錄中由所述I/O請求所指定的時間點執(zhí)行所述臨時操作。
34.如權(quán)利要求24所述的計算機可存取介質(zhì),其中所述程序指令被進一步配置為實現(xiàn)在由所述I/O請求所指示的所述臨時卷的一個或多個區(qū)域上執(zhí)行所述邏輯設(shè)備級臨時操作。
全文摘要
在邏輯設(shè)備級保持數(shù)據(jù)存儲器中臨時數(shù)據(jù)的系統(tǒng)和方法。臨時卷管理器的實施例可以提供允許應(yīng)用程序和/或應(yīng)用程序代理與臨時卷管理器交互作用的接口,以便在一個或多個臨時卷上管理和跟蹤臨時信息。實施例可以為提供用于作用于數(shù)據(jù)歷史數(shù)據(jù)-諸如臨時數(shù)據(jù)庫、版本管理文件系統(tǒng)/存儲庫、數(shù)據(jù)存檔和流媒體-的應(yīng)用程序的基礎(chǔ)設(shè)施,以管理臨時數(shù)據(jù)。在一個實施例中,如果應(yīng)用程序不希望直接使用臨時卷,則可以使用應(yīng)用程序代理來存取臨時卷。實施例可以提供臨時卷上臨時數(shù)據(jù)的I/O控制的、應(yīng)用程序控制的和/或周期的檢查點設(shè)置。一個實施例可以提供用于生成臨時卷的臨時圖像(例如時間點和時間片圖像)的機制,該臨時圖像可以具有其自己獨立的歷史記錄。
文檔編號G06F11/14GK1882906SQ200480033583
公開日2006年12月20日 申請日期2004年9月30日 優(yōu)先權(quán)日2003年9月30日
發(fā)明者安安德·A·凱克雷, 安庫爾·潘克布德赫 申請人:維瑞泰斯操作公司