
本公開涉及一種從現有數據文件構建新數據文件的方法、系統及計算機可讀存儲介質。
背景技術:
:在計算機系統中,上層用戶文件可以在底層以數據文件的形式存儲。每個用戶文件可以包括一個或多個數據塊,同一用戶文件和/或不同用戶文件中的相同數據塊可以對應于數據文件中的同一個數據塊。存儲數據塊的底層數據文件在上層可能被多個用戶文件交叉引用。因此,當對用戶文件進行讀、寫、創建、或刪除操作時,需要對該用戶文件所引用的數據文件進行訪問。例如,當刪除用戶文件時,可能涉及數據文件的重新構建。技術實現要素:本公開的一個方面提供了一種從現有數據文件構建新數據文件的方法,上述現有數據文件包括一個或多個數據塊,上述方法包括:獲取現有數據文件中要保留的數據塊的描述信息和上述新數據文件的描述信息;根據上述要保留的數據塊的描述信息確定要保留的數據塊的塊地址;以及根據上述要保留的數據塊的塊地址和上述新數據文件的描述信息構建新數據文件的元數據,上述新數據文件包括上述要保留的數據塊。可選地,上述要保留的數據塊的描述信息包括:上述要保留的數據塊的長度和在上述現有文件中的地址偏移量;以及/或者上述要保留的數據塊的塊地址??蛇x地,上述新數據文件的描述信息包括上述新數據文件的inode和全路徑名稱;以及上述構建新數據文件的元數據包括將上述新數據文件的inode和全路徑名稱與上述要保留的數據塊的塊地址相關聯??蛇x地,上述新數據文件的描述信息包括上述新數據文件的inode和全路徑名稱;以及將上述要保留的數據塊的塊地址與上述新數據文件的inode和文件名相關聯包括:根據上述要保留的數據塊的塊地址確定上述要保留的數據塊的長度和在新數據文件中的地址偏移量;以及將上述新數據文件的inode和全路徑名稱與上述要保留的數據塊的長度和在新數據文件中的地址偏移量相關聯??蛇x地,在構建上述新數據文件的元數據之后:刪除上述現有數據文件的元數據;并且/或者刪除上述現有數據文件中不需要保留的數據塊內容;并且/或者將上述現有數據文件中不需要保留的數據塊標記為可刪除。可選地,上述方法由內核態文件系統執行。可選地,還包括接收擴展接口調用請求,上述擴展接口調用請求中包含上述要保留的數據塊的描述信息和上述新數據文件的描述信息。本公開的另一方面提供了一種從現有數據文件構建新數據文件的系統,上述現有數據文件包括一個或多個數據塊,上述系統包括:獲取模塊,獲取現有數據文件中要保留的數據塊的描述信息和上述新數據文件的描述信息;確定模塊,根據上述要保留的數據塊的描述信息確定要保留的數據塊的塊地址;以及構建模塊,根據上述要保留的數據塊的塊地址和上述新數據文件的描述信息構建新數據文件的元數據,上述新數據文件包括上述要保留的數據塊。本公開的另一方面還提供了另一種從現有數據文件構建新數據文件的系統,上述現有數據文件包括一個或多個數據塊,上述系統包括:存儲器,存儲有可執行指令;以及處理器,運行上述可執行指令,以執行上述從現有數據文件構建新數據文件的方法。本公開的另一方面提供了一種計算機可讀存儲介質,包含用于執行上述從現有數據文件構建新數據文件的方法的可執行指令。附圖說明為了更完整地理解本公開及其優勢,現在將參考結合附圖的以下描述,其中:圖1示意性示出了從數據文件中刪除數據塊的過程示意圖;圖2a示意性示出了根據本公開實施例從數據文件中刪除數據塊的過程示意圖;圖2b示意性示出了根據本公開實施例的從現有數據文件構建新數據文件的方法的流程圖;圖2c示意性示出了根據本公開另一實施例的從現有數據文件構建新數據文件的方法的流程圖;圖3示意性示出了根據本公開實施例的塊地址信息表;圖4示意性示出了根據本公開實施例的從現有數據文件構建新數據文件的系統的框圖;以及圖5示意性示出了根據本公開實施例的另一種從現有數據文件構建新數據文件的系統的框圖。具體實施方式為解決上述在內的問題,提高用戶的使用體驗,根據結合附圖對本公開示例性實施例的以下詳細描述,本公開的其它方面、優勢和突出特征對于本領域技術人員將變得顯而易見。在本公開中,術語“包括”和“含有”及其派生詞意為包括而非限制;術語“或”是包含性的,意為和/或。在本說明書中,下述用于描述本公開原理的各種實施例只是說明,不應該以任何方式解釋為限制公開的范圍。參照附圖的下述描述用于幫助全面理解由權利要求及其等同物限定的本公開的示例性實施例。下述描述包括多種具體細節來幫助理解,但這些細節應認為僅僅是示例性的。因此,本領域普通技術人員應認識到,在不背離本公開的范圍和精神的情況下,可以對本文中描述的實施例進行多種改變和修改。此外,為了清楚和簡潔起見,省略了公知功能和結構的描述。此外,貫穿附圖,相同參考數字用于相似功能和操作。本公開實施例提供了一種從現有數據文件構建新數據文件的方法,上述現有數據文件包括一個或多個數據塊。上述方法包括獲取現有數據文件中要保留的數據塊的描述信息和上述新數據文件的描述信息,根據上述要保留的數據塊的描述信息確定要保留的數據塊的塊地址,根據上述要保留的數據塊的塊地址和上述新數據文件的描述信息構建新數據文件的元數據,上述新數據文件包括上述要保留的數據塊。圖1示意性示出了在刪除用戶文件時構建新的數據文件的示意圖。圖1示意性示出了從數據文件中刪除數據塊的過程示意圖。如圖1所示,用戶文件a、用戶文件b和用戶文件c是三個上層用戶文件。其中,用戶文件a包括數據塊blk1、數據塊blk2、和數據塊blk3,用戶文件b包括數據塊blk4、數據塊blk1、和數據塊blk3,用戶文件c包括數據塊blk5、數據塊blk2、和數據塊blk6。在底層的數據文件1中,相同的用戶文件數據塊可以對應于同一個數據文件數據塊。例如,如圖1所示,數據文件1包括數據塊dblk1~數據塊dblk6,其中,數據塊dblk1對應于用戶文件a的數據塊blk1和用戶文件b的數據塊blk1,數據塊dblk2對應于用戶文件a的數據塊blk2和用戶文件c的數據塊blk2,數據塊dblk3對應于用戶文件a的數據塊blk3和用戶文件b的數據塊blk3。另外,如圖1所示,數據塊dblk4對應于用戶文件b的數據塊blk4,數據塊dblk5對應于用戶文件c的數據塊blk5,數據塊dblk6對應于用戶文件c的數據塊blk6。對于數據文件1中的每個數據塊,可以根據其被用戶文件的引用情況而維護一個引用計數。例如,數據塊dblk1被用戶文件a和用戶文件b各引用一次,則其引用計數為2。類似地,數據塊dblk2的引用計數為2,數據塊dblk3的引用計數為2,數據塊dblk4的引用計數為1,數據塊dblk5的引用計數為1,數據塊dblk6的引用計數為1。當刪除用戶文件時,數據文件1中的相應數據塊的引用計數減少。例如,當刪除用戶文件a和用戶文件b時,數據文件1中的數據塊dblk1的引用計數變為2-1-1=0,數據塊dblk2的引用計數變為2-1=1,數據塊dblk3的引用計數變為2-1-1=0,數據塊dblk4的引用計數變為1-1=0,數據塊dblk5和數據塊dblk6的引用計數不變,仍為1。對于引用計數為0的數據塊,系統可以將其存儲空間回收,并基于其余數據塊形成一個新的數據文件2。如圖1所示,數據文件2中包括引用計數不為0的數據塊dblk2、數據塊dblk5、和數據塊dblk6??梢酝ㄟ^將引用計數不為0的數據塊讀取出來并寫入到一個新的數據文件中,來形成數據文件2。然而,這種做法會產生大量的數掘塊讀寫操作,導致數據讀寫過程慢,數據處理效率低下。圖2a示意性示出了根據本公開實施例從數據文件中刪除數據塊的過程示意圖。如圖2a所示,可以形成包括引用計數不為0的數據塊dblk2、數據塊dblk5、和數據塊dblk6的新的數據文件3,但數據塊dblk2、數據塊dblk5、和數據塊dblk6的實際存儲位置并不改變,而是將數據塊dblk2、數據塊dblk5、和數據塊dblk6的塊地址與數據文件3相關聯,例如基于數據塊dblk2、數據塊dblk5、和數據塊dblk6的塊地址和數據文件3的描述信息形成數據文件3的元數據。數據文件3的描述信息例如可以包括數據文件3的全路徑名稱和inode等等,但不限于此。如圖2a所示,黑色背景的方框對應于被刪除的數據塊dblk1、dblk3和dblk4。圖2b示意性示出了根據本公開實施例的從現有數據文件構建新數據文件的方法的流程圖。如圖2b所示,從現有數據文件構建新數據文件的方法包括操作s201~s203,其中,現有數據文件包括一個或多個數據塊。在操作s201,獲取現有數據文件中要保留的數據塊的描述信息和新數據文件的描述信息。在操作s202,根據上述要保留的數據塊的描述信息確定要保留的數據塊的塊地址。在操作s203,根據上述要保留的數據塊的塊地址和上述新數據文件的描述信息構建新數據文件的元數據,上述新數據文件包括上述要保留的數據塊。根據本公開的實施例,當要從現有數據文件刪除部分數據塊(例如,引用計數為0的數據塊)時,可以通過使用要保留的數據塊的塊地址和新數據文件的描述信息構建新數據文件的元數據,來把要保留的數據塊關聯到新數據文件,來創建新數據文件。根據本公開的實施例,元數據可以包括數據文件的各種描述性信息,可以用于識別數掘文件、評價數據文件、和/或追蹤數據文件在使用過程中的變化,等等。根據本公開的實施例,數據文件的描述信息可以包括能夠用于識別和/或對新數據文件尋址的任何信息,例如新數據文件的inode和全路徑名稱等等,但不限于此。以此方式構建的新數據文件的元數據中不包括那些要刪除的數據塊的塊地址,即新數據文件中不包括那些要刪除的數據塊,從而實現了對數據塊的刪除。這個過程并不改變數據文件中數據塊的存儲位置,而是將其存儲位置與新數據文件相關聯,可以避免大量數據塊讀寫操作,顯著節約了系統資源,提高了數據處理效率。例如,參考圖2a所示,可以通過基于引用計數不為0的數據塊dblk2、數據塊dblk5、和數據塊dblk6的塊地址和新的數據文件3的描述信息,來構建數據文件3的元數據。這樣構建數據文件3,可以不必將數據塊dblk2、數據塊dblk5、和數據塊dblk6讀取出來,再寫入數據文件3,而只需要在數據文件3的元數據中記錄數據塊dblk2、數據塊dblk5、和數據塊dblk6的存儲位置與數據文件3的關聯關系。根據本公開的實施例,要保留的數據塊的描述信息可以包括要保留的數據塊的長度和在所述現有文件中的地址偏移量,以及/或者所述要保留的數據塊的塊地址。根據本公開的實施例,要保留的數據塊的描述信息可以包括要保留的數據塊的長度和在現有數據文件中的地址偏移量。通過要保留的數據塊的長度和在現有數據文件中的地址偏移量,可以確定要保留的數據塊的塊地址。表1示意性示出了根據本公開實施例的數據塊描述信息,其中提供了圖2a所示示例中各數據塊的數據塊長度和在現有數據文件中的地址偏移量。表1數據塊數據塊長度地址偏移量dblk1length1offset1dblk2length2offset2dblk3length3offset3dblk4length4offset4dblk5length5offset5dblk6length6offset6根據本公開的實施例,每個數據塊的描述信息可以包括該數據塊的長度。每個數據塊可以具有相同或不同的長度。例如,每個數據塊可以具有一個或多個固定長度的數據子塊,該數據塊的長度可以由其包含的數據子塊的個數來描述?;蛘撸總€數據塊的長度也可以由其包含的字節數或比特數來描述。根據本公開的實施例,每個數據塊的描述信息還可以包括該數據塊在其數據文件中的地址偏移量。例如,每個數據文件可以具有一個對應的參考地址,每個數據塊的地址偏移量描述了該數據塊的存儲地址相對于該參考地址的偏移量。例如,如果每個數據塊的長度是已知的,則可以通過一個地址來尋址整個數據塊,則該地址偏移量可以是這一個地址相對于參考地址的偏移量。根據數據塊的長度和地址偏移量,可以確定該數據塊的塊地址。塊地址是該數據塊的實際物理存儲地址,根據塊地址就可以直接訪問數據塊的存儲地址?;蛘?,根據本公開的實施例,要保留的數據塊的描述信息還可以包括所要保留的數據塊的塊地址。根據本公開的實施例,通過要保留的數據塊的長度和在現有文件中的地址偏移量可以確定要保留的數據塊的塊地址,或者,也可以直接獲取要保留的數據塊的塊地址作為保留的數據塊的描述信息。當然,要保留的數據塊的描述信息也可以包括要保留的數據塊的長度和在所述現有文件中的地址偏移量,以及要保留的數據塊的塊地址。在本公開的實施例中,新數據文件的描述信息包括能夠用于識別和/或對新數據文件尋址的任何信息,例如新數據文件的inode和全路徑名稱等等,但不限于此。其中,inode可以包括與文件相關的重要信息,例如存放目錄的基本信息,包括時間、文件名、使用者、和/或群組等。數據文件的全路徑名稱描述了可以尋址到該數據文件的全部路徑。根據本公開的實施例,構建新數據文件的元數據包括將所述新數據文件的inode和全路徑名稱與所述要保留的數據塊的塊地址相關聯。例如,可以在新數據文件的元數據中記錄要保留的數據塊的塊地址、以及新數據文件的inode和全路徑名稱?;蛘?,可以在新數據文件的元數據中記錄要保留的數據塊的地址偏移量、數據塊長度、以及新數據文件的inode和全路徑名稱。根據本公開的實施例,可以根據數據塊的塊地址及新數據文件的參考地址確定其地址偏移量。根據本公開的實施例,還可以根據數據塊的塊地址確定數據塊的長度。通過將要保留的數據塊的塊地址與新數據文件的描述信息關聯起來,不需改變數據文件中數據塊的存儲位置,而是將其存儲位置與新數據文件相關聯,可以避免大量數據塊讀寫操作,顯著節約了系統資源,提高了數據處理效率。根據本公開的實施例,在構建上述新數據文件的元數據之后,可以刪除現有數據文件的元數據。根據本公開的實施例,還可以刪除現有數據文件中不需要保留的數據塊內容或者將現有數據文件中不需要保留的數據塊標記為可刪除。這樣,原本存儲不需要保留的數據塊內容的存儲空間可以用于存儲其他數據。圖2c示意性示出了根據本公開另一實施例的從現有數據文件構建新數據文件的方法的流程圖。如圖2c所示,根據本公開另一實施例從現有數據文件構建新數據文件的方法包括操作s301~s307。在操作s301,獲取需要整理的數據文件,該數據文件中可以包括一個或多個數據塊。在操作s302,獲取數據塊描述信息和新數掘文件的描述信息。數據塊描述信息例如可以是數據塊索引。從數據塊索引中可以獲得要保留的數據塊的地址偏移量及長度,或者可以獲得要保留的數據塊的塊地址。新數據文件的描述信息可以包括新數據文件的inode和全路徑名稱等信息。在操作s303,將保留的數據塊描述信息及新數據文件的描述信息通過擴展接口調用請求發送給內核文件系統。例如,可以根據保留的數據塊描述信息及新數據文件的描述信息構建塊地址信息表,以便于通過擴展接口調用請求發送。在操作s304,內核文件系統根據收到的擴展屬性命令解析保留的數據塊地址偏移量和長度。在操作s305,根據地址偏移量和長度獲取保留的數據塊的塊地址。在操作s306,根據保留的數據塊的塊地址和新數據文件的描述信息,重新排列構造新的元數據地址信息。在操作s307,刪除不需要保留的數據塊,以釋放存儲空間。根據本公開的實施例,可以對setxattr(key,value)接口(數據接口)進行擴展,設置一個通用的協議命令:set_datafile_gc,當內核態文件系統收到setxattr調用請求時,對key命令進行解析,如果發現是set_datafile_gc命令,則對地址信息表對value進行解析,地址信息表格式及內存如圖3所示。圖3示意性示出了根據本公開實施例的塊地址信息表。如圖3所示,根據本公開的實施例,該塊地址信息表中包括頭信息、塊地址信息和全路徑名稱。頭信息例如可以包括intsegmentcount、ino、和filenamelength等信息,塊地址信息例如可以包括offset、length等信息,全路徑名稱例如可以包括filename等信息。具體地,擴展接口調用請求的實現程序如下:通過在內核態文件系統中執行本公開實施例中從現有數據文件構建新數據文件的方法,由于回收空間時要保留的數據塊實際上已經在磁盤上了,可以理解為在內核態文件系統中,數據文件元數據的數據塊地址的重新排列過程。圖4示意性示出了根據本公開實施例的從現有數據文件構建新數據文件的系統400的框圖,上述現有數據文件包括一個或多個數據塊。如圖4所示,系統400包括獲取模塊410、確定模塊420、和構建模塊430。獲取模塊410用于獲取現有數據文件中要保留的數據塊的描述信息和上述新數據文件的描述信息。根據本公開的實施例,獲取模塊410例如可以執行參考圖2b的操作s201描述的操作。確定模塊420根據上述要保留的數據塊的描述信息確定要保留的數據塊的塊地址。根據本公開的實施例,確定模塊420例如可以執行參考圖2b的操作s202描述的操作。構建模塊430根據上述要保留的數據塊的塊地址和上述新數據文件的描述信息構建新數據文件的元數據,上述新數據文件包括上述要保留的數據塊。根據本公開的實施例,構建模塊430例如可以執行參考圖2b的操作s203描述的操作。根據本公開的實施例,由于新數據文件的元數據中不包括那些要刪除的數據塊的塊地址,即新數據文件中不包括那些要刪除的數據塊,從而實現了對數據塊的刪除。這個過程并不改變數據文件中數據塊的存儲位置,而是將其存儲位置與新數掘文件相關聯,可以避免大量數據塊讀寫操作,顯著節約了系統資源,提高了數據處理效率。需要說明的是,本公開提供的一種從現有數據文件構建新數據文件的系統與一種從現有數據文件構建新數據文件的方法是相對應的,具體細節可參考上述對從現有數據文件構建新數據文件的方法的描述,在此不再贅述。并且,可以理解的是,獲取模塊410、確定模塊420以及構建模塊430可以合并在一個模塊中實現,或者其中的任意一個模塊可以被拆分成多個模塊?;蛘?,這些模塊中的一個或多個模塊的至少部分功能可以與其他模塊的至少部分功能相結合,并在一個模塊中實現。根據本公開的實施例,獲取模塊410、確定模塊420以及構建模塊430中的至少一個可以至少被部分地實現為硬件電路,例如現場可編程門陣列(fpga)、可編程邏輯陣列(pla)、片上系統、基板上的系統、封裝上的系統、專用集成電路(asic),或可以以對電路進行集成或封裝的任何其他的合理方式等硬件或固件來實現,或以軟件、硬件以及固件三種實現方式的適當組合來實現?;蛘?,獲取模塊410、確定模塊420以及構建模塊430中的至少一個可以至少被部分地實現為計算機程序模塊,當該程序被計算機運行時,可以執行相應模塊的功能。圖5示意性示出了根據本公開實施例的另一種從現有數據文件構建新數據文件的系統的框圖。如圖5所示,系統500包括存儲器520和處理器510。存儲器520存儲有可執行指令。處理器510運行上述可執行指令,以執行上述從現有數據文件構建新數據文件的方法。具體地,處理器510例如可以包括通用微處理器、指令集處理器和/或相關芯片組和/或專用微處理器(例如,專用集成電路(asic)),等等。處理器510還可以包括用于緩存用途的板載存儲器。處理器510可以是用于執行參考圖2b或圖2c描述的根據本公開實施例的方法流程的不同動作的單一處理單元或者是多個處理單元。存儲器520,例如可以是能夠包含、存儲、傳送、傳播或傳輸指令的任意介質。例如,存儲器可以包括但不限于電、磁、光、電磁、紅外或半導體系統、裝置、器件或傳播介質。存儲器的具體示例包括:磁存儲裝置,如磁帶或硬盤(hdd);光存儲裝置,如光盤(cd-rom);存儲器,如隨機存取存儲器(ram)或閃存;和/或有線/無線通信鏈路。存儲器520可以包括計算機程序521,該計算機程序521可以包括代碼/計算機可執行指令,其在由處理器510執行時使得處理器510執行例如上面結合圖2b或圖2c所描述的方法流程及其任何變形。計算機程序521可被配置為具有例如包括計算機程序模塊的計算機程序代碼。例如,在示例實施例中,計算機程序521中的代碼可以包括一個或多個程序模塊,例如包括521a、模塊521b、……。應當注意,模塊的劃分方式和個數并不是固定的,本領域技術人員可以根據實際情況使用合適的程序模塊或程序模塊組合,當這些程序模塊組合被處理器510執行時,使得處理器510可以執行例如上面結合圖2b或圖2c所描述的方法流程及其任何變形。本公開的另一方面提供了一種計算機可讀存儲介質,包含用于執行上述從現有數據文件構建新數據文件的方法的可執行指令。盡管已經參照本公開的特定示例性實施例示出并描述了本公開,但是本領域技術人員應該理解,在不背離所附權利要求及其等同物限定的本公開的精神和范圍的情況下,可以對本公開進行形式和細節上的多種改變。因此,本公開的范圍不應該限于上述實施例,而是應該不僅由所附權利要求來進行確定,還由所附權利要求的等同物來進行限定。當前第1頁12