国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      在數(shù)據(jù)存儲(chǔ)器中保持臨時(shí)數(shù)據(jù)的系統(tǒng)和方法

      文檔序號(hào):6499496閱讀:428來(lái)源:國(guó)知局
      專利名稱:在數(shù)據(jù)存儲(chǔ)器中保持臨時(shí)數(shù)據(jù)的系統(tǒng)和方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及計(jì)算機(jī)系統(tǒng)領(lǐng)域,尤其涉及數(shù)據(jù)存儲(chǔ)系統(tǒng)。
      背景技術(shù)
      在典型的現(xiàn)有技術(shù)的數(shù)據(jù)卷(data volume)中,只要數(shù)據(jù)改變,相應(yīng)的塊也改變。這就現(xiàn)今的應(yīng)用程序如關(guān)系數(shù)據(jù)庫(kù)和文件系統(tǒng)而言是適當(dāng)?shù)?。然而,常?guī)的數(shù)據(jù)卷管理技術(shù)不提供保持和處理臨時(shí)或隨時(shí)間變化的信息。應(yīng)用程序-諸如數(shù)據(jù)挖掘、數(shù)據(jù)倉(cāng)庫(kù)、媒體庫(kù)、醫(yī)療記錄等等-可能需要保持和/或處理臨時(shí)或隨時(shí)間變化的信息。在現(xiàn)有技術(shù)中沒(méi)有一種基礎(chǔ)設(shè)施(infrastructure)能夠允許這些領(lǐng)域中的應(yīng)用程序管理臨時(shí)數(shù)據(jù)。由于在存儲(chǔ)器中缺少基礎(chǔ)設(shè)施,所以現(xiàn)有技術(shù)的應(yīng)用程序典型地使用對(duì)支持臨時(shí)范型無(wú)效的蠻力(brute force)方法。因此,需要提供一種邏輯設(shè)備級(jí)基礎(chǔ)設(shè)施,用于一般地管理跨越多種應(yīng)用程序的臨時(shí)數(shù)據(jù)。

      發(fā)明內(nèi)容
      本發(fā)明描述了用于在邏輯設(shè)備級(jí)在數(shù)據(jù)存儲(chǔ)器中保存臨時(shí)數(shù)據(jù)的系統(tǒng)和方法的實(shí)施例。實(shí)施例可以提供用于在邏輯設(shè)備(卷)級(jí)時(shí)間標(biāo)記(timestamping)數(shù)據(jù)以提供內(nèi)容保存的一般機(jī)制。實(shí)施例可以提供管理和存取臨時(shí)卷的機(jī)制。一些實(shí)施例可以與卷管理器集成。用于管理和存取臨時(shí)卷的機(jī)制可以被稱作臨時(shí)卷管理器。臨時(shí)卷管理器的實(shí)施例可以提供允許應(yīng)用程序和/或應(yīng)用程序代理與臨時(shí)卷管理器通信的接口,以管理和跟蹤一個(gè)或多個(gè)臨時(shí)卷上的臨時(shí)信息。實(shí)施例可以提供用于作用于數(shù)據(jù)歷史記錄-諸如臨時(shí)數(shù)據(jù)庫(kù)、版本管理(versioning)文件系統(tǒng)/存儲(chǔ)庫(kù)、數(shù)據(jù)檔案和流媒體-的應(yīng)用程序的基礎(chǔ)設(shè)施,以管理臨時(shí)數(shù)據(jù)。
      臨時(shí)卷可以是除了當(dāng)前數(shù)據(jù)以外還保存非當(dāng)前數(shù)據(jù)的卷。臨時(shí)卷可以保持存儲(chǔ)在其上的數(shù)據(jù)的歷史記錄,因而為應(yīng)用程序提供檢索過(guò)去任何時(shí)間的數(shù)據(jù)拷貝的方法。在臨時(shí)卷中,只要一塊數(shù)據(jù)要被改變,則首先保存現(xiàn)有塊,然后覆寫新的數(shù)據(jù)。即使應(yīng)用程序從數(shù)據(jù)中刪除該塊,也保持塊的舊版本。這實(shí)現(xiàn)了保持?jǐn)?shù)據(jù)過(guò)去的一個(gè)或多個(gè)狀態(tài)的數(shù)據(jù)拷貝的作用。臨時(shí)卷可以被用于例如基于主機(jī)的、基于網(wǎng)絡(luò)的(開(kāi)關(guān)或器具)以及陣列存儲(chǔ)器的環(huán)境中。此外,應(yīng)當(dāng)注意,臨時(shí)卷可以被用于帶內(nèi)和帶外虛擬化。
      在一個(gè)實(shí)施例中,如果應(yīng)用程序不希望直接使用臨時(shí)卷(作為設(shè)備),則可以使用應(yīng)用程序代理(如下所述)以幫助它們利用卷的臨時(shí)特征。這消除了應(yīng)用程序的臨時(shí)數(shù)據(jù)管理的負(fù)擔(dān),使得它們能夠集中于如何消耗數(shù)據(jù),而不是如果存儲(chǔ)數(shù)據(jù)。
      在實(shí)施例中,可以以多種方式保持臨時(shí)卷中數(shù)據(jù)的歷史記錄,包括但不限于I/O控制的檢查點(diǎn)設(shè)置、應(yīng)用程序控制的檢查點(diǎn)設(shè)置以及周期檢查點(diǎn)設(shè)置。在I/O控制的檢查點(diǎn)設(shè)置中,使用臨時(shí)卷的應(yīng)用程序可以在向臨時(shí)卷寫入和/或從臨時(shí)卷讀取時(shí)提供時(shí)間戳。作為對(duì)于每次寫入都提供時(shí)間戳的替代方案,應(yīng)用程序可以發(fā)出I/O請(qǐng)求或命令,諸如UNIX環(huán)境中的IOCTL(I/O控制命令),在需要或者希望時(shí)為區(qū)域(或整個(gè)卷)指定時(shí)間戳。這種方法可以被稱作應(yīng)用程序控制的檢查點(diǎn)設(shè)置。另一種可選方案是對(duì)于臨時(shí)卷管理器周期地進(jìn)行自動(dòng)檢查點(diǎn)設(shè)置,例如每10秒鐘或每10分鐘。這可以被稱作周期檢查點(diǎn)設(shè)置。
      臨時(shí)卷具有作為維度(dimension)的時(shí)間。在一個(gè)實(shí)施例中,臨時(shí)卷管理器可以提供允許用戶在臨時(shí)卷內(nèi)遍歷時(shí)間維度(歷史記錄)的接口。一個(gè)實(shí)施例可以提供產(chǎn)生臨時(shí)卷的臨時(shí)圖像的機(jī)制,其中臨時(shí)圖像具有它們自己獨(dú)立的歷史記錄。一個(gè)實(shí)施例可以提供生成兩個(gè)時(shí)間戳之間臨時(shí)卷的時(shí)間片(slice-in-time)圖像的機(jī)制。一個(gè)實(shí)施例可以提供生成臨時(shí)卷的時(shí)間點(diǎn)(point-in-time)臨時(shí)圖像的機(jī)制。時(shí)間點(diǎn)圖像是卷在一個(gè)時(shí)間點(diǎn)時(shí)的圖像,并且可以被認(rèn)為是臨時(shí)卷的一維圖像??梢允褂脮r(shí)間片和時(shí)間點(diǎn)圖像作為臨時(shí)圖像的基礎(chǔ)。


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