專利名稱:細粒度快照實現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種快照實現(xiàn)方法,特別涉及一種細粒度的快照實現(xiàn)方法,該方法可達到盡可能小的影響整個文件系統(tǒng)性能的目的,屬于計算機技術(shù)領(lǐng)域。
背景技術(shù):
在當今的計算機操作中,有許多的行為是并發(fā)發(fā)生的;例如,一個計算機可以在同一時刻運行多個程序,每個程序使用不同的數(shù)據(jù);特別是在多用戶的環(huán)境下,多個用戶可以在同一時刻使用計算機的資源。
在上述多用戶環(huán)境下,計算機系統(tǒng)不可能預知用戶的行為,并且一個用戶也很難知道其他用戶當前正在使用哪些計算機資源,對哪些數(shù)據(jù)進行操作;比如一個用戶想要對某個共享數(shù)據(jù)進行備份操作,但是這個用戶很難得知其它的用戶是否正在對備份的目標數(shù)據(jù)進行修改;因此計算機系統(tǒng)必須提供管理功能,保證一個用戶的操作不會影響其他用戶。
這樣就產(chǎn)生了一個問題,當一個文件或目錄正處在被修改的過程中時,其他進程或用戶可能要求對目標數(shù)據(jù)進行備份,系統(tǒng)如何控制這種備份行為呢?如果系統(tǒng)沒有提供保證一個用戶的操作不會影響其他用戶的管理功能,則備份文件有可能包含了其他進程對目標數(shù)據(jù)修改的內(nèi)容,從而導致備份文件不能夠正確反應備份時刻的數(shù)據(jù)狀態(tài)。
為解決上述問題,計算機系統(tǒng)引入了快照技術(shù)(快照文件系統(tǒng)),在備份操作開始之前,對文件系統(tǒng)做一個快照,“凍結(jié)”當前文件系統(tǒng)的數(shù)據(jù)狀態(tài);如圖1所示,任何修改文件系統(tǒng)數(shù)據(jù)的操作都會在目標數(shù)據(jù)被改變之前觸發(fā)寫入時拷貝(COPY-ON-WRITE,簡稱COW)操作,創(chuàng)建一個間接節(jié)點并同時拷貝目標文件的數(shù)據(jù)內(nèi)容和元數(shù)據(jù),備份操作如果發(fā)現(xiàn)目標數(shù)據(jù)有間接節(jié)點,就重定向備份目標到間接節(jié)點,從而保證備份數(shù)據(jù)的有效性和一致性,使備份文件能夠正確的反應備份時刻的數(shù)據(jù)狀態(tài)。
顯而易見,快照文件系統(tǒng)在保證備份文件有效性的同時,降低了文件系統(tǒng)的寫性能。如果一個用戶只想備份當前文件系統(tǒng)的某個目錄或者大文件,則對整個文件系統(tǒng)做快照對于系統(tǒng)的寫性能有較大的降低;且其他進程對備份的目標目錄或文件之外的數(shù)據(jù)的寫操作同樣會觸發(fā)COW操作,既拷貝數(shù)據(jù)又拷貝元數(shù)據(jù),更加降低了系統(tǒng)的寫性能。因此需要一種快照方法保證其他進程在修改目標數(shù)據(jù)之外的文件系統(tǒng)數(shù)據(jù)不會觸發(fā)COW,從而盡可能小地影響文件系統(tǒng)的性能。
名稱為“Method for backing up consistent versions of open files”的美國專利(專利號6,484,186)公開了一種為打開文件作快照的方法;該專利用一個位圖保存對應文件的邏輯塊映像,來標識該邏輯塊是否被修改并且有快照。當對一個文件作了快照之后,對文件的某個塊進行修改,都會引起一系列的操作,首先建立一個新塊,復制原塊的內(nèi)容,給位圖的對應位置置標志,表示該塊有快照,并且保存新塊的塊號;但是,該專利沒有提出如何組織多個新建的復制塊,同時對每一個被修改的塊作COW還會影響系統(tǒng)的寫性能,而且上述專利沒有提出一種可靠的方法可以實現(xiàn)保存文件的多個快照。
發(fā)明內(nèi)容
本發(fā)明的主要目的是提供一種細粒度快照的實現(xiàn)方法;用戶可以對指定目錄或者文件做快照,任何做快照之后的修改目標數(shù)據(jù)的操作都可以恢復到快照時刻的數(shù)據(jù)狀態(tài),同時不影響目標數(shù)據(jù)之外的文件系統(tǒng)數(shù)據(jù)的寫性能。
本發(fā)明的另一目的在于能夠在一個文件系統(tǒng)中獲取并保存文件和目錄的多個快照版本。
本發(fā)明的目的是通過以下技術(shù)方案實現(xiàn)的一種細粒度快照實現(xiàn)方法,應用該方法的文件系統(tǒng)進行的請求處理至少包含以下步驟步驟1、記錄有節(jié)點快照信息的文件系統(tǒng)接收處理請求;步驟2、文件系統(tǒng)根據(jù)處理請求類型和處理請求中涉及的節(jié)點對象類型進行預處理;步驟3、文件系統(tǒng)根據(jù)修改后的處理請求進行處理操作。
上述細粒度快照實現(xiàn)方法中,所述文件系統(tǒng)符合虛擬節(jié)點/虛擬文件系統(tǒng)標準,例如可以為日志文件系統(tǒng)(JFS);在文件系統(tǒng)底層與虛擬文件系統(tǒng)層之間設(shè)有至少一個中間層,所述處理操作在文件系統(tǒng)底層進行。
所述請求處理的步驟2至少包括以下步驟步驟21、中間層接收虛擬文件系統(tǒng)層發(fā)來的處理請求;步驟22、中間層對處理請求的類型進行判斷;如果是修改請求,則執(zhí)行步驟24,如果是讀請求,則執(zhí)行步驟23;步驟23、判斷是否進行節(jié)點的重定向和/或數(shù)組合的操作,如果是,則先進行數(shù)據(jù)重定向和/或數(shù)據(jù)組合,然后執(zhí)行步驟25;否則直接執(zhí)行步驟25;步驟24、判斷是否對變化的數(shù)據(jù)做COW操作;如果是,則先進行COW操作并且復制間接節(jié)點的部分數(shù)據(jù)到主節(jié)點,再執(zhí)行步驟25;否則直接執(zhí)行步驟25;步驟25、中間層將文件處理請求發(fā)送到文件系統(tǒng)底層,由底層文件系統(tǒng)處理具體的請求。
步驟22所述的判斷具體為步驟221對文件處理請求涉及的節(jié)點類型進行判斷,如果該節(jié)點類型為目錄,并且所述的文件處理請求中包含有對當前目錄或者當前目錄的任何子目錄下創(chuàng)建/刪除/修改節(jié)點的操作,則執(zhí)行步驟24;否則執(zhí)行步驟222;步驟222如果該節(jié)點類型為文件,并且所述的文件處理請求中包含對文件進行寫操作或截斷操作,則執(zhí)行步驟24;否則執(zhí)行步驟23。
步驟23所述的判斷具體為步驟231、讀出對應節(jié)點的所有邏輯塊內(nèi)容。
步驟232、讀請求處理函數(shù)判斷當前的節(jié)點是否有邏輯塊為空,如果沒有,則讀出節(jié)點的所有塊組成邏輯上連續(xù)的上下文,執(zhí)行步驟25,如果有邏輯塊為空,則表明此節(jié)點的主節(jié)點有快照間接節(jié)點;步驟233、根據(jù)該節(jié)點擴展屬性中的雙向鏈表查找距離此節(jié)點創(chuàng)建時間之前最近的快照節(jié)點,讀出該節(jié)點對應的邏輯塊;步驟234、判斷該節(jié)點對應的邏輯塊是否為空,如果不為空,則將該邏輯塊與步驟231讀出的塊組成邏輯上連續(xù)的上下文,執(zhí)行步驟25;如果為空,則執(zhí)行步驟233。
上述細粒度快照實現(xiàn)方法所述的快照信息加入在文件系統(tǒng)的文件節(jié)點屬性集合中,該快照信息至少包括快照標志和記錄多個快照的雙向鏈表。
對變化的數(shù)據(jù)做快照之前,文件系統(tǒng)判斷節(jié)點類型,如果節(jié)點是文件,則在節(jié)點的擴展屬性中通過輸入輸出控制系統(tǒng)調(diào)用加入快照信息,如果節(jié)點是目錄,則遍歷目標目錄的所有節(jié)點,并且在該目錄中的每個節(jié)點的擴展屬性中通過輸入輸出控制系統(tǒng)調(diào)用加入快照信息。
上述細粒度快照實現(xiàn)方法中,所述COW操作至少包括以下步驟(一)、文件系統(tǒng)判斷作COW的節(jié)點是否為一個有快照間接節(jié)點的主節(jié)點,并且是刪除操作引起的COW,如果上述條件都滿足,則轉(zhuǎn)到步驟二,否則,轉(zhuǎn)到步驟五;(二)、判斷被刪除的節(jié)點類型,如果是有快照的目錄主節(jié)點,則轉(zhuǎn)步驟四;如果不是則轉(zhuǎn)步驟三;(三)、為這個節(jié)點創(chuàng)建一個臨時節(jié)點,并將主節(jié)點的所有數(shù)據(jù)塊轉(zhuǎn)移到臨時節(jié)點下,通過臨時節(jié)點來釋放主節(jié)點所占有的數(shù)據(jù)塊空間,主節(jié)點僅保存快照節(jié)點的信息,即元數(shù)據(jù),繼續(xù)步驟四;
(四)、為主節(jié)點設(shè)置刪除標記,標識此節(jié)點被刪除,但是不刪除真正的數(shù)據(jù)內(nèi)容,轉(zhuǎn)步驟九(五)、判斷對象是否有間接節(jié)點,如果對象沒有間接節(jié)點,則繼續(xù)下面的步驟六,如果對象有間接節(jié)點,則提示錯誤信息,轉(zhuǎn)步驟九;(六)、創(chuàng)建間接節(jié)點,初始化間接節(jié)點的元數(shù)據(jù),并將此間接節(jié)點插入文件系統(tǒng)節(jié)點哈希(hash)表;(七)、判斷主節(jié)點是否為目錄,如果是目錄,則在間接節(jié)點上復制目錄的數(shù)據(jù)內(nèi)容,否則,轉(zhuǎn)移組織磁盤塊的數(shù)據(jù)結(jié)構(gòu),使主節(jié)點的數(shù)據(jù)內(nèi)容轉(zhuǎn)移到間接節(jié)點上;(八)、設(shè)置主節(jié)點的擴展屬性,將間接節(jié)點的節(jié)點號加入到主節(jié)點維護的所有的間接節(jié)點鏈表(雙向鏈表)中去;(九)、正常退出。
通過上述技術(shù)方案可知,本發(fā)明有如下優(yōu)點1、通過設(shè)在文件系統(tǒng)底層與VFS層之間的中間層對文件系統(tǒng)中的操作集合進行封裝,加入是否需要對變化的數(shù)據(jù)做快照和進行COW操作的判斷、以及重定向和數(shù)據(jù)組合等操作,使得用戶可以對指定目錄或者文件做快照,任何做快照之后的修改目標數(shù)據(jù)的操作都可以恢復到快照時刻的數(shù)據(jù)狀態(tài),同時不影響目標數(shù)據(jù)之外的文件系統(tǒng)數(shù)據(jù)的寫性能。
2、通過在文件系統(tǒng)節(jié)點屬性中加入擴展屬性,使文件系統(tǒng)能夠獲取并保存文件和目錄的多個快照版本,方便多用戶環(huán)境下備份操作的進行。
圖1為現(xiàn)有文件系統(tǒng)COW原理示意圖;圖2為本發(fā)明快照文件系統(tǒng)結(jié)構(gòu)原理圖;圖3為本發(fā)明實施例快照文件系統(tǒng)結(jié)構(gòu)原理圖;
圖4為本發(fā)明實施例jfs擴展屬性塊結(jié)構(gòu)原理圖;圖5為本發(fā)明實施例利用jfs擴展屬性實現(xiàn)多個快照節(jié)點的示意圖;圖6為本發(fā)明實施例數(shù)據(jù)重定向和數(shù)據(jù)組合流程圖;圖7為本發(fā)明實施例快照文件系統(tǒng)分發(fā)快照標志流程圖;圖8為本發(fā)明實施例快照文件系統(tǒng)COW操作流程圖;圖9為本發(fā)明實施例修改文件系統(tǒng)內(nèi)容的事務處理流程圖。
具體實施例方式
以下,結(jié)合具體實施例并參照附圖,對本發(fā)明做進一步的詳細說明。
本發(fā)明所述的備份方法是在符合UNIX虛擬節(jié)點/虛擬文件系統(tǒng)(vnode/VFS)標準的文件系統(tǒng)中實現(xiàn)一個中間層,該層位于文件系統(tǒng)底層與VFS層之間;當系統(tǒng)調(diào)用捕獲到文件系統(tǒng)操作請求時,在VFS層的標準調(diào)用接口調(diào)用具體的文件系統(tǒng)操作之前通過封裝的快照操作來重載原來具體文件系統(tǒng)實現(xiàn)的功能。
VFS層所提供的文件系統(tǒng)的標準接口主要是由節(jié)點操作集合、文件操作集合和地址空間操作集合組成的。所有的文件系統(tǒng)調(diào)用都是由具體的文件系統(tǒng)通過實現(xiàn)這三個操作集合來實現(xiàn)的。
當一個應用程序發(fā)起一個文件系統(tǒng)請求時,快照文件系統(tǒng)處理請求的流程如圖2所示,包含以下步驟步驟一、應用程序?qū)ξ募到y(tǒng)的請求通過系統(tǒng)調(diào)用接口傳遞給系統(tǒng)空間;步驟二、系統(tǒng)調(diào)用接口將請求提交給VFS層的事務處理函數(shù);步驟三、VFS層確定下層文件系統(tǒng)層的處理函數(shù),繼續(xù)將請求提交給下一層處理,即交給快照夾層進行處理;步驟四、快照夾層根據(jù)處理請求類型和處理請求中涉及的節(jié)點對象類型進行預處理,調(diào)用文件系統(tǒng)(JFS,ext2,XFS等)底層的接口;
步驟五、底層文件系統(tǒng)完成真正的事務處理,如I/O請求等。
如圖3所示,本發(fā)明的快照夾層作為文件系統(tǒng)的一個中間層,截獲了VFS層向下提交的處理請求;如果是寫請求,則判斷是否需要做COW操作;如果是讀請求,則判斷是否需要重定向,進行相應的預處理后再將請求提交底層文件系統(tǒng)。
本實施例為應用于日志文件系統(tǒng)(Journal File System,簡稱JFS)的細粒度快照文件系統(tǒng),它需要三個部分支持第一、修改系統(tǒng)的輸入/輸出控制操作,實現(xiàn)分發(fā)快照信息到目標節(jié)點;第二、修改JFS文件系統(tǒng),在底層文件系統(tǒng)JFS實現(xiàn)關(guān)于快照的操作集合,提供給中間層應用接口,用于判斷例如是否重定向或進行COW等操作,主要包括下表所列的函數(shù)
第三、在中間層中實現(xiàn)目錄、文件以及鏈接的節(jié)點操作集合、文件操作集合和地址空間操作集合,要在這三個操作集合中對數(shù)據(jù)產(chǎn)生變化的函數(shù)中加入判斷,判斷是否需要對變化的數(shù)據(jù)做快照和進行COW操作,在讀數(shù)據(jù)的函數(shù)中加入重定向和數(shù)據(jù)組合等操作,這些操作包括
目錄
文件
實現(xiàn)輸入輸出控制系統(tǒng)調(diào)用和快照操作集合的基礎(chǔ)是文件系統(tǒng)實現(xiàn)了文件的擴展屬性。由于原有保存節(jié)點的磁盤結(jié)構(gòu)沒有足夠的空間保存擴展的屬性值,例如一個節(jié)點的多個間接節(jié)點的信息和是否需要做COW的標志都需要保存在磁盤節(jié)點結(jié)構(gòu)的屬性中,而原來定義的磁盤節(jié)點結(jié)構(gòu)的空間無法滿足需要,因此需要將這些屬性設(shè)置在節(jié)點的擴展屬性中。同時文件系統(tǒng)至少要實現(xiàn)擴展屬性的設(shè)置和取擴展屬性的操作(如下表所示),并且要在文件系統(tǒng)初始化的過程中初始化擴展屬性塊對應的緩存池。擴展屬性以一個磁盤塊的形式掛接在原有的節(jié)點屬性上,擴展屬性塊的磁盤結(jié)構(gòu)如圖4所示。如果一個節(jié)點有多個擴展屬性,則這些擴展屬性可以共享一個擴展屬性塊。擴展屬性塊的上部是擴展屬性的描述項,該描述項指示擴展屬性值在擴展屬性塊中的偏移量。擴展屬性描述項從擴展屬性塊頂部向下擴展,而擴展屬性真正的值從塊的底部向上延伸,描述項和擴展屬性之間至少存在4個字節(jié)的空白分界區(qū)域。在本發(fā)明的快照文件系統(tǒng)中,需要兩個擴展屬性snap_flag(快照標志)和snap_ea(記錄多個快照的雙向鏈表)。
如圖5所示,為有兩個快照的主節(jié)點的例子。節(jié)點第一次做過快照1之后,用戶對節(jié)點的邏輯數(shù)據(jù)塊3,4塊進行了修改。在新的節(jié)點中,第1、2、5塊為空,表明這些塊在做過快照之后沒有發(fā)生過修改。在讀當前主節(jié)點的操作發(fā)生時,間接節(jié)點1的第1、2、5塊和主節(jié)點的第3、4塊組成連續(xù)的上下文被讀出;目標文件做過第二次快照后,用戶修改了第5塊;在讀當前主節(jié)點的請求到來時,間接節(jié)點2的第3、4塊加上間接節(jié)點1的第1、2塊和主節(jié)點的第5塊組成邏輯上連續(xù)的文件內(nèi)容被讀出來;當讀第一次快照內(nèi)容的操作發(fā)生時,讀主節(jié)點的操作重定向到間接節(jié)點1,讀出文件的內(nèi)容。當請求讀第二次快照的內(nèi)容時,讀操作發(fā)生重定向、同時組合數(shù)據(jù),將間接節(jié)點1的1、2、5塊和間接節(jié)點2的第3、4塊組成連續(xù)的文件內(nèi)容讀出。
如圖6所示,重定向和數(shù)據(jù)組合主要包括以下步驟
一、判斷讀請求是讀快照節(jié)點還是主節(jié)點,將對應的節(jié)點作為參數(shù)提交給讀請求處理函數(shù);二、讀請求處理函數(shù)判斷當前的節(jié)點是否有邏輯塊為空,如果沒有,則讀出節(jié)點的所有塊組成邏輯上連續(xù)的上下文,返回給讀操作,如果有邏輯塊為空,則表明此節(jié)點的主節(jié)點有快照間接節(jié)點;三、根據(jù)該節(jié)點擴展屬性中的雙向鏈表查找距離此節(jié)點創(chuàng)建時間之前最近的快照節(jié)點,讀出該節(jié)點對應的邏輯塊;四、判斷該節(jié)點對應的邏輯塊是否為空,如果不為空,則將該邏輯塊與之前讀出的塊組成邏輯上連續(xù)的上下文,返回讀操作;如果為空,則執(zhí)行步驟三。
對于文件系統(tǒng)的不同類型的數(shù)據(jù),如目錄和文件等,修改的含義是不一樣的。對于目錄而言,在當前目錄下或子目錄下、以及間接子目錄下創(chuàng)建/刪除節(jié)點和對目錄下的節(jié)點的修改都意味著目錄發(fā)生了修改;而對于文件而言,只有當文件發(fā)生寫操作或者被截斷時,才意味著文件發(fā)生了修改;因此要對文件和目錄分別加以處理,而且很明顯,對目錄的處理要復雜的多。
如果用戶對指定目錄做快照,需要通知此目錄下的所有對象包括間接對象它們的任何改變都會引起COW操作。具體的實現(xiàn)方法是做快照的時刻,利用輸入輸出控制系統(tǒng)調(diào)用,遍歷目標目錄的所有節(jié)點,并且在每個節(jié)點的擴展屬性中加入快照的信息,例如快照時間或快照索引號。
如圖7所示,為快照文件系統(tǒng)的輸入輸出控制(ioctl)系統(tǒng)調(diào)用分發(fā)快照標志的流程,包括以下步驟一、在目標節(jié)點的擴展屬性中加入塊照標志;二、判斷目標節(jié)點是否目錄,如果是目錄,轉(zhuǎn)步驟三;如果不是目錄則轉(zhuǎn)步驟七;三、讀目錄中的項,置擴展屬性快照標志;四、判斷該目錄項是否是目錄,如果是目錄,轉(zhuǎn)步驟五;如果不是目錄則轉(zhuǎn)步驟六;五、遞歸調(diào)用此流程設(shè)置此目錄項的快照標志;六、本級目錄的目錄項是否已讀完,如果是則轉(zhuǎn)步驟七,否則轉(zhuǎn)步驟三讀下一項;七、函數(shù)返回。
對于目標節(jié)點是目錄,目錄系統(tǒng)通過調(diào)用readdir/getdents調(diào)用函數(shù)VFS_readdir,實現(xiàn)分發(fā)快照標志。VFS_readdir傳遞一個函數(shù)指針filldir_t作為參數(shù),在這個filldir_t的函數(shù)中實現(xiàn)設(shè)置擴展屬性快照標志的操作,當讀目錄操作讀出一個目錄項時,用設(shè)置快照標志的操作替代原來讀目錄的操作中將目錄項拷貝到用戶空間的操作。
所有會引起文件系統(tǒng)數(shù)據(jù)修改的操作在執(zhí)行前,都會根據(jù)節(jié)點擴展屬性中的快照屬性判斷是否需要做COW;如果是對做過快照的目錄進行結(jié)構(gòu)修改,如刪除/添加節(jié)點,則系統(tǒng)拷貝所添加/刪除節(jié)點的直接父目錄的數(shù)據(jù)和元數(shù)據(jù);如果是對節(jié)點的修改,COW的實現(xiàn)方法同下面所述做文件的快照后所進行COW操作一樣;如果不是對目標目錄下的對象作修改,就不會發(fā)生COW操作。
如圖8所示,為文件系統(tǒng)COW的具體實現(xiàn),jfs文件系統(tǒng)創(chuàng)建間接節(jié)點的程序流程如下(一)、文件系統(tǒng)判斷作COW的節(jié)點是否為一個有快照間接節(jié)點的主節(jié)點,并且是刪除操作引起的COW,如果上述條件都滿足,則轉(zhuǎn)到步驟二,否則,轉(zhuǎn)到步驟五;(二)、判斷被刪除的節(jié)點類型,如果是有快照的目錄主節(jié)點,則轉(zhuǎn)步驟四;如果不是則轉(zhuǎn)步驟三;(三)、為這個節(jié)點創(chuàng)建一個臨時節(jié)點,并將主節(jié)點的所有數(shù)據(jù)塊轉(zhuǎn)移到臨時節(jié)點下,通過臨時節(jié)點來釋放主節(jié)點所占有的數(shù)據(jù)塊空間,主節(jié)點僅保存快照節(jié)點的信息,即元數(shù)據(jù),繼續(xù)步驟四;(四)、為主節(jié)點設(shè)置刪除標記,標識此節(jié)點被刪除,但是不刪除真正的數(shù)據(jù)內(nèi)容,轉(zhuǎn)步驟九(五)、判斷對象是否有間接節(jié)點,如果對象沒有間接節(jié)點,則繼續(xù)下面的步驟六,如果對象有間接節(jié)點,則提示錯誤信息,轉(zhuǎn)步驟九;(六)、創(chuàng)建間接節(jié)點,初始化間接節(jié)點的元數(shù)據(jù),并將此間接節(jié)點插入文件系統(tǒng)節(jié)點哈希(hash)表;(七)、判斷主節(jié)點是否是目錄,如果不是目錄,則轉(zhuǎn)移組織磁盤塊的數(shù)據(jù)結(jié)構(gòu),使主節(jié)點的數(shù)據(jù)內(nèi)容轉(zhuǎn)移到間接節(jié)點上,對于以樹形式組織文件磁盤塊的文件系統(tǒng),只需要轉(zhuǎn)移樹結(jié)構(gòu)的根,特別對于JFS,則只需轉(zhuǎn)移文件B+樹的根,而對于以鏈表間接塊組織磁盤塊的文件系統(tǒng)、則轉(zhuǎn)移所有邏輯塊號對應的物理磁盤塊號;如果主節(jié)點是目錄,則在間接節(jié)點上復制目錄的數(shù)據(jù)內(nèi)容,對于JFS,就是復制目錄的B+樹;(八)、設(shè)置主節(jié)點的擴展屬性,將間接節(jié)點的節(jié)點號加入到主節(jié)點維護的所有的間接節(jié)點鏈表(雙向鏈表)中去;(九)、程序正常退出。
用戶可以對一個目錄或者文件做多個快照,文件系統(tǒng)維護一張快照列表,包括快照時間和快照對象。在每個做過COW操作的節(jié)點的擴展屬性中保存著一個雙向鏈表,用于維護這個對象的多個快照,鏈表中保存主節(jié)點的每個間接節(jié)點的節(jié)點號。
如圖9所示,描述了修改文件系統(tǒng)內(nèi)容的事務處理流程。
一、判斷對于主節(jié)點是否需要進行COW操作,具體是檢查目標節(jié)點的擴展屬性是否有快照標志且快照的時間是否在文件最后一次被修改之后;如果條件成立則說明此節(jié)點或此節(jié)點的直接或間接父目錄剛剛做過快照,修改操作將引起COW操作,轉(zhuǎn)步驟二;否則轉(zhuǎn)步驟五;二、為主節(jié)點作COW操作;三、判斷被修改的目標主節(jié)點是否目錄,如果是目錄轉(zhuǎn)步驟五,否則轉(zhuǎn)步驟四;四、進行相應的復制操作,繼續(xù)步驟五;五、修改主節(jié)點文件系統(tǒng)對象;六、處理結(jié)束。
對于步驟四需要說明的是,根據(jù)之前所述的COW操作流程可以知道,對于文件而言,進行COW之后,主節(jié)點的數(shù)據(jù)內(nèi)容被截斷了,即修改過的數(shù)據(jù)塊內(nèi)容被轉(zhuǎn)移到間接節(jié)點中;當該文件再次被修改,例如在寫操作之前,還要進行相應的復制操作以確保修改后的每一個數(shù)據(jù)塊都是完整的,即先將主節(jié)點要修改的數(shù)據(jù)塊對應的數(shù)據(jù)內(nèi)容從間接節(jié)點復制回來,再進行修改;特別是對于某些數(shù)據(jù)塊,如果不是修改全部內(nèi)容,而只是修改部分內(nèi)容,則為了確保被修改的數(shù)據(jù)塊的內(nèi)容完整,一定要進行上述復制操作。因為每次寫文件的時候修改的內(nèi)容不一定是以塊為邊界對齊的,即修改不是正好從塊的起始位置開始或恰恰到塊的終止位置結(jié)束,所以每次在真正修改數(shù)據(jù)之前最多復制2個磁盤塊(修改的起始塊和最后一塊)的內(nèi)容,以確保被修改的起始數(shù)據(jù)塊和終止數(shù)據(jù)塊的內(nèi)容完整。
最后所應說明的是,以上實施例僅用以說明本發(fā)明的技術(shù)方案而非限制,盡管參照較佳實施例對本發(fā)明進行了詳細說明,本領(lǐng)域的普通技術(shù)人員應當理解,可以對本發(fā)明的技術(shù)方案進行修改或者等同替換,而不脫離本發(fā)明技術(shù)方案的精神和范圍,其均應涵蓋在本發(fā)明的權(quán)利要求范圍當中。
權(quán)利要求
1.一種細粒度快照實現(xiàn)方法,其特征在于應用該方法的文件系統(tǒng)進行的請求處理至少包含以下步驟步驟1、記錄有節(jié)點快照信息的文件系統(tǒng)接收處理請求;步驟2、文件系統(tǒng)根據(jù)處理請求類型和處理請求中涉及的節(jié)點對象類型進行預處理;步驟3、文件系統(tǒng)根據(jù)處理請求進行處理操作。
2.根據(jù)權(quán)利要求1所述的細粒度快照實現(xiàn)方法,其特征在于所述文件系統(tǒng)符合虛擬節(jié)點/虛擬文件系統(tǒng)標準,在文件系統(tǒng)底層與虛擬文件系統(tǒng)層之間設(shè)有至少一個中間層,所述處理操作在文件系統(tǒng)底層進行。
3.根據(jù)權(quán)利要求2所述的細粒度快照實現(xiàn)方法,其特征在于所述的請求處理至少包括步驟21、中間層接收虛擬文件系統(tǒng)層發(fā)來的處理請求;步驟22、中間層對處理請求的類型進行判斷;如果是修改請求,則執(zhí)行步驟24,如果是讀請求,則執(zhí)行步驟23;步驟23、判斷是否進行節(jié)點的重定向和/或數(shù)組合的操作,如果是,則先進行數(shù)據(jù)重定向和/或數(shù)據(jù)組合,然后執(zhí)行步驟25;否則直接執(zhí)行步驟25;步驟24、判斷是否對變化的數(shù)據(jù)做COW操作;如果是,則先進行COW操作并且復制間接節(jié)點的部分數(shù)據(jù)到主節(jié)點,再執(zhí)行步驟25;否則直接執(zhí)行步驟25;步驟25、中間層將文件處理請求發(fā)送到文件系統(tǒng)底層,由底層文件系統(tǒng)處理具體的請求。
4.根據(jù)權(quán)利要求3所述的細粒度快照實現(xiàn)方法,其特征在于步驟22所述的判斷具體為步驟221對文件處理請求涉及的節(jié)點類型進行判斷,如果該節(jié)點類型為目錄,并且所述的文件處理請求中包含有對當前目錄或者當前目錄的任何子目錄下創(chuàng)建/刪除/修改節(jié)點的操作,則執(zhí)行步驟24;否則執(zhí)行步驟222;步驟222如果該節(jié)點類型為文件,并且所述的文件處理請求中包含對文件進行寫操作或截斷操作,則執(zhí)行步驟24;否則執(zhí)行步驟23。
5.根據(jù)權(quán)利要求3所述的細粒度快照備份方法,其特征在于步驟23所述的判斷具體為步驟231、讀出對應節(jié)點的所有邏輯塊內(nèi)容;步驟232、讀請求處理函數(shù)判斷當前的節(jié)點是否有邏輯塊為空,如果沒有,則讀出節(jié)點的所有塊,組成邏輯上連續(xù)的上下文,執(zhí)行步驟25,如果有邏輯塊為空,則執(zhí)行步驟233;步驟233、根據(jù)該節(jié)點擴展屬性中的雙向鏈表查找距離此節(jié)點創(chuàng)建時間之前最近的快照節(jié)點,讀出該節(jié)點對應的邏輯塊;步驟234、判斷該節(jié)點對應的邏輯塊是否為空,如果不為空,則將該邏輯塊與步驟231讀出的塊組成邏輯上連續(xù)的上下文,執(zhí)行步驟25;如果為空,則執(zhí)行步驟233。
6.根據(jù)權(quán)利要求3所述的細粒度快照實現(xiàn)方法,其特征在于所述快照信息加入在文件系統(tǒng)的文件節(jié)點屬性集合中,該快照信息至少包括快照標志和記錄多個快照的雙向鏈表。
7.根據(jù)權(quán)利要求6所述的細粒度快照實現(xiàn)方法,其特征在于對變化的數(shù)據(jù)節(jié)點做快照之前,文件系統(tǒng)判斷節(jié)點類型,如果節(jié)點是文件,則在節(jié)點的擴展屬性中通過輸入輸出控制系統(tǒng)調(diào)用加入快照信息,如果節(jié)點是目錄,則遍歷目標目錄的所有節(jié)點,并且在該目錄中的每個節(jié)點的擴展屬性中通過輸入輸出控制系統(tǒng)調(diào)用加入快照信息。
8.根據(jù)權(quán)利要求3述的細粒度快照實現(xiàn)方法,其特征在于所述COW操作至少包括以下步驟(一)、文件系統(tǒng)判斷作COW的節(jié)點是否為一個有快照間接節(jié)點的主節(jié)點,并且是刪除操作引起的COW,如果上述條件都滿足,則轉(zhuǎn)到步驟(二),否則,轉(zhuǎn)到步驟五;(二)、判斷被刪除的節(jié)點類型,如果是有快照的目錄主節(jié)點,則轉(zhuǎn)步驟四;如果不是則轉(zhuǎn)步驟三;(三)、為這個節(jié)點創(chuàng)建一個臨時節(jié)點,并將主節(jié)點的所有數(shù)據(jù)塊轉(zhuǎn)移到臨時節(jié)點下,通過臨時節(jié)點來釋放主節(jié)點所占有的數(shù)據(jù)塊空間,主節(jié)點僅保存快照節(jié)點的信息,即元數(shù)據(jù),繼續(xù)步驟四;(四)、為主節(jié)點設(shè)置刪除標記,標識此節(jié)點被刪除,但是不刪除真正的數(shù)據(jù)內(nèi)容,轉(zhuǎn)步驟九(五)、判斷對象是否有間接節(jié)點,如果對象沒有間接節(jié)點,則繼續(xù)下面的步驟六,如果對象有間接節(jié)點,則提示錯誤信息,轉(zhuǎn)步驟九;(六)、創(chuàng)建間接節(jié)點,初始化間接節(jié)點的元數(shù)據(jù),并將此間接節(jié)點插入文件系統(tǒng)節(jié)點哈希(hash)表;(七)、判斷主節(jié)點是否為目錄,如果是目錄,則在間接節(jié)點上復制目錄的數(shù)據(jù)內(nèi)容,否則,轉(zhuǎn)移組織磁盤塊的數(shù)據(jù)結(jié)構(gòu),使主節(jié)點的數(shù)據(jù)內(nèi)容轉(zhuǎn)移到間接節(jié)點上;(八)、設(shè)置主節(jié)點的擴展屬性,將間接節(jié)點的節(jié)點號加入到主節(jié)點維護的所有的間接節(jié)點鏈表(雙向鏈表)中去;(九)、正常退出。
9.根據(jù)權(quán)利要求1或2或3或6或7或8所述的細粒度快照實現(xiàn)方法,其特征在于所述的文件系統(tǒng)為日志文件系統(tǒng)(JFS)。
全文摘要
本發(fā)明公開了一種細粒度快照實現(xiàn)方法,通過設(shè)在文件系統(tǒng)底層與VFS層之間的中間層對文件系統(tǒng)中的操作集合進行封裝,加入是否需要對變化的數(shù)據(jù)做快照和進行COW操作的判斷以及重定向和數(shù)據(jù)組合等操作,使得用戶可以對指定目錄或者文件做快照,任何做快照之后的修改目標數(shù)據(jù)的操作都可以恢復到快照時刻的數(shù)據(jù)狀態(tài),同時不影響目標數(shù)據(jù)之外的文件系統(tǒng)數(shù)據(jù)的寫性能;通過在文件系統(tǒng)節(jié)點屬性中加入擴展屬性,使文件系統(tǒng)能夠獲取并保存文件和目錄的多個快照版本,方便了多用戶環(huán)境下備份操作的進行。
文檔編號G06F17/30GK1553339SQ0313812
公開日2004年12月8日 申請日期2003年6月5日 優(yōu)先權(quán)日2003年6月5日
發(fā)明者吳江, 唐杰, 李麗虹, 吳 江 申請人:聯(lián)想(北京)有限公司