專利名稱::一種基于指紋的數(shù)據(jù)備份系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明屬于計(jì)算機(jī)存儲(chǔ)備份領(lǐng)域,具體涉及一種數(shù)據(jù)備份系統(tǒng)。
背景技術(shù):
:在當(dāng)今這個(gè)知識(shí)爆炸的信息時(shí)代,無論對(duì)企業(yè)還是個(gè)人來說,數(shù)據(jù)都是一項(xiàng)彌足珍貴的資源。數(shù)據(jù)丟失輕則影響企業(yè)業(yè)務(wù)連續(xù)性,使其喪失一時(shí)的競(jìng)爭(zhēng)優(yōu)勢(shì),重則能使一個(gè)企業(yè)破產(chǎn)倒閉。引起數(shù)據(jù)丟失的原因很多,包括系統(tǒng)軟硬件故障、人為操作失誤或破壞以及不可抗拒力(自然災(zāi)害、戰(zhàn)爭(zhēng))等。為了保護(hù)數(shù)據(jù)免遭不測(cè),傳統(tǒng)的方法是周期性地把數(shù)據(jù)拷貝到可移動(dòng)的媒介比如磁帶、光盤上,然后再離線運(yùn)送到一個(gè)相對(duì)安全的地方以便在必要時(shí)恢復(fù)這些數(shù)據(jù)。應(yīng)當(dāng)指出,這種傳統(tǒng)的數(shù)據(jù)保護(hù)方法存在一些明顯的缺點(diǎn)(1)、可移動(dòng)的存儲(chǔ)介質(zhì)比如磁帶、光盤等隨著時(shí)間的流逝,會(huì)出現(xiàn)磨損或損壞使其存儲(chǔ)可靠性降低因而不適合作數(shù)據(jù)的長(zhǎng)期存儲(chǔ)介質(zhì)。(2)、作為備份大容量數(shù)據(jù)的常用存儲(chǔ)媒介的磁帶,其讀寫速度往往很慢,而且由于是順序存儲(chǔ)設(shè)備,在恢復(fù)數(shù)據(jù)時(shí)通常會(huì)出現(xiàn)頻繁的機(jī)械倒帶操作,如果備份數(shù)據(jù)分布在幾條磁帶上,還需費(fèi)時(shí)的裝卸操作。這使得利用磁帶進(jìn)行數(shù)據(jù)備份和恢復(fù)是一件相當(dāng)耗時(shí)的工作。(3)、需要雇用專人把備份數(shù)據(jù)運(yùn)送到遠(yuǎn)程站點(diǎn),并且保證運(yùn)輸和儲(chǔ)存過程中的數(shù)據(jù)安全。由此可以看出,傳統(tǒng)的數(shù)據(jù)備份需要人工介入完成許多任務(wù),是一項(xiàng)代價(jià)高昂的、繁瑣的工作。為了提高數(shù)據(jù)備份和恢復(fù)的效率,克服傳統(tǒng)的數(shù)據(jù)保護(hù)技術(shù)的缺點(diǎn),近二十年來,世界上一些知名的IT企業(yè)或研究機(jī)構(gòu)研制出了形形色色的數(shù)據(jù)備份系統(tǒng)。包括IBM的TotalStorage,HP的OpenView存儲(chǔ)鏡像軟件、CASA、XPCA以及EVACA,EMC的SRDF和MirrorView,VERITAS的NetBackup等等。這些商業(yè)系統(tǒng)沒有重復(fù)數(shù)據(jù)刪除功能,為了存儲(chǔ)在備份中產(chǎn)生的大量冗余數(shù)據(jù),往往需要使用磁盤到磁帶(D2T)技術(shù),即使用高速磁盤作為備份緩沖區(qū)以提高在線備份效率,然后在后臺(tái)把磁盤緩沖區(qū)中的備份數(shù)據(jù)遷移到磁帶庫(kù)或光盤庫(kù)等低速大容量的存儲(chǔ)媒介上,故其后臺(tái)存儲(chǔ)設(shè)備還是需要耗費(fèi)大量的人力物力進(jìn)行日常維護(hù)。由于磁盤存儲(chǔ)較磁帶存儲(chǔ)具有管理方便、存取速度快等優(yōu)點(diǎn),隨著磁盤存儲(chǔ)技術(shù)的發(fā)展,使用磁盤存儲(chǔ)數(shù)據(jù)的備份系統(tǒng)越來越受到重視。目前的磁盤存儲(chǔ)技術(shù)能夠很容易搭建一個(gè)TB甚至PB級(jí)的磁盤存儲(chǔ)系統(tǒng)。每比特磁盤存儲(chǔ)的價(jià)格越來越便宜使得利用磁盤永久歸檔數(shù)據(jù)變得現(xiàn)實(shí)起來。對(duì)于一個(gè)基于磁盤的數(shù)據(jù)備份系統(tǒng)來說,備份數(shù)據(jù)永久存儲(chǔ)于磁盤而不擦除具有許多優(yōu)點(diǎn)首先,數(shù)據(jù)可以連續(xù)地寫到磁盤上,不會(huì)因?yàn)榭臻g回收而產(chǎn)生磁盤碎片,其次,用戶的數(shù)據(jù)歷史得到完整的保存,用戶可以很方便地瀏覽文件的任一歷史版本,第三,有利于保護(hù)用戶的備份數(shù)據(jù),避免了用戶誤操作而刪除重要的數(shù)據(jù)。然而,對(duì)于一個(gè)永久存儲(chǔ)的基于磁盤的備份系統(tǒng)來說,最大的挑戰(zhàn)來源于用戶不斷增加的備份數(shù)據(jù)。通常,企業(yè)的數(shù)據(jù)具有高度的冗余,大量重復(fù)的數(shù)據(jù)和文件存儲(chǔ)在系統(tǒng)中,一個(gè)文件的多個(gè)編輯版本之間也存在大量重復(fù)的內(nèi)容。目前廣泛使用的基于文件的備份技術(shù)不能識(shí)別文件之間的冗余數(shù)據(jù),導(dǎo)致越來越多的重復(fù)數(shù)據(jù)備份到系統(tǒng)中,不但降低了備份系統(tǒng)的磁盤空間利用率,而且無端通過網(wǎng)絡(luò)傳輸了大量冗余數(shù)據(jù),增加了數(shù)據(jù)備份的網(wǎng)絡(luò)開銷,延長(zhǎng)了數(shù)據(jù)備份時(shí)間。由此可見,開發(fā)一個(gè)永久存儲(chǔ)的基于磁盤的備份系統(tǒng),并采用新的數(shù)據(jù)備份技術(shù)清除備份的冗余數(shù)據(jù),提高系統(tǒng)的存儲(chǔ)效率,是具有積極意義的。
發(fā)明內(nèi)容本發(fā)明提出一種基于指紋的數(shù)據(jù)備份系統(tǒng),系統(tǒng)采用磁盤永久存儲(chǔ)備份數(shù)據(jù)并采用基于指紋的數(shù)據(jù)備份技術(shù)以刪除備份中的冗余數(shù)據(jù),目的在于降低數(shù)據(jù)備份的管理、存儲(chǔ)以及網(wǎng)絡(luò)開銷,提高備份性能。本發(fā)明的一種基于指紋的數(shù)據(jù)備份系統(tǒng),包括備份服務(wù)器、備份代理、存儲(chǔ)服務(wù)器和Web服務(wù)器,它們通過網(wǎng)絡(luò)相互通信完成數(shù)據(jù)備份與恢復(fù),其特征在于所述備份服務(wù)器裝有配置文件和目錄數(shù)據(jù)庫(kù),備份服務(wù)器的配置文件中記錄用戶定義的作業(yè)對(duì)象,作業(yè)對(duì)象包含指定系統(tǒng)操作作業(yè)運(yùn)行的屬性,備份服務(wù)器通過作業(yè)對(duì)象控制著整個(gè)數(shù)據(jù)備份和恢復(fù)的過程;目錄數(shù)據(jù)庫(kù)存儲(chǔ)作業(yè)記錄,作業(yè)記錄保存作業(yè)對(duì)象運(yùn)行的管理信息;所述備份代理單元安裝于網(wǎng)絡(luò)中每一個(gè)需要備份數(shù)據(jù)的主機(jī)上,備份時(shí)由備份代理單元從所在主機(jī)的文件系統(tǒng)中讀取需要備份的文件,對(duì)文件進(jìn)行基于錨的分塊并計(jì)算分塊的指紋,把指紋和部分需要的分塊數(shù)據(jù)通過網(wǎng)絡(luò)送往存儲(chǔ)服務(wù)器;恢復(fù)時(shí)備份代理單元通過網(wǎng)絡(luò)從存儲(chǔ)服務(wù)器接收文件數(shù)據(jù)并寫到所在主機(jī)的文件系統(tǒng)中指定的目錄下;所述存儲(chǔ)服務(wù)器安裝有大容量磁盤陣列,大容量磁盤陣列是數(shù)據(jù)備份的目的地,備份時(shí)通過網(wǎng)絡(luò)從相應(yīng)的備份代理單元接收指紋或數(shù)據(jù)分塊,把數(shù)據(jù)分塊存儲(chǔ)到磁盤上,并建立文件的索引;恢復(fù)時(shí)則從大容量磁盤陣列根據(jù)文件索引重構(gòu)文件,并把文件數(shù)據(jù)通過網(wǎng)絡(luò)送到相應(yīng)的備份代理;所述Web服務(wù)器是本系統(tǒng)的B-S模式網(wǎng)頁(yè)用戶管理界面,通過登錄Web服務(wù)器,用戶既可以指定系統(tǒng)完成交互式的備份或恢復(fù)作業(yè)、監(jiān)視系統(tǒng)自動(dòng)調(diào)度型作業(yè)的運(yùn)行情況,還可以修改備份服務(wù)器的配置文件、定制作業(yè)對(duì)象,進(jìn)行設(shè)備管理。所述的基于指紋的數(shù)據(jù)備份系統(tǒng),其特征在于,所述備份服務(wù)器包括備份服務(wù)器初始化模塊、命令監(jiān)聽模塊、命令處理模塊、作業(yè)處理模塊和網(wǎng)絡(luò)通信模塊;所述備份服務(wù)器初始化模塊執(zhí)行初始化工作,包括讀取配置文件、建立內(nèi)存中的資源鏈表、檢查目錄數(shù)據(jù)庫(kù)狀態(tài)、保證配置文件和目錄數(shù)據(jù)庫(kù)的數(shù)據(jù)一致性和完整性、啟動(dòng)命令監(jiān)控端口、接受來自Web服務(wù)器的用戶侖令、初始化作業(yè)隊(duì)列和用戶命令隊(duì)列、向作業(yè)隊(duì)列中加載作業(yè)對(duì)象、啟動(dòng)作業(yè)和網(wǎng)絡(luò)監(jiān)控服務(wù);所述命令監(jiān)聽模塊是由系統(tǒng)生成的一個(gè)網(wǎng)絡(luò)監(jiān)聽線程,對(duì)Web服務(wù)器的連接請(qǐng)求進(jìn)行認(rèn)證,保證只有經(jīng)過系統(tǒng)授權(quán)的Web服務(wù)器才能連接系統(tǒng),監(jiān)聽已通過認(rèn)證的Web服務(wù)器發(fā)送來的命令請(qǐng)求;收到命令請(qǐng)求時(shí),將命令請(qǐng)求加入到用戶命令隊(duì)列中等待系統(tǒng)處理;所述命令處理模塊包括一個(gè)用戶命令隊(duì)列和N個(gè)命令工作線程,當(dāng)用戶命令隊(duì)列溢出時(shí),命令監(jiān)聽模塊轉(zhuǎn)入睡眠狀態(tài);這些命令工作線程不斷從用戶命令隊(duì)列中讀取命令并執(zhí)行,根據(jù)所執(zhí)行命令的不同完成不同的功能;當(dāng)命令監(jiān)聽模塊向用戶命令隊(duì)列中加入一個(gè)命令時(shí),如果當(dāng)前沒有空閑的命令工作線程且活躍的命令工作線程的數(shù)目沒有達(dá)到N時(shí),就生成一個(gè)新的命令工作線程;命令工作線程每次從用戶命令隊(duì)列中讀取命令時(shí)都檢查命令監(jiān)聽模塊的狀態(tài),如果其處于睡眠狀態(tài)則喚醒它;所述作業(yè)處理模塊包括一個(gè)作業(yè)隊(duì)列、L個(gè)作業(yè)工作線程和一個(gè)作業(yè)隊(duì)列加載線程,當(dāng)作業(yè)隊(duì)列發(fā)生溢出時(shí),作業(yè)隊(duì)列加載線程進(jìn)入睡眠狀態(tài);作業(yè)工作線程不斷從作業(yè)隊(duì)列中取作業(yè)對(duì)象并執(zhí)行,根據(jù)作業(yè)對(duì)象屬性的不同調(diào)用不同的資源、實(shí)現(xiàn)不同的功能;作業(yè)隊(duì)列加載線程進(jìn)行作業(yè)調(diào)度,檢查作業(yè)資源鏈中每個(gè)作業(yè)對(duì)象的調(diào)度策略屬性,把需要調(diào)度運(yùn)行的作業(yè)對(duì)象加入作業(yè)隊(duì)列中,如果當(dāng)前沒有空閑的作業(yè)工作線程且活躍的作業(yè)工作線程的數(shù)目沒有達(dá)到L時(shí),就生成一個(gè)新的作業(yè)工作線程;作業(yè)工作線程每次從作業(yè)隊(duì)列中讀取作業(yè)對(duì)象時(shí)都檢查作業(yè)隊(duì)列加載線程的狀態(tài),如果其處于睡眠狀態(tài)則喚醒它;所述網(wǎng)絡(luò)通信模塊把標(biāo)準(zhǔn)的網(wǎng)絡(luò)通信應(yīng)用編程接口進(jìn)行封裝,向命令工作線程和作業(yè)工作線程提供網(wǎng)絡(luò)通信接口,網(wǎng)絡(luò)通信接口實(shí)現(xiàn)備份服務(wù)器、備份代理和存儲(chǔ)服務(wù)器之間的數(shù)據(jù)傳輸協(xié)議。所述的基于指紋的數(shù)據(jù)備份系統(tǒng),其特征在于,所述備份代理包括備份代理初始化模塊、請(qǐng)求監(jiān)聽模塊、作業(yè)處理模塊、文件分塊模塊和網(wǎng)絡(luò)通信模塊;所述備份代理初始化模塊,執(zhí)行初始化工作,包括讀取備份代理配置文件、建立內(nèi)存資源鏈表、初始化作業(yè)隊(duì)列、啟動(dòng)備份服務(wù)器請(qǐng)求監(jiān)聽模塊;所述請(qǐng)求監(jiān)聽模塊監(jiān)聽網(wǎng)絡(luò)上備份服務(wù)器的連接請(qǐng)求,認(rèn)證連接的備份服務(wù)器,認(rèn)證通過后生成一個(gè)網(wǎng)絡(luò)連接套接字和此備份服務(wù)器通信并加入作業(yè)隊(duì)列中;所述作業(yè)處理模塊包括一個(gè)作業(yè)隊(duì)列和M個(gè)作業(yè)工作線程,當(dāng)作業(yè)隊(duì)列溢出時(shí),請(qǐng)求監(jiān)聽模塊轉(zhuǎn)入睡眠狀態(tài);作業(yè)工作線程從作業(yè)隊(duì)列中取出一個(gè)網(wǎng)絡(luò)連接套接字后,首先為作業(yè)建立一個(gè)作業(yè)控制記錄,把網(wǎng)絡(luò)連接套接字鏈入作業(yè)控制記錄的成員變量中,然后通過此網(wǎng)絡(luò)連接套接字和備份服務(wù)器交互,把備份服務(wù)器作業(yè)對(duì)象的有關(guān)屬性通過變換后賦值給作業(yè)控制記錄的相應(yīng)成員變量;然后用從備份服務(wù)器處得到的作業(yè)票據(jù)ticket連接相應(yīng)的存儲(chǔ)服務(wù)器,產(chǎn)生一個(gè)和存儲(chǔ)服務(wù)器通信的網(wǎng)絡(luò)連接套接字并將之鏈入作業(yè)控制記錄的成員變量中;當(dāng)請(qǐng)求監(jiān)聽模塊向作業(yè)隊(duì)列中加入一個(gè)網(wǎng)絡(luò)連接套接字時(shí),如果當(dāng)前沒有空閑的作業(yè)工作線程且活躍的作業(yè)工作線程的數(shù)目沒有達(dá)到M時(shí),就生成一個(gè)新的作業(yè)工作線程;作業(yè)工作線程每次從作業(yè)隊(duì)列中取一個(gè)網(wǎng)絡(luò)連接套接字時(shí)都檢查請(qǐng)求監(jiān)聽模塊的狀態(tài),如果其處于睡眠狀態(tài)則喚醒它;所述文件分塊模塊接受作業(yè)處理模塊中作業(yè)工作線程的命令執(zhí)行備份作業(yè)的文件分塊任務(wù),在客戶機(jī)文件系統(tǒng)上打開文件集中的每一個(gè)文件,對(duì)文件進(jìn)行基于錨的分塊并計(jì)算分塊指紋,和相應(yīng)的存儲(chǔ)服務(wù)器協(xié)調(diào)執(zhí)行第一備份過程的備份算法;所述網(wǎng)絡(luò)通信模塊由作業(yè)的網(wǎng)絡(luò)連接套接字組成,備份代理的每個(gè)作業(yè)都擁有兩個(gè)網(wǎng)絡(luò)連接套接字,分別用于和該作業(yè)對(duì)應(yīng)的備份服務(wù)器作業(yè)以及存儲(chǔ)服務(wù)器作業(yè)通信。所述的基于指紋的數(shù)據(jù)備份系統(tǒng),其特征在于,所述存儲(chǔ)服務(wù)器包括存儲(chǔ)服務(wù)器初始化模塊、連接監(jiān)控模塊、作業(yè)票據(jù)表、作業(yè)處理模塊和網(wǎng)絡(luò)通信模塊,以及索引緩沖區(qū)、分塊緩沖區(qū)、分塊哈希表和磁盤日志;所述存儲(chǔ)服務(wù)器初始化模塊執(zhí)行初始化工作,包括解析存儲(chǔ)服務(wù)器配置文件,建立內(nèi)存資源鏈表,啟動(dòng)相關(guān)服務(wù)線程;所述連接監(jiān)控模塊監(jiān)控備份服務(wù)器和備份代理的連接請(qǐng)求,對(duì)連接的備份服務(wù)器進(jìn)行認(rèn)證,認(rèn)證通過后生成一個(gè)網(wǎng)絡(luò)連接套接字和此備份服務(wù)器通信并加入作業(yè)隊(duì)列中;對(duì)連接的備份代理,則根據(jù)其出示的作業(yè)票據(jù)ticket檢查作業(yè)票據(jù)表以對(duì)其進(jìn)行認(rèn)證,認(rèn)證通過后生成一個(gè)網(wǎng)絡(luò)連接套接字和此備份代理通信并鏈接到相應(yīng)作業(yè)控制記錄的成員變量中;所述作業(yè)票據(jù)表用于存儲(chǔ)對(duì)備份代理作業(yè)進(jìn)行認(rèn)證的票據(jù);所述作業(yè)處理模塊包括一個(gè)作業(yè)隊(duì)列以及W個(gè)作業(yè)工作線程,當(dāng)作業(yè)隊(duì)列溢出時(shí),連接監(jiān)控模塊轉(zhuǎn)入"拒絕備份服務(wù)器連接請(qǐng)求"狀態(tài);作業(yè)工作線程從作業(yè)隊(duì)列中取出一個(gè)網(wǎng)絡(luò)連接套接字后,首先為作業(yè)建立一個(gè)作業(yè)控制記錄,把網(wǎng)絡(luò)連接套接字鏈入作業(yè)控制記錄的成員變量中,然后通過此網(wǎng)絡(luò)連接套接字和備份服務(wù)器交互,把備份服務(wù)器作業(yè)對(duì)象的有關(guān)屬性通過變換后賦值給作業(yè)控制記錄的相應(yīng)成員變量,并隨機(jī)生成一個(gè)作業(yè)票據(jù)ticket登記到作業(yè)票據(jù)表中且向備份服務(wù)器作業(yè)對(duì)象傳送此作業(yè)票據(jù)ticket;當(dāng)連接監(jiān)控模塊向作業(yè)隊(duì)列中加入一個(gè)網(wǎng)絡(luò)連接套接字時(shí),如果當(dāng)前沒有空閑的作業(yè)工作線程且活躍的作業(yè)工作線程的數(shù)目沒有達(dá)到W時(shí),就生成一個(gè)新的作業(yè)工作線程;作業(yè)工作線程每次從作業(yè)隊(duì)列中取一個(gè)網(wǎng)絡(luò)連接套接字時(shí)都檢査連接監(jiān)控模塊的狀態(tài),如果其處于"拒絕備份服務(wù)器連接請(qǐng)求"狀態(tài)則取消這種狀態(tài)以使它接受備份服務(wù)器連接請(qǐng)求;所述網(wǎng)絡(luò)通信模塊由作業(yè)的網(wǎng)絡(luò)連接套接字組成,存儲(chǔ)服務(wù)器的每個(gè)作業(yè)都擁有兩個(gè)網(wǎng)絡(luò)連接套接字,分別用于和該作業(yè)對(duì)應(yīng)的備份服務(wù)器作業(yè)以及備份代理作業(yè)通信;所述索引緩沖區(qū)是存儲(chǔ)服務(wù)器作業(yè)執(zhí)行第一備份過程和第二備份過程的基礎(chǔ)設(shè)施,索引緩沖區(qū)以一個(gè)內(nèi)存哈希表實(shí)現(xiàn),用于存儲(chǔ)本作業(yè)鏈中本作業(yè)實(shí)例Job^)的前一個(gè)作業(yè)實(shí)例Job"U包含的所有指紋以及在本作業(yè)運(yùn)行過程中新生成的指紋;所述分塊緩沖區(qū)是存儲(chǔ)服務(wù)器作業(yè)執(zhí)行第一備份過程和第二備份過程的基礎(chǔ)設(shè)施,分塊緩沖區(qū)以一個(gè)獨(dú)立的磁盤陣列實(shí)現(xiàn),用以臨時(shí)存儲(chǔ)第一備份過程中其指紋在索引緩沖區(qū)中沒有被找到的數(shù)據(jù)分塊;所述分塊哈希表是存儲(chǔ)服務(wù)器作業(yè)執(zhí)行第二備份過程的基礎(chǔ)設(shè)施,分塊哈希表以一個(gè)獨(dú)立的磁盤陣列實(shí)現(xiàn),用以建立分塊指紋到此分塊在磁盤日志的存儲(chǔ)地址的映射;所述磁盤日志是存儲(chǔ)服務(wù)器作業(yè)執(zhí)行第二備份過程的基礎(chǔ)設(shè)施,磁盤日志以一個(gè)獨(dú)立的磁盤陣列實(shí)現(xiàn),用以存儲(chǔ)數(shù)據(jù)分塊和以分塊形式存儲(chǔ)的文件索引。本發(fā)明的優(yōu)點(diǎn)為1、采用基于錨的文件分塊技術(shù)把文件分成變長(zhǎng)大小的塊以識(shí)別文件內(nèi)部或文件之間的冗余數(shù)據(jù),具有修改穩(wěn)定性,對(duì)一個(gè)文件的修改僅僅影響修改區(qū)域內(nèi)相鄰的數(shù)據(jù)塊,其他數(shù)據(jù)塊的邊界不會(huì)發(fā)生移動(dòng)。這樣在對(duì)一個(gè)文件進(jìn)行增量備份時(shí),僅僅修改過的幾個(gè)數(shù)據(jù)塊需要備份,其他的數(shù)據(jù)塊可以和以前的備份文件共享;使用窗口滑動(dòng)計(jì)算,計(jì)算開銷小。2、數(shù)據(jù)分塊以其指紋為索引存儲(chǔ)在存儲(chǔ)服務(wù)器的磁盤陣列上,把數(shù)據(jù)存儲(chǔ)地址和內(nèi)容關(guān)聯(lián)起來,改變了數(shù)據(jù)存儲(chǔ)地址和內(nèi)容相分離的傳統(tǒng)概念,消除了冗余數(shù)據(jù)的備份,節(jié)省了磁盤存儲(chǔ)空間;3、數(shù)據(jù)分塊一旦存儲(chǔ)就不再擦除,數(shù)據(jù)分塊可以連續(xù)追加在磁盤上,消除了磁盤存儲(chǔ)碎片;用戶的數(shù)據(jù)歷史得到完整保存,用戶可以很方便地瀏覽文件的任一歷史版本;避免了用戶誤操作而刪除重要數(shù)據(jù)。4、采用有效的備份緩沖策略,減少了備份的網(wǎng)絡(luò)開銷,提高了數(shù)據(jù)備份速度,降低了備份對(duì)應(yīng)用服務(wù)器的影響。圖l為本發(fā)明結(jié)構(gòu)示意圖;圖2為備份服務(wù)器結(jié)構(gòu)示意圖3為備份代理結(jié)構(gòu)示意圖4為存儲(chǔ)服務(wù)器結(jié)構(gòu)示意圖5為文件在磁盤日志上的存儲(chǔ)示意圖6為磁盤日志上多個(gè)文件共享數(shù)據(jù)分塊/索引塊示意圖;圖7為本發(fā)明的索引緩沖區(qū)結(jié)構(gòu)圖;圖8為基于錨的文件分塊技術(shù)中,文件分塊示意圖。具體實(shí)施例方式下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明進(jìn)一步詳細(xì)說明。1、系統(tǒng)總體結(jié)構(gòu)圖l為本發(fā)明系統(tǒng)體系示意圖,本發(fā)明包括備份服務(wù)器、備份代理、存儲(chǔ)服務(wù)器和Web服務(wù)器,它們通過網(wǎng)絡(luò)相互通信完成數(shù)據(jù)備份與恢復(fù)。圖2為備份服務(wù)器結(jié)構(gòu)示意圖;備份服務(wù)器包括備份服務(wù)器初始化模塊、命令監(jiān)聽模塊、命令處理模塊、作業(yè)處理模塊和網(wǎng)絡(luò)通信模塊;還裝有配置文件和目錄數(shù)據(jù)庫(kù)。備份服務(wù)器是整個(gè)網(wǎng)絡(luò)備份系統(tǒng)的指揮中樞,它通過作業(yè)對(duì)象控制著整個(gè)數(shù)據(jù)備份和恢復(fù)的過程。備份服務(wù)器的作業(yè)對(duì)象給用戶提供了一個(gè)定制備份/恢復(fù)作業(yè)的窗口。作業(yè)對(duì)象包含了許多屬性,這些屬性指定了系統(tǒng)如何操作作業(yè)運(yùn)行。如備份代理屬性指定了作業(yè)從哪一臺(tái)主機(jī)上備份/恢復(fù)數(shù)據(jù);文件集屬性指定了作業(yè)要備份/恢復(fù)的目錄;調(diào)度策略屬性指定了系統(tǒng)調(diào)度本作業(yè)運(yùn)行的策略等等。記一個(gè)作業(yè)對(duì)象為Jobx,作業(yè)對(duì)象在時(shí)刻t被調(diào)度運(yùn)行時(shí)產(chǎn)生一個(gè)運(yùn)行實(shí)例Jobx(t)。作業(yè)對(duì)象Jobx按時(shí)間順序的一序列運(yùn)行實(shí)例Jobx(to),Job"tO,...Jobx(tn)(to〈t^…〈tn)組成了本作業(yè)對(duì)象的一條作業(yè)鏈,記為Job"to,t,,...g。所述備份服務(wù)器同時(shí)維護(hù)著一個(gè)目錄數(shù)據(jù)庫(kù)用于記錄Job"t)的管理信息。具體地說,Jobx(t)的管理信息存儲(chǔ)在目錄數(shù)據(jù)庫(kù)中本作業(yè)的作業(yè)記錄Jobx(t).Rec0rd中。目錄數(shù)據(jù)庫(kù)用來存儲(chǔ)作業(yè)運(yùn)行的管理信息,即Job"t).Record。Jobx(t).ReCOrd主要存儲(chǔ)本作業(yè)包含的文件的根塊,本作業(yè)的指紋文件Jobx(t).FF等。每一個(gè)運(yùn)行完成的作業(yè)Job"t)都在目錄數(shù)據(jù)庫(kù)中保存一份指紋文件Jobx(t).FF,Jobx(t).FF存儲(chǔ)作業(yè)Job"t)所包含的所有指紋。Jobx(tn).FF用于對(duì)作業(yè)Jobx(tn+1)的索引緩沖區(qū)進(jìn)行初始化。圖3為備份代理結(jié)構(gòu)示意圖;備份代理包括備份代理初始化模塊、請(qǐng)求監(jiān)聽模塊、作業(yè)處理模塊、文件分塊模塊和網(wǎng)絡(luò)通信模塊。圖4為存儲(chǔ)服務(wù)器結(jié)構(gòu)示意圖;存儲(chǔ)服務(wù)器包括存儲(chǔ)服務(wù)器初始化模塊、連接監(jiān)控模塊、作業(yè)票據(jù)表、作業(yè)處理模塊和網(wǎng)絡(luò)通信模塊,以及索引緩沖區(qū)、分塊緩沖區(qū)、分塊哈希表和磁盤日志。存儲(chǔ)服務(wù)器管理著一個(gè)大容量的磁盤陣列(RAID)用以存儲(chǔ)數(shù)據(jù)分塊。分塊以其指紋為索引存儲(chǔ)在磁盤陣列上。數(shù)據(jù)分塊一旦寫到磁盤上就不再擦除,這樣整個(gè)磁盤陣列就像一個(gè)日志,數(shù)據(jù)分塊無間隔地追加在磁盤上,消除了磁盤存儲(chǔ)的碎片。用于存儲(chǔ)數(shù)據(jù)分塊的磁盤被稱為磁盤曰志。存儲(chǔ)服務(wù)器使用一塊專用的磁盤陣列存儲(chǔ)分塊哈希表,分塊哈希表用以建立分塊指紋到此分塊在磁盤日志的存儲(chǔ)地址的映射。備份文件的所有數(shù)據(jù)分塊通過索引塊進(jìn)行索引,一個(gè)文件的所有索引塊組成了一棵索引樹。同時(shí)每一個(gè)文件都擁有唯一的一個(gè)分塊叫根塊,根塊存儲(chǔ)文件的索引樹的根的索引,同時(shí)文件的元數(shù)據(jù)以及一些管理信息也存儲(chǔ)在根塊上。文件的根塊以及索引塊也作為數(shù)據(jù)分塊存儲(chǔ)在磁盤日志上。存儲(chǔ)服務(wù)器采用備份緩沖策略以提高系統(tǒng)的數(shù)據(jù)備份速度。具體為(1)采用內(nèi)存索引緩沖區(qū)存儲(chǔ)本作業(yè)鏈中本作業(yè)實(shí)例J0b"U的前一個(gè)作業(yè)實(shí)例Job"U包含的所有指紋以及在本作業(yè)運(yùn)行過程中新生成的指紋。(2)采用一塊專用的磁盤陣列作為分塊緩沖區(qū)用以臨時(shí)存儲(chǔ)備份過程中其指紋在索引緩沖區(qū)中沒有被找到的數(shù)據(jù)分塊。(3)—個(gè)作業(yè)的備份過程被分成兩個(gè)階段完成,這兩個(gè)階段分別記為第一備份過程和第二備份過程。第一備份過程由備份代理和存儲(chǔ)服務(wù)器相互交互完成文件分塊的備份,使用索引緩沖區(qū)査找分塊指紋,使用分塊緩沖區(qū)存儲(chǔ)在索引緩沖區(qū)查找過程中沒有發(fā)現(xiàn)其指紋的數(shù)據(jù)分塊。對(duì)備份代理來說,第一備份過程完成后作業(yè)的備份過程就算結(jié)束了。因?yàn)楸具^程使用內(nèi)存索引緩沖區(qū)進(jìn)行指紋查詢,免去了費(fèi)時(shí)的分塊哈希表査詢,故而速度很快。第二備份過程由存儲(chǔ)服務(wù)器在系統(tǒng)相對(duì)空閑的時(shí)候運(yùn)行。本過程把分塊緩沖區(qū)中臨時(shí)存儲(chǔ)的數(shù)據(jù)分塊轉(zhuǎn)存到磁盤日志上,使用分塊哈希表進(jìn)行指紋查詢。本過程同時(shí)建立文件在磁盤日志上的索引樹。由于第二備份過程是在后臺(tái)由存儲(chǔ)服務(wù)器獨(dú)自完成,故而對(duì)運(yùn)行備份代理的應(yīng)用服務(wù)器沒有影響?;謴?fù)文件時(shí),存儲(chǔ)服務(wù)器根據(jù)文件索引重構(gòu)文件并把文件數(shù)據(jù)通過網(wǎng)絡(luò)送到相應(yīng)的備份代理。Web服務(wù)器本發(fā)明采用B-S模式提供網(wǎng)頁(yè)用戶界面。用戶可以在任何地方通過Web瀏覽器登錄系統(tǒng)的管理界面以指定系統(tǒng)完成交互式的備份或恢復(fù)作業(yè)、監(jiān)視系統(tǒng)自動(dòng)調(diào)度型作業(yè)的運(yùn)行情況,還可以定制作業(yè)、配置備份服務(wù)器、進(jìn)行設(shè)備管理等。2、存儲(chǔ)服務(wù)器磁盤白志本發(fā)明備份數(shù)據(jù)分塊以其指紋為索引存儲(chǔ)在存儲(chǔ)服務(wù)器的磁盤日志上。這樣保證沒有相同的兩個(gè)分塊同時(shí)存儲(chǔ)在磁盤上,因而消除了冗余數(shù)據(jù)的備份。分塊一旦存儲(chǔ)就不再擦除,使得分塊可以連續(xù)的追加在磁盤曰志上,消除了磁盤存儲(chǔ)碎片。備份文件所屬的數(shù)據(jù)塊以索引塊為索引。文件的索引塊也存儲(chǔ)在磁盤日志上。2.1、分塊塊頭為了方面管理,每個(gè)數(shù)據(jù)分塊的前面都附加了一個(gè)塊頭。塊頭為系統(tǒng)管理,包括完整性檢測(cè)、文件索引以及分塊哈希表的重構(gòu)提供了必要的信息。塊頭一共39字節(jié),由以下部分組成-magic:6個(gè)字符的塊頭標(biāo)志;fingerprint:本分塊的指紋,共20字節(jié);type:本數(shù)據(jù)分塊的類型,共有三種不同類型的數(shù)據(jù)分塊,即數(shù)據(jù)塊、索引塊和文件的根塊,分別記為&,/c,rc;size:本數(shù)據(jù)分塊的大小,不包括塊頭。對(duì)索引塊,系統(tǒng)規(guī)定其大小不能超過16KB;offset:本數(shù)據(jù)分塊在磁盤日志上的存儲(chǔ)地址。2.2、文件索引圖5所示為文件在磁盤日志上的存儲(chǔ)結(jié)構(gòu)。文件所屬的數(shù)據(jù)塊以索引塊為索引,索引塊也存儲(chǔ)在磁盤日志上,一個(gè)文件的所有索引塊組成了一棵索引樹;每個(gè)文件都在磁盤日志上存儲(chǔ)有唯一的一個(gè)根塊,根塊里存儲(chǔ)文件索引樹的根的索引,同時(shí)還存儲(chǔ)文件的元數(shù)據(jù)和本文件的一些管理信息。文件備份完成后,其根塊作為作業(yè)的管理信息同時(shí)也存儲(chǔ)到目錄數(shù)據(jù)庫(kù)的作業(yè)記錄里。圖5中,F(xiàn)o表示一個(gè)文件,Dj表示數(shù)據(jù)塊,Ii表示索引塊,索引塊由索引項(xiàng)組成,P(X)表示一個(gè)索引項(xiàng),它是一個(gè)三元組〈H(X),offset,type>,其中X是被索引的數(shù)據(jù)分塊,H(X)表示數(shù)據(jù)分塊X的指紋,q訴"表示數(shù)據(jù)分塊X在磁盤日志上的存儲(chǔ)地址,表示數(shù)據(jù)分塊X的類型,X可以是一個(gè)索引塊Ii,也可以是一個(gè)數(shù)據(jù)塊Di,圖中的箭頭表示被索引塊和其索引項(xiàng)的對(duì)應(yīng)關(guān)系,M(Fo)表示文件F0的元數(shù)據(jù)以及一些管理信息,索引塊Io,L和l2組成了文件Fo的索引樹,索引塊Io為此索引樹的根,Ro表示文件F。的根塊,它由M(Fo)和一個(gè)指向文件的索引樹的根I()的索引項(xiàng)P(Io)組成。磁盤日志上的所有數(shù)據(jù)塊和索引塊都可以被不同的文件所共享。圖6所示為不同文件共享數(shù)據(jù)塊和索引塊的情況,圖中各記號(hào)表示的意義和圖5相同。3、存儲(chǔ)服務(wù)器分塊哈希表本發(fā)明存儲(chǔ)服務(wù)器分塊哈希表用以建立分塊指紋到此分塊在磁盤日志的存儲(chǔ)地址的映射,分塊哈希表由相同大小的桶組成。分塊哈希表所包含的桶數(shù)是根據(jù)磁盤日志的大小來確定的,磁盤日志的容量越大,則分塊哈希表所包含的桶數(shù)就越多,以降低桶的哈希沖突的幾率。系統(tǒng)根據(jù)哈希表的桶數(shù)取指紋的前n位作為桶號(hào)把指紋映射到哈希表的相應(yīng)的桶里。每個(gè)指紋以三元組<yMg^/7n>zf,/^7&的形式存儲(chǔ)在桶里,其中ywgw/^",表示此分塊的指紋,o^^/表示此指紋對(duì)應(yīng)的分塊在磁盤日志上的存儲(chǔ)地址,0^e表示此指紋對(duì)應(yīng)的分塊的類型。如果桶發(fā)生哈希沖突,則把指紋的三元組存儲(chǔ)在相鄰的一個(gè)桶里。4、存儲(chǔ)服務(wù)器索引緩沖區(qū)圖7所示為索引緩沖區(qū)的結(jié)構(gòu)。索引緩沖區(qū)為一個(gè)內(nèi)存哈希表,它由一個(gè)桶組和許多數(shù)據(jù)鏈表組成,桶組一共有1024*1024個(gè)桶,桶的編號(hào)從OOOOOH到FFFFFH,桶可能為空,桶若非空,則里面包含一個(gè)指向數(shù)據(jù)鏈表的指針,對(duì)應(yīng)一個(gè)數(shù)據(jù)鏈表,數(shù)據(jù)鏈表的表項(xiàng)存儲(chǔ)被哈希到本桶中的指紋信息。哈希時(shí),取指紋的前20比特作為桶號(hào)把此指紋哈希到相應(yīng)的桶所指向的數(shù)據(jù)鏈表里。數(shù)據(jù)鏈表的表項(xiàng)結(jié)構(gòu)為tag:標(biāo)識(shí)符,占4比特,用以指示在第一備份過程和第二備份過程中本指紋的狀態(tài);fmgerprintTail:本分塊的指紋的后140比特,因?yàn)榍?0比特隱含在桶號(hào)中,故這里只需要存儲(chǔ)指紋的后140比特;offset存儲(chǔ)地址,占64比特,如果此項(xiàng)非空,則表示此指紋對(duì)應(yīng)的數(shù)據(jù)分塊在磁盤日志的存儲(chǔ)地址;next:占32比特,指向下一個(gè)表項(xiàng)的指針。圖7中"一個(gè)指紋"所示為一個(gè)指紋7E54F36A4EC62…3B被哈希到索引緩沖區(qū)的情況,第(l)步用指紋的前20比特"7E54F"作為桶號(hào)(bucketNo)找到編號(hào)為7E54FH的桶,第(2)步在此桶所指的數(shù)據(jù)鏈表中找fingerprintTail為"36A4EC62…3B"的表項(xiàng),如果找到則表明指紋7E54F36A4EC62…3B已經(jīng)存儲(chǔ)在索引緩沖區(qū)中,如果沒有找到,則建立一個(gè)新的表項(xiàng)存儲(chǔ)此指紋的信息。索引緩沖區(qū)的數(shù)據(jù)鏈表表項(xiàng)的tag共有三個(gè)不同的數(shù)值,其表示的意義如下-0000:指紋來源于前一個(gè)作業(yè)的指紋文件,并且在本次備份過程中沒有被命中;1000:指紋來源于前一個(gè)作業(yè)的指紋文件,并且在本次備份過程中被命中;1100:指紋是在本次備份過程中新產(chǎn)生的。一個(gè)備份作業(yè)Jobx(tw)完成后,本作業(yè)所包含的所有指紋以二元組〈fingerprint,offset〉(其中fingerprint表示分塊的指紋,offset表示分塊在磁盤日志上的存儲(chǔ)地址)的形式被保存在文件Jobx(tn—J.FF中,文件Jobx(tn—》.FF被存儲(chǔ)在目錄數(shù)據(jù)庫(kù)的作業(yè)記錄Jobx.Record中。Jobx(tn—j).FF被用來初始化作業(yè)Jobx(U的索引緩沖區(qū)。由于同一個(gè)作業(yè)鏈的相鄰作業(yè)通常共享大量的文件或數(shù)據(jù),故使用Jobx(U.FF初始化作業(yè)Jobx(仁)的索引緩沖區(qū)會(huì)提高緩沖區(qū)的指紋命中率。5、備份過程為方便起見,定義如下記號(hào)BS:備份服務(wù)器作業(yè)工作線程;BA:備份代理作業(yè)工作線程;SS:存儲(chǔ)服務(wù)器作業(yè)工作線程;F:—個(gè)文件;比一個(gè)指紋;M(F):文件F的元數(shù)據(jù);R(F):文件F的根塊;H(D):數(shù)據(jù)分塊D的指紋;D(H):指紋H所對(duì)應(yīng)的數(shù)據(jù)塊/索引塊;F.Index:構(gòu)建文件F的索引樹的內(nèi)存緩沖區(qū);indexcache:索引緩沖區(qū);chunkcache:分塊緩沖區(qū);hashtable:分塊哈希表;Jobx(tn).FileSet:作業(yè)對(duì)象Jobx(O的文件集;I(F,/eve/):索引樹F.Index第level層包含的索引塊的集合。索引樹的葉子被定義成O層,葉子結(jié)點(diǎn)的父結(jié)點(diǎn)為樹的第l層,依次類推。IW(F,level):I(F,level)中當(dāng)前被用于存儲(chǔ)三元組<H,offset,type〉的工作結(jié)點(diǎn);<H,offset,type>:三元組,H:指紋,offset:分i央D(H)在磁盤日志上的存儲(chǔ)地址,type:分塊D(H)的類型;5.1、第一備份過程第一備份過程主要由備份代理作業(yè)工作線程和存儲(chǔ)服務(wù)器作業(yè)工作線程協(xié)作完成,其步驟為SS:使用Jobx(tn.O.FF初始化indexcache;(2)BA:if(Jobx(g.FileSet為空)轉(zhuǎn)(20),else從Jobx(g.FileSet中讀取一個(gè)文件Fj;(3)BA:傳送M(FO到SS;(4)SS:把M(Fj)緩存到chunkcache;(5)BA:對(duì)Fj進(jìn)行基于錨的文件分塊;(6)BA:計(jì)算每個(gè)分塊的指紋并把這些指紋組成的指紋集合傳送到SS;(7)SS:if(指紋集合為空)轉(zhuǎn)(17),else在指紋集合中取出一個(gè)指紋Hj并在indexcache中査詢此指紋;'(8)SS:if(在indexcache查到指紋Hj){(9)SS:if(tag==0000){tag=1000;把<Hj,offset〉緩存到chunkcache0(10)SS:.elseif(tag==1000)把<Hj,offset>緩存至'Jchunkcach^(11)SS:elseif(tag==l100)把<Hj,null〉緩存到chunkcache;}(12)SS:else(把Hj緩存至ljindexcache,tag=1100,offset=null;(13)SS:請(qǐng)求BA傳送D(Hj);(14)BA:傳送D(Hj)到SS;(15)SS:把〈Hk,D(Hk)〉緩存到chunkcache;}(16)SS:返回步驟(7);(17)SS:通知BA備份下一個(gè)文件;(18)BA:返回步驟(2);(19)BA:向BS及SS報(bào)告作業(yè)Jobx(g的結(jié)束狀態(tài)然后退出.(20)SS:收到BA的作業(yè)結(jié)束信號(hào)后,結(jié)束第一備份過程,轉(zhuǎn)入第二備份過程;(21)BS:收到BA的作業(yè)結(jié)束信號(hào)后,斷開和BA的連接,等待SS執(zhí)行第二備份過程。5.1.1基于錨的文件分塊在第一備份過程的步驟(5)中,基于錨的文件分塊是由備份代理作業(yè)工作線程調(diào)用備份代理文件分塊模塊完成的,其步驟為(1)以文件的開頭48字節(jié)b,,b2,…,b48為一個(gè)窗口,以式H產(chǎn)(b,p47+Vy6+…+b48)modM計(jì)算文件的第一個(gè)窗口的哈希值。上式中p為某個(gè)素?cái)?shù),可取17,M為常數(shù),可取232。哈希值存儲(chǔ)在變量I^中。(2)向后滑動(dòng)一個(gè)字節(jié),以式H尸(p承H一b49-bJp48)modM計(jì)算文件第二個(gè)窗口b2,b3,...,b49的哈希值存儲(chǔ)在變量H2中。(3)以此類推,計(jì)算文件的所有窗口的哈希值。(4)對(duì)每個(gè)窗口的哈希值,取其低13位組成一個(gè)二進(jìn)制數(shù),如果此數(shù)等于預(yù)定的某個(gè)數(shù)(比如61),則確定其相應(yīng)的窗口為一個(gè)錨。(5)以錨為邊界把文件分成大小不一的數(shù)據(jù)塊。上述基于錨的文件分塊遵守如下三個(gè)約定a)如果文件小于48字節(jié),則退出基于錨的文件分塊算法,整個(gè)文件為一個(gè)數(shù)據(jù)塊;b)如果在某一段字節(jié)流中包含過多的錨,則舍棄一些錨使得最小的分塊不小于2KB(文件末尾的一個(gè)分塊是唯一的可能小于2KB的分塊);c)如果在連續(xù)64KB的字節(jié)流中都沒有錨,則取此64KB為一個(gè)分塊;本發(fā)明中基于錨的文件分塊具有如下兩個(gè)特點(diǎn)(1)具有修改穩(wěn)定性,也就是說對(duì)一個(gè)文件的修改僅僅影響修改區(qū)域內(nèi)相鄰的數(shù)據(jù)塊,其他數(shù)據(jù)塊的邊界不會(huì)發(fā)生移動(dòng)。這樣在對(duì)一個(gè)文件進(jìn)行增量備份時(shí),僅僅修改過的幾個(gè)數(shù)據(jù)塊需要備份,其他的數(shù)據(jù)塊可以和以前的備份文件進(jìn)行共享。修改穩(wěn)定性還保證了文件內(nèi)部以及文件之間的數(shù)據(jù)相似性不因比特偏移而被遺漏,從而最大限度地檢測(cè)出文件的重復(fù)數(shù)據(jù)。(2)滑動(dòng)窗口具有計(jì)算方便的優(yōu)點(diǎn),其下一個(gè)窗口的哈希值可以很容易從前一個(gè)窗口的哈希值的基礎(chǔ)上計(jì)算出來,因而使得基于錨的文件分塊具有計(jì)算開銷小的優(yōu)點(diǎn),整個(gè)算法的時(shí)間復(fù)雜度為o(n),其中"為文件包含的字節(jié)數(shù)。圖8所示為一個(gè)文件分塊后再對(duì)文件編輯時(shí)此文件分塊的變化情況。從圖中可以看出,基于錨的文件分塊具有修改穩(wěn)定性,也就是說對(duì)一個(gè)文件的修改僅僅影響修改區(qū)域內(nèi)相鄰的數(shù)據(jù)塊,其他數(shù)據(jù)塊的邊界不會(huì)發(fā)生移動(dòng)。a行所示為一個(gè)文件被錨分成了BiB8大小不一的8塊,每一塊的邊界帶紋齒的部分為48字節(jié)的錨。b、c、d行為對(duì)文件進(jìn)行第l、2、3次修改后,分塊的變化情況,帶陰影的部分為被修改過的部分。b行-對(duì)文件的第1次修改發(fā)生在塊B4內(nèi),修改后并沒有產(chǎn)生新的塊,僅僅使塊B/變成了塊B9,其它的塊都沒有發(fā)生改變。這時(shí)候的文件備份就只需要把塊B9備份過去替代原來的塊B4就可以了。C行對(duì)文件的第2次修改發(fā)生在塊Bs內(nèi),修改后產(chǎn)生了新的錨,把塊Bs分成了兩塊Bu)和Bn,其它的塊都沒有發(fā)生改變。這時(shí)候的文件備份就只需要把塊Bu)和Bn備份過去代替原來的塊Bs就行了。d行對(duì)文件的第3次修改發(fā)生在塊B2和B3的分界處,結(jié)果使B2和B3之間的錨丟失,兩塊合并成為一個(gè)塊B,2。這時(shí)候的文件備份只需把塊Bi2備份過去代替原來的塊B2和B3。5.2、第二備份過程第二備份過程主要由存儲(chǔ)服務(wù)器作業(yè)工作線程在系統(tǒng)相對(duì)空閑的時(shí)候完成,其步驟為-(1)SS.'if(Jobx(tn).FileSet為空)轉(zhuǎn)(19),else從Jobx(tn).FileSet中取一個(gè)文件名Fi;(2)SS:為文件Fi創(chuàng)建內(nèi)存緩沖區(qū)Fi.Index,并在Fi.Index中創(chuàng)建R(FO,然后把chunkcache中的M(Fi)存到R(FO;(3)SS:if(chunkcache中沒有和Fj相關(guān)的元組)轉(zhuǎn)(14),else從chunkcache中讀取一個(gè)和Fi相關(guān)的元組;(4)SS:if(是〈Hj,offset〉),轉(zhuǎn)步驟(12);(5)SS:elseif(是<Hj,D(Hj)>){(6)SS:在hashtable中查詢Hj;(7)SS:if(找到)把"offset"值寫到indexcache中和的Hj對(duì)應(yīng)的表項(xiàng)中,轉(zhuǎn)步驟(12);(8)SS:else(把D(Hj)追加到磁盤日志,同時(shí)更新hashtable;(9)SS:把"offset,,值寫到indexcache中和的Hj對(duì)應(yīng)的表項(xiàng)中,轉(zhuǎn)步驟(12);(10)SS:elseif(是〈Hj,nu11〉)(11)SS:從indexcache中Hj對(duì)應(yīng)的表項(xiàng)中讀取"offset"值;(12)SS:insert(〈Hj,offset,0,F"Index);(13)SS:返回步驟(3);(14)SS:storeRemain(Fi.Index,R(Fi));(15)SS:把R(Fi)追加到磁盤日志,同時(shí)更新hashtable;(16)SS:把R(Fi)傳送給BS;(17)BS:把R(Fi)傳送到目錄數(shù)據(jù)庫(kù)并存儲(chǔ)在Jobx(tn).Record中;(18)SS:返回步驟(l);(19)SS:創(chuàng)建文件Job"UFF;(20)SS:讀indexcache,對(duì)每一個(gè)符合條件(tag==1000ortag二4100)的表項(xiàng),把〈H,offset〉寫到文件Jobx(tn).FF中;(21)SS:把文件Jobx(tn).FF傳送給BS;(22)BS:把文件Jobx(tn).FF傳送到目錄數(shù)據(jù)庫(kù)并存儲(chǔ)在Jobx(tn).Record中;(23)SS:向BS報(bào)告作業(yè)Job"tn)的結(jié)束狀態(tài);(24)BS:中斷和SS的連接,把作業(yè)Job"tn)的結(jié)束狀態(tài)寫到目錄數(shù)據(jù)庫(kù)的Job"tn).Record中,并結(jié)束作業(yè)Jobx(t。)運(yùn)行。在上述算法中,步驟(12)和(14)兩個(gè)函數(shù)的算法如下步驟(12)算法insert(<//,<^e/,砂e〉,/eve/,i^7wfe:c」(〃存儲(chǔ)三元組<//;Oi僑",0^e〉到F/wfec.〃/eve/:存儲(chǔ)三元組<//,0^e〉的索引結(jié)點(diǎn)在索引樹i^mfec中的層號(hào).if(I(F,/eve/)=0)(創(chuàng)建U7,/eve/)3E<//;c#ef,(v/e>存儲(chǔ)到U7,/eve/);返回;}elseif(Iw(F,/eve/)未滿){存儲(chǔ)q^試0;/e〉至廿Iw(F,/eve/)中;返回;}elseif(Iw(F,/eve/)已滿)(計(jì)算H(IwCF,/we/));在hashtable中査詢H(IW(F,/eve/));if未找到把IwCF,/eve/)追加到磁盤日志,同時(shí)更新hashtable;insert(<H(Iw(F,/eve/)),offset,/c>,/eve/+7,F/wfex:);創(chuàng)建一個(gè)新的索引結(jié)點(diǎn)(F,/eve/);存儲(chǔ)<//iq^W,&/7e〉到U^,/ew/)中;返回;步驟(14)算法storeRemain(i^/"tfex,i(F」)(〃把F/mfec中每一層的工作索引結(jié)點(diǎn)存儲(chǔ)到磁盤日志中.int/eve/:=0jloop:計(jì)算H(Iw(F,/eve/));在hashtable中査詢H(Iw(F,/eve/));if未找到把Iw(F,/ew/)追加到磁盤日志,同時(shí)更新hashtable;if(斷/—1=1){存儲(chǔ)〈H(Iw(F,/eve/)),/c>到返回;}else{insert(鄰Iw(F,/,/)),<#賦/c〉,/eve/:=/eve/+l;gotoloop;}權(quán)利要求1.一種基于指紋的數(shù)據(jù)備份系統(tǒng),包括備份服務(wù)器、備份代理、存儲(chǔ)服務(wù)器和Web服務(wù)器,它們通過網(wǎng)絡(luò)相互通信完成數(shù)據(jù)備份與恢復(fù),其特征在于所述備份服務(wù)器裝有配置文件和目錄數(shù)據(jù)庫(kù),備份服務(wù)器的配置文件中記錄用戶定義的作業(yè)對(duì)象,作業(yè)對(duì)象包含指定系統(tǒng)操作作業(yè)運(yùn)行的屬性,備份服務(wù)器通過作業(yè)對(duì)象控制著整個(gè)數(shù)據(jù)備份和恢復(fù)的過程;目錄數(shù)據(jù)庫(kù)存儲(chǔ)作業(yè)記錄,作業(yè)記錄保存作業(yè)對(duì)象運(yùn)行的管理信息;所述備份代理單元安裝于網(wǎng)絡(luò)中每一個(gè)需要備份數(shù)據(jù)的主機(jī)上,備份時(shí)由備份代理單元從所在主機(jī)的文件系統(tǒng)中讀取需要備份的文件,對(duì)文件進(jìn)行基于錨的分塊并計(jì)算分塊的指紋,把指紋和部分需要的分塊數(shù)據(jù)通過網(wǎng)絡(luò)送往存儲(chǔ)服務(wù)器;恢復(fù)時(shí)備份代理單元通過網(wǎng)絡(luò)從存儲(chǔ)服務(wù)器接收文件數(shù)據(jù)并寫到所在主機(jī)的文件系統(tǒng)中指定的目錄下;所述存儲(chǔ)服務(wù)器安裝有大容量磁盤陣列,大容量磁盤陣列是數(shù)據(jù)備份的目的地,備份時(shí)通過網(wǎng)絡(luò)從相應(yīng)的備份代理單元接收指紋或數(shù)據(jù)分塊,把數(shù)據(jù)分塊存儲(chǔ)到磁盤上,并建立文件的索引;恢復(fù)時(shí)則從大容量磁盤陣列根據(jù)文件索引重構(gòu)文件,并把文件數(shù)據(jù)通過網(wǎng)絡(luò)送到相應(yīng)的備份代理;所述Web服務(wù)器是本系統(tǒng)的B-S模式網(wǎng)頁(yè)用戶管理界面,通過登錄Web服務(wù)器,用戶既可以指定系統(tǒng)完成交互式的備份或恢復(fù)作業(yè)、監(jiān)視系統(tǒng)自動(dòng)調(diào)度型作業(yè)的運(yùn)行情況,還可以修改備份服務(wù)器的配置文件、定制作業(yè)對(duì)象,進(jìn)行設(shè)備管理。2.如權(quán)利要求1所述的基于指紋的數(shù)據(jù)備份系統(tǒng),其特征在于,所述備份服務(wù)器包括備份服務(wù)器初始化模塊、命令監(jiān)聽模塊、命令處理模塊、作業(yè)處理模塊和網(wǎng)絡(luò)通信模塊;所述備份服務(wù)初始化模塊執(zhí)行初始化工作,包括讀取配置文件、建立內(nèi)存中的資源鏈表、檢查目錄數(shù)據(jù)庫(kù)狀態(tài)、保證配置文件和目錄數(shù)據(jù)庫(kù)的數(shù)據(jù)一致性和完整性、啟動(dòng)命令監(jiān)控端口、接受來自Web服務(wù)器的用戶命令、初始化作業(yè)隊(duì)列和用戶命令隊(duì)列、向作業(yè)隊(duì)列中加載作業(yè)對(duì)象、啟動(dòng)作業(yè)和網(wǎng)絡(luò)監(jiān)控服務(wù);所述命令監(jiān)聽模塊是由系統(tǒng)生成的一個(gè)網(wǎng)絡(luò)監(jiān)聽線程,對(duì)Web服務(wù)器的連接請(qǐng)求進(jìn)行認(rèn)證,保證只有經(jīng)過系統(tǒng)授權(quán)的Web服務(wù)器才能連接系統(tǒng),監(jiān)聽已通過認(rèn)證的Web服務(wù)器發(fā)送來的命令請(qǐng)求;收到命令請(qǐng)求時(shí),將命令請(qǐng)求加入到用戶命令隊(duì)列中等待系統(tǒng)處理;所述命令處理模塊包括一個(gè)用戶命令隊(duì)列和N個(gè)命令工作線程,當(dāng)用戶命令隊(duì)列溢出時(shí),命令監(jiān)聽模塊轉(zhuǎn)入睡眠狀態(tài);這些命令工作線程不斷從用戶命令隊(duì)列中讀取命令并執(zhí)行,根據(jù)所執(zhí)行命令的不同完成不同的功能;當(dāng)命令監(jiān)聽模塊向用戶命令隊(duì)列中加入一個(gè)命令時(shí),如果當(dāng)前沒有空閑的命令工作線程且活躍的命令工作線程的數(shù)目沒有達(dá)到N時(shí),就生成一個(gè)新的命令工作線程;命令工作線程每次從用戶命令隊(duì)列中讀取命令時(shí)都檢查命令監(jiān)聽模塊的狀態(tài),如果其處于睡眠狀態(tài)則喚醒它;所述作業(yè)處理模塊包括一個(gè)作業(yè)隊(duì)列、L個(gè)作業(yè)工作線程和一個(gè)作業(yè)隊(duì)列加載線程,當(dāng)作業(yè)隊(duì)列發(fā)生溢出時(shí),作業(yè)隊(duì)列加載線程進(jìn)入睡眠狀態(tài);作業(yè)工作線程不斷從作業(yè)隊(duì)列中取作業(yè)對(duì)象并執(zhí)行,根據(jù)作業(yè)對(duì)象屬性的不同調(diào)用不同的資源、實(shí)現(xiàn)不同的功能;作業(yè)隊(duì)列加載線程進(jìn)行作業(yè)調(diào)度,檢查作業(yè)資源鏈中每個(gè)作業(yè)對(duì)象的調(diào)度策略屬性,把需要調(diào)度運(yùn)行的作業(yè)對(duì)象加入作業(yè)隊(duì)列中,如果當(dāng)前沒有空閑的作業(yè)工作線程且活躍的作業(yè)工作線程的數(shù)目沒有達(dá)到L時(shí),就生成一個(gè)新的作業(yè)工作線程;作業(yè)工作線程每次從作業(yè)隊(duì)列中讀取作業(yè)對(duì)象時(shí)都檢查作業(yè)隊(duì)列加載線程的狀態(tài),如果其處于睡眠狀態(tài)則喚醒它;所述網(wǎng)絡(luò)通信模塊把標(biāo)準(zhǔn)的網(wǎng)絡(luò)通信應(yīng)用編程接口進(jìn)行封裝,向命令工作線程和作業(yè)工作線程提供網(wǎng)絡(luò)通信接口,網(wǎng)絡(luò)通信接口實(shí)現(xiàn)備份服務(wù)器、備份代理和存儲(chǔ)服務(wù)器之間的數(shù)據(jù)傳輸協(xié)議。3.如權(quán)利要求1所述的基于指紋的數(shù)據(jù)備份系統(tǒng),其特征在于,所述備份代理包括備份代理初始化模塊、請(qǐng)求監(jiān)聽模塊、作業(yè)處理模塊、文件分塊模塊和網(wǎng)絡(luò)通信模塊;所述備份代理初始化模塊,執(zhí)行初始化工作,包括讀取備份代理配置文件、建立內(nèi)存資源鏈表、初始化作業(yè)隊(duì)列、啟動(dòng)備份服務(wù)器請(qǐng)求監(jiān)聽模塊;所述請(qǐng)求監(jiān)聽模塊監(jiān)聽網(wǎng)絡(luò)上備份服務(wù)器的連接請(qǐng)求,認(rèn)證連接的備份服務(wù)器,認(rèn)證通過后生成一個(gè)網(wǎng)絡(luò)連接套接字和此備份服務(wù)器通信并加入作業(yè)隊(duì)列中;所述作業(yè)處理模塊包括一個(gè)作業(yè)隊(duì)列和M個(gè)作業(yè)工作線程,當(dāng)作業(yè)隊(duì)列溢出時(shí),請(qǐng)求監(jiān)聽模塊轉(zhuǎn)入睡眠狀態(tài);作業(yè)工作線程從作業(yè)隊(duì)列中取出一個(gè)網(wǎng)絡(luò)連接套接字后,首先為作業(yè)建立一個(gè)作業(yè)控制記錄,把網(wǎng)絡(luò)連接套接字鏈入作業(yè)控制記錄的成員變量中,然后通過此網(wǎng)絡(luò)連接套接字和備份服務(wù)器交互,把備份服務(wù)器作業(yè)對(duì)象的有關(guān)屬性通過變換后賦值給作業(yè)控制記錄的相應(yīng)成員變量;然后用從備份服務(wù)器處得到的作業(yè)票據(jù)ticket連接相應(yīng)的存儲(chǔ)服務(wù)器,產(chǎn)生一個(gè)和存儲(chǔ)服務(wù)器通信的網(wǎng)絡(luò)連接套接字并將之鏈入作業(yè)控制記錄的成員變量中;當(dāng)請(qǐng)求監(jiān)聽模塊向作業(yè)隊(duì)列中加入一個(gè)網(wǎng)絡(luò)連接套接字時(shí),如果當(dāng)前沒有空閑的作業(yè)工作線程且活躍的作業(yè)工作線程的數(shù)目沒有達(dá)到M時(shí),就生成一個(gè)新的作業(yè)工作線程;作業(yè)工作線程每次從作業(yè)隊(duì)列中取一個(gè)網(wǎng)絡(luò)連接套接字時(shí)都檢查請(qǐng)求監(jiān)聽模塊的狀態(tài),如果其處于睡眠狀態(tài)則喚醒它;所述文件分塊模塊接受作業(yè)處理模塊中作業(yè)工作線程的命令執(zhí)行備份作業(yè)的文件分塊任務(wù),在客戶機(jī)文件系統(tǒng)上打開文件集中的每一個(gè)文件,對(duì)文件進(jìn)行基于錨的分塊并計(jì)算分塊指紋,和相應(yīng)的存儲(chǔ)服務(wù)器協(xié)調(diào)執(zhí)行第一備份過程的備份算法;所述網(wǎng)絡(luò)通信模塊由作業(yè)的網(wǎng)絡(luò)連接套接字組成,備份代理的每個(gè)作業(yè)都擁有兩個(gè)網(wǎng)絡(luò)連接套接字,分別用于和該作業(yè)對(duì)應(yīng)的備份服務(wù)器作業(yè)以及存儲(chǔ)服務(wù)器作業(yè)通信。4.如權(quán)利要求1所述的基于指紋的數(shù)據(jù)備份系統(tǒng),其特征在于,所述存儲(chǔ)服務(wù)器包括存儲(chǔ)服務(wù)器初始化模塊、連接監(jiān)控模塊、作業(yè)票據(jù)表、作業(yè)處理模塊和網(wǎng)絡(luò)通信模塊,以及索引緩沖區(qū)、分塊緩沖區(qū)、分塊哈希表和磁盤日志;所述存儲(chǔ)服務(wù)器初始化模塊執(zhí)行初始化工作,包括解析存儲(chǔ)服務(wù)器配置文件,建立內(nèi)存資源鏈表,啟動(dòng)相關(guān)服務(wù)線程;所述連接監(jiān)控模塊監(jiān)控備份服務(wù)器和備份代理的連接請(qǐng)求,對(duì)連接的備份服務(wù)器進(jìn)行認(rèn)證,認(rèn)證通過后生成一個(gè)網(wǎng)絡(luò)連接套接字和此備份服務(wù)器通信并加入作業(yè)隊(duì)列中;對(duì)連接的備份代理,則根據(jù)其出示的作業(yè)票據(jù)ticket檢査作業(yè)票據(jù)表以對(duì)其進(jìn)行認(rèn)證,認(rèn)證通過后生成一個(gè)網(wǎng)絡(luò)連接套接字和此備份代理通信并鏈接到相應(yīng)作業(yè)控制記錄的成員變量中;所述作業(yè)票據(jù)表用于存儲(chǔ)對(duì)備份代理作業(yè)進(jìn)行認(rèn)證的票據(jù);所述作業(yè)處理模塊包括一個(gè)作業(yè)隊(duì)列以及W個(gè)作業(yè)工作線程,當(dāng)作業(yè)隊(duì)列溢出時(shí),連接監(jiān)控模塊轉(zhuǎn)入"拒絕備份服務(wù)器連接請(qǐng)求"狀態(tài);作業(yè)工作線程從作業(yè)隊(duì)列中取出一個(gè)網(wǎng)絡(luò)連接套接字后,首先為作業(yè)建立一個(gè)作業(yè)控制記錄,把網(wǎng)絡(luò)連接套接字鏈入作業(yè)控制記錄的成員變量中,然后通過此網(wǎng)絡(luò)連接套接字和備份服務(wù)器交互,把備份服務(wù)器作業(yè)對(duì)象的有關(guān)屬性通過變換后賦值給作業(yè)控制記錄的相應(yīng)成員變量,并隨機(jī)生成一個(gè)作業(yè)票據(jù)ticket登記到作業(yè)票據(jù)表中且向備份服務(wù)器作業(yè)對(duì)象傳送此作業(yè)票據(jù)ticket;當(dāng)連接監(jiān)控模塊向作業(yè)隊(duì)列中加入一個(gè)網(wǎng)絡(luò)連接套接字時(shí),如果當(dāng)前沒有空閑的作業(yè)工作線程且活躍的作業(yè)工作線程的數(shù)目沒有達(dá)到W時(shí),就生成一個(gè)新的作業(yè)工作線程;作業(yè)工作線程每次從作業(yè)隊(duì)列中取一個(gè)網(wǎng)絡(luò)連接套接字時(shí)都檢查連接監(jiān)控模塊的狀態(tài),如果其處于"拒絕備份服務(wù)器連接請(qǐng)求"狀態(tài)則取消這種狀態(tài)以使它接受備份服務(wù)器連接請(qǐng)求;所述網(wǎng)絡(luò)通信模塊由作業(yè)的網(wǎng)絡(luò)連接套接字組成,存儲(chǔ)服務(wù)器的每個(gè)作業(yè)都擁有兩個(gè)網(wǎng)絡(luò)連接套接字,分別用于和該作業(yè)對(duì)應(yīng)的備份服務(wù)器作業(yè)以及備份代理作業(yè)通信;所述索引緩沖區(qū)是存儲(chǔ)服務(wù)器作業(yè)執(zhí)行第一備份過程和第二備份過程的基礎(chǔ)設(shè)施,索引緩沖區(qū)以一個(gè)內(nèi)存哈希表實(shí)現(xiàn),用于存儲(chǔ)本作業(yè)鏈中本作業(yè)實(shí)例J0bx(tn)的前一個(gè)作業(yè)實(shí)例j0b"U包含的所有指紋以及在本作業(yè)運(yùn)行過程中新生成的指紋;'所述分塊緩沖區(qū)是存儲(chǔ)服務(wù)器作業(yè)執(zhí)行第一備份過程和第二備份過程的基礎(chǔ)設(shè)施,分塊緩沖區(qū)以一個(gè)獨(dú)立的磁盤陣列實(shí)現(xiàn),用以臨時(shí)存儲(chǔ)第一備份過程中其指紋在索引緩沖區(qū)中沒有被找到的數(shù)據(jù)分塊;所述分塊哈希表是存儲(chǔ)服務(wù)器作業(yè)執(zhí)行第二備份過程的基礎(chǔ)設(shè)施,分塊哈希表以一個(gè)獨(dú)立的磁盤陣列實(shí)現(xiàn),用以建立分塊指紋到此分塊在磁盤日志的存儲(chǔ)地址的映射;所述磁盤日志是存儲(chǔ)服務(wù)器作業(yè)執(zhí)行第二備份過程的基礎(chǔ)設(shè)施,磁盤日志以一個(gè)獨(dú)立的磁盤陣列實(shí)現(xiàn),用以存儲(chǔ)數(shù)據(jù)分塊和以分塊形式存儲(chǔ)的文件索引。全文摘要一種基于指紋的數(shù)據(jù)備份系統(tǒng),屬于計(jì)算機(jī)存儲(chǔ)備份
技術(shù)領(lǐng)域:
,目的在于降低數(shù)據(jù)備份的管理、存儲(chǔ)以及網(wǎng)絡(luò)開銷,提高備份性能。本發(fā)明包括備份服務(wù)器、備份代理、存儲(chǔ)服務(wù)器和Web服務(wù)器,它們通過網(wǎng)絡(luò)相互通信完成數(shù)據(jù)備份與恢復(fù);本發(fā)明采用基于錨的文件分塊技術(shù)識(shí)別備份文件的冗余數(shù)據(jù),具有修改穩(wěn)定性,計(jì)算開銷小;數(shù)據(jù)分塊以其指紋為索引存儲(chǔ)在存儲(chǔ)服務(wù)器的磁盤陣列上,消除了冗余數(shù)據(jù)的備份,節(jié)省磁盤存儲(chǔ)空間;數(shù)據(jù)分塊一旦存儲(chǔ)就不再擦除,可以連續(xù)追加在磁盤上,消除了磁盤存儲(chǔ)碎片;采用有效的備份緩沖策略,減少了備份的網(wǎng)絡(luò)開銷,提高了數(shù)據(jù)備份速度,降低了備份對(duì)應(yīng)用服務(wù)器的影響。文檔編號(hào)G06F11/14GK101183323SQ20071016871公開日2008年5月21日申請(qǐng)日期2007年12月10日優(yōu)先權(quán)日2007年12月10日發(fā)明者丹馮,高劉,劉景寧,可周,航張,楊天明,牛中盈申請(qǐng)人:華中科技大學(xué)