背景技術:
計算系統和相關聯的網絡已經徹底改變了人類工作、娛樂和溝通的方式,其預示著現在什么被稱為“信息時代”。因此,在現代,數據管理是重要的領域。數據管理的一個方面是變化跟蹤。例如,通常有幫助的是能夠區(qū)分數據的什么部分在兩個時間實例之間已經變化。
作為示例,當備份存儲系統時,存儲系統的副本被寫入到備份站點。下一次備份存儲系統時,只備份存儲系統的變化的子集,而不是再次復制整個存儲系統。因此,為了執(zhí)行此增量備份,確定存儲系統的哪些部分已經變化是先決條件。此外,當將存儲系統恢復到特定邏輯時間時(例如如在恢復期間),變化跟蹤允許恢復系統確定數據的哪些部分與該特定邏輯時間處的存儲系統的狀態(tài)一致。
本文中所要求保護的主題不限于解決任何缺點或只在諸如上述環(huán)境之類的環(huán)境中操作的實施例。相反,該背景技術僅被提供用于說明可以實踐本文描述的一些實施例的一個示例性技術領域。
技術實現要素:
本文所描述的至少一些實施例涉及跟蹤存儲系統的單元部分之中的變化。作為示例,單元部分可以是文件系統中的文件,或者基于塊的存儲系統中的塊。對于存儲系統的至少一些單元部分中的每一個,邏輯時間標識符與單元部分相關聯并且包括在邏輯時間標識符結構內。
當寫入到包括存儲系統的一個或多個單元部分的特定寫入部分時,針對寫入部分內的任何變化的單元部分更新邏輯時間標識符。此外,一旦(多個)適當的邏輯時間標識符已經變化,該機制就計算與寫入部分的一個或多個部分相關聯的一個或多個邏輯時間標識符的組的冗余數據,比如校驗和。存儲系統的寫入部分被寫入。此外,與該寫入部分相關聯的邏輯時間標識符的組的對應的冗余數據被寫入到邏輯時間標識符結構。
稍后,對于給定的寫入部分,冗余數據被驗證與關聯于寫入部分的一個或多個邏輯時間標識符的組一致還是不一致。如果冗余數據不一致,則當前邏輯時間標識符被分配給邏輯時間標識符中的每一個。因此,不一致的寫入部分被視為最近被寫入。在增量備份期間,邏輯時間標識符用于確定哪些單元部分已經變化,并且從而確定哪些單元部分需要進行備份。由于針對寫入部分的不一致的冗余數據導致針對整個寫入部分的邏輯時間標識符接收當前邏輯時間,這引起該寫入部分的所有單元部分已被新寫入到的備份系統的出現。因此,備份系統引起整個寫入部分被備份,即使其單元部分中的一個或多個可能沒有變化。盡管這也許可能導致在冗余數據失去一致性的罕見情況下比絕對必要更多的備份數據被傳送,但當這樣的情況發(fā)生時,它防止數據不一致。
本發(fā)明內容不旨在標識要求保護的主題的關鍵特征或必要特征,其也不旨在被用于幫助確定要求保護的主題的范圍。
附圖說明
為了描述可以獲得上述及其它優(yōu)點和特征的方式,將通過參考附圖來呈現各種實施例的更具體的描述。理解這些附圖僅僅描繪樣本實施例并且因此不被認為是對本發(fā)明的范圍的限制,所述實施例通過使用附圖以附加的特征和細節(jié)來描述和解釋,在附圖中:
圖1抽象地圖示了一種計算系統,在該計算系統中可以使用本文中所描述的一些實施例;
圖2圖示了根據本文中所描述的原理的操作的時間線,并且包括準備階段、操作階段(包括寫入和驗證操作)以及備份階段;
圖3圖示了用于保持對存儲系統的單元部分之中的變化的跟蹤的方法;
圖4圖示了包括數據存儲裝置和邏輯時間標識符結構的示例存儲系統;
圖5a至5g圖示了依照特定場景的圖4的邏輯時間標識符結構的一個實施例的各種階段,并且其中邏輯時間標識符結構被布置為邏輯時間標識符的線性陣列;
圖6a至6f圖示了依照特定場景的圖4的邏輯時間標識符結構的另一實施例的各種階段,并且其中邏輯時間標識符結構被布置為樹結構;以及
圖7抽象地圖示了可以在存儲系統內操作以準備、操作和備份該存儲系統的各種處理組件。
具體實施方式
本文中所描述的至少一些實施例涉及跟蹤存儲系統的單元部分之中的變化。作為示例,單元部分可以是文件系統中的文件,或者基于塊的存儲系統中的塊。對于存儲系統的至少一些單元部分中的每一個單元部分,邏輯時間標識符與單元部分相關聯并且被包括在邏輯時間標識符結構內。
當寫入到包括存儲系統的一個或多個單元部分的特定寫入部分時,針對寫入部分內的任何變化的單元部分更新邏輯時間標識符。而且,一旦(多個)適當的邏輯時間標識符已經變化,該機制就計算與寫入部分的一個或多個部分相關聯的一個或多個邏輯時間標識符的組的冗余數據,比如校驗和。存儲系統的寫入部分被寫入。此外,與該寫入部分相關聯的邏輯時間標識符的組的對應的冗余數據被寫入到邏輯時間標識符結構。
稍后,對于給定的寫入部分,冗余數據被驗證與關聯于該寫入部分的一個或多個邏輯時間標識符的組一致還是不一致。如果冗余數據不一致,則當前邏輯時間標識符被分配給邏輯時間標識符中的每一個。因此,不一致的寫入部分被視為最近被寫入。在增量備份期間,邏輯時間標識符用于確定哪些單元部分已經變化,并且從而確定哪些單元部分需要備份。由于針對寫入部分的不一致的冗余數據導致針對整個寫入部分的邏輯時間標識符接收當前邏輯時間,這引起該寫入部分的所有單元部分已被新寫入到的備份系統的出現。因此,備份系統引起整個寫入部分被備份,即使單元部分中的一個或多個可能沒有變化。盡管這也許可能導致在冗余數據失去一致性的罕見情況下比絕對必要的更多的備份數據被傳送,但當這樣的情況發(fā)生時,它防止數據不一致。
將關于圖1描述計算系統的一些介紹性討論。然后,將關于隨后的附圖呈現本文描述的實施例的結構和操作。
計算系統現在越來越多地采用多種多樣的形式。計算系統可以例如是手持設備、電器、膝上型計算機、臺式計算機、大型機、分布式計算系統、數據中心,或者甚至是傳統上不被認為是計算系統的設備,比如可穿戴設備(例如眼鏡)。在本說明書和權利要求書中,術語“計算系統”廣義地定義為包括含有下述的任何設備或系統(或其組合):至少一個物理的和有形的處理器、以及能夠在其上具有可由處理器執(zhí)行的計算機可執(zhí)行指令的物理的和有形的存儲器。存儲器可以采取任何形式,并且可以取決于計算系統的性質和形式。計算系統可以分布于網絡環(huán)境中,并且可以包括多個組成的計算系統。
如圖1中所圖示的,在其最基本的配置中,計算系統100典型包括至少一個硬件處理單元102和存儲器104。存儲器104可以是物理系統存儲器,其可以是易失性的、非易失性的或者這二者的某種組合。術語“存儲器”也可以在本文中用于指代諸如物理存儲介質之類的非易失性大容量存儲裝置。如果計算系統是分布式的,則所述處理、存儲器和/或存儲能力也可以是分布式的。如在本文中所使用的,術語“可執(zhí)行模塊”或“可執(zhí)行組件”可以指可以在計算系統上執(zhí)行的軟件對象、例程或方法。本文中描述的不同的組件、模塊、引擎和服務可以被實現為在計算系統上執(zhí)行的對象或進程(例如,實現為單獨的線程)。
在下面的描述中,參考由一個或多個計算系統執(zhí)行的動作來描述實施例。如果這樣的動作在軟件中實現,則響應于已執(zhí)行的計算機可執(zhí)行指令,(執(zhí)行該動作的相關聯的計算系統的)一個或多個處理器指導計算系統的操作。例如,這樣的計算機可執(zhí)行指令可以體現在形成計算機程序產品的一個或多個計算機可讀介質上。這樣的操作的一個示例涉及數據的操縱。計算機可執(zhí)行指令(和所操縱的數據)可以存儲在計算系統100的存儲器104中。計算系統100還可以包含通信信道108,該通信信道108允許計算系統100通過例如網絡110與其它計算系統通信。
本文中描述的實施例可以包括或利用專用或通用計算系統,該專用或通用計算系統包括計算機硬件,諸如例如一個或多個處理器和系統存儲器,如在下面更詳細地討論的。本文描述的實施例還包括用于承載或存儲計算機可執(zhí)行指令和/或數據結構的物理的和其它的計算機可讀介質。這樣的計算機可讀介質可以是可以被通用或專用計算系統訪問的任何可用的介質。存儲計算機可執(zhí)行指令的計算機可讀介質是物理存儲介質。承載計算機可執(zhí)行指令的計算機可讀介質是傳輸介質。因此,以示例而非限制的方式,本發(fā)明的實施例可以包括至少兩種截然不同的計算機可讀介質:存儲介質和傳輸介質。
計算機可讀存儲介質包括ram、rom、eeprom、cd-rom或其它光盤存儲裝置,磁盤存儲裝置或其它磁性存儲設備,或可以用于存儲計算機可執(zhí)行指令或數據結構形式的期望的程序代碼構件并且可由通用或專用計算系統訪問的任何其它物理的和有形的存儲介質。
“網絡”被定義為允許實現在計算系統和/或模塊和/或其它電子設備之間輸送電子數據的一個或多個數據鏈路。當信息通過網絡或另一通信連接(硬布線、無線、或者硬布線或無線的組合)被傳送或提供到計算系統時,計算系統將該連接正確地視為傳輸介質。傳輸介質可以包括網絡和/或數據鏈路,其可以用于承載計算機可執(zhí)行指令或數據結構形式的期望的程序代碼構件并且可以由通用或專用計算系統訪問。上述的組合也應包括在計算機可讀介質的范圍內。
此外,在到達各種計算系統組件時,計算機可執(zhí)行指令或數據結構形式的程序代碼構件可以從傳輸介質自動地傳送到存儲介質(或者反之亦然)。例如,通過網絡或數據鏈路接收的計算機可執(zhí)行指令或數據結構可以在網絡接口模塊(例如“nic”)內的ram中緩沖,并且然后最終傳送到計算系統處的計算系統ram和/或較不易失的存儲介質。因此,應當理解,存儲介質可以被包括在也(或者甚至主要地)利用傳輸介質的計算系統組件中。
計算機可執(zhí)行指令包括例如指令和數據,該指令和數據當在處理器處被執(zhí)行時引起通用計算系統、專用計算系統或專用處理設備執(zhí)行某功能或功能的組。計算機可執(zhí)行指令可以是例如在由處理器直接執(zhí)行之前經歷某種轉變(例如編譯)的二進制數或甚至指令,比如中間格式指令(諸如匯編語言),或者甚至是源代碼。盡管已經用特定于結構特征和/或方法動作的語言描述了主題,但是應當理解,在所附權利要求中限定的主題不一定限于上述所描述的特征或動作。相反,所描述的特征和動作被公開為實現權利要求的示例形式。
本領域技術人員將領會,本發(fā)明可以在具有許多類型的計算系統配置的網絡計算環(huán)境中實踐,該計算系統配置包括個人計算機、臺式計算機、膝上型計算機、消息處理器、手持設備、多處理器系統、基于微處理器的或可編程的消費電子產品、網絡pc、小型計算機、大型計算機、移動電話、pda、尋呼機、路由器、交換機、數據中心、可穿戴設備(例如眼鏡)等。本發(fā)明還可以在分布式系統環(huán)境中實現,在該分布式系統環(huán)境中,通過網絡(由硬布線數據鏈路、由無線數據鏈路,或者由硬布線和無線數據鏈路的組合)鏈接的本地和遠程計算系統兩者都執(zhí)行任務。在分布式系統環(huán)境中,程序模塊可以位于本地和遠程存儲器存儲設備兩者中。
圖2圖示了根據本文中所描述原理的操作的時間線200。首先是準備階段210,在準備階段中計算系統通過設置邏輯時間標識符結構來為保持對存儲系統中的變化進行跟蹤的操作做準備。第二是操作階段220,在操作階段中計算系統從事正常操作并且因此到存儲系統執(zhí)行寫入操作221并且等同寫入到邏輯時間標識符結構,并且然后稍后根據本文中所描述的原理使用邏輯時間標識符結構來驗證222寫入操作的一致性。最后,存在潛在備份階段230,其中邏輯時間標識符結構用于將存儲系統備份到一致狀態(tài)。
更具體地,圖3圖示了用于保持跟蹤存儲系統的部分之中的變化的方法300的流程圖。在準備階段210中,邏輯時間標識符與邏輯時間標識符結構中的每個單元部分相關聯(動作310)。圖4圖示包括邏輯時間標識符結構的示例存儲系統400。將在返回到圖3的方法300的流程圖之前描述圖4的示例。
作為示例,圖4圖示包括數據存儲裝置400a和邏輯時間標識符結構400b的示例存儲系統400。數據存儲裝置400a包括單元部分401a至409a。在一個實施例中,存儲系統400a是文件系統,其中每個單元部分401a至409a是文件。然而,存儲系統400a也可以是基于塊的系統,其中每個單元部分401a至409a是塊。當然,在典型的存儲系統中可能存在更多的單元部分,但是為了清楚起見,圖4的示例保持簡單。
存儲系統400a還包括寫入部分411a至413a。根據本文中描述的最寬的方面,寫入部分可以包括一個或多個單元部分,并且表示單元部分可以如何被寫入到存儲系統中。例如,如果存儲系統400a是文件系統,則典型地一次寫入一個文件。因此,寫入部分可以各自僅包含一個單元部分(即一個文件)。然而,如果存儲系統400a是基于塊的存儲系統,則典型地塊被一次寫入一頁,一頁包含多個塊。在所圖示的示例中,寫入部分411a至413a中的每一個被表示為各自包含三個單元部分。這再次是為了簡單和清楚地描述該示例的目的。在典型的存儲系統中,可能存在數百萬或數十億個單元部分和寫入部分,并且每個寫入部分可能潛在地包含不同數量的單元部分。
邏輯時間標識符結構400b包括與單元部分401a至409a中的每一個分別關聯的邏輯時間標識符401b至409b。圖5a至5g圖示了邏輯時間標識符結構400b的漸進狀態(tài),因為狀態(tài)將在下文描述的特定示例中。在圖5a至5g的示例中,邏輯時間標識符結構包括條目的線性陣列,每個條目是用于存儲系統的相關聯的單元部分的邏輯時間標識符。圖6a至6f圖示了邏輯時間標識符結構400b的漸進狀態(tài),其中使用樹結構來跟蹤冗余數據。圖5a至5d分別對應于圖6a至6d。圖5e和5f對應于圖6e。圖5f和5g分別對應于圖6e和6f。因此,圖5a至5g以及圖6a至6f的示例將在下文描述場景時被頻繁地參考。
在圖5a至5g和圖6a至6f的特定示例中,邏輯時間標識符是序列號,并且邏輯時間由序列號表示,其在每次邏輯時間前進時增加1。例如,在圖5a的狀態(tài)500a中以及在圖6a的狀態(tài)600a中,邏輯時間標識符401b至409b各自被歸零。在一些情況下,邏輯時間標識符可能與實際時間相關聯,使得可以輸入實際時間,并且可以檢索對應的邏輯時間標識符。
再次參考圖4,用于寫入部分411a至413a中的每一個的邏輯時間標識符的組分別具有相關聯的冗余數據411b至413b。冗余數據411b至413b可以用于分別確認對應的寫入部分411a至413a內的邏輯時間標識符的正確性。例如,寫入部分411a與單元部分401a至403a相關聯;并且單元部分401a至403a具有相關聯的邏輯時間標識符401b至403b。因此,冗余數據411b表示可用于驗證邏輯時間標識符401b至403b的精度的冗余數據(例如校驗和)。再者,寫入部分412a與單元部分404a至406a相關聯;并且單元部分404a至406a具有相關聯的邏輯時間標識符404b至406b。因此,冗余數據412b表示可用于驗證邏輯時間標識符404b至406b的精度的冗余數據(例如校驗和)。最后,寫入部分413a與單元部分407a至409a相關聯;并且單元部分407a至409a具有相關聯的邏輯時間標識符407b至409b。因此,冗余數據413b表示可用于驗證邏輯時間標識符407b至409b的精度的冗余數據(例如校驗和)。
在邏輯時間標識符401a至409a在圖5a中被歸零的情況下,冗余數據411b、411b和411c各自表示三個零的冗余數據。在所圖示的圖5a至5g的命名法中數字序列的冗余數據通過使該數字序列用鋸齒狀下劃線圖示來符號化。例如,在圖5a中,冗余數據411b被表示為具有值
圖6a至6f圖示了依照與關于圖5a至5g描述的相同特定場景的圖4的邏輯時間標識符結構的另一實施例的各個階段。然而,在此第二實施例中,邏輯時間標識符結構可以采用樹結構的形式。
在這個樹結構中,如果寫入部分不具有相關聯的邏輯時間標識符的組,則邏輯時間標識符被假定為由樹中的根節(jié)點表示的默認值。如果針對寫入部分的邏輯時間標識符結構的組中的任何一個不同于在根節(jié)點處表示的默認值,則該邏輯時間標識符結構的組將具有它自己的子節(jié)點。如果邏輯時間標識符的組對于給定的寫入部分是相同的,則該子節(jié)點將簡單地保持該值。如果邏輯時間標識符的組中的每一個對于寫入部分并不相同,則子節(jié)點將包含針對邏輯時間標識符系列的冗余數據。
例如,參考圖6a的示例,所有邏輯時間標識符都是默認值零。因此,由于邏輯時間標識符401b至409b的值各自為0,所以只存在表示值0的單個根節(jié)點610。
移動到階段220的寫入操作221,當寫入到包括存儲系統的(多個)單元部分的特定寫入部分時,系統針對已經變化的寫入部分的(多個)單元部分中的任何一個更新邏輯時間標識符(動作320),并且計算與(多個)邏輯時間標識符相關聯的冗余數據(例如校驗和)(動作321),該(多個)邏輯時間標識符與寫入部分的(多個)單元部分相關聯。系統寫入該寫入部分(動作322)并且還寫入相關聯的冗余數據(動作323)。在一些實施例中,冗余數據隨著邏輯時間標識符的更新(動作320)被并行地寫入(動作323)。因此,如果稍后發(fā)現冗余數據與邏輯時間標識符不一致(動作324),則有可能已經發(fā)生電源故障,并且邏輯時間標識符可能被視為是損壞的。這就是為什么邏輯時間標識符在這種情況下被以由應用使用數據測量的當前邏輯時間標記。
例如,參考圖5b的狀態(tài)500b,假設對單元部分402a和403a進行寫入,并且邏輯時間已經前進到時間1。因此,針對寫入部分411a的對應的單元部分401a至403a的邏輯時間標識符401b至403b從000變化為011(動作320)。然后冗余數據411b被重新計算(動作321)為
接下來,參考圖5c的狀態(tài)500c,假設對單元部分403a和404a進行寫入,并且邏輯時間已經前進到時間2。因此,針對寫入部分411a的對應的單元部分401a至403a的邏輯時間標識符401b至403b從011變化為012(動作320)。此外,針對寫入部分412b的對應的單元部分404a至406a的邏輯時間標識符404b至406b從000變化為200(也是動作320)。然后,冗余數據411b被重新計算(動作321)為
接下來,參考圖5d的狀態(tài)500d,假設對單元部分405a和406a進行寫入,并且邏輯時間已經前進到時間3。因此,針對寫入部分412a的對應的單元部分404a至406a的邏輯時間標識符404b至406b從200變化為233(動作320)。然后,冗余數據412b被重新計算(動作321)為
往回參考圖2,在操作階段220期間,可以偶爾執(zhí)行驗證操作222。該驗證操作222可以響應于某些事件執(zhí)行,并且/或者可以周期性地執(zhí)行。作為示例,驗證操作222可以在檢測到在系統中發(fā)生電力循環(huán)之后執(zhí)行。
在驗證操作222期間,可以在寫入操作221之后驗證冗余數據與一個或多個邏輯時間標識符的組不一致(動作324)。如果冗余數據不一致,則針對對應的寫入部分中的所有單元部分,關于當前邏輯時間3執(zhí)行寫入操作221。
例如,參考圖5e的狀態(tài)500e,假設在仍處于邏輯時間3時,冗余數據412b現在具有(由“***”表示的)損壞值(動作324),該損壞值不再與關聯于對應的寫入部分412a的單元部分404a至406a的邏輯時間標識符404b至406b的值233一致。在這種情況下,如在圖5f的狀態(tài)中所表示的,寫入部分412a的對應的單元部分404a至406a的邏輯時間標識符404b至406b各自以當前邏輯時間標識符3重寫(動作325)。然后,新的冗余數據412b被計算為
換句話說,如果冗余數據(例如校驗和)不正確,則整個相關聯的寫入部分被視為好像其具有最新序列號。下次更新寫入部分時,當前的邏輯時間被顯式存儲用于該寫入部分的每個邏輯時間標識符。這意味著如果所述頁以某種方式變得損壞,當用戶請求從時間t(其小于當前時間)變化的集合時,用戶將看到由邏輯時間標識符結構的這部分所表示的一切已經變化,即使此寫入部分的僅一些或者甚至沒有單元部分變化。這比假設沒有變化安全得多(因為不知道什么變化)。
接下來,參考圖5g的狀態(tài)500g,假設對單元部分406a和407a進行寫入,并且邏輯時間已經前進到時間4。因此,寫入部分412a的對應的單元部分404a至406a的邏輯時間標識符404b至406b從333變化到334(動作320)。此外,寫入部分413a的對應的單元部分407a至409a的邏輯時間標識符407b至409b從000變化為400(也是動作320)。然后,冗余數據412b被重新計算(動作321)為
再次參考圖4,現在假設存儲系統400需要被備份。例如,在圖2中,時間線200從正常操作階段220進行到備份階段230。備份系統使用邏輯時間標識符來確定什么單元部分已經變化。例如,參考圖5g和6f,如果最后的備份是在邏輯時間0之后但在邏輯時間1之前進行,則單元部分402a至407a將被備份,因為它們相應的邏輯時間標識符402b至407b各自是邏輯時間1或之后。如果最后的備份在邏輯時間1之后但在邏輯時間2之前進行,則單元部分403a至407a將被備份,因為它們相應的邏輯時間標識符403b至407b各自是邏輯時間2或之后。如果最后的備份是在邏輯時間2之后但在邏輯時間3之前進行,則單元部分404a至407a將被備份,因為它們相應的邏輯時間標識符404b至407b各自是邏輯時間3或之后。如果最后的備份是在邏輯時間3之后但在邏輯時間4之前進行,則單元部分406a和407a將被備份,因為它們相應的邏輯時間標識符406b和407b各自是邏輯時間4或之后。
由于寫入部分的不一致的冗余數據導致整個寫入部分的邏輯時間標識符接收當前邏輯時間,這引起該寫入部分的所有單元部分已被新寫入到的備份系統的出現。因此,備份系統引起整個寫入部分被備份,即使一個或多個單元部分可能沒有變化。盡管這也許可能導致在冗余數據失去一致性的罕見情況下比絕對必要更多的備份數據被傳送,但當這樣的情況發(fā)生時它保護實際數據的一致性。
圖7抽象地圖示了架構700,該架構700包括可以在存儲系統內操作以準備、操作和備份存儲系統的各種處理組件。特別地,準備組件710可以被結構化且被配置成執(zhí)行上述用于準備階段210的操作,寫入組件721可以被結構化且被配置成執(zhí)行寫入操作221,驗證組件722可以被結構化且被配置成執(zhí)行驗證操作222,并且備份組件730可以被結構化且被配置成執(zhí)行上述用于備份階段230的操作。
因此,本文中描述的原理提供了用于保持跟蹤存儲系統的任意版本之間的變化的高效機制。本發(fā)明可以以其它具體形式體現,而不脫離本發(fā)明的精神或基本特性。所描述的實施例將在所有方面都被認為僅是說明性的而非限制性的。因此,本發(fā)明的范圍由所附權利要求而不是前面的描述來指示。進入權利要求的等同物的含義和范圍內的所有變化將被包含在其范圍內。