源清除級聯(lián)卷的制作方法
【專利摘要】本發(fā)明公開了源清除級聯(lián)卷。各個系統(tǒng)、處理和產(chǎn)品可被用于源清除級聯(lián)卷。在特定實現(xiàn)中,系統(tǒng)、處理和產(chǎn)品可包括保存許多級聯(lián)備份卷并準備接收的寫入以便存儲的能力。系統(tǒng)、處理和產(chǎn)品還可包括為寫入檢查與卷區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集,以確定另一個卷是否依賴于該區(qū)域,如果另一個卷不依賴于該區(qū)域,則把新數(shù)據(jù)寫入該區(qū)域的能力。系統(tǒng)、處理和產(chǎn)品還可包括確定寫入是否針對作為規(guī)范源的卷區(qū)域,如果是,則遞減與所述區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集中的引用計數(shù),并對于與新的元數(shù)據(jù)集位置標識符相關(guān)聯(lián)的元數(shù)據(jù)集,把所述區(qū)域的卷設(shè)立為規(guī)范源的能力。
【專利說明】源清除級聯(lián)卷
【技術(shù)領(lǐng)域】
[0001 ] 本發(fā)明涉及管理計算機數(shù)據(jù),更具體地說,涉及清除級聯(lián)卷。
【背景技術(shù)】
[0002]存儲系統(tǒng)通常在由于硬件故障和/或自然災難而受損的情況下備份磁盤??梢岳酶鞣N技術(shù)創(chuàng)建備份磁盤。例如,可以利用快照或克隆技術(shù)來產(chǎn)生備份磁盤。
[0003]快照是一種依賴于主磁盤的時間點拷貝。例如,可以利用寫時拷貝進程來完成快照,在寫時拷貝進程中,在對主磁盤上的某個區(qū)域進行寫入時,主磁盤上的所述區(qū)域中的現(xiàn)有數(shù)據(jù)被寫入備份磁盤。從而,與主磁盤的完整拷貝相反,備份磁盤將包含主磁盤上已被蓋寫的數(shù)據(jù)。這種備份拷貝一般導致精簡配置的卷,從而減小存儲空間。一系列的快照拷貝可被級聯(lián)在一起,以代表在各個時間的主磁盤。然而,快照拷貝一般仍然要依賴于主磁盤來重組主磁盤的完整拷貝。
[0004]克隆是一種與主磁盤無關(guān)的時間點拷貝。例如,可通過執(zhí)行后臺拷貝進程并執(zhí)行寫時拷貝進程來創(chuàng)建克隆,在后臺拷貝進程中,磁盤的各個區(qū)域被順序拷貝到備份磁盤,寫時拷貝進程立刻拷貝由于寫操作而將被蓋寫但還未被后臺拷貝進程處理的任意主磁盤區(qū)域。一般在需要拷貝并且相對于拷貝的輸入/輸出(IO)無論如何不得影響對主卷的IO時,使用克隆。當拷貝不會受到源的可用性的影響時,也可使用克隆。克隆也可用在級聯(lián)中。
【發(fā)明內(nèi)容】
[0005]在一種實現(xiàn)中,用于源清除級聯(lián)卷的處理可包括:保存主卷和所述主卷的若干級聯(lián)備份卷;從外部源接收對至少一個卷的寫入;以及為存儲器準備所述寫入。該處理還可包括:確定所述寫入是否針對作為規(guī)范源的卷區(qū)域,如果所述寫入針對不是規(guī)范源的區(qū)域,則遞減與所述區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集中的引用計數(shù);確定元數(shù)據(jù)集位置標識符;對于與元數(shù)據(jù)集位置標識符相關(guān)聯(lián)的元數(shù)據(jù)集,把所述區(qū)域的卷設(shè)立為規(guī)范源;以及設(shè)立元數(shù)據(jù)集的引用計數(shù),以指示所述元數(shù)據(jù)集被一個卷區(qū)域引用。該處理還可包括:如果所述寫入針對作為規(guī)范源的區(qū)域,則檢查與所述區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集,以確定另一個卷是否依賴于所述區(qū)域中的數(shù)據(jù),如果另一個卷不依賴于所述區(qū)域中的數(shù)據(jù),則把新數(shù)據(jù)寫入所述區(qū)域中。
[0006]以下的說明連同附圖一起將傳達各種實現(xiàn)的細節(jié)和特征。
【專利附圖】
【附圖說明】
[0007]圖1是圖解說明用于源清除級聯(lián)卷的例證系統(tǒng)的方框圖。
[0008]圖2是圖解說明用于源清除級聯(lián)卷的例證級聯(lián)元數(shù)據(jù)的線圖。
[0009]圖3是圖解說明用于源清除級聯(lián)卷的例證級聯(lián)元數(shù)據(jù)的線圖。
[0010]圖4是圖解說明用于源清除級聯(lián)卷的例證級聯(lián)元數(shù)據(jù)的線圖。
[0011]圖5是圖解說明用于源清除級聯(lián)卷的例證級聯(lián)元數(shù)據(jù)的線圖。
[0012]圖6是圖解說明用于源清除級聯(lián)卷的例證級聯(lián)元數(shù)據(jù)的線圖。[0013]圖7是圖解說明用于源清除級聯(lián)卷的例證級聯(lián)元數(shù)據(jù)的線圖。
[0014]圖8是圖解說明用于源清除級聯(lián)卷的例證級聯(lián)元數(shù)據(jù)的線圖。
[0015]圖9A-B是圖解說明用于源清除級聯(lián)卷的例證處理的流程圖。
[0016]圖10A-B是圖解說明用于源清除級聯(lián)卷的另一個例證處理的流程圖。
[0017]圖11是圖解說明用于源清除級聯(lián)卷的例證計算機系統(tǒng)的方框圖。
【具體實施方式】
[0018]可利用各種技術(shù)來實現(xiàn)源清除級聯(lián)卷。在特定的實現(xiàn)中,級聯(lián)卷可包括主卷和若干級聯(lián)的備份卷。級聯(lián)卷的源清除可包括確定跟蹤建立和跟蹤卷之間的相關(guān)性。例如可在每個卷區(qū)域的基礎(chǔ)上把所述相關(guān)性記錄在元數(shù)據(jù)集中。跟蹤所述相關(guān)性可減少卷間拷貝的數(shù)量,因為可以確定對于將被蓋寫的數(shù)據(jù)是否存在多個源,如果是,則可以重新映射任何相關(guān)性。當需要清除卷之一時(例如,因為該卷被去除或者重新啟動),可以分析級聯(lián)元數(shù)據(jù),以確定待清除的卷上的哪些數(shù)據(jù)需要被移動到另一個卷,以保持剩余卷的數(shù)據(jù)完整性。
[0019]所屬【技術(shù)領(lǐng)域】的技術(shù)人員知道,本公開的各個方面可以實現(xiàn)為系統(tǒng)、方法或計算機程序產(chǎn)品。因此,本公開的各個方面可以具體實現(xiàn)為以下形式,即:完全的硬件環(huán)境、完全的軟件實施方式(包括固件、駐留軟件、微代碼等),或硬件和軟件方面結(jié)合的實施方式,這里可以統(tǒng)稱為“電路”、“模塊”或“系統(tǒng)”。此外,本公開的各個方面還可以實現(xiàn)為在一個或多個計算機可讀介質(zhì)中的計算機程序產(chǎn)品的形式,該計算機可讀介質(zhì)中包含計算機可讀的程序代碼。
[0020]可以采用一個或多個計算機可讀介質(zhì)的任意組合。計算機可讀介質(zhì)可以是計算機可讀信號介質(zhì)或者計算機可讀存儲介質(zhì)。計算機可讀存儲介質(zhì)例如可以是一但不限于——電、磁、光、電磁、紅外線、或半導體的系統(tǒng)、裝置或器件,或者任意以上的組合。計算機可讀存儲介質(zhì)的更具體的例子(非窮舉的列表)包括:具有一個或多個導線的電連接、便攜式計算機盤、硬盤、隨機存取存儲器(RAM)、只讀存儲器(ROM)、可擦式可編程只讀存儲器(EPR0M或閃存)、光纖、便攜式緊湊盤只讀存儲器(CD-ROM)、光存儲器件、磁存儲器件、或者上述的任意合適的組合。在本公開的上下文中,計算機可讀存儲介質(zhì)可以是任何包含或存儲程序的有形介質(zhì),該程序可以被指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用。
[0021]計算機可讀的信號介質(zhì)可以包括在基帶中或者作為載波一部分傳播的數(shù)據(jù)信號,其中承載了計算機可讀的程序代碼。這種傳播的數(shù)據(jù)信號可以采用多種形式,包括——但不限于——電磁信號、光信號或上述的任意合適的組合。計算機可讀的信號介質(zhì)還可以是計算機可讀存儲介質(zhì)以外的任何計算機可讀介質(zhì),該計算機可讀介質(zhì)可以發(fā)送、傳播或者傳輸用于由指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用的程序。
[0022]計算機可讀介質(zhì)上包含的程序代碼可以用任何適當?shù)慕橘|(zhì)傳輸,包括一但不限于一無線、有線、光纜、RF等等,或者上述的任意合適的組合。
[0023]可以以一種或多種程序設(shè)計語言的任意組合來編寫用于執(zhí)行本公開的各方面的操作的計算機程序代碼,所述程序設(shè)計語言包括面向?qū)ο蟮某绦蛟O(shè)計語言一諸如Java、Smalltalk、C++等,還包括常規(guī)的過程式程序設(shè)計語言一諸如“C”語言或類似的程序設(shè)計語言。程序代碼可以完全地在用戶計算機上執(zhí)行、部分地在用戶計算機上執(zhí)行、作為一個獨立的軟件包執(zhí)行、部分在用戶計算機上部分在遠程計算機上執(zhí)行、或者完全在遠程計算機或服務(wù)器上執(zhí)行。在涉及遠程計算機的情形中,遠程計算機可以通過任意種類的網(wǎng)絡(luò)一包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)—連接到用戶計算機,或者,可以連接到外部計算機(例如利用因特網(wǎng)服務(wù)提供商來通過因特網(wǎng)連接)。
[0024]下面將參照根據(jù)本發(fā)明實施例的方法、裝置(系統(tǒng))和計算機程序產(chǎn)品的流程圖和/或框圖描述本公開的各個方面。應當理解,流程圖和/或框圖的每個方框以及流程圖和/或框圖中各方框的組合,都可以由計算機程序指令實現(xiàn)。這些計算機程序指令可以提供給通用計算機、專用計算機或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機器,使得這些計算機程序指令在通過計算機或其它可編程數(shù)據(jù)處理裝置的處理器執(zhí)行時,產(chǎn)生了實現(xiàn)流程圖和/或框圖中的一個或多個方框中規(guī)定的功能/動作的裝置。
[0025]也可以把這些計算機程序指令存儲在計算機可讀介質(zhì)中,這些指令使得計算機、其它可編程數(shù)據(jù)處理裝置、或其他設(shè)備以特定方式工作,從而,存儲在計算機可讀介質(zhì)中的指令就產(chǎn)生出包括實現(xiàn)流程圖和/或框圖中的一個或多個方框中規(guī)定的功能/動作的指令的制造品(article of manufacture)0
[0026]計算機程序指令也可被加載到計算機、其它可編程數(shù)據(jù)處理設(shè)備或其它裝置上,使得在所述計算機、其它可編程設(shè)備或其它裝置上進行一系列的操作步驟,從而產(chǎn)生計算機實現(xiàn)的處理,以致在計算機或其它可編程設(shè)備上執(zhí)行的指令提供實現(xiàn)在流程圖和/或框圖的一個或多個方框中規(guī)定的功能/動作的處理。
[0027]圖1圖解說明了用于源清除級聯(lián)卷的例證系統(tǒng)100。系統(tǒng)100包括外部系統(tǒng)110、存儲系統(tǒng)120和通信網(wǎng)絡(luò)130。
[0028]外部系統(tǒng)110通??梢允峭ㄟ^產(chǎn)生對存儲系統(tǒng)120的寫入,使其一些數(shù)據(jù)被保存的任何計算機系統(tǒng)。例如,外部系統(tǒng)110可以是產(chǎn)生需要被保存的數(shù)據(jù)的服務(wù)器系統(tǒng)。例證的服務(wù)器系統(tǒng)包括Web服務(wù)器。如果外部系統(tǒng)是服務(wù)器系統(tǒng),則服務(wù)器系統(tǒng)可包括一個或多個服務(wù)器,所述多個服務(wù)器可以共處一地或者是分布式的。
[0029]存儲系統(tǒng)120為在本地或者遠離存儲系統(tǒng)的各個外部系統(tǒng)(例如,運行高級交互執(zhí)行程序(AIX)或Windows的服務(wù)器系統(tǒng))保存數(shù)據(jù)。在特定的實現(xiàn)中,存儲系統(tǒng)120為例證系統(tǒng)提供主存儲,而其它存儲系統(tǒng)(未示出)提供災難恢復存儲(例如,利用同步或異步復制)。存儲系統(tǒng)120可包括例如存儲區(qū)域網(wǎng)、RAID陣列、硬盤驅(qū)動器、磁帶驅(qū)動器或者保存數(shù)據(jù)的任何其它裝置。例如,存儲系統(tǒng)120可按塊陣列的格式來保存數(shù)據(jù)。
[0030]存儲系統(tǒng)120包括存儲控制器122和存儲器124 (例如,硬盤、磁帶等)。存儲控制器122負責把數(shù)據(jù)放入存儲器124中。為了說明起見,存儲器124包括主卷125和主卷的備份卷126。然而,存儲器124 —般可被配置成包括任意數(shù)目的卷。卷125-126可以是例如存儲器24(例如,硬盤驅(qū)動器)中的實際物理裝置、物理裝置的各個部分、或者物理裝置的表示。存儲器124還可具有它正保存的若干其它卷。
[0031]外部系統(tǒng)110和存儲系統(tǒng)120通過通信網(wǎng)絡(luò)130相互通信耦接。通信網(wǎng)絡(luò)130可以是例如局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)或因特網(wǎng)。外部系統(tǒng)110和存儲系統(tǒng)120通過通信鏈路132耦接到通信網(wǎng)絡(luò)130,通信鏈路132可包括一條或多條有線鏈路(例如,電纜或光纖)和/或無線鏈路(例如,射頻)。
[0032]備份卷126可利用各種技術(shù)來提供主卷125的備份。例如,可利用快照和/或克隆技術(shù)進行備份。如前所述,快照是一種時間點拷貝,其中在對主卷上的某個區(qū)域進行寫入時,該主卷上的所述區(qū)域中的現(xiàn)有數(shù)據(jù)被寫入備份卷中。從而,與主卷的完整拷貝相反,備份卷將包含主卷上已被蓋寫的數(shù)據(jù),并且通常將仍然依賴于主卷上的某些數(shù)據(jù)(例如,未被改變的數(shù)據(jù)),以便呈現(xiàn)所述拷貝。區(qū)域可以是例如卷的扇區(qū)或者其它可尋址部分。在特定的實現(xiàn)中,區(qū)域的大小可約為64KB。
[0033]這種備份拷貝一般導致精簡配置的卷,從而減小存儲空間,在主卷上發(fā)生數(shù)據(jù)破壞的情況下是有益的。通常,存在同時存在的單個源的許多快照,從而其減小的大小是有益的。快照可持續(xù)相當長的時間(數(shù)月或數(shù)年)存在于卷的級聯(lián)中,但一般僅僅被保持數(shù)小時或數(shù)天。
[0034]克隆拷貝是一種其中當開始拷貝時,備份卷應停止保持主卷上的數(shù)據(jù)的完整拷貝的時間點拷貝。例如,可通過執(zhí)行后臺拷貝進程來創(chuàng)建克隆拷貝,在后臺拷貝進程中,主卷的各個區(qū)域被順序拷貝,并執(zhí)行寫時拷貝進程,以立刻拷貝由于寫操作而將被蓋寫但是還未被后臺拷貝進程處理的任意卷區(qū)域。一般在需要拷貝并且相對于拷貝的輸入/輸出(IO)無論如何不得影響對主卷的IO時,使用克隆拷貝。當拷貝不會受源的可用性的影響時,也可使用克隆。即,克隆拷貝可從級聯(lián)中被去除,并且仍然正確地起作用。例如,可以利用克隆拷貝把數(shù)據(jù)庫轉(zhuǎn)移到另一個地點。一旦克隆拷貝完成,克隆拷貝通常被拷貝到磁帶。
[0035]通過相互級聯(lián),備份卷126可為主卷125提供備份。在級聯(lián)中,備份卷可保存單個數(shù)據(jù)源的多個時間點拷貝。這種方法使得當啟動新的備份卷時,利用主卷作為其源卷的現(xiàn)有備份卷被修改,以利用新備份的目標卷作為其源卷。
[0036]例如,對例示的實現(xiàn)來說,假定期望在時間Tl、T2和T3獲得主卷125的時間點拷貝。在時間Tl,可以利用使用目標備份卷126a的時間點拷貝,導致主卷125->備份卷126a(下面表示成PV->BVa)的級聯(lián)。隨后,在時間T2,可以利用使用備份卷126b的時間點拷貝,導致PV->BVb->BVa的級聯(lián)。這種安排起作用,因為如果在Tl和T2之間在備份卷126a或主卷125上數(shù)據(jù)已被改變,則數(shù)據(jù)將在備份卷126a上,而如果數(shù)據(jù)未被改變,則備份卷126a和備份卷126b都能夠讀取相同數(shù)據(jù)。類似地,在T3,可以啟動利用備份卷126c的時間點拷貝,導致PV->BVc->BVb->BVa的級聯(lián)。諸如Armonk,NY的國際商用機器公司的SAN Volume Controller FlashCopy的存儲控制器可利用級聯(lián)實現(xiàn)來用備份卷擴充源卷。
[0037]假定備份卷126a利用快照技術(shù)工作,備份卷126a通過保存自在Tl開始備份以來主卷125的變化來提供備份。在這種兩元件級聯(lián)中,主卷125是源,而備份卷126a是目標。因此,主卷125可被稱為PV->BVa映射的有效源。
[0038]如前所述,這種備份可通過利用寫時拷貝來完成。從而,對主卷125的寫入可涉及把主卷125上的待寫區(qū)域中的數(shù)據(jù)拷貝到備份卷126a,隨后把新數(shù)據(jù)寫入主卷125的被拷貝區(qū)域。因此,當?shù)絺浞菥?26a的備份在Tl變得有效時在主卷125上的數(shù)據(jù)將被保存在主卷125上(即,對于未被寫入的卷區(qū)域)和備份卷126a上(即,對于已被寫入的區(qū)域)。
[0039]如果需要對備份卷126a進行讀取(例如,為了確定在Tl時在主卷125上的數(shù)據(jù)),則可通過首先嘗試定位數(shù)據(jù)備份卷126a來進行讀取。如果數(shù)據(jù)不在該卷上(即,該數(shù)據(jù)在主卷125上從未被蓋寫),則可從主卷125讀取該數(shù)據(jù)。
[0040]主卷125有時需要被恢復到其在Tl時的狀態(tài)。例如,歸因于數(shù)據(jù)破壞,可能發(fā)生這種情況??蓮膫浞菥?26a取回自備份卷126a變得有效以來在主卷125上被蓋寫的數(shù)據(jù),以把主卷125恢復到其在Tl時的狀態(tài)。[0041]在稍后的時間點T2,到備份卷126b的備份變得有效,從而保存從T2開始主卷125的表示。此時,不再需要更新備份卷126a,因為備份卷126b將包含主卷125在T2時的數(shù)據(jù)。因此,備份鏈變成主卷125->備份卷126b->備份卷126a (或者PV->BVb_>BVa)。從而現(xiàn)在主卷125->備份卷126a的映射把源備份卷126b作為有效源。這種變換是有效的,因為備份卷126b是主卷125在該時間點的準確拷貝(至少對于它保存的數(shù)據(jù)區(qū)域)。
[0042]備份卷126b可利用快照或克隆技術(shù)工作。如果它利用快照技術(shù)工作,則對主卷125的寫入可被看作它們用于PV->BVa級聯(lián),除了在主卷125上被蓋寫的數(shù)據(jù)將被放在備份卷126b上之外。如果備份卷126b利用克隆技術(shù)工作,則將利用花費相當長的一段時間的順序讀取和按需寫入(例如,由于對主卷125的寫入而數(shù)據(jù)被蓋寫)的組合,把主卷125的各個區(qū)域?qū)懙絺浞菥?26b。
[0043]為了保持該級聯(lián)的數(shù)據(jù),可以使用IO算法。例如,對讀取來說:1)如果請求備份卷126a的讀取,則如果請求的數(shù)據(jù)在備份卷126a上(例如,按照區(qū)域),則讀取備份卷126a,否則如果請求的數(shù)據(jù)在備份卷126b上,則讀取備份卷126b,否則讀取主卷125 ;2)如果請求備份卷126b的讀取,則如果請求的數(shù)據(jù)在備份卷126b上,則讀取備份卷126b,否則讀取主卷125 ;和3)如果請求主卷125的讀取,則讀取主卷125。
[0044]對寫入來說:1)如果請求對備份卷126a的寫入,則寫入備份卷126a ;2)如果請求對備份卷126b的寫入,則:a)如果備份卷126a需要保持在主卷125上的數(shù)據(jù)(例如,由于對被寫區(qū)來說,在主卷125和備份卷126上的數(shù)據(jù)相同),則讀取主卷,把結(jié)果寫入備份卷126a,并把新數(shù)據(jù)寫入備份卷126b ;b)否則如果備份卷126a需要保持在備份卷126b上的數(shù)據(jù),則讀取備份卷126b,把結(jié)果寫入備份卷126a,并把新數(shù)據(jù)寫入備份卷126b ;或者c)否則寫入備份卷126b ;以及3)如果請求對主卷125的寫入,則:a)如果備份卷126b需要保持在主卷125上的數(shù)據(jù),則讀取讀取主卷125,把結(jié)果寫入備份卷126b,隨后把新數(shù)據(jù)寫入主卷125 ;和b)否則寫入主卷125。
[0045]這種IO算法允許級聯(lián)多個目標(例如,兩個或者更多個目標)。此外,對主卷125的寫入導致對備份卷的最多一次額外寫入,而與主卷125的備份卷的數(shù)目無關(guān)。因此,備份映射對源/產(chǎn)品IO性能的影響較小,而且受到限制。
[0046]在T2之后的某個時刻,備份卷126a—般依賴于備份卷126b。例如,如果數(shù)據(jù)區(qū)未在Tl和T2之間被轉(zhuǎn)移到備份卷126a(例如,由于在該時間內(nèi)不存在對主卷125的寫入),而是在時間T2之后被轉(zhuǎn)移到備份卷126b (例如,由于在T2之后存在對主卷125的寫入),則備份卷126a會需要該數(shù)據(jù),以使主卷125恢復到其在Tl時的狀態(tài)。
[0047]如果在該時刻之后要從級聯(lián)中去除備份卷126b,而不影響備份卷126a,則應清除備份卷126b。即,就對備份卷126a的讀取(例如,來自外部系統(tǒng))而言所需的備份卷126b上的數(shù)據(jù)必須首先被拷貝到備份卷126a。該過程會花費相當長的時間。此外,如果備份卷126b是利用可能已導致備份卷126b完全被分配的克隆技術(shù)構(gòu)成的,而備份卷126a是利用快照技術(shù)構(gòu)成的,則清除操作會確定大部分的備份卷126b需要被轉(zhuǎn)移到備份卷126a,這會顯著增加保存在備份卷126a上的數(shù)據(jù)的量,尤其是如果它變得完全被分配的話。
[0048]在稍后的時間點T3,到備份卷126c的備份可變得有效,從而保存從T3開始的主卷125的表示。此時,不再需要更新備份卷126b,因為備份卷126c將包含主卷125在T3時的數(shù)據(jù)。因此,備份鏈變成主卷125->備份卷126c->備份卷126b->備份卷126a (下面也表示成PV->BVc->BVb->BVa)。從而現(xiàn)在PV->BVb_>BVa的映射把源備份卷126c作為有效源。這種變換是有效的,因為備份卷126c是主卷125在該時間點的準確拷貝(至少對于它保存的數(shù)據(jù)區(qū)域)。
[0049]備份卷126c可利用快照或克隆技術(shù)工作。如果它利用快照技術(shù)工作,則對主卷125的寫入可被看作它們用于PV->BVb->BVa級聯(lián),除了在主卷125上被蓋寫的數(shù)據(jù)將被放在備份卷126c上之外。如果備份卷126c利用克隆技術(shù)工作,則將利用花費相當長的一段時間的順序讀取和按需寫入(例如,由于因?qū)χ骶?25的寫入數(shù)據(jù)被蓋寫)的組合,把主卷125的各個區(qū)域?qū)懙絺浞菥?26c。
[0050]為了保持該級聯(lián)的數(shù)據(jù),可以使用IO算法。例如,對讀取來說:1)如果請求備份卷126a的讀取,則如果請求的數(shù)據(jù)在備份卷126a上(例如,按照區(qū)域),則讀取備份卷126a,否則如果請求的數(shù)據(jù)在備份卷126b上,則讀取備份卷126b,否則如果請求的數(shù)據(jù)在備份卷126c上,則讀取備份卷126c,否則讀取主卷125 ;2)如果請求備份卷126b的讀取,則如果請求的數(shù)據(jù)在備份卷126b上,則讀取備份卷126b,如果請求的數(shù)據(jù)在備份卷126c上,則讀取備份卷126c,否則讀取主卷125 ;3)如果請求備份卷126c的讀取,則如果請求的數(shù)據(jù)在備份卷126c上,則讀取備份卷126c,否則讀取主卷125 ;和4)如果請求主卷125的讀取,則讀取主卷125。
[0051]對寫入來說:1)如果請求對備份卷126a的寫入,則寫入備份卷126a ;2)如果請求對備份卷126b的寫入,則:a)如果備份卷126a需要保持在主卷125上的數(shù)據(jù),意味著對主卷125和備份卷126來說,被寫區(qū)相同,則讀取主卷,把結(jié)果寫入備份卷126a,然后把新數(shù)據(jù)寫入備份卷126b ;b)否則如果備份卷126a需要保持在備份卷126c上的數(shù)據(jù),意味著對備份卷126來說,被寫區(qū)相同,則讀取備份卷126c,把結(jié)果寫入備份卷126a,然后把新數(shù)據(jù)寫入備份卷126b ;c)否則如果備份卷126a需要保持在備份卷126b上的數(shù)據(jù),則讀取備份卷126b,把結(jié)果寫入備份卷126a,然后把新數(shù)據(jù)寫入備份卷126b ;或者d)否則寫入備份卷126b ;3)如果請求對備份卷126c的寫入,則:a)如果備份卷126b需要保持在主卷125上的數(shù)據(jù),意味著對主卷125和備份卷126b-c來說,被寫區(qū)相同,則讀取主卷125,把結(jié)果寫入備份卷126b,然后把新數(shù)據(jù)寫入備份卷126c (如果備份卷126a需要保持在主卷125上的數(shù)據(jù),則必須存在從備份卷126a到主卷125的相關(guān)性的完整級聯(lián),意味著對所有卷來說,被寫區(qū)相同,并且備份卷126b也應依賴于該區(qū)域);b)否則如果備份卷126b需要保持在備份卷126c上的數(shù)據(jù),則讀取備份卷126c,把結(jié)果寫入備份卷126b,然后把新數(shù)據(jù)寫入備份卷126c (如果備份卷126a需要保持在備份卷126c上的數(shù)據(jù),則必須存在從備份卷126a到備份卷126c的相關(guān)性的完整級聯(lián),意味著對備份卷126來說,被寫區(qū)相同,備份卷126b也應依賴于該區(qū)域);或者c)否則寫入備份卷126c ;或者4)如果請求對主卷125的寫入,則:a)如果備份卷126c需要保持在主卷125上的數(shù)據(jù),則讀取讀取主卷125,把結(jié)果寫入備份卷126c,隨后把新數(shù)據(jù)寫入主卷125 ;和b)否則寫入主卷125。
[0052]這種IO算法允許級聯(lián)多個目標(例如,3個或者更多個目標)。此外,對主卷125的寫入導致對備份卷的最多一次額外寫入,而與主卷125的備份卷的數(shù)目無關(guān)。因此,備份映射對源/產(chǎn)品IO性能的影響相當小,而且受到限制。
[0053]在T3之后的某個時刻,備份卷126b —般依賴于備份卷126c。例如,如果數(shù)據(jù)區(qū)未在T2和T3之間被轉(zhuǎn)移到備份卷126b (例如,由于在該時間內(nèi)不存在對主卷125的寫入),而是在時間T3之后被轉(zhuǎn)移到備份卷126c (例如,由于在T3之后存在對主卷125的寫入),則備份卷126b會需要該數(shù)據(jù),以使主卷125恢復到其在T2時的狀態(tài)。
[0054]如果在該時刻之后要從級聯(lián)中去除備份卷126c而不影響備份卷126b,則應清除備份卷126c。即,就對備份卷126b的讀取(例如,來自外部系統(tǒng))而言所需的備份卷126c上的數(shù)據(jù)必須首先被拷貝到備份卷126b。該過程會花費相當長的時間。此外,如果備份卷126c是利用可能已導致備份卷126c完全被分配的克隆技術(shù)構(gòu)成的,而備份卷126b是利用快照技術(shù)構(gòu)成的,則清除操作會確定大部分的備份卷126c需要被轉(zhuǎn)移到備份卷126b,這會顯著增加保存在備份卷126b上的數(shù)據(jù)的量,尤其是如果它變得完全被分配的話。
[0055]在某些操作模式下,各個卷上的數(shù)據(jù)區(qū)域可被分類,以確定保存在所述區(qū)域中的數(shù)據(jù)是否必須被清除,或者即使當居間的卷(例如,備份卷126b)被去除時,數(shù)據(jù)(例如,在主卷125上)是否仍然對于相關(guān)卷(例如,備份卷126a)可訪問。
[0056]存儲控制器122包括級聯(lián)元數(shù)據(jù)123,級聯(lián)元數(shù)據(jù)123可保存關(guān)于卷125-126上的各個區(qū)域的數(shù)據(jù)。特別地,級聯(lián)元數(shù)據(jù)123可定義區(qū)域的數(shù)據(jù)是否是其它卷上的其它區(qū)域的源或者是否依賴于其它卷的其它區(qū)域。
[0057]進一步考慮上述PV->BVc->BVb->BVa級聯(lián),考慮當目標被寫入時對它們發(fā)生了什么。就這個例子來說,假定備份卷126是精簡配置的(例如,只為已被寫入的各個區(qū)域分配存儲空間),因為這可很好地例示幾個問題。主卷125被認為是全配置的,因為這是最常見的結(jié)構(gòu)。
[0058]如果在主卷125上某個區(qū)域被寫入,則所述寫入不會導致在主卷上分配任何空間,但是它需要在備份卷126c上分配相同的區(qū)域,因為寫時拷貝進程把主卷125上的現(xiàn)有數(shù)據(jù)移動到級聯(lián)中的備份卷126c。對備份卷126c上的區(qū)域的寫入導致在備份卷126c上分配該區(qū)域(用于新的寫入),另外也在備份卷126b上分配該區(qū)域,用于備份卷126c過去依賴并且備份卷126b仍然依賴的主卷125上的現(xiàn)有數(shù)據(jù)。同樣地,對備份卷126b上的區(qū)域的寫入導致在備份卷126b和備份卷126a上分配該區(qū)域。對備份卷126a上的區(qū)域的寫入只導致在備份卷126a上分配該區(qū)域。
[0059]在稍后的某個時間點,可能需要從級聯(lián)中去除備份卷之一。例如,備份卷的存儲空間可能需要被用于不同目的(例如,時間點拷貝可能需要被更新的拷貝刷新)。
[0060]例如,如果在稍后的某個時間需要從級聯(lián)中去除備份卷126b,則在從級聯(lián)中去除備份卷126b并用于不同目的之前,應當把備份卷126b中備份卷126a所依賴的各個區(qū)域拷貝到備份卷126a。在去除備份卷126b之后,將由于對備份卷126a_c的任意寫入而在備份卷126a上分配各個區(qū)域,而不管是否存在包含備份卷126a所需數(shù)據(jù)的早先在級聯(lián)中已被分配的區(qū)域。這種額外的分配要求往往成本相當高,同時需要額外的物理存儲空間,以及額外的系統(tǒng)管理,和伴隨而來的物理空間、電力和冷卻成本。它還意味著會超過需要地更頻繁地訪問存儲空間,不必要地沿著級聯(lián)拷貝數(shù)據(jù)。這種增多的存儲空間內(nèi)訪問會顯著降低系統(tǒng)的性能,因為進一步沿著級聯(lián)用它所依賴的數(shù)據(jù)更新卷所需的每個拷貝會把單個寫入變成一個讀取和兩個寫入,可能把存儲系統(tǒng)將支持的每秒的寫入總數(shù)降低到對于不需要這種拷貝的卷它將支持的每秒的寫入總數(shù)的1/3。
[0061]如果備份卷126a_c是全配置的,而不是精簡配置的,則數(shù)據(jù)的額外拷貝將只產(chǎn)生性能影響,而不產(chǎn)生存儲空間影響,因為整個卷已被分配。[0062]存儲系統(tǒng)120可以利用卷125-126的級聯(lián)元數(shù)據(jù)123來克服這些問題。特別地,級聯(lián)元數(shù)據(jù)123可以是關(guān)于保存在級聯(lián)中的各個卷上的數(shù)據(jù)和依賴于該數(shù)據(jù)的各個卷區(qū)域的一組位置細節(jié)??煽缭酱鎯ο到y(tǒng)120獲得所述元數(shù)據(jù)。
[0063]級聯(lián)元數(shù)據(jù)123可包括多組數(shù)據(jù),使得每一組包括卷的標識符、卷內(nèi)的區(qū)域的標識符、和對于保存在卷的區(qū)域中的數(shù)據(jù)的引用計數(shù)。每一組可通過唯一標識符來尋址。在一些實現(xiàn)中,例如,所述唯一標識符可以是長度64位或者更大的數(shù)字,以避免重復使用的問題。元數(shù)據(jù)可被保存為陣列、鏈表、散列表、樹、或者使系統(tǒng)可以根據(jù)所述唯一標識符來定位數(shù)據(jù)集的任何其它方法。每一組可涉及被存儲系統(tǒng)時間點拷貝的存儲空間的一個區(qū)域,從而,可以存在足夠的這些實體,以滿足對可被時間點拷貝的存儲空間的量的要求。
[0064]從可以是普通卷(例如,邏輯塊的陣列)的單個卷PV,比如主卷125開始,當在存儲系統(tǒng)中創(chuàng)建該卷時,分配下面將被稱為卷目錄的另一組元數(shù)據(jù),所述卷目錄大到足以保存該卷的每個區(qū)域的唯一標識符之一。對于該卷的每個區(qū)域,卷目錄可被分配一個元數(shù)據(jù)集??梢岳萌魏纬R姷姆椒▉碇С诌@一點,比如保持自由的或者當前未用的元數(shù)據(jù)集的列表。為某個區(qū)域分配的元數(shù)據(jù)集可保存該區(qū)域的卷標識符、該區(qū)域在卷中的位置、和對于該區(qū)域中的數(shù)據(jù)的引用計數(shù),此時,所述引用計數(shù)可被設(shè)定為1,因為它被使用一次。關(guān)于該區(qū)域的條目的元數(shù)據(jù)集的唯一標識符可被保存在卷目錄中。
[0065]因此,為了確定主卷上的給定區(qū)域的元數(shù)據(jù)集的位置,可以找出卷目錄中該區(qū)域的條目,所述條目提供用于查找適當?shù)脑獢?shù)據(jù)集的唯一標識符,所述適當?shù)脑獢?shù)據(jù)集有給出卷標識符和卷內(nèi)的位置。當然,就單個獨立卷來說,這一般將回指主卷上的相同區(qū)域。因此,對于與時間點拷貝無關(guān)的單個卷,可以推遲設(shè)置該元數(shù)據(jù),直到該卷首次與時間點拷貝有關(guān)。
[0066]圖2圖解說明了單個卷,比如主卷125的例證級聯(lián)元數(shù)據(jù)200。如圖所示,元數(shù)據(jù)200包括元數(shù)據(jù)集210和卷目錄220。
[0067]用包括3列212的表格形式例示了元數(shù)據(jù)集210。列212a包括卷標識符,列212b包括卷位置(例如,區(qū)域號),列212c包括區(qū)域數(shù)據(jù)的引用計數(shù)。從而,表格的每一行構(gòu)成卷區(qū)域的元組,并且可被唯一地尋址(例如,通過利用行號)。
[0068]還以表格的形式例示了卷目錄220,它包括一列222。列222包含元數(shù)據(jù)集210的位置標識符。即,卷目錄220中的每個標識符識別特定的元數(shù)據(jù)集210。為了使例示簡化,卷目錄220中的每個標識符是直接對應于元數(shù)據(jù)集210的整數(shù)。也可以使用其它標識方案。另外,卷目錄220中的每個條目直接對應于卷上的一個區(qū)域。在這個例子中,第一個條目對應于區(qū)域0,第二個條目對應于區(qū)域1,第三個條目對應于區(qū)域2,而第四個條目對應于區(qū)域
3。在其它實現(xiàn)中,在卷目錄中可以使用除直接關(guān)聯(lián)以外的關(guān)聯(lián)。
[0069]當從主卷PV到第一個備份卷BVa,比如備份卷126a進行第一次拷貝時,也可為該備份卷分配一個卷目錄。備份卷的目錄中的每個條目被初始化成與主卷的目錄中的匹配條目中的值相同的值,并且相關(guān)聯(lián)的元數(shù)據(jù)集中關(guān)于該區(qū)域的引用計數(shù)被遞增。在這種情況下,引用計數(shù)將增大到2,因為現(xiàn)在依賴于該底層數(shù)據(jù)的區(qū)域有兩個。將如前關(guān)于主卷所述那樣地確定備份卷的區(qū)域的位置,現(xiàn)在指的是主卷上的匹配區(qū)域。
[0070]圖3圖解說明了諸如主卷125的主卷和諸如備份卷126a的第一個備份卷的一組例證級聯(lián)元數(shù)據(jù)300。如圖所示,元數(shù)據(jù)300包括元數(shù)據(jù)集210、主卷目錄220和第一備份卷目錄230。如同剛剛提及的那樣,歸因于第一個備份卷,已增加了第一個備份卷目錄230,并且這里用各行表示的它的各個區(qū)域被映射到和主卷的區(qū)域相同的元數(shù)據(jù)集。此外,列212c中的引用計數(shù)已被更新,以反映該備份卷的啟用。
[0071]當在主卷或第一個備份卷上,某個區(qū)域被寫入時,存儲系統(tǒng)檢查被關(guān)于該區(qū)域的卷目錄條目引用的元數(shù)據(jù)集中的引用計數(shù)。由于剛剛進行了拷貝,因此引用計數(shù)為2,如圖3中圖解所示。由于該值大于1,因此能夠確定該寫入將影響不止一個拷貝。這可根據(jù)所述寫入將被應用于哪個卷而不同地實現(xiàn)。由于數(shù)據(jù)實際上被保存在主卷上,因此主卷將被稱為該數(shù)據(jù)的規(guī)范源。在本公開中,規(guī)范源是保存數(shù)據(jù)的卷區(qū)域。卷目錄中關(guān)于不保存數(shù)據(jù)的卷區(qū)域的條目引用不同卷上的所述數(shù)據(jù)的規(guī)范源。可以通過識別元數(shù)據(jù)集引用哪個卷來確定規(guī)范源。附圖中,在卷目錄中用陰影表示規(guī)范源,以便于理解。
[0072]如果寫入將被應用于不是規(guī)范源的卷(例如,圖3中的第一個備份卷),則可以確定該卷上用于那個區(qū)域的物理存儲空間不被用于該卷或者任何其它卷,因為相關(guān)聯(lián)的元數(shù)據(jù)集并不引用所述被寫入的卷。因此,可以在不把數(shù)據(jù)拷貝到不同卷的情況下,對該卷進行寫入。所述寫入然后可被應用于該卷。
[0073]如果寫入不覆蓋整個區(qū)域,則可以利用寫時拷貝方案照常進行數(shù)據(jù)與規(guī)范源上的數(shù)據(jù)的任何合并。例如,如果寫入針對的是長度為128個扇區(qū)的區(qū)域,但是橫跨該區(qū)域中的扇區(qū)20-49,則應當從規(guī)范源讀出扇區(qū)0-19和50-127,與用于新的寫入的扇區(qū)20-49合并,隨后寫出所有128個扇區(qū)。應當為不是規(guī)范卷的卷創(chuàng)建完整區(qū)域數(shù)據(jù)價值。
[0074]在完成向存儲系統(tǒng)發(fā)送所述寫入的外部系統(tǒng)的寫入之前,必須更新相關(guān)聯(lián)的元數(shù)據(jù)集和卷目錄。由于該卷現(xiàn)在將在被寫區(qū)域上包含不同數(shù)據(jù),因此存儲系統(tǒng)可為其分配一個新的元數(shù)據(jù)集。利用對其應用所述寫入的所述卷和區(qū)域來初始化該新的元數(shù)據(jù)集。另夕卜,遞減該區(qū)域的卷目錄先前引用的元數(shù)據(jù)集的引用計數(shù),更新被寫卷的卷目錄,以引用新分配的元數(shù)據(jù)集,以及新分配的元數(shù)據(jù)集的引用計數(shù)被設(shè)定為I??梢杂涗涍@3個操作的日志,并且如果中斷的話,可以重新進行這3個操作,或者以其它方式使所述3個操作成為原子操作,以確保引用計數(shù)保持一致。這導致剛剛被寫的區(qū)域變成規(guī)范源。
[0075]圖4圖解說明了對于該處理,應當如何更新級聯(lián)元數(shù)據(jù)300。在本例中,寫入被應用于主卷的第二個區(qū)域(即,區(qū)域I)和備份卷的第三個區(qū)域(即,區(qū)域2),盡管目前將只討論后者。對備份卷的第三個區(qū)域的寫入導致存儲系統(tǒng)修改關(guān)于主卷的第三個區(qū)域的元數(shù)據(jù)集,并生成關(guān)于第一個備份卷的第三個區(qū)域的元數(shù)據(jù)集。特別地,與主卷的第三個區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集表格的條目現(xiàn)在指示引用計數(shù)已被遞減為I。另外,在卷目錄230中,第一個備份卷的第三個區(qū)域已被賦予新的標識符(即,5),以及檢查元數(shù)據(jù)集210時可以看出,相應的元數(shù)據(jù)集(即,第五個元數(shù)據(jù)集)指示相關(guān)聯(lián)的卷是第一個備份卷,該卷上的關(guān)聯(lián)區(qū)域是第三個區(qū)域(即,區(qū)域2),并且引用計數(shù)為I。
[0076]相反,如果寫入被應用于規(guī)范源(即,圖3的例子中的主卷),并且引用計數(shù)大于1,則存儲系統(tǒng)可確定主卷的該區(qū)域上的數(shù)據(jù)是至少一個其它卷所需的,從而數(shù)據(jù)應被拷貝到另一個卷。存儲系統(tǒng)可按級聯(lián)中的順序來檢查卷的列表,以找出級聯(lián)中在規(guī)范源之后的在其卷目錄中的匹配條目中引用相關(guān)聯(lián)的元數(shù)據(jù)集的第一個卷。在這種情況下,這將是第一個備份卷,因為第一個備份卷是級聯(lián)中的唯一的其它卷。該區(qū)域的數(shù)據(jù)隨后從規(guī)范源被拷貝到備份卷(即,從主卷拷貝到第一個備份卷),并且元數(shù)據(jù)集被更新,以指向找出的備份卷,從而使所述備份卷成為新的規(guī)范源。由于老的規(guī)范源現(xiàn)在不再是規(guī)范源,因此其數(shù)據(jù)可被改變,而不影響級聯(lián)中的任何其它卷,從而可如前所述繼續(xù)進行各個操作。即,可為新被寫區(qū)域分配新的卷目錄條目。
[0077]圖4還圖解說明了對于該處理,應當如何更新級聯(lián)元數(shù)據(jù)300。在本例中,還對主卷的第二個區(qū)域(即,區(qū)域I)應用寫入。對主卷的第二個區(qū)域的寫入導致存儲系統(tǒng)更新相關(guān)聯(lián)的元數(shù)據(jù)集(即,第二個元數(shù)據(jù)集),以指向找出的備份卷,從而使之成為新的規(guī)范源,并為主卷的第二個區(qū)域分配新的卷目錄條目,因為它不再是規(guī)范源,它表現(xiàn)為第六個元數(shù)據(jù)集210。
[0078]級聯(lián)內(nèi)關(guān)于給定區(qū)域的規(guī)范源的數(shù)目和不同數(shù)據(jù)集的數(shù)目一樣多。例如,如果在主卷和第一個備份卷上修改了 PV->BVc->BVb->BVa級聯(lián),則主卷、第一個備份卷和第三個備份卷將是該區(qū)域的規(guī)范源。每個元數(shù)據(jù)集存在一個規(guī)范源。
[0079]圖5圖解說明了主卷和3個備份卷的例證級聯(lián)元數(shù)據(jù)500。特別地,級聯(lián)元數(shù)據(jù)500始于利用圖4中的級聯(lián)元數(shù)據(jù)300建立的數(shù)據(jù),隨后增加另外兩個備份卷,所述另外兩個備份卷的卷目錄被標記為540和550。
[0080]如同對級聯(lián)時間點拷貝來說典型的那樣,主卷的新的備份卷都是緊跟在主卷之后插入級聯(lián)中的,以正確地表示拷貝之間的相關(guān)性。如前所述,卷目錄540、550都是用主卷當時的目錄的內(nèi)容初始化的。在本例中,在觸發(fā)從主卷到第二個備份卷的時間點拷貝的時間和觸發(fā)從主卷到第三個備份卷的時間點拷貝的時間之間,主卷沒有接收到任何寫入。因此,卷目錄520、540、550相同。另外,在表格510中調(diào)整引用計數(shù),以反映另外的卷依賴于該數(shù)據(jù)的事實。
[0081]圖6圖解說明了當已對主卷的第四個區(qū)域和第一個備份卷的第四個區(qū)域應用寫入時的級聯(lián)元數(shù)據(jù)500。對主卷的第四個區(qū)域的寫入使存儲控制器把該區(qū)域處的數(shù)據(jù)移到第三個備份卷。因此,第四個元數(shù)據(jù)集510已被調(diào)整成使卷標識符現(xiàn)在把第三個備份卷識別成該數(shù)據(jù)的規(guī)范源。此外,關(guān)于該數(shù)據(jù)的引用計數(shù)已被減1,因為卷(即,主卷)不再依賴于它。另外,為被寫入主卷的數(shù)據(jù)創(chuàng)建了另一個元數(shù)據(jù)集510。該條目表現(xiàn)為第七個元數(shù)據(jù)集510,并指示主卷是該數(shù)據(jù)的規(guī)范源,所述數(shù)據(jù)位于主卷的第四個區(qū)域(即,區(qū)域3),并且只有一個卷依賴于該數(shù)據(jù)。主卷的目錄520中的第四個條目也被改變成包括指示第七個元數(shù)據(jù)集510的標識符。因此,第一個備份卷的新的元數(shù)據(jù)集可從其卷目錄中找到。在第二個備份卷或第三個備份卷上的區(qū)域數(shù)據(jù)的標識符無變化,從而不存在對卷目錄540、550作出的任何變化。
[0082]對第一個備份卷的第四個區(qū)域的寫入導致該區(qū)域處的數(shù)據(jù)被蓋寫(不存在寫時拷貝,因為在級聯(lián)中不存在另外的卷)。因此,第四個元數(shù)據(jù)集510已被調(diào)整成使關(guān)于該數(shù)據(jù)的引用計數(shù)減1,因為卷(即,第一個備份卷)不再依賴于它。另外,為被寫入第一個備份卷的數(shù)據(jù)創(chuàng)建元數(shù)據(jù)集。該條目表現(xiàn)為第八個元數(shù)據(jù)集510,并指示第一個備份卷是該數(shù)據(jù)的規(guī)范源,數(shù)據(jù)位于該卷的第四個區(qū)域(即,區(qū)域3),并且只有一個卷依賴于該數(shù)據(jù)。第一個備份卷的目錄530中的第四個條目也被改變成包括指示第八個元數(shù)據(jù)集510的標識符。
[0083]如果對其來說相關(guān)聯(lián)的元數(shù)據(jù)集的引用計數(shù)為I的區(qū)域被寫入,則所述寫入可正常進行,而不存在對卷目錄或元數(shù)據(jù)集的任何變化,因為只有在引用該區(qū)域的卷上,數(shù)據(jù)才變化。例如,如果在圖6中,第一個備份卷上的第二個區(qū)域(即,區(qū)域I)被寫入,或者具有為I的引用計數(shù)的任何其它區(qū)域被寫入,則會發(fā)生這種情況。
[0084]如前所述,每個元數(shù)據(jù)集存在一個規(guī)范源。因此,可在逐個區(qū)域的基礎(chǔ)上確定規(guī)范源。例如,對于圖6中的4卷級聯(lián)的具有3個規(guī)范源的第四個區(qū)域,可了解這一點。
[0085]如果卷被刪除(例如,主卷或備份卷之一需要被刪除,以收回它們的存儲空間),則對于相關(guān)聯(lián)的卷目錄中的每個條目,在相關(guān)聯(lián)的元數(shù)據(jù)集中遞減引用計數(shù)。如果引用計數(shù)達到0,則存儲系統(tǒng)可確定它正在刪除需要該數(shù)據(jù)的唯一卷,從而不需要任何進一步的動作。例如,如果刪除圖6中的主卷,則對于所述主卷的第四個區(qū)域,會發(fā)生這種情況。
[0086]如果計數(shù)不為0,則存在兩種選項。如果被刪除的卷不是規(guī)范源,則不同的卷包含繼續(xù)存在的卷所需的信息,從而不需要任何進一步的動作。例如,如果刪除第二個備份卷,則對于第二個備份卷的第四個區(qū)域,會發(fā)生這種情況。如果被刪除的卷是該區(qū)域的規(guī)范源,則存儲系統(tǒng)應當把數(shù)據(jù)拷貝到另一個卷。為了實現(xiàn)這一點,存儲系統(tǒng)可按級聯(lián)中的順序檢查卷的列表,以找出該規(guī)范源之后的在其卷目錄中的關(guān)聯(lián)條目中目前引用該元數(shù)據(jù)集的第一個卷。隨后把該區(qū)域的數(shù)據(jù)從規(guī)范源拷貝到識別出的卷,并且元數(shù)據(jù)集被更新,以指向識別出的卷,從而使該卷成為新的規(guī)范源。由于老的規(guī)范源現(xiàn)在不再是規(guī)范源,因此它可被刪除,而不影響級聯(lián)中的任何其它卷。因此,對該區(qū)域來說,不需要任何進一步的動作。例如,如果刪除第三個備份卷的第四個區(qū)域,則對于所述區(qū)域,會發(fā)生這種情況,數(shù)據(jù)被移動到第二個備份卷,并使該卷成為規(guī)范源。
[0087]如果拷貝不被刪除而是被重啟(例如,用數(shù)據(jù)的更新拷貝來刷新卷),則這可被視為拷貝的刪除,并且可以進行對其來說,該拷貝是規(guī)范源,并且引用計數(shù)大于I的區(qū)域的拷貝??截愲S后可被重新添加到級聯(lián)中,緊跟在主卷之后被重新插入級聯(lián)中,卷目錄被初始化成主卷的目錄的當前內(nèi)容。
[0088]該寫入處理還可提供一種清除。例如,假定級聯(lián)具有主卷和3個備份卷-PV->BVc->BVb->BVa,并且備份卷都引用對其來說主卷是規(guī)范源的相同元數(shù)據(jù)集,賦予該元數(shù)據(jù)集為4的引用計數(shù)。如果對中間卷之一(即,BVc或BVb)進行寫入,則可以進行對該卷的寫入,而不必把數(shù)據(jù)從主卷移動到在所述寫入的下游的卷,因為下游的卷仍然向后引用主卷。因此,通過除非實際的數(shù)據(jù)(即,主卷上的數(shù)據(jù))被蓋寫,否則避免拷貝數(shù)據(jù),該處理已進行智能清除。即使存在具有所需數(shù)據(jù)的上游卷,現(xiàn)有的級聯(lián)時間點拷貝實現(xiàn)一般也把數(shù)據(jù)拷貝(或者“清除”)到級聯(lián)中的下一個下游卷,如果該下游卷需要該數(shù)據(jù)的話。
[0089]上面的例證實現(xiàn)假定不存在后臺拷貝(例如,PV->BVc->BVb->BVa級聯(lián)中的數(shù)據(jù)只有在必要時才被拷貝)。這通常被稱為快照技術(shù),這意味著第一個備份卷將依賴于第二個備份卷,直到第二個備份卷被刪除或者被完全寫入。這種行為適用于限制存儲系統(tǒng)必須執(zhí)行以支持卷的級聯(lián)的IO操作的數(shù)目,而對于精簡配置的卷來說,這種行為限制存儲要求。然而,考慮到恢復力或者為了在多個物理存儲設(shè)備之間分布外部系統(tǒng)的10,一些拷貝需要具有它們自己的數(shù)據(jù)拷貝。這些拷貝一般被稱為克隆。
[0090]一般對克隆進行的后臺拷貝處理把數(shù)據(jù)從源復制到該克隆。這種處理一般始于卷的一端,并進行到另一端。當所述處理拷貝每個區(qū)域時,克隆不再依賴于該區(qū)域的源卷。假定PV->BVc->BVb->BVa級聯(lián)中的第二個備份卷是克隆,由于后臺拷貝處理把區(qū)域從主卷復制到第二個備份卷,第二個備份卷不再依賴于被拷貝區(qū)域的主卷。然而,就當前的實現(xiàn)來說,對于所有這些被拷貝區(qū)域,第一個備份卷現(xiàn)在依賴于第二個備份卷,如果隨后刪除第二個備份卷,則即使主卷仍然包含相同的數(shù)據(jù),系統(tǒng)也必須把所有區(qū)域從第二個備份卷拷貝到第一個備份卷。這意味著試圖僅僅記錄一小組變化的第一個備份卷現(xiàn)在必須記錄該卷的大部分(可能記錄整個卷,如果后臺拷貝處理已充分進行的話)。
[0091]上面討論的例證實現(xiàn)可被擴展,以允許數(shù)據(jù)的每個拷貝的多個規(guī)范源。例如,可向每個元數(shù)據(jù)集添加“鏈中的下一個”標識符。因此,如果某個區(qū)域已被后臺拷貝,使得相同的數(shù)據(jù)存在于不止一個卷的物理存儲空間上,則可為具有物理存儲空間的第二個卷分配另一個位置細節(jié)對象,并且第一個卷的元數(shù)據(jù)集的鏈中的下一個標識符可被設(shè)定成第二個卷的元數(shù)據(jù)集的標識符。用新拷貝區(qū)域的卷和位置初始化第二個卷的元數(shù)據(jù)集。然而,不為第二個卷的元數(shù)據(jù)集保留引用計數(shù),因為第一個卷的引用計數(shù)包括該拷貝。不具有備用規(guī)范源或者是指向備用規(guī)范源的對象鏈中的最后對象的元數(shù)據(jù)集可把所述下一個字段設(shè)定成無效值,所述無效值可以是通常不用的定義明確的唯一標識符。新拷貝區(qū)域的卷目錄繼續(xù)引用原始元數(shù)據(jù)集,從所述原始元數(shù)據(jù)集可以沿著下一個字段的鏈找出所有的備用規(guī)范源,包括新拷貝的區(qū)域。
[0092]圖7圖解說明了關(guān)于擴展情形的例證元數(shù)據(jù)級聯(lián)700。該情形始于圖6中所示結(jié)構(gòu)中的卷。因此,存在具有相關(guān)聯(lián)的卷目錄720的主卷,具有相關(guān)聯(lián)的卷目錄730的第一個備份卷,具有相關(guān)聯(lián)的卷目錄740的第二個備份卷,和具有相關(guān)聯(lián)的卷目錄750的第三個備份卷。另外,原始元數(shù)據(jù)集已被修改成包括這里例示為列712d的鏈中的下一個條目,列712d包含與元數(shù)據(jù)集中的規(guī)范源相關(guān)聯(lián)的規(guī)范源的元數(shù)據(jù)集標識符。
[0093]此外,第二個備份卷是已后臺拷貝主卷的前兩個區(qū)域的克隆。因此,當主卷的第一個區(qū)域被拷貝到第二個備份卷時,在倒數(shù)第二個元數(shù)據(jù)集710創(chuàng)建一個新的條目。如同剛剛討論的一樣,該條目指示第二個備份卷的第一個區(qū)域(即,區(qū)域O)充當規(guī)范源。另外,數(shù)據(jù)的原始元數(shù)據(jù)集(它是第一個元數(shù)據(jù)集710)已被更新,以引用鏈中的下一個列712d中的新條目。對卷目錄720-750沒有作出任何改變。
[0094]類似地,當主卷的第二個區(qū)域被拷貝到第二個備份卷時,創(chuàng)建一個新的條目,作為最后的元數(shù)據(jù)集710。該條目指示第二個備份卷的第二個區(qū)域充當規(guī)范源。另外,數(shù)據(jù)的原始元數(shù)據(jù)集(它是第六個元數(shù)據(jù)集710)已被更新,以引用鏈中的下一個字段712d中的新條目。
[0095]之后,存儲系統(tǒng)的表現(xiàn)和前面的實現(xiàn)中一樣,然而具有以下差別。當需要確定區(qū)域是否是規(guī)范源時,存儲系統(tǒng)檢查卷目錄引用其第一個條目的元數(shù)據(jù)集的鏈。如果某個規(guī)范源被寫入,并且對其來說在鏈中存在更早的規(guī)范源(例如,引用被寫規(guī)范源的規(guī)范源),則存儲系統(tǒng)不拷貝物理存儲器上的任何數(shù)據(jù)。而是,存儲系統(tǒng)從備用規(guī)范源的鏈中去除次規(guī)范源的標識符,使得它是獨立的元數(shù)據(jù)集,把與備用規(guī)范源相關(guān)聯(lián)的數(shù)據(jù)集的引用計數(shù)設(shè)定為1,遞減從中去除次規(guī)范源的鏈中的元數(shù)據(jù)集的引用計數(shù),并更新備用規(guī)范源的卷目錄,以直接指向與備用規(guī)范源相關(guān)聯(lián)的數(shù)據(jù)集。
[0096]如果作為鏈中的主規(guī)范源的規(guī)范源(例如,卷目錄所引用的規(guī)范源)被寫入,則存儲系統(tǒng)不能容易地識別引用所討論的元數(shù)據(jù)集的卷目錄條目。因此,存儲系統(tǒng)可分配利用卷標識符和被寫的卷位置以及為I的引用計數(shù)被初始化的新的元數(shù)據(jù)集,并更新主規(guī)范源的卷目錄,以引用新的元數(shù)據(jù)集。存儲系統(tǒng)還可更新在鏈的起點的元數(shù)據(jù)集,以指向該卷和鏈中的第二個卷(例如,第二個規(guī)范源)的位置,從鏈中去除第二個元數(shù)據(jù)集,并遞減在鏈的起點的元數(shù)據(jù)集的引用計數(shù)。通過使元數(shù)據(jù)集引用未被改變的數(shù)據(jù),系統(tǒng)不需要為未被更改的區(qū)域更新卷目錄。此外,即使規(guī)范源被蓋寫,存儲系統(tǒng)也不必把數(shù)據(jù)移動到另一個卷。
[0097]圖8圖解說明了就兩個寫入來說,按照這種情形修改的元數(shù)據(jù)模型700。第一個寫入是對第二個備份卷的第一個區(qū)域(即,區(qū)域O)的寫入,而第二個寫入是對主卷的第二個區(qū)域(即,區(qū)域I)的寫入。
[0098]第一個寫入例示了對在鏈中存在更早的規(guī)范源的規(guī)范源的寫入。因此,存儲系統(tǒng)不拷貝物理存儲器上的任何數(shù)據(jù)。而是,存儲系統(tǒng)在原始元數(shù)據(jù)集中,從備用規(guī)范源的鏈中去除與次規(guī)范源的關(guān)聯(lián),使得鏈接的元數(shù)據(jù)集是獨立的元數(shù)據(jù)集,把與備用規(guī)范源相關(guān)聯(lián)的元數(shù)據(jù)集的引用計數(shù)設(shè)定為1,遞減從中去除次規(guī)范源的鏈中的第一個條目的引用計數(shù),以及更新備用規(guī)范源的卷目錄,以直接指向與備用規(guī)范源相關(guān)聯(lián)的數(shù)據(jù)集。
[0099]由于所述鏈是普通鏈表,因此普通的去除技術(shù)行得通,其中鏈中緊接在被去除的對象之前的對象的下一個值被設(shè)定成被去除的對象的下一個值,被去除的對象的下一個值又被設(shè)定成無效值。對第二個備份卷的第一個區(qū)域的新寫入顯示了這一點。此外,即使規(guī)范源正被蓋寫,存儲系統(tǒng)也不必把數(shù)據(jù)移動到另一個卷。
[0100]第二個寫入例示了對鏈中的主規(guī)范源的寫入。在這種情況下,存儲系統(tǒng)分配具有卷標識符和被寫的卷位置以及為I的引用計數(shù)的元數(shù)據(jù)集,并更新主規(guī)范源的卷目錄,以引用新的元數(shù)據(jù)集。在本實現(xiàn)中,存儲系統(tǒng)已重用第10個元數(shù)據(jù)集710,因為該元數(shù)據(jù)集不再被需要。存儲系統(tǒng)還更新在鏈的起點的元數(shù)據(jù)集(例如,第六個元數(shù)據(jù)集710),以引用該卷和鏈中的次規(guī)范源卷的位置,從鏈中去除第二個元數(shù)據(jù)集,并且遞減在鏈的起點的元數(shù)據(jù)集的引用計數(shù)。通過使元數(shù)據(jù)集引用未被改變的數(shù)據(jù),存儲系統(tǒng)不需要為未被更改的區(qū)域更新卷目錄。此外,即使主規(guī)范源被蓋寫,存儲系統(tǒng)也不必把數(shù)據(jù)移動到另一個卷。
[0101]如果具有多個關(guān)聯(lián)規(guī)范源的卷區(qū)域被刪除,則存儲系統(tǒng)可以與仿佛該區(qū)域被寫入一樣地工作,除了它不需要保持關(guān)于該區(qū)域的數(shù)據(jù)集。因此,如果在鏈中存在更早規(guī)范源的規(guī)范源被刪除,則存儲系統(tǒng)不拷貝物理存儲器上的任何數(shù)據(jù)。而是,存儲系統(tǒng)從次規(guī)范源的鏈中去除該次規(guī)范源的標識符,使得它是獨立的元數(shù)據(jù)集,并且遞減從中去相關(guān)次規(guī)范源的鏈中的第一個條目的引用計數(shù)。存儲系統(tǒng)還可去除與被清除的卷相關(guān)聯(lián)的元數(shù)據(jù)集。此夕卜,即使規(guī)范源正在被清除,存儲系統(tǒng)也不必把數(shù)據(jù)移到另一個卷。
[0102]如果作為鏈中的第一個規(guī)范源的規(guī)范源正被清除,則存儲系統(tǒng)可更新在鏈的起點的元數(shù)據(jù)集,以引用該卷和鏈中的第二個卷的位置,從鏈中去除第二個元數(shù)據(jù)集,并遞減地鏈的起點處的元數(shù)據(jù)集的引用計數(shù)。通過使鏈中的第一個元數(shù)據(jù)集引用未被改變的數(shù)據(jù),存儲系統(tǒng)不需要為未被更改的區(qū)域更新卷目錄。此外,即使規(guī)范源被刪除,存儲系統(tǒng)也不必把數(shù)據(jù)移到另一個卷。
[0103]如果只存在與元數(shù)據(jù)集相關(guān)聯(lián)的一個規(guī)范源,則當所述規(guī)范源被寫入或者被刪除時,存儲系統(tǒng)可以像在不存在任何備用規(guī)范源的情況下那樣工作。因此,存儲系統(tǒng)可把數(shù)據(jù)拷貝到依賴它的級聯(lián)中的第一個卷。
[0104]當前的實現(xiàn)具有各種特征。例如,通過除非在級聯(lián)中的任何卷上都不存在數(shù)據(jù)的物理拷貝,否則不需要為相關(guān)卷拷貝該數(shù)據(jù),改善了清除。例如,通過除非存在作為對其來說在級聯(lián)中的任何剩余卷上都不存在數(shù)據(jù)的物理拷貝的規(guī)范源的區(qū)域,否則不需要為相關(guān)卷拷貝該數(shù)據(jù),改善了當刪除拷貝時的清除。
[0105]與適用于多目標拷貝(其中多個拷貝源自單個源)一樣,這些實現(xiàn)同樣適用于拷貝的真實級聯(lián)(其中拷貝源自拷貝),同樣適用于任意組合的這兩者的混合。這些實現(xiàn)依賴于基礎(chǔ)的級聯(lián)時間點拷貝特征,但是通過不再要求用于拷貝的區(qū)域的物理存儲空間的位置處于該拷貝或者緊接在前的上游拷貝(對該區(qū)域來說,不存在包含不同數(shù)據(jù)的居間拷貝),改進了這些基礎(chǔ)的級聯(lián)時間點拷貝特征。
[0106]圖9圖解說明了源清除級聯(lián)卷的例證處理900。處理900可由例如與存儲系統(tǒng)120類似的存儲系統(tǒng)進行。
[0107]處理900確定是否收到對卷的寫入(操作904)。例如,對卷的寫入可來自外部系統(tǒng)。如果未收到對卷的寫入,則處理900等待對卷的寫入。
[0108]一旦收到對卷的寫入,處理900確定所述卷對于被寫區(qū)域是否是規(guī)范源(操作908)。
[0109]如果所述卷對于被寫區(qū)域不是規(guī)范源,則處理900遞減與該區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集中的引用計數(shù)(操作912),并確定元數(shù)據(jù)集位置標識符(操作916)。元數(shù)據(jù)集位置標識符可以是新的標識符或者重復利用的標識符。處理900還對于在元數(shù)據(jù)位置的元數(shù)據(jù)集,把被寫卷設(shè)立為規(guī)范源(操作920),并設(shè)立引用計數(shù),以指示一個卷區(qū)域引用所述新的元數(shù)據(jù)集(操作924)。例如,引用計數(shù)可被設(shè)定為I。另外,處理900把新數(shù)據(jù)寫入所述卷(操作928)。然后處理900結(jié)束。
[0110]然而,如果該卷對于被寫區(qū)域是規(guī)范源,則處理900確定對于該區(qū)域是否存在另一個規(guī)范源(操作932)。例如,可通過搜索元數(shù)據(jù)集中的元數(shù)據(jù)集標識符,來實現(xiàn)確定是否存在另一個規(guī)范源。
[0111]如果對于被寫區(qū)域不存在另一個規(guī)范源,則處理900確定另一個卷是否依賴于該區(qū)域中的數(shù)據(jù)(操作936)。例如,可通過檢查相關(guān)聯(lián)的元數(shù)據(jù)集中的引用計數(shù),來實現(xiàn)確定另一個卷是否依賴于該區(qū)域中的數(shù)據(jù)。如果另一個卷不依賴于該區(qū)域中的數(shù)據(jù),則處理900把新的數(shù)據(jù)寫入該卷(操作928)。處理900然后結(jié)束。
[0112]然而,如果另一個卷確實依賴于該區(qū)域中的數(shù)據(jù),則處理900檢查卷目錄,以確定具有與被寫區(qū)域相關(guān)聯(lián)的區(qū)域的下一個卷(操作940)。例如,可通過搜索卷目錄以查找與被寫區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集的標識符,來實現(xiàn)檢查卷目錄以查找與被寫區(qū)域相關(guān)聯(lián)的區(qū)域。在特定實現(xiàn)中,這可通過在被寫區(qū)域在其卷目錄中所占據(jù)的相同位置檢查卷目錄來實現(xiàn)。
[0113]處理900還把被寫區(qū)域的現(xiàn)有數(shù)據(jù)拷貝到識別出的卷(操作944),并在相關(guān)聯(lián)的元數(shù)據(jù)集中把識別出的卷指定為所述現(xiàn)有數(shù)據(jù)的規(guī)范源(操作948)。另外,處理900遞減相關(guān)聯(lián)的元數(shù)據(jù)集中的引用計數(shù)(操作912),確定元數(shù)據(jù)位置標識符(操作916),對于在新的元數(shù)據(jù)位置的元數(shù)據(jù)集,把被寫卷設(shè)立為規(guī)范源(操作920),對于所述新的元數(shù)據(jù)集,把引用計數(shù)設(shè)定為I (操作924),并把新數(shù)據(jù)寫入該卷(操作928)。隨后結(jié)束處理900。
[0114]然而,如果對于被寫區(qū)域存在另一個規(guī)范源,則處理900確定被寫卷對于該區(qū)域是否是次規(guī)范源(操作952)。如果某個卷不是規(guī)范源鏈中的第一個,則它可被確定為次規(guī)范源。
[0115]如果被寫卷對于被寫區(qū)域是次規(guī)范源,則處理900去除該卷和主規(guī)范源卷之間的關(guān)聯(lián)(操作956)。例如,可通過從主卷的元數(shù)據(jù)集中刪除次規(guī)范源卷的標識符來實現(xiàn)所述關(guān)聯(lián)的去除。處理900還遞減關(guān)于主卷的關(guān)聯(lián)區(qū)域的元數(shù)據(jù)集中的引用計數(shù)(操作960),更新被寫卷的卷目錄以引用(例如,指向)與被寫區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集(操作962),對于與被寫卷相關(guān)聯(lián)的元數(shù)據(jù)集,把引用計數(shù)設(shè)定為I (操作924),并把新數(shù)據(jù)寫入被寫卷(操作928)。隨后結(jié)束處理900。
[0116]如果被寫卷對于被寫區(qū)域不是次規(guī)范源,則處理900檢查至少一個元數(shù)據(jù)集以識別另一個規(guī)范源(操作964)。例如,識別另一個規(guī)范源可包括在與被寫區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集中找出另一個元數(shù)據(jù)集的標識符。處理900還在與被寫區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集中去除被寫卷和識別出的卷之間的關(guān)聯(lián)(操作968)。例如,可通過從主規(guī)范源卷的元數(shù)據(jù)集中刪除與識別出的卷相關(guān)聯(lián)的元數(shù)據(jù)集的標識符來實現(xiàn)去除所述關(guān)聯(lián)。另外,處理900在元數(shù)據(jù)集中把識別出的卷指定為現(xiàn)有數(shù)據(jù)的主規(guī)范源(操作972),并遞減元數(shù)據(jù)集中的引用計數(shù)(操作976)。處理900還確定新數(shù)據(jù)的元數(shù)據(jù)集位置標識符(操作980),對于與元數(shù)據(jù)位置標識符相關(guān)聯(lián)的元數(shù)據(jù)集,把被寫卷設(shè)立為新數(shù)據(jù)的規(guī)范源(操作984),更新被寫卷的卷目錄,以引用與被寫區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集(操作962),對于與被寫卷相關(guān)聯(lián)的元數(shù)據(jù)集,把引用計數(shù)設(shè)定為I (操作924),以及把新數(shù)據(jù)寫入被寫卷(操作928)。隨后結(jié)束處理 900。
[0117]只要備份卷有效,就可進行處理900。因此,在正常操作期間,處理900可被重復許多次。
[0118]盡管處理900舉例說明了源清除級聯(lián)卷的一個例子,源清除級聯(lián)卷的其它處理可包括更少的操作、另外的操作和/或操作的不同安排。例如,處理可不包括確定是否存在另一個規(guī)范源。當不利用克隆拷貝來生成級聯(lián)卷時,可發(fā)生這種情況。再例如,處理可包括在檢查待寫區(qū)域是否是規(guī)范源之前,檢查另一個卷是否依賴于該待寫區(qū)域。如果沒有其它區(qū)域依賴于待寫區(qū)域,則該區(qū)域可被寫入,而不存在影響其它卷的顧慮。又例如,可在更新元數(shù)據(jù)集之前進行新數(shù)據(jù)的寫入,除非需要在進行寫入之前移動待寫區(qū)域中的數(shù)據(jù)。
[0119]圖10A-B圖解說明了源清除級聯(lián)卷的另一個例證處理1000。例如,處理1000可由與存儲系統(tǒng)120類似的系統(tǒng)進行。此外,可以與處理900結(jié)合地使用處理1000。
[0120]處理1000確定某個卷是否將被清除(操作1004)。例如,如果某個卷將被從級聯(lián)中去除或者將被重啟,則該卷需要被清除。如果卷不將被清除,則處理1000等待要被清除的卷。
[0121]一旦某個卷將被清除,處理1000就選擇待清除卷的區(qū)域(操作1008)。這可通過例如選擇卷上的第一個區(qū)域、卷上的最后一個區(qū)域、或者中間的某個區(qū)域來實現(xiàn)。處理1000還確定另一個卷是否依賴于該區(qū)域中的數(shù)據(jù)(操作1012)。例如,這可通過遞減與該區(qū)域相關(guān)聯(lián)的引用計數(shù)(所述引用計數(shù)例如可被保存在與卷區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集中),并確定所述引用計數(shù)是否達到O來實現(xiàn)。
[0122]如果另一個卷不依賴于該區(qū)域中的數(shù)據(jù),則處理1000刪除相關(guān)聯(lián)的元數(shù)據(jù)集(操作1016),把該區(qū)域指定為完全的(操作1018),并確定在卷中是否存在另一個區(qū)域(操作1020)。即,如果沒有其它卷依賴于所選區(qū)域,則所選區(qū)域可被刪除,而不存在對其它級聯(lián)卷的影響。例如,可通過在陣列中設(shè)定指示符(例如,數(shù)字或標記)或者向另一個處理通知所選區(qū)域已被清除,把所述區(qū)域指定為完全的。例如,完全的區(qū)域可使其相關(guān)聯(lián)存儲空間被釋放(例如,如果磁盤被虛擬化)。如果卷中不存在另一個區(qū)域,則處理1000結(jié)束。如果在卷中存在另一個區(qū)域,則處理1000選擇另一個區(qū)域(操作1008),并確定另一個卷是否依賴于該區(qū)域中的數(shù)據(jù)(操作1012)。
[0123]如果另一個卷依賴于該區(qū)域中的數(shù)據(jù),則處理1000確定被清除的卷對于所選區(qū)域是否是規(guī)范源(操作1024)。如果被清除的卷對于該區(qū)域不是規(guī)范源,則處理1000遞減相關(guān)聯(lián)的元數(shù)據(jù)集的引用計數(shù)(操作1028),再次把該區(qū)域指定為完全的(操作1018),并確定在卷中是否存在另一個區(qū)域(操作1020)。這是可能的,因為另一個卷區(qū)域保存相關(guān)聯(lián)的數(shù)據(jù)。
[0124]如果被清除的卷對于所選區(qū)域是規(guī)范源,則處理1000確定對于該區(qū)域是否存在另一個規(guī)范源。如果對于該區(qū)域存在另一個規(guī)范源,則處理1000對于相關(guān)聯(lián)的元數(shù)據(jù)集的標識符檢查卷目錄(操作1036)。處理1000還把被寫區(qū)域中的數(shù)據(jù)拷貝到識別的卷(操作1040),并在相關(guān)聯(lián)的元數(shù)據(jù)集中把識別的卷指定為規(guī)范源(操作1044)。處理1000另外遞減相關(guān)聯(lián)的元數(shù)據(jù)集的引用計數(shù)(操作1028),并再次把該區(qū)域指定為完全的(操作1018),以及確定卷中是否存在另一個區(qū)域(操作1020)。
[0125]然而,如果對于被清除區(qū)域存在另一個規(guī)范源,則處理1000確定被清除卷對于該區(qū)域是否是次規(guī)范源(操作1048)。如果被清除卷是次規(guī)范源,則處理1000對于與主規(guī)范源卷相關(guān)聯(lián)的至少一個元數(shù)據(jù)集,去除被清除卷和主規(guī)范源卷之間的關(guān)聯(lián)(操作1052)。處理1000還去除指示被清除的卷區(qū)域是規(guī)范源的元數(shù)據(jù)集(操作1056),并遞減與主規(guī)范源卷相關(guān)聯(lián)的元數(shù)據(jù)集中的引用計數(shù)(操作1060)。處理1000另外把該區(qū)域指定為完全的(操作1018),并檢查待清除的另一個卷區(qū)域(操作1020)。
[0126]如果被清除卷不是次規(guī)范源,則處理1000檢查一個或多個元數(shù)據(jù)集以識別另一個規(guī)范源(操作1064)。例如,可對于另一個規(guī)范源的元數(shù)據(jù)集的標識符,檢查與被清除區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集。再例如,可以個別地檢測元數(shù)據(jù)集,以識別另一個規(guī)范源的元數(shù)據(jù)集。一旦識別出適當?shù)脑獢?shù)據(jù)集,就可從識別出的元數(shù)據(jù)集中提取卷和區(qū)域。處理1000還可去除指示被清除卷區(qū)域是所選區(qū)域的規(guī)范源的元數(shù)據(jù)集(操作1068),并把識別出的卷指定為現(xiàn)有數(shù)據(jù)的規(guī)范源(操作1072)。例如,識別出的卷的標識符可代替相關(guān)聯(lián)的元數(shù)據(jù)集中的被去除卷的標識符。
[0127]處理1000另外在至少一個元數(shù)據(jù)集中去除被清除卷和識別出的卷之間的關(guān)聯(lián)(操作1076),并遞減剛剛被更新的與主規(guī)范源卷相關(guān)聯(lián)的元數(shù)據(jù)集中的引用計數(shù)(操作1060)。處理1000另外把該區(qū)域指定為完全的(操作1018),并檢查要清除的另一個卷區(qū)域(操作 1020)。
[0128]只要備份卷有效,就可進行處理1000。因此,在正常操作期間,處理1000可被重復
許多次。
[0129]盡管處理1000舉例說明了源清除級聯(lián)卷的一個例證處理,然而源清除級聯(lián)卷的其它處理可包括更少的操作、另外的操作和/或操作的不同安排。例如,處理可不包括確定是否存在另一個規(guī)范源。例如,當克隆拷貝不被用于生成級聯(lián)卷時,可發(fā)生這種情況。再例如,處理可包括在檢查另一個區(qū)域是否依賴于所選區(qū)域之前,檢查卷是否是規(guī)范源。如果區(qū)域不是規(guī)范源,則它可被刪除,而不影響其它卷。又例如,可不必去除元數(shù)據(jù)集。例如,元數(shù)據(jù)集可在稍后某個時刻變得無效和/或被蓋寫。[0130]附圖中的流程圖和框圖圖解說明了本公開的各種實現(xiàn)的系統(tǒng)、方法和計算機程序產(chǎn)品的體系架構(gòu)、功能和操作。在這點上,流程圖或框圖中的每個方框可以代表一個模塊、程序段或代碼的一部分,所述模塊、程序段或代碼的一部分包含一個或多個用于實現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應當注意,在一些備選實現(xiàn)中,方框中所標注的功能也可以以不同于附圖中所標注的順序發(fā)生。例如,兩個連續(xù)的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或動作的專用的基于硬件的系統(tǒng)來實現(xiàn),或者可以用專用硬件與計算機指令的組合來實現(xiàn)。
[0131]圖11圖解說明了用于管理級聯(lián)卷的源清除的例證計算機系統(tǒng)1100。例如,計算機系統(tǒng)1100可例示存儲系統(tǒng)的存儲控制器的一些組件。
[0132]系統(tǒng)1100包括利用網(wǎng)絡(luò)1140耦接在一起的處理器1110、輸入/輸出系統(tǒng)1120和存儲器1130。如圖所示,計算機系統(tǒng)1100充當存儲系統(tǒng)的存儲控制器。
[0133]處理器1110—般包括在程序指令(例如,來自軟件和/或固件)的指示下處理數(shù)據(jù)的邏輯處理單元(例如,算術(shù)邏輯單元)。例如,處理器1110可以是微處理器、微控制器或者專用集成電路。處理器可依據(jù)精簡指令集計算機(RISC)或者復雜指令集計算機(CISC)原理工作。通常,處理器可以按照邏輯方式操縱數(shù)據(jù)的任何裝置。
[0134]輸入/輸出系統(tǒng)1120可包括一個或多個通信接口和/或一個或多個其它用戶接口。通信接口可以是例如網(wǎng)絡(luò)接口卡(無線或有線)或者調(diào)制解調(diào)器。用戶接口可以是例如用戶輸入裝置(例如,鍵盤、小鍵盤、觸摸板、鐵筆、鼠標或麥克風)或者用戶輸出裝置(例如,監(jiān)視器、顯示器或揚聲器)。通常,輸入-輸出系統(tǒng)1120可以是計算機系統(tǒng)能夠用其接收和輸出數(shù)據(jù)的各種裝置的任意組合。
[0135]存儲器1130可包括例如隨機存取存儲器(RAM)、只讀存儲器(ROM)、閃存和/或磁盤存儲器。各個項目可在不同的時間被保存在存儲器的不同部分中。通常,存儲器1130可以是用于保存數(shù)據(jù)的裝置的任意組合。
[0136]存儲器1130包括指令1132和數(shù)據(jù)1136。指令1132包括操作系統(tǒng)1133 (例如,Windows、Linux或Unix)和應用程序1134,應用程序1134包括備份管理器1135。數(shù)據(jù)1136包括應用程序1134所需和/或產(chǎn)生的數(shù)據(jù),包括寫入數(shù)據(jù)1137和級聯(lián)元數(shù)據(jù)1138。
[0137]網(wǎng)絡(luò)1140負責在處理器1110、輸入/輸出系統(tǒng)1120和存儲器1130之間傳送數(shù)據(jù)。網(wǎng)絡(luò)1140可包括例如許多不同種類的總線(例如,串行總線和并行總線)。
[0138]在一些操作模式下,處理器1110能夠接收寫入(例如,從外部系統(tǒng)),并為計算機系統(tǒng)所管理的存儲器準備所述寫入。另外,處理器1110可按照備份管理器1135,在存儲器中生成主卷的備份卷,并生成關(guān)于每個卷區(qū)域的元數(shù)據(jù),所述元數(shù)據(jù)指示哪些區(qū)域彼此引用以及哪些區(qū)域是規(guī)范區(qū)域。例如,在特定實現(xiàn)中,每個級聯(lián)卷可具有相關(guān)聯(lián)的卷目錄,所述卷目錄把卷的各個區(qū)域映射到許多元數(shù)據(jù)集之一,卷目錄和元數(shù)據(jù)集一起構(gòu)成級聯(lián)元數(shù)據(jù) 1138。
[0139]通過利用級聯(lián)元數(shù)據(jù)1138,處理器1110可在級聯(lián)卷被寫入時,確定數(shù)據(jù)是否需要被拷貝,等等。例如,如果被寫卷區(qū)域不是規(guī)范源,則其中的數(shù)據(jù)不必被拷貝。再例如,如果被寫卷區(qū)域是規(guī)范源,但是沒有其它卷依賴于它,則可不必拷貝其中的數(shù)據(jù)。另外,如果被寫卷是規(guī)范源,但是存在備用的規(guī)范源,則可不必拷貝數(shù)據(jù)。[0140]在清除卷時(例如,在刪除該卷時),處理器1110也可利用級聯(lián)數(shù)據(jù)。例如,處理器可利用該數(shù)據(jù)來確定沒有其它區(qū)域依賴于卷區(qū)域,因此,該卷區(qū)域可被刪除,而不影響級聯(lián)的剩余部分。再例如,處理器可以利用級聯(lián)元數(shù)據(jù)來確定被刪除的卷區(qū)域不是規(guī)范源,從而同樣地可被刪除,而不影響級聯(lián)的剩余部分。再例如,處理器可利用級聯(lián)元數(shù)據(jù)來確定卷是規(guī)范源,從而其中的數(shù)據(jù)應被拷貝到另一個卷。然而,在一些實現(xiàn)中,處理器還可利用級聯(lián)元數(shù)據(jù)來確定對于卷區(qū)域來說是否存在備選的規(guī)范源,這可避免拷貝該卷區(qū)域中的數(shù)據(jù)。
[0141]處理器1110可通過實現(xiàn)上面討論的任意技術(shù),包括處理900-1000中的一個或多個部分,來完成這些操作。
[0142]這里使用的術(shù)語只是用于說明特定的實現(xiàn),并不意圖限制本發(fā)明。這里使用的單數(shù)形式意圖還包括復數(shù)形式,除非上下文明確地另有所示。另外要明白當用在說明書中時,術(shù)語“包括”和/或“包含”指定記載的特征、整數(shù)、步驟、操作、元件和/或組件的存在,但不排除一個或多個其它特征、整數(shù)、步驟、操作、元件、組件和/或它們的群體的存在或增加。
[0143]以下的權(quán)利要求中的所有裝置或步驟加功能要素的對應結(jié)構(gòu)、材料、動作和等同物意圖包括與明確主張的其它要求保護的要素結(jié)合地實現(xiàn)功能的任何結(jié)構(gòu)、材料或動作。當前實現(xiàn)的說明只是出于舉例說明的目的給出的,而不是窮盡的,也不意圖局限于公開的實現(xiàn)形式。對本領(lǐng)域的普通技術(shù)人員來說,許多修改和變化是顯而易見的,而不脫離本公開的范圍和精神。選擇和說明這些實現(xiàn)是為了解釋本公開的原理和實際應用,和使本領(lǐng)域的其他人或普通技術(shù)人員能夠關(guān)于具有適合于預期的特定應用的各種修改的各種實現(xiàn),理解本公開。
[0144]說明了源清除級聯(lián)卷的多種實現(xiàn),并且提到或者暗示了幾種其它實現(xiàn)。此外,本領(lǐng)域的技術(shù)人員易于認識到可對這些實現(xiàn)作出各種增加、刪除、修改和替代,同時仍然實現(xiàn)源清除級聯(lián)卷。從而,受保護的主題的范圍應根據(jù)以下權(quán)利要求判斷,以下權(quán)利要求記載了一種或多種實現(xiàn)的一個或多個概念。
【權(quán)利要求】
1.一種系統(tǒng),包括: 存儲器,所述存儲器包括主卷和所述主卷的多個級聯(lián)備份卷;和存儲控制器,所述存儲控制器適于從外部源接收對于各個卷中的至少一個卷的寫入,并準備所述寫入以便存儲,其中所述存儲控制器進一步適于: 確定所述寫入是否針對作為規(guī)范源的卷區(qū)域; 如果所述寫入針對不是規(guī)范源的區(qū)域,則: 遞減與所述區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集中的引用計數(shù), 確定元數(shù)據(jù)集位置標識符, 對于與所述元數(shù)據(jù)集位置標識符相關(guān)聯(lián)的元數(shù)據(jù)集,把所述區(qū)域的卷設(shè)立為規(guī)范源,和 設(shè)立所述元數(shù)據(jù)集的引用計數(shù),以指示所述元數(shù)據(jù)集被一個卷區(qū)域引用;以及 如果所述寫入針對作為規(guī)范源的區(qū)域,則: 檢查與所述區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集,以確定另一個卷是否依賴于所述區(qū)域中的數(shù)據(jù),和 如果另一個卷不依賴于所述區(qū)域中的數(shù)據(jù),則把新數(shù)據(jù)寫入所述區(qū)域。
2.按照權(quán)利要求1所述的系 統(tǒng),其中,所述元數(shù)據(jù)集包含卷標識符、卷區(qū)域標識符和引用計數(shù)。
3.按照權(quán)利要求1所述的系統(tǒng),其中,所述存儲控制器進一步適于: 如果另一個卷確實依賴于所述區(qū)域中的數(shù)據(jù),則檢查至少一個卷的目錄,以確定具有與待寫區(qū)域相關(guān)聯(lián)的區(qū)域的下一個卷; 把所述待寫區(qū)域中的數(shù)據(jù)拷貝到識別出的卷; 遞減與所述待寫區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集中的引用計數(shù);以及 把識別出的卷指定為被拷貝數(shù)據(jù)的規(guī)范源。
4.按照權(quán)利要求3所述的系統(tǒng),其中,所述存儲控制器進一步適于: 確定元數(shù)據(jù)集位置標識符; 對于與所述元數(shù)據(jù)集位置標識符相關(guān)聯(lián)的元數(shù)據(jù)集,把待寫區(qū)域的卷設(shè)立為規(guī)范源;和 設(shè)立所述元數(shù)據(jù)集的引用計數(shù),以指示所述元數(shù)據(jù)集被一個卷區(qū)域引用。
5.按照權(quán)利要求1所述的系統(tǒng),其中,所述存儲控制器進一步適于: 確定另一個規(guī)范源是否與待寫區(qū)域相關(guān)聯(lián); 如果另一個規(guī)范源與待寫區(qū)域相關(guān)聯(lián),則確定待寫卷對于待寫區(qū)域是否是次規(guī)范源;和 如果待寫卷對于待寫區(qū)域是次規(guī)范源,則: 去除待寫卷和主規(guī)范源卷之間的關(guān)聯(lián), 遞減與和待寫區(qū)域相關(guān)聯(lián)的主規(guī)范源卷的區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集的引用計數(shù), 對于與待寫區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集,設(shè)立引用計數(shù),以指示一個引用卷區(qū)域,和 更新待寫卷的卷目錄,以識別與待寫區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集。
6.按照權(quán)利要求5所述的系統(tǒng),其中,所述存儲控制器進一步適于: 如果待寫卷是待寫區(qū)域的主規(guī)范源,則檢查至少一個元數(shù)據(jù)集,以識別另一個規(guī)范源; 在與待寫卷相關(guān)聯(lián)的元數(shù)據(jù)集中,去除待寫卷和識別出的卷之間的關(guān)聯(lián); 在相關(guān)聯(lián)的元數(shù)據(jù)集中,把識別出的卷指定為主規(guī)范源;和 遞減相關(guān)聯(lián)的元數(shù)據(jù)集中的引用計數(shù)。
7.按照權(quán)利要求6所述的系統(tǒng),其中,所述存儲系統(tǒng)進一步適于: 為待寫數(shù)據(jù)確定元數(shù)據(jù)集位置標識符;和 在位于確定的元數(shù)據(jù)集位置標識符的元數(shù)據(jù)集中,對于待寫區(qū)域,把待寫卷設(shè)立為規(guī)范源。
8.按照權(quán)利要求1所述的系統(tǒng),其中,所述存儲系統(tǒng)進一步適于: 確定級聯(lián)中的卷需要被清除; 如果某個卷需要被清除,則選擇該卷的區(qū)域; 確定另一個卷是否依賴于所選區(qū)域; 把所選區(qū)域指定為完全的;和 如果另一個卷不依賴于所選區(qū)域,則確定另一個卷區(qū)域是否需要被清除。
9.按照權(quán)利要求8所述的系統(tǒng),其中,所述存儲系統(tǒng)進一步適于: 如果另一個卷依賴于所選區(qū)域,則確定待清除卷對于所選區(qū)域是否是規(guī)范源; 如果待清除卷對于所選區(qū)域不是規(guī)范源,則遞減與所選區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集中的引用計數(shù);和 把所選區(qū)域指定為完全的。
10.按照權(quán)利要求9所述的系統(tǒng),其中,所述存儲系統(tǒng)進一步適于: 如果待清除卷對于所選區(qū)域是規(guī)范源,則檢查其它卷的卷目錄,以查找與所選區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集的標識符; 把所選區(qū)域中的數(shù)據(jù)拷貝到識別出的卷; 在與所選區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集中,把識別出的卷指定為數(shù)據(jù)的規(guī)范源;和 遞減相關(guān)聯(lián)的元數(shù)據(jù)集中的引用計數(shù)。
11.按照權(quán)利要求9所述的系統(tǒng),其中,所述存儲系統(tǒng)進一步適于: 如果待清除卷對于所選區(qū)域是規(guī)范源,則確定對于所選區(qū)域是否存在另一個規(guī)范源; 如果存在另一個規(guī)范源,則確定待清除卷對于所選區(qū)域是否是次規(guī)范源; 如果被清除卷對于所選區(qū)域是次規(guī)范源,則在與主規(guī)范源卷相關(guān)聯(lián)的元數(shù)據(jù)集中,去除所選區(qū)域和主規(guī)范源卷之間的關(guān)聯(lián);以及 遞減與主規(guī)范源卷相關(guān)聯(lián)的元數(shù)據(jù)集中的引用計數(shù)。
12.按照權(quán)利要求11所述的系統(tǒng),其中,所述存儲系統(tǒng)進一步適于: 如果待清除卷對于所選區(qū)域是主規(guī)范源,則檢查至少一個元數(shù)據(jù)集,以確定另一個規(guī)范源卷; 在與所選區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集中,去除被清除卷和識別出的卷之間的關(guān)聯(lián); 對于相關(guān)聯(lián)的元數(shù)據(jù)集,把識別出的卷指定為主規(guī)范源卷;和 遞減相關(guān)聯(lián)的元數(shù)據(jù)集中的引用計數(shù)。
13.—種方法,包括: 保存主卷和主卷的多個級聯(lián)備份卷;從外部源接收對各個卷中的至少一個卷的寫入,并準備所述寫入以便存儲; 確定所述寫入是否針對作為規(guī)范源的卷區(qū)域; 如果所述寫入針對不是規(guī)范源的區(qū)域,則: 遞減與所述區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集中的引用計數(shù), 確定元數(shù)據(jù)集位置標識符, 對于與所述元數(shù)據(jù)集位置標識符相關(guān)聯(lián)的元數(shù)據(jù)集,把所述區(qū)域的卷設(shè)立為規(guī)范源,和 設(shè)立所述元數(shù)據(jù)集的引用計數(shù),以指示所述元數(shù)據(jù)集被一個卷區(qū)域引用;和 如果所述寫入針對作為規(guī)范源的區(qū)域,則: 檢查與所述區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集,以確定另一個卷是否依賴于所述區(qū)域中的數(shù)據(jù),和 如果另一個卷不依賴于所述區(qū)域中的數(shù)據(jù),則把新數(shù)據(jù)寫入所述區(qū)域。
14.按照權(quán)利要求13所述的方法,進一步包括: 如果另一個卷確實依賴于所述區(qū)域中的數(shù)據(jù),則檢查至少一個卷的目錄,以確定具有與待寫區(qū)域相關(guān)聯(lián)的區(qū)域的下一個卷; 把所述待寫區(qū)域中的數(shù)據(jù)拷貝到識別出的卷; 遞減與所述待寫區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集中的引用計數(shù);和 把識別出的卷指定為被拷貝數(shù)據(jù)的規(guī)范源。
15.按照權(quán)利要求13所述的方法,進一步包括: 確定另一個規(guī)范源是否與待寫區(qū)域相關(guān)聯(lián); 如果另一個規(guī)范源與待寫區(qū)域相關(guān)聯(lián),則確定待寫卷對于待寫區(qū)域是否是次規(guī)范源;和 如果待寫卷對于待寫區(qū)域是次規(guī)范源,則: 去除待寫卷和主規(guī)范源卷之間的關(guān)聯(lián), 遞減與和待寫區(qū)域相關(guān)聯(lián)的主規(guī)范源卷的區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集的引用計數(shù), 對于與待寫區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集,設(shè)立引用計數(shù),以指示一個引用卷區(qū)域,和 更新待寫卷的卷目錄,以識別與待寫區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集。
16.按照權(quán)利要求13所述的方法,進一步包括: 確定級聯(lián)中的卷需要被清除; 如果某個卷需要被清除,則選擇該卷的區(qū)域; 確定另一個卷是否依賴于所選區(qū)域; 如果另一個卷不依賴于所選區(qū)域,則把所選區(qū)域指定為完全的;和 確定另一個卷區(qū)域是否需要被清除。
17.按照權(quán)利要求16所述的方法,進一步包括: 如果另一個卷依賴于所選區(qū)域,則確定待清除卷對于所選區(qū)域是否是規(guī)范源; 如果待清除卷對于所選區(qū)域不是規(guī)范源,則遞減與所選區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集中的引用計數(shù);和 把所選區(qū)域指定為完全的。
18.按照權(quán)利要求17所述的方法,進一步包括:如果待清除卷對于所選區(qū)域是規(guī)范源,則檢查其它卷的卷目錄,以查找與所選區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集的標識符; 把所選區(qū)域中的數(shù)據(jù)拷貝到識別出的卷; 對于與所選區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集,把識別出的卷指定為規(guī)范源;和 遞減相關(guān)聯(lián)的元數(shù)據(jù)集中的引用計數(shù)。
19.按照權(quán)利要求17所述的方法,進一步包括: 如果待清除卷對于所選區(qū)域是規(guī)范源,則確定對于所選區(qū)域是否存在另一個規(guī)范源; 如果存在另一個規(guī)范源,則確定待清除卷對于所選區(qū)域是否是次規(guī)范源; 如果被清除卷對于所選區(qū)域是次規(guī)范源,則在與主規(guī)范源卷相關(guān)聯(lián)的元數(shù)據(jù)集中,去除所選區(qū)域和主規(guī)范源卷之間的關(guān)聯(lián);和 遞減與主規(guī)范源卷相關(guān)聯(lián)的元數(shù)據(jù)集中的引用計數(shù)。
20.一種用于源清除級聯(lián)卷的計算機程序產(chǎn)品,所述計算機程序產(chǎn)品包括: 計算機可讀存儲介質(zhì); 第一程序指令,用于確定接收的對卷的級聯(lián)中的某個卷的寫入是否針對作為規(guī)范源的卷區(qū)域; 第二程序指令,用于如果所述寫入針對不是規(guī)范源的區(qū)域,則遞減與該區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集中的引用計數(shù),確定元數(shù)據(jù)集位置標識符,對于與元數(shù)據(jù)集位置標識符相關(guān)聯(lián)的元數(shù)據(jù)集,把所述區(qū)域的卷設(shè)立為規(guī)范源,以及設(shè)立所述元數(shù)據(jù)集的引用計數(shù),以指示所述元數(shù)據(jù)集被一個卷區(qū)域引用;和` 第三程序指令,用于如果所述寫入針對作為規(guī)范源的區(qū)域,則檢查與該區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集,以確定另一個卷是否依賴于所述區(qū)域中的數(shù)據(jù),以及如果另一個卷不依賴于所述區(qū)域中的數(shù)據(jù),則把新數(shù)據(jù)寫入所述區(qū)域中, 其中,所述程序指令被保存在所述計算機可讀存儲介質(zhì)上。
21.按照權(quán)利要求20所述的計算機程序產(chǎn)品,進一步包括第四程序指令,用于: 如果另一個卷不依賴于所述區(qū)域中的數(shù)據(jù),則檢查至少一個卷的目錄,以確定具有與待寫區(qū)域相關(guān)聯(lián)的區(qū)域的下一個卷; 把待寫區(qū)域中的數(shù)據(jù)拷貝到識別出的卷; 遞減與待寫區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集中的引用計數(shù);和 把識別出的卷指定為被拷貝數(shù)據(jù)的規(guī)范源。
22.按照權(quán)利要求20所述的計算機程序產(chǎn)品,進一步包括第五程序指令,用于: 確定另一個規(guī)范源是否與待寫區(qū)域相關(guān)聯(lián); 如果另一個規(guī)范源與待寫區(qū)域相關(guān)聯(lián),則確定待寫卷對于待寫區(qū)域是否是次規(guī)范源;和 如果待寫卷對于待寫區(qū)域是次規(guī)范源,則: 去除待寫卷和主規(guī)范源卷之間的關(guān)聯(lián), 遞減與和待寫區(qū)域相關(guān)聯(lián)的主規(guī)范源卷的區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集的引用計數(shù), 對于與所述待寫區(qū)域關(guān)聯(lián)的元數(shù)據(jù)集,設(shè)立引用計數(shù),以指示一個引用卷區(qū)域,和 更新待寫卷的卷目錄,以識別與待寫區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集。
23.按照權(quán)利要求20所述的計算機程序產(chǎn)品,進一步包括第六程序指令,用于:確定級聯(lián)中的卷需要被清除; 如果某個卷需要被清除,則選擇該卷的區(qū)域; 確定另一個卷是否依賴于所選區(qū)域; 如果另一個卷不依賴于所選區(qū)域,則把所選區(qū)域指定為完全的;和 確定另一個卷區(qū)域是否需要被清除。
24.按照權(quán)利要求23所述的計算機程序產(chǎn)品,進一步包括第七程序指令,用于: 如果另一個卷依賴于所選區(qū)域,則確定待清除卷對于所選區(qū)域是否是規(guī)范源; 如果待清除卷對于所選區(qū)域不是規(guī)范源,則遞減與所選區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集中的引用計數(shù);和 把所選區(qū)域指定為完全的。
25.按照權(quán)利要求24所述的計算機程序產(chǎn)品,進一步包括: 如果待清除卷對于所選區(qū)域是規(guī)范源,則檢查其它卷的卷目錄,以查找與所選區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集的標識符; 把所選區(qū)域中的數(shù)據(jù)拷貝到識別出的卷; 在與所選區(qū)域相關(guān)聯(lián)的元數(shù)據(jù)集中,把識別出的卷指定為數(shù)據(jù)的規(guī)范源;和 遞減相關(guān)聯(lián)的元數(shù)據(jù)集中的引用計數(shù)。
【文檔編號】G06F11/14GK103514114SQ201310254337
【公開日】2014年1月15日 申請日期:2013年6月25日 優(yōu)先權(quán)日:2012年6月25日
【發(fā)明者】C·B·貝肯, J·P·維爾金松 申請人:國際商業(yè)機器公司