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