本發(fā)明涉及計算機領(lǐng)域,具體來說,涉及一種掃描文件的方法和系統(tǒng)。
背景技術(shù):
歸檔系統(tǒng)是提供將生產(chǎn)系統(tǒng)里的數(shù)據(jù)復(fù)制到離線系統(tǒng)中,并對這個備份數(shù)據(jù)進行管理的系統(tǒng),其中,生產(chǎn)系統(tǒng)和離線系統(tǒng)可以是曙光并行存儲系統(tǒng),也可以是第三方文件系統(tǒng)。在該歸檔系統(tǒng)中需要一個文件掃描模塊來提供掃描文件的功能,以便歸檔系統(tǒng)確定哪些文件需要備份。但是,現(xiàn)有的掃描文件功能并不滿足歸檔系統(tǒng)的要求,無法實現(xiàn)將生產(chǎn)系統(tǒng)中的文件正確高效地傳輸?shù)诫x線系統(tǒng)中。
針對相關(guān)技術(shù)中的問題,目前尚未提出有效的解決方案。
技術(shù)實現(xiàn)要素:
針對相關(guān)技術(shù)中的問題,本發(fā)明提出一種掃描文件的方法和系統(tǒng),能夠?qū)⑸a(chǎn)系統(tǒng)中的文件正確高效地傳輸?shù)诫x線系統(tǒng)中。
本發(fā)明的技術(shù)方案是這樣實現(xiàn)的:
根據(jù)本發(fā)明的一個方面,提供了一種掃描文件的方法。
該掃描文件的方法包括:獲取預(yù)先設(shè)置的備份規(guī)則;根據(jù)備份規(guī)則,掃描出需備份的文件,并且將需備份的文件列表發(fā)送;接收文件列表,并將需備份的文件進行備份。
根據(jù)本發(fā)明的一個實施例,根據(jù)備份規(guī)則,掃描出需備份的文件包括:根據(jù)備份規(guī)則,生成掃描任務(wù),并將掃描任務(wù)添加到工作線程中;根據(jù)掃描任務(wù),工作線程對目錄進行掃描,并處理目錄對應(yīng)的目錄項。
根據(jù)本發(fā)明的一個實施例,文件列表包括:文件信息、目錄信息。
根據(jù)本發(fā)明的一個實施例,工作線程對目錄進行掃描,并處理目錄對應(yīng)的目錄項包括:在目錄項為文件的情況下,工作線程將需備份的文件對應(yīng)的目錄項中的文件信息發(fā)送至對應(yīng)的控制模塊;在目錄項為目錄的情況下,工作線程將掃描任務(wù)進行分配給掃描進程,并且將掃描任務(wù)添加到掃描隊列的隊首,以及將需備份的文件對應(yīng)的目錄項中的目錄信息發(fā)送至對應(yīng)的控制模塊。
根據(jù)本發(fā)明的一個實施例,將需備份的文件列表發(fā)送包括:將需備份的文件列表分批次進行發(fā)送。
根據(jù)本發(fā)明的一個實施例,接收文件列表包括:分批次接收文件列表,并在每批次接收文件列表成功后,控制模塊反饋Ack信息。
根據(jù)本發(fā)明的另一方面,提供了一種掃描文件的系統(tǒng)。
該掃描文件的系統(tǒng)包括:
獲取模塊,用于獲取預(yù)先設(shè)置的備份規(guī)則;
掃描發(fā)送模塊,用于根據(jù)備份規(guī)則,掃描出需備份的文件,并且將需備份的文件列表發(fā)送;
備份模塊,用于接收文件列表,并將需備份的文件進行備份。
根據(jù)本發(fā)明的一個實施例,掃描發(fā)送模塊包括:
添加模塊,用于根據(jù)備份規(guī)則,生成掃描任務(wù),并將掃描任務(wù)添加到工作線程中;
掃描模塊,用于根據(jù)掃描任務(wù),工作線程對目錄進行掃描,并處理目錄對應(yīng)的目錄項。
根據(jù)本發(fā)明的一個實施例,文件列表包括:文件信息、目錄信息。
根據(jù)本發(fā)明的一個實施例,掃描模塊包括:
文件掃描模塊,用于在目錄項為文件的情況下,工作線程將需備份的文件對應(yīng)的目錄項中的文件信息發(fā)送至對應(yīng)的控制模塊;
目錄掃描模塊,用于在目錄項為目錄的情況下,工作線程將掃描任務(wù)進行分配給掃描進程,并且將掃描任務(wù)添加到掃描隊列的隊首,以及將需備份的文件對應(yīng)的目錄項中的目錄信息發(fā)送至對應(yīng)的控制模塊。
本發(fā)明的有益技術(shù)效果在于:
本發(fā)明通過獲取預(yù)先設(shè)置的備份規(guī)則,隨后根據(jù)備份規(guī)則,掃描出需備份的文件,并且將需備份的文件列表發(fā)送,最后接收文件列表,并將需備份的文件進行備份,從而能夠?qū)⑸a(chǎn)系統(tǒng)中的文件正確高效地傳輸?shù)诫x線系統(tǒng)中。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是根據(jù)本發(fā)明實施例的掃描文件的方法的流程圖;
圖2是根據(jù)本發(fā)明實施例的歸檔系統(tǒng)的示意圖;
圖3是根據(jù)本發(fā)明實施例的掃描引擎線程結(jié)構(gòu)圖;
圖4是根據(jù)本發(fā)明實施例的控制模塊和文件掃描模塊的交互過程的示意圖;
圖5是根據(jù)本發(fā)明實施例的文件掃描模塊處理控制模塊的任務(wù)的流程圖;
圖6是根據(jù)本發(fā)明實施例的掃描文件的系統(tǒng)的框圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
根據(jù)本發(fā)明的實施例,提供了一種掃描文件的方法。
如圖所示,根據(jù)本發(fā)明實施例的掃描文件的方法包括:
步驟S101,獲取預(yù)先設(shè)置的備份規(guī)則;
步驟S103,根據(jù)備份規(guī)則,掃描出需備份的文件,并且將需備份的文件列表發(fā)送;
步驟S105,接收文件列表,并將需備份的文件進行備份。
本發(fā)明通過獲取預(yù)先設(shè)置的備份規(guī)則,隨后根據(jù)備份規(guī)則,掃描出需備份的文件,并且將需備份的文件列表發(fā)送,最后接收文件列表,并將需備份的文件進行備份,從而能夠?qū)⑸a(chǎn)系統(tǒng)中的文件正確高效地傳輸?shù)诫x線系統(tǒng)中。
根據(jù)本發(fā)明的一個實施例,根據(jù)備份規(guī)則,掃描出需備份的文件包括:根據(jù)備份規(guī)則,生成掃描任務(wù),并將掃描任務(wù)添加到工作線程中;根據(jù)掃描任務(wù),工作線程對目錄進行掃描,并處理目錄對應(yīng)的目錄項。
根據(jù)本發(fā)明的一個實施例,文件列表包括:文件信息、目錄信息。
根據(jù)本發(fā)明的一個實施例,工作線程對目錄進行掃描,并處理目錄對應(yīng)的目錄項包括:在目錄項為文件的情況下,工作線程將需備份的文件對應(yīng)的目錄項中的文件信息發(fā)送至對應(yīng)的控制模塊;在目錄項為目錄的情況下,工作線程將掃描任務(wù)進行分配給掃描進程,并且將掃描任務(wù)添加到掃描隊列的隊首,以及將需備份的文件對應(yīng)的目錄項中的目錄信息發(fā)送至對應(yīng)的控制模塊。
根據(jù)本發(fā)明的一個實施例,將需備份的文件列表發(fā)送包括:將需備份的文件列表分批次進行發(fā)送。
根據(jù)本發(fā)明的一個實施例,接收文件列表包括:分批次接收文件列表,并在每批次接收文件列表成功后,控制模塊反饋Ack信息。
下面將通過具體的實施例對本發(fā)明進行詳細的描述。
如圖2所示,該歸檔系統(tǒng)包括:oMgs模塊、oBKe模塊、oScan模塊、oScan模塊,上述模塊的主要功能如下:
oMgs模塊,用于負責(zé)備份規(guī)則的添刪改查等操作,同時負責(zé)各類節(jié)點的增加刪除等操作,同時,將備份規(guī)則發(fā)送給oBKe模塊;
oBKe模塊,該oBKe模塊為控制模塊,即為該歸檔系統(tǒng)的總控制中心,用于接收oMgs模塊發(fā)送的備份規(guī)則,以及接收oScan模塊發(fā)送的文件,同時將備份文件的操作分解為并發(fā)的任務(wù)等操作;
oScan模塊,該模塊為文件掃描模塊,設(shè)置在索引服務(wù)器集群oPara中,用于負責(zé)根據(jù)備份規(guī)則掃描出要備份的文件,并將這些文件列表發(fā)送給oBke模塊;
oBks模塊,用于負責(zé)接收需要備份的文件,并將其存儲到離線系統(tǒng)中。
此外,如圖3所示,當(dāng)備份策略執(zhí)行時間到時,oBke模塊向oScan模塊發(fā)送消息,oScan模塊生成一個任務(wù),投遞到本地pending隊列,其中,該Pending隊列用于保存所有尚未從磁盤返回處理響應(yīng)的寫命令。同時,控制線程負責(zé)從本地pending隊列獲取掃描任務(wù),分配任務(wù)結(jié)構(gòu),投遞到工作線程隊列中。
工作線程負責(zé)對目錄進行掃描(readdir)并處理目錄(dentry)項,如果dentry項是文件則調(diào)用注冊的文件處理函數(shù)將文件信息加入對應(yīng)oBke的緩沖區(qū)buf(線程間不共享),然后判斷該buf是否滿,是則發(fā)送異步消息(控制發(fā)送中的消息總量);如果dentry項是目錄,調(diào)用注冊的目錄處理函數(shù)分配任務(wù),加到掃描隊列隊首。每個工作線程同一時刻只處理一個備份規(guī)則對應(yīng)的目錄下的掃描任務(wù),同時最多有5個掃描線程同時工作,而其它的掃描任務(wù)在pending隊列中等待。
整個掃描任務(wù)處理完成后,網(wǎng)絡(luò)回調(diào)函數(shù)投遞一個任務(wù)到完成隊列,完成線程將結(jié)果通知oBke模塊。
另外,圖4示出了oBke模塊和oScan模塊的交互過程,具體如下:
第一階段
步驟S11,oBke模塊將所有的需要掃描的任務(wù)發(fā)送至oScan模塊;
步驟S12,oScan模塊接收上述掃描任務(wù),并將所有任務(wù)加到工作線程隊列中,并將上述所有任務(wù)的狀態(tài)設(shè)置為“掃描中”;
第二階段
步驟S21,oScan模塊將第1批文件列表發(fā)送至oBke模塊,若oScan模塊未收到oBke模塊反饋的ACK(Acknowledgement,即確認字符),則重新投遞到發(fā)送隊列;
步驟S22,oBke模塊接收第1批文件列表,并將該第1批文件列表存儲,后反饋ACK;
步驟S23,重復(fù)步驟上述步驟S21-S22,直至oScan模塊將第n批文件列表發(fā)送至oBke模塊,同時,該第n批文件列表中附帶完成標識
步驟S24,oBke模塊接收第n批文件列表,并將該第n批文件列表存儲,并將該任務(wù)的狀態(tài)設(shè)置成“已完成”,并預(yù)備同步這些文件;
第三階段
oScan模塊處理完成,將該任務(wù)從隊列中刪除,并清理占用的內(nèi)存。
此外,圖5示出了oScan模塊處理oBke模塊的任務(wù)的流程圖,具體流程如下:
步驟51,oScan模塊開始處理掃描任務(wù);
步驟52,oScan模塊查看是否有空閑的工作線程,若沒有,返回步驟S51,若有,則執(zhí)行步驟S51;
步驟53,oScan模塊從本地pending隊列中取出一個任務(wù),選出一個空閑的工作線程,將該任務(wù)掛載到該線程中,同時,從本地pending隊列中取出一個任務(wù),選出一個空閑線程,并掛載到該空閑線程中,同時設(shè)置該線程狀態(tài)為busy(忙碌的)。
根據(jù)本發(fā)明的實施例,還提供了一種掃描文件的系統(tǒng)。
如圖6所示,根據(jù)本發(fā)明實施例的掃描文件的系統(tǒng)包括:
獲取模塊61,用于獲取預(yù)先設(shè)置的備份規(guī)則;
掃描發(fā)送模塊62,用于根據(jù)備份規(guī)則,掃描出需備份的文件,并且將需備份的文件列表發(fā)送;
備份模塊63,用于接收文件列表,并將需備份的文件進行備份。
根據(jù)本發(fā)明的一個實施例,掃描發(fā)送模塊62包括:
添加模塊(未示出),用于根據(jù)備份規(guī)則,生成掃描任務(wù),并將掃描任務(wù)添加到工作線程中;
掃描模塊(未示出),用于根據(jù)掃描任務(wù),工作線程對目錄進行掃描,并處理目錄對應(yīng)的目錄項。
根據(jù)本發(fā)明的一個實施例,文件列表包括:文件信息、目錄信息。
根據(jù)本發(fā)明的一個實施例,掃描模塊包括:
文件掃描模塊(未示出),用于在目錄項為文件的情況下,工作線程將需備份的文件對應(yīng)的目錄項中的文件信息發(fā)送至對應(yīng)的控制模塊;
目錄掃描模塊(未示出),用于在目錄項為目錄的情況下,工作線程將掃描任務(wù)進行分配給掃描進程,并且將掃描任務(wù)添加到掃描隊列的隊首,以及將需備份的文件對應(yīng)的目錄項中的目錄信息發(fā)送至對應(yīng)的控制模塊。
綜上所述,借助于本發(fā)明的上述技術(shù)方案,通過獲取預(yù)先設(shè)置的備份規(guī)則,隨后根據(jù)備份規(guī)則,掃描出需備份的文件,并且將需備份的文件列表發(fā)送,最后接收文件列表,并將需備份的文件進行備份,從而能夠?qū)⑸a(chǎn)系統(tǒng)中的文件正確高效地傳輸?shù)诫x線系統(tǒng)中。同時,在每批次接收文件列表成功后,控制模塊反饋Ack信息,避免了文件傳輸錯誤或傳輸失敗等情況。
以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。