張秋霞+張志強+劉克東
摘要:隨著時代不斷發(fā)展,磁盤鏡像技術(shù)亦受到越來越多的關(guān)注。當(dāng)前計算機磁盤容量越來越大,如何對大容量的磁盤進行全盤鏡像成為一個新的研究方向。該文提出一種基于多線程的高速磁盤鏡像算法,該算法采用緩沖池及隊列技術(shù),充分利用計算資源,大大提升了磁盤鏡像速度。
關(guān)鍵詞:磁盤鏡像;多線程;隊列
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2016)13-0240-02
隨著計算機和網(wǎng)絡(luò)的飛速發(fā)展和普及應(yīng)用,計算機日益成為人們工作和生活的重要工具,人們的日常工作和生活自然也越來越依賴于計算機系統(tǒng)的正常運行和數(shù)據(jù)的安全保存。而計算機安全涉及的磁盤鏡像技術(shù)也越來越受到廣泛應(yīng)用。磁盤鏡像是指對原始數(shù)據(jù)媒介采用位對位(bit to bit)方式進行精確復(fù)制而生成的文件,該鏡像文件可采用一定的機制進行校驗,以確認該鏡像文件與原始文件完全一致,并未被修改[1]。
縱觀市場上流行的幾種磁盤鏡像工具,普遍存在鏡像速度慢、效率低的缺點,以500G硬盤為例,常用工具都需要一小時以上甚至數(shù)小時的時間才能完成鏡像文件制作,制約了磁盤鏡像技術(shù)的廣泛應(yīng)用和深入研究。
因此,本文在傳統(tǒng)磁盤鏡像算法的基礎(chǔ)上,提出一種基于多線程的高效磁盤鏡像算法,充分利用計算機空閑資源,采用緩沖池及隊列技術(shù),大幅度提高了磁盤鏡像速度,實驗得出最高鏡像速度達到6.78GB/min。
1 相關(guān)概念及技術(shù)
1.1 磁盤鏡像格式
DD格式是一種通用的磁盤鏡像格式,也稱為原始鏡像(RAWIMAGE)格式。DD格式最初是由LINUX下的DD命令所生成的備份文件,該命令可以對目標媒介進行逐比特復(fù)制制作鏡像文件。該格式的支持軟件最為廣泛,幾乎可以被所有的取證軟件所讀取[2]。該格式鏡像文件的后綴為.dd或者.001,并且可以被分割。以適應(yīng)鏡像文件存儲的需要。其優(yōu)點還在于,可以被各類程序直接訪問而無須進行特別的轉(zhuǎn)換,這樣就避免了格式轉(zhuǎn)換中引入錯誤[1]。
1.2 校驗算法
磁盤鏡像的結(jié)果必須與源磁盤內(nèi)容保持一致,通過計算并對比源磁盤與鏡像文件的哈希值可以驗證鏡像結(jié)果是否正確。在進行磁盤鏡像之前,計算源磁盤的哈希值,同時計算鏡像文件的哈希值,比較兩次哈希值,如果相等,表明鏡像文件與源磁盤內(nèi)容一致,否則,磁盤鏡像出現(xiàn)錯誤。常用的哈希校驗算法主要有以下幾種:
1)MD4
MD4算法是由麻省理工學(xué)院(MIT)的講座教授 Ronald L. Rivest 在 1990 年提出的,它一般使用在32位的計算機處理器模塊內(nèi)[3]。該算法存在一些安全性漏洞,提出后不久就曾被相關(guān)人士進行了破譯。
2) MD5
MD5是一種常用的哈希計算方法,用于確保信息的完整一致,防止信息篡改,在密碼學(xué)和取證方面都有廣泛應(yīng)用[4]。
3) SHA1
SHA-1算法是由美國國家標準技術(shù)研究院(NIST)與美國國家安全局(NSA)設(shè)計的,已成為美國國家標準[5],是目前較先進的加密技術(shù),主要應(yīng)用于數(shù)字簽名標準里面定義的數(shù)字簽名算法(DSA)[3]。
基于效率與安全性的考慮,本文采用MD5算法對鏡像文件進行校驗。
1.3多線程及線程間通信、同步技術(shù)
由于多線程技術(shù)可以避免某單一任務(wù)長期占用CPU資源,提高程序處理效率,故該技術(shù)在目前的程序開發(fā)中應(yīng)用較為廣泛。并且MFC也提供了多線程編程的相關(guān)類庫,使得多線程編程更加方便。
在多線程技術(shù)中,線程之間的通信是不可避免的。目前線程間通信的方式主要有兩種,一種是使用消息機制,此種方式的理論基礎(chǔ)是應(yīng)用程序的每一個線程都有其自身的消息隊列,接收消息的線程只需啟動了消息循環(huán)機制,消息發(fā)送線程即可利用操作系統(tǒng)的消息驅(qū)動機制將所需傳遞的消息轉(zhuǎn)發(fā)給接收線程,這就使得利用消息在線程之間進行通信變得非常簡單[6]。由于同屬于一個進程的多個線程共享操作系統(tǒng)分配的內(nèi)存,故另一種線程間通信的方式是使用全局變量,即是本文使用的方法。由于本文中線程間傳遞的信息較為復(fù)雜,故定義一個全局的結(jié)構(gòu)體變量進行線程間通信。
雖然使用多線程可以提高效率,但也有一定的弊端,由于多線程的運行具有一定的不確定性,就有可能出現(xiàn)兩個線程同時對同一個全局變量進行操作,進而發(fā)生錯誤,且這種錯誤很難重現(xiàn)。這就要求在多個線程之間進行同步處理,保證一個線程訪問共享變量時,其他線程禁止訪問該變量。MFC提供了多種多線程同步機制:主要有互斥對象(CMutex)、事件內(nèi)核對象(CEvent)、信號量(CSemaphore)、臨界區(qū)(CCriticalSection)[7]。
本文使用 CCriticalSection 類進行線程間同步,即在任意時間片只允許一個線程訪問共享資源,已“搶占”共享資源的線程可以采用“加鎖”機制對共享資源進行保護,其他試圖訪問共享資源的線程必須等待“解鎖”后才能成功訪問,否則將一直掛起等待。
2 基于多線程的高速磁盤鏡像算法
如圖1算法流程圖所示,首先分配一個全局的緩沖區(qū)隊列,便于讀寫線程之間進行通信;并定義一個用來線程之間同步的CCriticalSection 類鎖,以避免讀寫線程同時對同一塊內(nèi)存區(qū)域進行操作;同時獲取源盤的相關(guān)信息(磁盤大小等,便于判斷讀寫工作是否結(jié)束)。進入讀線程后,循環(huán)讀取一塊固定大小的源盤數(shù)據(jù)到臨時緩沖區(qū),并檢測緩沖區(qū)隊列中是否有空閑區(qū)域,如果有則將數(shù)據(jù)壓入緩沖區(qū)隊列,否則循環(huán)等待,直至讀取到源盤末尾。寫進程即循環(huán)從緩沖區(qū)隊列中取出一塊數(shù)據(jù)并寫入目的鏡像文件中,同時更新目的文件的哈希值。當(dāng)文件全部寫完后,比較源盤與目的鏡像文件的哈希值是否一致,以保證鏡像文件與源盤的數(shù)據(jù)一致性。該算法的優(yōu)點在于可以同時進行源盤數(shù)據(jù)的讀取和鏡像文件的寫入,避免了計算機資源浪費,提高了磁盤鏡像的速度。
3 實驗環(huán)境及結(jié)果分析
從以上結(jié)果可以看出,當(dāng)源磁盤容量較小時,兩種算法的鏡像速度相差不大,使用本文提出的算法未能使鏡像速度得到大幅度提升,未發(fā)揮出該算法的優(yōu)越性;當(dāng)磁盤容量為128G時,使用本文提出的算法與單線程算法相比,磁盤鏡像速度大大提高,達到最高值即6.78GB/min,即對128G的硬盤制作全盤鏡像僅需要18分鐘,這在實際使用時將大大提高工作效率。
4 結(jié)論
本文在傳統(tǒng)磁盤鏡像技術(shù)的基礎(chǔ)上,提出一種基于多線程的高效磁盤鏡像算法。該算法有效利用了計算機空閑資源,提高了磁盤鏡像的速度,有助于磁盤鏡像技術(shù)的進一步廣泛應(yīng)用。
參考文獻:
[1] 馮效棟.計算機取證磁盤鏡像技術(shù)速覽[J].管理科學(xué)與工程技術(shù),2010(3):206-206.
[2] 馬林.數(shù)據(jù)重現(xiàn)-文件系統(tǒng)原理精解與數(shù)據(jù)恢復(fù)最佳實踐[M].北京:清華大學(xué)出版社,2009.
[3] 黃云軻,辛小龍等.關(guān)于對哈希算法的研究與應(yīng)用[J].計算機關(guān)盤軟件與應(yīng)用,2012(3):201-201.
[4] 張建偉,李鑫,張梅峰.基于MD5算法的身份鑒別技術(shù)的研究與實現(xiàn)[J].計算機工程,2003,29(4):118-145.
[5] 林雅榕,侯整風(fēng).對哈希算法SHA-1的分析和改進[J].計算機技術(shù)與發(fā)展,2006,16(3).
[6] 伍光勝.多線程技術(shù)及其應(yīng)用的研究[J].計算機應(yīng)用研究,2001,18(1):33-36.
[7] 孫鑫,余安萍.VC++深入詳解[M[.北京:電子工業(yè)出版社,2006.