本發(fā)明屬于計(jì)算機(jī)技術(shù)領(lǐng)域,特別涉及一種對(duì)客戶端文件進(jìn)行備份的系統(tǒng)及方法。
背景技術(shù):
目前,隨著對(duì)企業(yè)電子文件安全存儲(chǔ)的重視,
為了達(dá)成及時(shí)收集職員個(gè)人辦公電腦上的文件,并集中安全存放的目的,越來越多的企事業(yè)單位開始應(yīng)用一種自動(dòng)化聯(lián)網(wǎng)備份系統(tǒng),此類系統(tǒng)能夠自動(dòng)檢測(cè)客戶端計(jì)算機(jī)上文件變化,并及時(shí)將其傳送到服務(wù)端的文件倉(cāng)庫(kù)中進(jìn)行存儲(chǔ),從而達(dá)到及時(shí)可靠備份的目的。
隨著企事業(yè)單位的電子信息化越來越充分,隨著互聯(lián)網(wǎng)應(yīng)用用戶群體越來越大,現(xiàn)代計(jì)算機(jī)系統(tǒng)中,需要存儲(chǔ)的電子文件也越來越多,存儲(chǔ)需求陸續(xù)從GB、TB的規(guī)模,逐步向PB、EB邁進(jìn)。雖然電子硬件的發(fā)展使得提供更多的存儲(chǔ)容量成為可能,但基于成本節(jié)約的考慮,如何進(jìn)一步充分、有效地利用這些存儲(chǔ),在任何時(shí)候,都是一件可帶來可觀社會(huì)效益和經(jīng)濟(jì)效益的活動(dòng)。
為了節(jié)省硬件成本,這一類備份系統(tǒng)中,往往都利用了實(shí)際工作中存在著的以下規(guī)律來節(jié)省磁盤存儲(chǔ),這個(gè)規(guī)律是,個(gè)人計(jì)算機(jī)中總是存儲(chǔ)了相當(dāng)數(shù)量的電子文件,而且正在越來越多,但不管是在單位內(nèi)部,還是整個(gè)社會(huì)中,都有一個(gè)明顯的事實(shí)是,不同的個(gè)體有相當(dāng)大的可能持有大量相同的電子文檔,比如在單位中,多人存有相同的工作文檔,互聯(lián)網(wǎng)中,多人可能存有相同的照片、音視頻文件。
對(duì)于此類聯(lián)網(wǎng)備份系統(tǒng)而言,應(yīng)對(duì)大量不同職員持有相當(dāng)數(shù)量的相同文件時(shí),如何有效使用存儲(chǔ)的問題,目前發(fā)展出了一種文件指紋的技術(shù),通常使用從文件內(nèi)容計(jì)算得出的MD5串值來指代一個(gè)文件,以此分辨多個(gè)文件是否實(shí)質(zhì)上是同一個(gè)文件,從而達(dá)到將不同個(gè)人計(jì)算機(jī)中的相同文件,備份為服務(wù)器端的同一個(gè)文件拷貝,來達(dá)到節(jié)省存儲(chǔ)空間的目的。
目前采用文件指紋來節(jié)省備份系統(tǒng)存儲(chǔ)空間的方式,存在著以下缺陷:
(1)現(xiàn)有的通過文件指紋(如MD5串值)來判斷文件的異同,用于處置一般類型的文件是比較理想的,但是對(duì)于壓縮文件而言,效果極差。
(2)在實(shí)際工作過程中,不同用戶之間傳遞大量文件,往往考慮操作的便利性、完整性、傳輸性能,常常會(huì)將大量的電子文件壓縮打包后進(jìn)行拷貝傳輸。此類壓縮文件進(jìn)入備份系統(tǒng),將會(huì)消耗大量的存儲(chǔ)空間。首先,這些壓縮文件中的各個(gè)文件往往都是個(gè)人計(jì)算機(jī)中已經(jīng)存在的電子文件,這些電子文件一般均會(huì)進(jìn)入備份系統(tǒng),而壓縮后,大量已經(jīng)進(jìn)入備份系統(tǒng)的電子文件,又會(huì)在新的壓縮文件中重復(fù)地在服務(wù)端存儲(chǔ)一次(雖然是壓縮形式的);其次,這種壓縮,往往具備一定的隨意性和臨時(shí)性,分發(fā)這些文件的操作者在分享一批電子文件時(shí),顯然不可能每次都會(huì)精確地選中完全相同的目錄進(jìn)行壓縮,加上待壓縮的目錄中某些文件隨時(shí)可能會(huì)發(fā)生變化,這往往導(dǎo)致就算要分發(fā)基本相同的一批目錄和文件,壓縮而成的壓縮文件往往也會(huì)產(chǎn)生細(xì)微的差別,從而被視作一個(gè)完全新的文件進(jìn)入備份系統(tǒng)。
(3)以上分析表明,隨處可見的壓縮行為,將會(huì)給備份系統(tǒng)的存儲(chǔ)造成相當(dāng)?shù)睦速M(fèi),特別是發(fā)生在用戶常常壓縮較大的文件內(nèi)容時(shí)。但是,壓縮文件卻不能輕易從備份序列中排除,因?yàn)?,有些情況下,壓縮文件可能不是一個(gè)臨時(shí)性的文件,而可能是一個(gè)重要的歸檔文件。
基于以上分析,如何能夠有效借助文件指紋技術(shù)消除冗余文件,特別是針對(duì)壓縮文件的冗余處理,是目前聯(lián)網(wǎng)備份技術(shù)需要解決的問題之一。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的,在于提供一種聯(lián)網(wǎng)備份系統(tǒng)及備份方法,其可利用文件指紋技術(shù)消除服務(wù)端文件倉(cāng)庫(kù)中的冗余文件,節(jié)省服務(wù)端磁盤空間。
本發(fā)明的次要目的,在于提供一種聯(lián)網(wǎng)備份系統(tǒng)及備份方法,其可有效消除冗余的壓縮文件,節(jié)省服務(wù)端磁盤空間存儲(chǔ),節(jié)省硬件成本。
為了達(dá)成上述目的,本發(fā)明的解決方案是:
一種聯(lián)網(wǎng)備份系統(tǒng),包括:
文件上傳模塊,用于計(jì)算文件的MD5值,并執(zhí)行文件由客戶端到服務(wù)端的傳輸;
文件接收模塊,用于接收文件上傳模塊上傳的文件內(nèi)容以及文件上傳模塊計(jì)算的MD5值,保存文件記錄;
倉(cāng)庫(kù)索引模塊,用于記錄各個(gè)不相同文件的MD5特征信息,供文件接收模塊檢索;
文件記錄模塊,用于記錄上傳文件的原始記錄信息;
磁盤存儲(chǔ)模塊,用于存儲(chǔ)文件內(nèi)容;
文件緩存模塊,用于緩存經(jīng)常被下載應(yīng)用的壓縮文件。
一種聯(lián)網(wǎng)備份方法,包括如下步驟:
步驟1,文件上傳模塊計(jì)算客戶端待存儲(chǔ)文件的MD5值;
步驟2,文件上傳模塊將包含文件的MD5值和文件大小的特征信息傳送至文件接收模塊;
步驟3,文件接收模塊接收到上述特征信息后,調(diào)用倉(cāng)庫(kù)索引模塊進(jìn)行檢索,判斷相同的文件是否存在,若倉(cāng)庫(kù)索引模塊中未檢索到對(duì)應(yīng)特征信息的記錄,表示文件倉(cāng)庫(kù)中尚不存在該文件,轉(zhuǎn)步驟4,否則轉(zhuǎn)步驟6;
步驟4,文件接收模塊返回給文件上傳模塊“文件不存在”的應(yīng)答信息,文件上傳模塊將文件內(nèi)容流上傳,文件接收模塊在接收到完整的文件后,將文件名修改為[file_md5]_m的形式送入磁盤存儲(chǔ)模塊進(jìn)行存儲(chǔ),此處的m代表[file_md5]這個(gè)MD5串下對(duì)應(yīng)編號(hào)為m的文件;
步驟5,磁盤存儲(chǔ)模塊完成存儲(chǔ)后,在倉(cāng)庫(kù)索引模塊中插入新的索引記錄,將最終存儲(chǔ)的文件名和文件特征索引信息相關(guān)聯(lián),并隨同生成文件的索引計(jì)數(shù),然后轉(zhuǎn)步驟7;
步驟6,當(dāng)倉(cāng)庫(kù)檢索模塊中檢索到對(duì)應(yīng)特征信息的記錄已經(jīng)存在時(shí),文件接收模塊返回信息,通知文件上傳模塊無需再次重復(fù)上傳已經(jīng)存在的文件,并從倉(cāng)庫(kù)檢索模塊中取出文件在磁盤存儲(chǔ)模塊中最終的文件名[file_md5]_m;
步驟7,文件接收模塊獲知當(dāng)前需要存入的文件在磁盤存儲(chǔ)模塊中對(duì)應(yīng)的真正文件名[file_md5]_m,此時(shí)通過文件記錄模塊插入文件記錄,將原始文件信息和磁盤存儲(chǔ)模塊中對(duì)應(yīng)文件名[file_md5]_m進(jìn)行關(guān)聯(lián)。
上述備份方法還包括如下內(nèi)容:倉(cāng)庫(kù)索引模塊為文件[file_md5]_m增加[is_compressed],[is_extracted]兩個(gè)字段域,其中,[is_compressed]描述文件是否是壓縮文件,是為true,否為false,[is_extracted]描述是否已被解壓展開提取了其中的各個(gè)組成文件,是為true,否為false;倉(cāng)庫(kù)索引模塊定時(shí)執(zhí)行如下操作:
1)定時(shí)掃描倉(cāng)庫(kù)索引模塊中[is_compressed]為true,[is_extracted]為false的索引記錄,獲得一個(gè)索引記錄集合toExtract-Set,求得其集合大小SizeOfSet;
2)設(shè)定循環(huán)下標(biāo)變量index,初始化index=0;
3)判斷循環(huán)下標(biāo)變量index大于等于SizeOfSet時(shí),結(jié)束掃描,否則繼續(xù)步驟4);
4)從集合toExtract-Set中取出第index個(gè)索引記錄,假設(shè)該索引記錄對(duì)應(yīng)的文件名為[file_md5]_m,將其解壓至臨時(shí)目錄下,將壓縮文件解壓得到的所有文件送入倉(cāng)庫(kù)索引模塊和磁盤存儲(chǔ)模塊中進(jìn)行保存;
5)將壓縮文件[file_md5]_m的壓縮目錄結(jié)構(gòu)輸出為另一個(gè)文件[file-md5]_m.list,并和[file_md5]_m存儲(chǔ)在相同目錄下;
6)將第index個(gè)索引記錄的[is_extracted]字段修改為true,修改成功后,從磁盤存儲(chǔ)模塊中刪除[file_md5]_m文件;
7)循環(huán)下標(biāo)變量index遞增1,轉(zhuǎn)步驟3),直至掃描結(jié)束。
上述步驟4)中,若壓縮文件解壓得到的所有文件中還存在壓縮文件,則不做處理,留待下一次定時(shí)掃描時(shí)處理。
上述步驟1中,MD5值包含文件的完整MD5值和文件的N等份分段MD5值。
上述步驟1中,文件的N等份分段MD5值的計(jì)算方法是:對(duì)文件進(jìn)行N等份,對(duì)于文件大小不足N的倍數(shù)的,將大小補(bǔ)足為N的倍數(shù)進(jìn)行N等份;N等份后,文件尾部的某些片段數(shù)據(jù)不足的按實(shí)際數(shù)據(jù)進(jìn)行計(jì)算,最終得到N個(gè)文件片段的MD5值。
上述步驟3中,在進(jìn)行檢索時(shí),將文件特征信息定義為一個(gè)數(shù)據(jù)表的多個(gè)列,并基于這些列創(chuàng)建聯(lián)合索引,通過select語(yǔ)句執(zhí)行快速檢索。
上述步驟4中,文件名[file_md5]_m中m的生成規(guī)則是:檢查倉(cāng)庫(kù)索引模塊中文件MD5值同樣為[file_md5]的文件已經(jīng)存在的個(gè)數(shù),在此基礎(chǔ)上增加1,得到m值。
采用上述方案后,本發(fā)明具有以下改進(jìn):
(1)本發(fā)明倒轉(zhuǎn)將壓縮文件展開,初看,和通常認(rèn)知的壓縮節(jié)省存儲(chǔ)空間的理念相悖,但應(yīng)深刻認(rèn)識(shí)到,該技術(shù)主要適用于完整的聯(lián)網(wǎng)實(shí)時(shí)備份系統(tǒng),是建立在客戶端大部分普通文件也已經(jīng)自動(dòng)進(jìn)行了備份的條件下特別進(jìn)行設(shè)計(jì)的。初看不合理,但實(shí)際上基于文件壓縮解壓縮、文件指紋判重這些公知技術(shù),倒轉(zhuǎn)運(yùn)用壓縮文件展開,創(chuàng)造性地解決了備份系統(tǒng)中大量臨時(shí)壓縮而成的文件中,可能會(huì)大量包含重復(fù)的文件,從而對(duì)存儲(chǔ)空間造成浪費(fèi)的問題。這一點(diǎn)相比僅僅使用文件壓縮來節(jié)省存儲(chǔ),更加適用于這一類聯(lián)網(wǎng)自動(dòng)備份系統(tǒng),能更加深入地分析文件內(nèi)部的組成特征,更精細(xì)地消除冗余文件對(duì)存儲(chǔ)空間的侵占。
(2)本發(fā)明在運(yùn)用壓縮文件展開的改進(jìn)型倉(cāng)庫(kù)索引模塊的基礎(chǔ)上,還擴(kuò)展了一個(gè)文件緩存模塊,用于對(duì)常用的壓縮文件反復(fù)下載恢復(fù)使用時(shí),用于保障訪問性能。
附圖說明
圖1是現(xiàn)有聯(lián)網(wǎng)備份系統(tǒng)的整體架構(gòu)圖;
圖2是現(xiàn)有聯(lián)網(wǎng)備份方法的流程圖;
圖3是本發(fā)明聯(lián)網(wǎng)備份系統(tǒng)的整體架構(gòu)圖;
圖4是本發(fā)明聯(lián)網(wǎng)備份方法的流程圖。
具體實(shí)施方式
以下將結(jié)合附圖,對(duì)本發(fā)明的技術(shù)方案進(jìn)行詳細(xì)說明。
本發(fā)明提供一種聯(lián)網(wǎng)備份系統(tǒng),包括六個(gè)組成模塊,分別為文件上傳模塊、文件接收模塊、倉(cāng)庫(kù)索引模塊、文件記錄模塊、磁盤存儲(chǔ)模塊和文件緩存模塊:
文件上傳模塊,主要計(jì)算文件的各種MD5值,并執(zhí)行文件到服務(wù)端的傳輸。
文件接收模塊,主要接收客戶端上傳的文件內(nèi)容以及客戶端事先計(jì)算的各種MD5值,保存文件記錄,執(zhí)行文件智能排重判斷。
倉(cāng)庫(kù)索引模塊,主要記錄各個(gè)不相同文件的多個(gè)MD5特征信息,以供文件接收模塊檢索、判斷攜帶指定MD5特征信息的文件,在文件倉(cāng)庫(kù)中是否已經(jīng)存在,引用計(jì)數(shù)是多少。
文件記錄模塊,主要用于記錄上傳文件的原始記錄信息,如上傳文件的原始文件名、文件所有人,同時(shí)關(guān)聯(lián)記錄文件最終在磁盤存儲(chǔ)模塊中如何存放的信息-----簡(jiǎn)單指文件最終在磁盤存儲(chǔ)模塊總存儲(chǔ)的文件目錄和名稱。
磁盤存儲(chǔ)模塊,用于文件內(nèi)容的最終實(shí)際存儲(chǔ),原始文件在最終存入時(shí),文件名將被轉(zhuǎn)換,統(tǒng)一為文件MD5值結(jié)合當(dāng)前同一個(gè)MD5值下自1開始逐個(gè)遞增的數(shù)字編號(hào)形成的字符串,形如“1a2b3c4d5e6f77889911223344556677_1”。
文件緩存模塊,用于緩存經(jīng)常被下載應(yīng)用的壓縮文件。按照本發(fā)明的思路,壓縮文件進(jìn)入備份系統(tǒng)后會(huì)被解壓刪除,需要使用時(shí),將會(huì)重新從備份系統(tǒng)中提取組成文件進(jìn)行壓縮,為了保證效率,可以對(duì)經(jīng)常被訪問操作的壓縮文件進(jìn)行一定時(shí)間周期內(nèi)的緩存。
本發(fā)明還提供一種聯(lián)網(wǎng)備份方法,包括如下步驟:
步驟1,文件上傳模塊計(jì)算客戶端待存儲(chǔ)文件的MD5值,這里不僅計(jì)算整個(gè)文件的MD5值,還要同時(shí)計(jì)算文件的分段MD5值;
由于在特殊情況下,兩個(gè)文件的MD5值會(huì)有極低的可能發(fā)生碰撞,但根據(jù)MD5算法的抗修改性(對(duì)原數(shù)據(jù)進(jìn)行任何改動(dòng),哪怕只修改1個(gè)字節(jié),所得到的MD5值都有很大區(qū)別),發(fā)明人認(rèn)為,如果兩個(gè)文件內(nèi)容確實(shí)有部分不相同,則雖然整個(gè)文件的MD5偶爾發(fā)生碰撞,但必定在兩個(gè)文件中可以找到一段相同的位置區(qū)域(數(shù)據(jù)開始和結(jié)束的文件偏移地址相同),對(duì)該區(qū)域的數(shù)據(jù)進(jìn)行MD5計(jì)算的結(jié)果是不同的。
計(jì)算文件的分段MD5值的實(shí)現(xiàn)方法是:對(duì)文件進(jìn)行N等份(N憑經(jīng)驗(yàn)選擇,例如取2、3、4、...、10等均可),對(duì)于文件大小不足N的倍數(shù)的,將大小補(bǔ)足為N的倍數(shù)進(jìn)行N等份;N等份后,文件尾部的某些片段數(shù)據(jù)不足的按實(shí)際數(shù)據(jù)進(jìn)行計(jì)算(特別是某些片段的數(shù)據(jù)量為0,就按0長(zhǎng)度字節(jié)流進(jìn)行MD5計(jì)算),最終得到N個(gè)文件片段的MD5值。
特例介紹如下:當(dāng)文件僅有1個(gè)字節(jié)時(shí),N等份的結(jié)果是,第一個(gè)片段僅有1個(gè)字節(jié),后續(xù)N-1個(gè)片段都是空片段,但是0個(gè)字節(jié)的文件實(shí)際上也可以計(jì)算得到一個(gè)特定的MD5值。因此,不影響各片段的MD5計(jì)算。
步驟2,文件上傳模塊將文件的完整MD5值、文件大小、文件的N等份分段MD5值這三部分信息(暫不包括文件實(shí)際的內(nèi)容流)傳送至文件接收模塊(可使用遠(yuǎn)程調(diào)用等接口技術(shù),如webservice);
步驟3,文件接收模塊接收到上述三部分信息后,首先,開始調(diào)用倉(cāng)庫(kù)索引模塊進(jìn)行檢索,判斷相同的文件是否存在,若倉(cāng)庫(kù)索引模塊中未檢索到對(duì)應(yīng)特征信息的記錄,表示文件倉(cāng)庫(kù)中尚不存在該文件,轉(zhuǎn)步驟4,否則轉(zhuǎn)步驟6;
其中,倉(cāng)庫(kù)索引模塊所使用的索引信息主要包含:文件完整MD5值[file_md5]、文件大小[file_size]、文件N等份分段MD5值[seg1_md5]、[seg2_md5]、...、[segN_md5],檢索過程可用自定義的哈希檢索或平衡查找樹的方式實(shí)現(xiàn),一個(gè)簡(jiǎn)單的實(shí)現(xiàn)方式是,基于關(guān)系數(shù)據(jù)庫(kù)實(shí)現(xiàn),將上述文件特征信息(file_md5,file_size,seg1_md5,seg2_md5,...,segN_md5)定義為一個(gè)數(shù)據(jù)表的多個(gè)列,并基于這些列創(chuàng)建聯(lián)合索引,即可通過select語(yǔ)句執(zhí)行快速檢索。
步驟4,文件接收模塊返回給文件上傳模塊“文件不存在”的應(yīng)答信息,文件上傳模塊將文件內(nèi)容流上傳,文件接收模塊在接收到完整的文件后,將文件名修改為[file_md5]_m的形式(此處的m代表[file_md5]這個(gè)MD5串下對(duì)應(yīng)編號(hào)為m的文件)送入磁盤存儲(chǔ)模塊進(jìn)行存儲(chǔ);
文件名[file_md5]_m中的m的生成規(guī)則是:檢查倉(cāng)庫(kù)索引模塊中文件md5同樣為[file_md5]的文件已經(jīng)存在的個(gè)數(shù),在此基礎(chǔ)上增加1,得到m值。
磁盤存儲(chǔ)模塊存儲(chǔ)形如[file_md5]_m這樣文件名的文件時(shí),可依次將前8個(gè)字符中的每?jī)蓚€(gè)字符,作為一層目錄的名稱創(chuàng)建子目錄(最終依次創(chuàng)建4層子目錄),以避免單個(gè)目錄中存儲(chǔ)過多的文件,降低磁盤定位、打開文件的性能。
步驟5,磁盤存儲(chǔ)模塊完成存儲(chǔ)后,在倉(cāng)庫(kù)索引模塊中插入新的索引記錄(file_md5,file_size,seg1_md5,seg2_md5,....segN_md5,[file_md5]_m,refcount),將最終存儲(chǔ)的文件名和文件特征索引信息相關(guān)聯(lián),并隨同生成文件的索引計(jì)數(shù)refcount,然后轉(zhuǎn)步驟7,;
文件的索引計(jì)數(shù)refcount,代表欲上傳的refcount個(gè)原始文件,實(shí)際上對(duì)應(yīng)磁盤存儲(chǔ)系統(tǒng)中的同一個(gè)文件,索引計(jì)數(shù)通??捎糜趧h除的場(chǎng)景。
步驟6,當(dāng)倉(cāng)庫(kù)檢索模塊中檢索到對(duì)應(yīng)特征信息的記錄已經(jīng)存在時(shí),文件接收模塊返回信息,通知文件上傳模塊無需再次重復(fù)上傳已經(jīng)存在的文件,并從倉(cāng)庫(kù)檢索模塊中取出文件在磁盤存儲(chǔ)模塊中最終的文件名[file_md5]_m;
步驟7,文件接收模塊已獲知當(dāng)前需要存入的文件在磁盤存儲(chǔ)模塊中對(duì)應(yīng)的真正文件名[file_md5]_m,此時(shí)可通過文件記錄模塊插入文件記錄,將原始文件信息和磁盤存儲(chǔ)模塊中對(duì)應(yīng)文件名[file_md5]_m進(jìn)行關(guān)聯(lián),以供后續(xù)從文件倉(cāng)庫(kù)中調(diào)取一個(gè)原始文件時(shí),可正確取出磁盤存儲(chǔ)模塊中對(duì)應(yīng)的文件。
在本發(fā)明中,還針對(duì)倉(cāng)庫(kù)索引模塊設(shè)計(jì)定時(shí)任務(wù),定時(shí)掃描倉(cāng)庫(kù)索引模塊中所記錄的壓縮文件,如果所記錄的文件[file_md5]_m沒有標(biāo)記為已解壓展開,則對(duì)其進(jìn)行處理,具體實(shí)現(xiàn)方法如下:
首先,在倉(cāng)庫(kù)索引模塊中,為索引信息增加[is_compressed],[is_extracted]兩個(gè)字段域來描述一個(gè)文件是否是壓縮文件,是否已被解壓展開提取了其中的各個(gè)組成文件。當(dāng)文件接收模塊通過倉(cāng)庫(kù)索引模塊創(chuàng)建索引記錄時(shí),可事先判斷待進(jìn)庫(kù)的文件是否是壓縮文件,如果是,則[is_compressed]字段初始化為真(true),[is_extracted]字段初始化為假(false),如果不是壓縮文件,則[is_comressed]字段初始化為假(false),[is_extracted]字段也初始化為假(false)。
接下來,將倉(cāng)庫(kù)索引模塊的定時(shí)任務(wù)具體設(shè)計(jì)如下:
1)以十分鐘級(jí)以上的時(shí)間周期,定時(shí)掃描倉(cāng)庫(kù)索引模塊中[is_compressed]為true,[is_extracted]為false的索引記錄,獲得一個(gè)索引記錄集合toExtract-Set,求得其集合大小SizeOfSet;
2)設(shè)定一個(gè)循環(huán)下標(biāo)變量index,初始化index=0;
3)判斷循環(huán)下標(biāo)變量index大于等于SizeOfSet時(shí),直接轉(zhuǎn)最后結(jié)束步驟8),否則繼續(xù)步驟4);
4)從集合toExtract-Set中取出第index個(gè)索引記錄,假設(shè)該索引記錄對(duì)應(yīng)的文件名為[file_md5]_m,將其解壓至臨時(shí)目錄下,對(duì)解壓得到的所有文件都和通過文件接收模塊保存?zhèn)浞菸募愃?,將壓縮文件解壓得到的所有文件都使用同樣的機(jī)制送入倉(cāng)庫(kù)索引模塊和磁盤存儲(chǔ)模塊中進(jìn)行保存(如果壓縮文件包含的文件中還存在壓縮文件,則當(dāng)前不做進(jìn)一步處理,留待下一次定時(shí)任務(wù)進(jìn)行處理);
5)然后將壓縮文件[file_md5]_m的壓縮目錄結(jié)構(gòu),輸出為另一個(gè)文件[file-md5]_m.list,即在原文件的基礎(chǔ)上附加后綴名list以作區(qū)分,并和[file_md5]_m存儲(chǔ)在相同目錄下。該*.list文件內(nèi)部定義可如下定義(示例):
d:標(biāo)簽表示該行為目錄元素,同行記錄該目錄擁有的子目錄個(gè)數(shù)和子文件個(gè)數(shù),f:開頭表示該行為文件元素,同行記錄該文件在壓縮文件內(nèi)的原始文件名、在文件倉(cāng)庫(kù)中被保存的文件名以及該文件的大小。
每個(gè)目錄也需要遞歸地記錄更低一層的目錄信息,直至能反映壓縮文件內(nèi)部所有的目錄和文件的組成信息。
6)[file_md5]_m.list文件成功生成后,可以將第index個(gè)索引記錄的[is_extracted]字段修改為true,修改成功后,可直接從磁盤存儲(chǔ)模塊中刪除[file_md5]_m文件,以釋放存儲(chǔ)空間。因?yàn)榇藭r(shí)壓縮[file_md5]_m的所有內(nèi)容物,都被解壓展開存入文件倉(cāng)庫(kù),且對(duì)應(yīng)的[file_md5]_m.list文件保存了壓縮[file_md5]_m內(nèi)部所有內(nèi)容物的組成信息。
7)循環(huán)下標(biāo)變量index遞增1,轉(zhuǎn)步驟3);
8)結(jié)束。
當(dāng)需要調(diào)取下載在文件倉(cāng)庫(kù)中已被解壓展開的壓縮文件時(shí),遵循以下步驟:
(1)從文件記錄模塊查找得到待下載文件在磁盤存儲(chǔ)模塊內(nèi)的名稱[file_md5]_m;
(2)從倉(cāng)庫(kù)索引模塊中判斷該文件的[is_comressed]和[is_extracted],若均為true,則繼續(xù),否則繼續(xù)使用現(xiàn)有技術(shù);
(3)從磁盤存儲(chǔ)模塊讀取[file_md5]_m.list文件,加載壓縮文件內(nèi)部的文件組成信息;
(4)準(zhǔn)備一個(gè)臨時(shí)目錄[file_md5]_m;
(5)根據(jù)[file_md5]_m.list文件加載得到壓縮文件組成信息,從磁盤存儲(chǔ)模塊中遞歸調(diào)取子文件,將其按照[file_md5]_m.list所表達(dá)的目錄、文件層次結(jié)構(gòu),拷貝到臨時(shí)目錄[file_md5]_m中對(duì)應(yīng)的子目錄中;
(6)對(duì)臨時(shí)目錄[file_md5]_m執(zhí)行壓縮,復(fù)原壓縮文件[file_md5]_m;
綜合上述,本發(fā)明一種聯(lián)網(wǎng)備份系統(tǒng)及備份方法,應(yīng)用壓縮文件展開技術(shù),使用壓縮文件內(nèi)部目錄、文件組成信息文件來取代真實(shí)的壓縮文件,對(duì)備份系統(tǒng)內(nèi)的其他單純非壓縮文件進(jìn)行復(fù)用,有效消除了不同壓縮文件內(nèi)的相同組成文件造成的冗余存儲(chǔ),扭轉(zhuǎn)了只有壓縮才能節(jié)省空間的思維定勢(shì)。
由于較大壓縮文件的復(fù)原耗時(shí)、費(fèi)資源,因此,對(duì)于常常需要恢復(fù)備份下載的壓縮文件,在磁盤存儲(chǔ)模塊中,擴(kuò)展一個(gè)緩存目錄,可用壓縮文件[file_md5]_m的一定時(shí)間周期內(nèi)的緩存。進(jìn)一步設(shè)計(jì)一個(gè)文件緩存模塊,跟蹤指定文件的最新下載使用時(shí)間,在倉(cāng)庫(kù)索引模塊繼續(xù)增加一個(gè)last_access_time字段,定時(shí)檢查緩存目錄中的壓縮文件的最后一次訪問時(shí)間,在1個(gè)月前的予以清理(該時(shí)間閾值可以設(shè)計(jì)可自由配置)。
以上實(shí)施例僅為說明本發(fā)明的技術(shù)思想,不能以此限定本發(fā)明的保護(hù)范圍,凡是按照本發(fā)明提出的技術(shù)思想,在技術(shù)方案基礎(chǔ)上所做的任何改動(dòng),均落入本發(fā)明保護(hù)范圍之內(nèi)。