專利名稱:連續(xù)數(shù)據(jù)保護(hù)系統(tǒng)在遠(yuǎn)程備份設(shè)備臨時異常時的保護(hù)方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計算機(jī)數(shù)據(jù)存儲技術(shù)領(lǐng)域,主要解決連續(xù)數(shù)據(jù)保護(hù)系統(tǒng)中遠(yuǎn)程數(shù)據(jù)備份設(shè) 備異常時,被保護(hù)的系統(tǒng)不能及時將自身變化數(shù)據(jù)內(nèi)容通過網(wǎng)絡(luò)發(fā)送到遠(yuǎn)程備份的問題。
背景技術(shù):
連續(xù)數(shù)據(jù)保護(hù)是一種數(shù)據(jù)的連續(xù)時間點的保護(hù)技術(shù),其根本作用是能在故障瞬間完成 任何時間點的故障恢復(fù),從根本上解決傳統(tǒng)備份中低恢復(fù)能力和非精細(xì)時間策略的先天弱 點。連續(xù)數(shù)據(jù)保護(hù)系統(tǒng)能夠捕捉被保護(hù)系統(tǒng)一切的數(shù)據(jù)改動,并提供記錄著所有歷史數(shù)據(jù) 狀態(tài)的數(shù)據(jù)變化。例如,如果物理上的同一地址的數(shù)據(jù)變化10次,連續(xù)數(shù)據(jù)保護(hù)系統(tǒng)將 這10次數(shù)據(jù)變化全部記錄下來,并發(fā)送到遠(yuǎn)程的備份服務(wù)器。這樣連續(xù)保護(hù)系統(tǒng)能夠在
被保護(hù)系統(tǒng)發(fā)生故障時,能夠通過遠(yuǎn)程數(shù)據(jù)備份設(shè)備保證被保護(hù)系統(tǒng)在任意時間點恢復(fù)。 從操作方式來看,連續(xù)數(shù)據(jù)保護(hù)系統(tǒng)的實現(xiàn)方法^以分為基于塊的,基于文件的,或 者是基于應(yīng)用的?;趬K的實現(xiàn)方法是位于物理儲存或邏輯巻管理層之上。當(dāng)數(shù)據(jù)塊被寫 入主存儲器時,寫入的數(shù)據(jù)副本就被連續(xù)數(shù)據(jù)保護(hù)系統(tǒng)捕獲并存儲到一個獨立地點中。與 此類似的是,基于文件的連續(xù)數(shù)據(jù)保護(hù)系統(tǒng)的實現(xiàn)方法正好位于文件系統(tǒng)之上,它可以捕 獲文件系統(tǒng)數(shù)據(jù)和元數(shù)據(jù)事件,如文件創(chuàng)建、修改或刪除等?;趹?yīng)用的連續(xù)數(shù)據(jù)保護(hù)系 統(tǒng)的實現(xiàn)方法則直接位于受保護(hù)的特定應(yīng)用之中,這類應(yīng)用提供深層的集成,并且作為應(yīng) 用自身的內(nèi)置功能。
已公布的美國專利申請US 2005/0251540描述了一種用于數(shù)據(jù)保護(hù)和災(zāi)難恢復(fù)的數(shù)據(jù) 管理系統(tǒng),其中公布了在各主機(jī)中的一種特殊設(shè)備驅(qū)動器,該驅(qū)動器捕獲數(shù)據(jù)修改和應(yīng)用 級事件并且將它們保存到日志以保證數(shù)據(jù)復(fù)制應(yīng)用一致性。該專利未提及遠(yuǎn)程備份設(shè)備臨 時異常情況下,被保護(hù)系統(tǒng)如何將自身的數(shù)據(jù)變化內(nèi)容進(jìn)行存儲的解決方法。在實際的應(yīng)
用中,遠(yuǎn)程備份系統(tǒng)異常是不可避免的,如網(wǎng)絡(luò)中斷造成遠(yuǎn)程備份系統(tǒng)連接不上。如果不 能夠在遠(yuǎn)程備份設(shè)備臨時異常的情況下很好的保存被保護(hù)系統(tǒng)的數(shù)據(jù)變化,則連續(xù)數(shù)據(jù)保 護(hù)系統(tǒng)就不能提供任意歷史時刻點的數(shù)據(jù)恢復(fù)。
發(fā)明內(nèi)容
本發(fā)明的目的是解決遠(yuǎn)程備份設(shè)備臨時異常情況下,連續(xù)數(shù)據(jù)保護(hù)系統(tǒng)能夠?qū)⒉东@的 數(shù)據(jù)變化內(nèi)容不丟失的問題,提出一種連續(xù)數(shù)據(jù)保護(hù)系統(tǒng)在遠(yuǎn)程備份設(shè)備臨時異常時的保 護(hù)方法。本發(fā)明適用于塊級連續(xù)數(shù)據(jù)保護(hù)系統(tǒng)的實現(xiàn),在系統(tǒng)將變化數(shù)據(jù)通過網(wǎng)絡(luò)發(fā)送到 遠(yuǎn)程數(shù)據(jù)備份設(shè)備時,如果遠(yuǎn)程備份設(shè)備發(fā)生異常,采用本方法能保證連續(xù)變化的數(shù)據(jù)內(nèi)容不會丟失,為連續(xù)數(shù)據(jù)保護(hù)系統(tǒng)的任意點數(shù)據(jù)恢復(fù)提供保障。
本發(fā)明提出的連續(xù)數(shù)據(jù)保護(hù)系統(tǒng)在遠(yuǎn)程備份設(shè)備臨時異常時的保護(hù)方法,包括以下步
驟
1) 判斷被保護(hù)巻的寫操作從文件系統(tǒng)驅(qū)動層發(fā)往磁盤驅(qū)動層的I/O請求包中判斷 出被保護(hù)巻的寫操作的請求包,提取請求包中寫數(shù)據(jù)和存放地址;
2) 寫數(shù)據(jù)復(fù)制創(chuàng)建一份新的寫請求包(IRP, I/O request Package),將步驟l) 提取的內(nèi)容置入所述新創(chuàng)建的寫請求包中,再將新創(chuàng)建的寫請求包置入等待隊列;
3) 根據(jù)當(dāng)前工作狀態(tài)進(jìn)行不同的操作,將步驟2)中創(chuàng)建的寫請求包進(jìn)行本地緩存 或遠(yuǎn)程發(fā)送;若進(jìn)行本地緩存則進(jìn)入步驟4),若進(jìn)行數(shù)據(jù)遠(yuǎn)程發(fā)送進(jìn)入步驟5);
4) 將接收到的寫請求包先在內(nèi)存中進(jìn)行緩存,當(dāng)寫請求包緩存到預(yù)先設(shè)定的數(shù)量后, 將內(nèi)存中緩存的請求包寫到本地磁盤上;然后轉(zhuǎn)入步驟6)
5) 如果本地磁盤或內(nèi)存中有寫請求包,先將本地緩存的寫請求包發(fā)送到遠(yuǎn)程備份中 心后,再將新接收的寫請求包發(fā)送到遠(yuǎn)程備份設(shè)備,發(fā)送成功后進(jìn)入步驟1);如果發(fā)送 失敗,進(jìn)入步驟6);
6) 定期檢查遠(yuǎn)程備份設(shè)備的運行狀況, 一旦檢測到遠(yuǎn)程備份設(shè)備恢復(fù)正常,轉(zhuǎn)入步 驟l)。
本發(fā)明的技術(shù)特點和效果
本發(fā)明能夠及時發(fā)現(xiàn)遠(yuǎn)程備份設(shè)備的臨時異常,本發(fā)明提出的多日志文件緩存方法能 夠緩存變化的數(shù)據(jù)內(nèi)容,在緩存滿時能夠按照一定的格式在本地物理硬盤上存放。系統(tǒng)能 夠及時監(jiān)測到遠(yuǎn)程備份設(shè)備的重新恢復(fù),在遠(yuǎn)程備份設(shè)備恢復(fù)后及時將硬盤和內(nèi)存中的數(shù) 據(jù)按原來的接受順序發(fā)送到遠(yuǎn)程備份設(shè)備。
本發(fā)明提出的在遠(yuǎn)程備份設(shè)備情況下將變化的數(shù)據(jù)在本地緩存和有效組織的方法,可 以解決遠(yuǎn)程備份設(shè)備臨時異常帶來的數(shù)據(jù)丟失。在數(shù)據(jù)緩存策略上采用了獨特的多日志文 件存儲策略,避免了單日志文件不支持同時從文件頭寫數(shù)據(jù)、文件尾讀數(shù)據(jù)以及讀完數(shù)據(jù) 后截斷文件的問題。在控制策略上,使用了控制狀態(tài)機(jī),滿足系統(tǒng)在各種復(fù)雜狀態(tài)的使用。 方法中引入的遠(yuǎn)程備份設(shè)備狀態(tài)監(jiān)控方法,能及時發(fā)現(xiàn)遠(yuǎn)程備份設(shè)備的狀態(tài),在遠(yuǎn)程備份 設(shè)備狀態(tài)發(fā)生變化時能及時調(diào)整控制策略。該設(shè)計方法在文件系統(tǒng)下層實現(xiàn),與上層應(yīng)用 無關(guān),具有很強(qiáng)的通用性。
經(jīng)過實驗證明,該方法能解決連續(xù)數(shù)據(jù)保護(hù)系統(tǒng)在遠(yuǎn)程備份設(shè)備臨時異常情況下對被 保護(hù)巻變化數(shù)據(jù)的保護(hù),為連續(xù)數(shù)據(jù)保護(hù)系統(tǒng)的任意歷史點恢復(fù)提供數(shù)據(jù)保障。
圖1為本發(fā)明的方法流程圖。
圖2為本發(fā)明的判斷被保護(hù)巻的寫操作的方法流程圖。 圖3為本發(fā)明的寫數(shù)據(jù)復(fù)制流程圖。圖4為本發(fā)明的數(shù)據(jù)在本地緩存的流程圖。
圖5為本發(fā)明的數(shù)據(jù)在本地緩存的組織結(jié)構(gòu)圖。
圖6為本發(fā)明狀態(tài)控制策略圖。
圖7為本發(fā)明的數(shù)據(jù)遠(yuǎn)程發(fā)送流程圖。
圖8為本發(fā)明的網(wǎng)絡(luò)狀態(tài)監(jiān)控流程圖。
具體實施例方式
本發(fā)明提出的遠(yuǎn)程備份設(shè)備臨時異常情況下將變化的數(shù)據(jù)在本地緩存和有效組織的
方法結(jié)合附圖及實施例進(jìn)一步說明如下
本發(fā)明的方法流程如圖1所示,包括以下步驟
1) 判斷被保護(hù)巻的寫操作從文件系統(tǒng)驅(qū)動層發(fā)往磁盤驅(qū)動層的I/O請求包中判斷 出被保護(hù)巻的寫操作的請求包,提取請求包中寫數(shù)據(jù)和存放地址;
2) 寫數(shù)據(jù)復(fù)制創(chuàng)建一份新的寫請求包(IRP, I/O request Package),將步驟l) 提取的內(nèi)容置入所述新創(chuàng)建的寫請求包中,再將新創(chuàng)建的寫請求包置入等待隊列;
3) 根據(jù)當(dāng)前工作狀態(tài)進(jìn)行不同的操作,將步驟2)中創(chuàng)建的寫請求包進(jìn)行本地緩存
或遠(yuǎn)程發(fā)送;若進(jìn)行本地緩存則進(jìn)入步驟4),若進(jìn)行數(shù)據(jù)遠(yuǎn)程發(fā)送進(jìn)入步驟5);
4) 將接收到的寫請求包先在內(nèi)存中進(jìn)行緩存,當(dāng)寫請求包緩存到預(yù)先設(shè)定的數(shù)量后, 將內(nèi)存中緩存的請求包寫到本地磁盤上;然后轉(zhuǎn)入步驟6)
5) 如果本地磁盤或內(nèi)存中有寫請求包,先將本地緩存的寫請求包發(fā)送到遠(yuǎn)程備份中 心后,再將新接收的寫請求包發(fā)送到遠(yuǎn)程備份設(shè)備,發(fā)送成功后進(jìn)入步驟1);如果發(fā)送 失敗,進(jìn)入步驟6);
6) 定期檢査遠(yuǎn)程備份設(shè)備的運行狀況, 一旦檢測到遠(yuǎn)程備份設(shè)備恢復(fù)正常,轉(zhuǎn)入步 驟1)。
本發(fā)明的方法各步驟的具體實施例分別詳細(xì)說明如下-
上述步驟1)的判斷被保護(hù)巻的寫操作具體實現(xiàn)方法如圖2所示,包括以下步驟-
(11) 在接收到一個寫請求包時,判斷該請求包是否是寫往被保護(hù)巻,如果是則進(jìn)行
步驟(12);如果不是,則直接轉(zhuǎn)入步驟(14);
(12) 如果提取請求包的標(biāo)志類型為DO—BUFFERED—10,從系統(tǒng)緩存中提取數(shù)據(jù)內(nèi)容; 如果提取請求包的標(biāo)志類型為DO—DIRECT—10,從非分頁內(nèi)存中提取數(shù)據(jù)內(nèi)容,轉(zhuǎn)入步驟
(13),否則按NEITHER進(jìn)行處理后轉(zhuǎn)入步驟(13);
(13) 從ByteOffset域值中提取寫地址內(nèi)容;
(14) 將被保護(hù)巻寫請求包通過IoCallDriver函數(shù)發(fā)送到端口驅(qū)動程序。 上述步驟2)的具體實現(xiàn)方法如圖3示,包括以下步驟
(21) 獲取被保護(hù)巻的設(shè)備鎖;
(22) 根據(jù)遠(yuǎn)程備份設(shè)備的設(shè)備棧信息,創(chuàng)建新的寫請求包;(23) 將被保護(hù)巻寫請求包中的關(guān)鍵字、偏移、長度、主功能、次功能域值賦給新 創(chuàng)建的寫請求包中的對應(yīng)域;
(24) 按被保護(hù)巻寫請求包中的數(shù)據(jù)長度大小申請內(nèi)存空間,將被保護(hù)巻中的數(shù)據(jù)內(nèi) 容復(fù)制至新申請的內(nèi)存中;將新創(chuàng)建的寫請求包的數(shù)據(jù)指針指向所述內(nèi)存空間;
(25) 設(shè)置新創(chuàng)建的寫請求包的完成例程(完成例程用于進(jìn)行該請求包執(zhí)行完遠(yuǎn)程備 份設(shè)備寫后判斷是否寫成功);
(26) 將新創(chuàng)建的寫請求包置入等待隊列中;
(27) 釋放被保護(hù)巻的設(shè)備鎖。
上述步驟3)中,根據(jù)當(dāng)前工作狀態(tài)進(jìn)行不同的操作,工作狀態(tài)說明如圖4所示,具
體說明如下
工作狀態(tài)設(shè)有5種,各工作狀態(tài)的功能及之間的轉(zhuǎn)換分別說明如下-
初始狀態(tài)剛加載時,工作狀態(tài)為初始狀態(tài)(一般遠(yuǎn)程備份設(shè)備的巻加載滯后于被保 護(hù)巻);如果發(fā)現(xiàn)遠(yuǎn)程備份設(shè)備初始化異常l,則進(jìn)入日志狀態(tài),如果遠(yuǎn)程備份設(shè)備初始化 完畢2,則進(jìn)入正常工作狀態(tài);
正常工作狀態(tài)在該工作狀態(tài)下,將新創(chuàng)建的寫請求包寫入遠(yuǎn)程備份設(shè)備;如果遠(yuǎn)程 備份設(shè)備發(fā)生異常3,則進(jìn)入日志狀態(tài);
日志狀態(tài):-在該工作狀態(tài)下,按順序?qū)⑿聞?chuàng)建的寫請求包按照多日志文件存儲策略進(jìn) 行日志緩存;如果遠(yuǎn)程備份設(shè)備恢復(fù)正常,進(jìn)入恢復(fù)狀態(tài)4;
恢復(fù)狀態(tài)在該工作狀態(tài)下,清空日志文件中的寫請求包,直至最后一個日志;如果 在恢復(fù)狀態(tài)下遠(yuǎn)程備份設(shè)備發(fā)生異常5,則進(jìn)入日志狀態(tài);在清空日志文件至只剩下一個 日志文件時6,進(jìn)入中間狀態(tài);
中間狀態(tài)在該工作狀態(tài)下,新創(chuàng)建的寫請求包不寫入日志文件,臨時緩存在本地內(nèi) 存中,即使新產(chǎn)生的寫請求包數(shù)量滿足寫日志的條件也不寫日志文件;本地緩存的請求包 發(fā)送完7,進(jìn)入正常工作狀態(tài);
上述步驟4)的具體實現(xiàn)方法如圖5示,包括以下步驟
(41) 獲取寫請求包所在的隊列鎖;
(42) 判斷寫請求包的數(shù)量是否達(dá)到預(yù)先設(shè)定的數(shù)目,如果是,進(jìn)入步驟(43);不 是,進(jìn)入步驟(45);
(43) 將預(yù)先設(shè)定數(shù)目的寫請求包寫入本地磁盤中的一個新的日志文件-,
(44) 將寫入日志文件的寫請求包從隊列中釋放;
(45) 釋放寫請求包所在的隊列鎖,進(jìn)入步驟6);
上述步驟4)將接收到的寫請求包先在本地內(nèi)存中進(jìn)行緩存,當(dāng)寫請求包緩存到預(yù)先 設(shè)定的數(shù)量后,將請求包寫到本地磁盤上;數(shù)據(jù)在本地緩存的組織結(jié)構(gòu)如6所示,具體說 明如下
本發(fā)明寫請求包在本地緩存的組織結(jié)構(gòu)采用了多日志文件存儲策略,如圖6所示,當(dāng) 遠(yuǎn)程備份設(shè)備異常,進(jìn)入日志狀態(tài),在日志狀態(tài)下將被保護(hù)巻當(dāng)前內(nèi)存緩存的多個寫i青求包(IRP、 IRP、……IRP)按日志文件預(yù)先設(shè)定值(可稂據(jù)具體情況進(jìn)行設(shè)定,如10M) 順序組織成多個日志文件。寫入本地磁盤的多個日志文件依次為l.log, 2.log,……, ri. log, n為自然數(shù)。然后清空內(nèi)存中的寫請求包;
當(dāng)遠(yuǎn)程設(shè)備恢復(fù)正常后,進(jìn)入恢復(fù)狀態(tài),將本地磁盤存儲的日志文件陸續(xù)發(fā)送至遠(yuǎn)程 設(shè)備。當(dāng)本地磁盤存儲的最后一個日志文件發(fā)送完成時,進(jìn)入中間狀態(tài)。這時新的寫請求 包不再寫入本地磁盤日志文件,臨時存放在內(nèi)存中等候發(fā)送(即使新產(chǎn)生的寫請求包的數(shù) 量滿足寫日志的條件也不寫日志文件);在發(fā)送完內(nèi)存緩存的寫請求包后,進(jìn)入正常工作 狀態(tài);進(jìn)入正常狀態(tài)之后,所有后續(xù)產(chǎn)生的寫請求包直接發(fā)往遠(yuǎn)程備份設(shè)備。
上述這種存儲策略與通常采用單日志文件的明顯優(yōu)先是避免了單日志文件不能同時 支持從文件頭寫、文件尾讀和截斷操作的問題。如果采用一個大日志文件的存儲方案,會 存在以下問題
首先,當(dāng)系統(tǒng)處于恢復(fù)狀態(tài)時,緩存線程負(fù)責(zé)寫入,發(fā)送線程負(fù)責(zé)讀出。如果只有一 個曰志文件,那么會同時讀寫一個文件。兩個線程同時讀寫一個文件,如果不使用鎖,則 可能出現(xiàn)死鎖或不一致。如果使用鎖,則增加了不必要的開銷,影響到系統(tǒng)運行的效率;
其次,如果單日志文件,己經(jīng)讀出的內(nèi)容不容易被截斷。從文件頭部讀出的寫請求包,
如果成功發(fā)送到遠(yuǎn)程備份設(shè)備,則需要將相應(yīng)的數(shù)據(jù)內(nèi)容從日志文件中截斷。操作系統(tǒng)不 支持將文件中的某一段單獨截斷。
本發(fā)明采用的多日志文件存儲策略避免了同時讀寫一個文件的問題,而且清除起來十 分方便,只有刪除文件的開銷,并且不會有同時讀寫文件控制難的問題。
上述步驟5)的具體實現(xiàn)方法如圖7所示,包括以下步驟
(51) 若當(dāng)前處于"正常工作狀態(tài)"或"中間狀態(tài)",獲取寫請求包緩存隊列的互斥 鎖,得到隊列的操作權(quán),然后調(diào)用遠(yuǎn)程備份設(shè)備的底層驅(qū)動,逐一將寫請求包發(fā)送至遠(yuǎn)程 備份設(shè)備,然后進(jìn)入步驟(53);否則進(jìn)入步驟(52);
(52) 如果系統(tǒng)處于"恢復(fù)狀態(tài)",則將磁盤日志文件中存儲的寫請求包發(fā)往遠(yuǎn)程備
份設(shè)備;如果不是,轉(zhuǎn)入步驟(51);
(53) 數(shù)據(jù)發(fā)往遠(yuǎn)程備份設(shè)備后,在寫請求包關(guān)聯(lián)的完成例程中判斷數(shù)據(jù)是否發(fā)送成
功;
(54) 如果數(shù)據(jù)發(fā)送不成功(即遠(yuǎn)程備份異常),將設(shè)備異常的信息上報至上層控制, 同時終止自身的繼續(xù)執(zhí)行,進(jìn)入步驟6);
(55) 如果數(shù)據(jù)發(fā)送成功,則回到步驟l)。 上述步驟6)的具體實現(xiàn)方法如圖8所示,包括以下步驟
(61) 首先清空遠(yuǎn)程備份設(shè)備在本地的緩存數(shù)據(jù)(避免引入誤讀);
(62) 向遠(yuǎn)程備份設(shè)備預(yù)先設(shè)定地址發(fā)讀請求,如果讀成功,則將遠(yuǎn)程備份設(shè)備恢復(fù) 正常的信息上報至上層控制,同時終止自身執(zhí)行,轉(zhuǎn)步驟1);
(63) 如果讀不成功,休眠30tns后,轉(zhuǎn)入步驟(62)。
權(quán)利要求
1、一種連續(xù)數(shù)據(jù)保護(hù)系統(tǒng)在遠(yuǎn)程備份設(shè)備臨時異常時的保護(hù)方法,其特征在于,包括以下步驟1)判斷被保護(hù)卷的寫操作從文件系統(tǒng)驅(qū)動層發(fā)往磁盤驅(qū)動層的I/O請求包中判斷出被保護(hù)卷的寫操作的請求包,提取請求包中寫數(shù)據(jù)和存放地址;2)寫數(shù)據(jù)復(fù)制創(chuàng)建一份新的寫請求包,將步驟1)提取的內(nèi)容置入所述新創(chuàng)建的寫請求包中,再將新創(chuàng)建的寫請求包置入等待隊列;3)根據(jù)當(dāng)前工作狀態(tài)進(jìn)行不同的操作,將步驟2)中創(chuàng)建的寫請求包進(jìn)行本地緩存或遠(yuǎn)程發(fā)送;若進(jìn)行本地緩存則進(jìn)入步驟4),若進(jìn)行數(shù)據(jù)遠(yuǎn)程發(fā)送進(jìn)入步驟5);4)將接收到的寫請求包先在內(nèi)存中進(jìn)行緩存,當(dāng)寫請求包緩存到預(yù)先設(shè)定的數(shù)量后,將內(nèi)存中緩存的請求包寫到本地磁盤上;然后轉(zhuǎn)入步驟6)5)如果本地磁盤或內(nèi)存中有寫請求包,先將本地緩存的寫請求包發(fā)送到遠(yuǎn)程備份中心后,再將新接收的寫請求包發(fā)送到遠(yuǎn)程備份設(shè)備,發(fā)送成功后進(jìn)入步驟1);如果發(fā)送失敗,進(jìn)入步驟6);6)定期檢查遠(yuǎn)程備份設(shè)備的運行狀況,一旦檢測到遠(yuǎn)程備份設(shè)備恢復(fù)正常,轉(zhuǎn)入步驟1)。
2、 如權(quán)利要求l所述的方法,其特征在于,所述步驟l)包括以下步驟(11) 在接收到一個寫請求包時,判斷該請求包是否是寫往被保護(hù).巻,如果是則進(jìn)行步驟(12);如果不是,則直接轉(zhuǎn)入步驟(14);(12) 如果提取請求包的標(biāo)志類型為DO—BUFFERED—10,從系統(tǒng)緩存中提取數(shù)據(jù)內(nèi)容; 如果提取請求包的標(biāo)志類型為D0_DIRECT—10,從非分頁內(nèi)存中提取數(shù)據(jù)內(nèi)容,轉(zhuǎn)入步驟 (13),否則按NEITHER進(jìn)行處理后轉(zhuǎn)入步驟(13);(13) 從ByteOffset域值中提取寫地址內(nèi)容;(14) 將被保護(hù)巻寫請求包通過IoCallDriver函數(shù)發(fā)送到端口驅(qū)動程序。
3、 如權(quán)利要求l所述的方法,其特征在于,所述歩驟2)包括以下步驟(21) 獲取被保護(hù)巻的設(shè)備鎖;(22) 根據(jù)遠(yuǎn)程備份設(shè)備的設(shè)備棧信息,創(chuàng)建新的寫請求包;(23) 將被保護(hù)巻寫請求包中的關(guān)鍵字、偏移、長度、主功能、次功能域值賦給新 創(chuàng)建的寫請求包中的對應(yīng)域;(24) 按被保護(hù)巻寫請求包中的數(shù)據(jù)長度大小申請內(nèi)存空間,將被保護(hù)巻中的數(shù)據(jù)內(nèi) 容復(fù)制至新申請的內(nèi)存中;將新創(chuàng)建的寫請求包的數(shù)據(jù)指針指向所述內(nèi)存空間;(25) 設(shè)置新創(chuàng)建的寫請求包的完成例程;(26) 將新創(chuàng)建的寫請求包置入等待隊列中;(27) 釋放被保護(hù)巻的設(shè)備鎖。
4、 如權(quán)利要求1所述的方法,其特征在于,上述步驟3)中,所述工作狀態(tài)設(shè)有以下5種,各工作狀態(tài)之間的轉(zhuǎn)換為初始狀態(tài)剛加載時,工作狀態(tài)為初始狀態(tài);如果發(fā)現(xiàn)遠(yuǎn)程備份設(shè)備初始化異常,則 進(jìn)入日志狀態(tài),如果遠(yuǎn)程備份設(shè)備初始化完畢,則進(jìn)入正常工作狀態(tài);正常工作狀態(tài)在該工作狀態(tài)下,將新創(chuàng)建的寫請求包寫入遠(yuǎn)程備份設(shè)備;如果遠(yuǎn)程 備份設(shè)備發(fā)生異常,則進(jìn)入日志狀態(tài);日志狀態(tài)在該工作狀態(tài)下,按順序?qū)⑿聞?chuàng)建的寫請求包按照多日志文件存儲策略進(jìn) 行日志緩存;如果遠(yuǎn)程備份設(shè)備恢復(fù)正常,進(jìn)入恢復(fù)狀態(tài),;恢復(fù)狀態(tài)在該工作狀態(tài)下,清空日志文件中的寫請求包,直至最后一個日志;如果 在恢復(fù)狀態(tài)下遠(yuǎn)程備份設(shè)備發(fā)生異常,則進(jìn)入日志狀態(tài);在清空日志文件至只剩下一個曰 志文件時,進(jìn)入中間狀態(tài);中間狀態(tài)在該工作狀態(tài)下,新創(chuàng)建的寫請求包不寫入日志文件,臨時緩存在本地內(nèi) 存中,即使新產(chǎn)生的寫請求包數(shù)量滿足寫日志的條件也不寫日志文件;本地緩存的請求包 發(fā)送完,進(jìn)入正常工作狀態(tài)。
5、 如權(quán)利要求4所述的方法,其特征在于,所述多日志文件存儲策略為將被保護(hù)巻當(dāng)前內(nèi)存緩存的多個寫請求包按日志文件預(yù)先設(shè)定值順序組織成多個日 志文件寫入本地磁盤。
6、 如權(quán)禾l接求l所述的方法,其特征在于,所述步驟4)包括以下步驟(41) 獲取寫請求包所在的隊列鎖;(42) 判斷寫請求包的數(shù)量是否達(dá)到預(yù)先設(shè)定的數(shù)目,如果是,進(jìn)入步驟(43);不是,進(jìn)入步驟(45);(43) 將預(yù)先設(shè)定數(shù)目的寫請求包寫入本地磁盤中的一個新的日志文件;(44) 將寫入日志文件的寫請求包從隊列中釋放;(45) 釋放寫請求包所在的隊列鎖,進(jìn)入步驟6)。
7、 如權(quán)利要求l所述的方法,其特征在于,所述步驟5)包括以下步驟(51) 若當(dāng)前處于"正常工作狀態(tài)"或"中間狀態(tài)",獲取寫請求包緩存隊列的互斥 鎖,得到隊列的操作權(quán),然后調(diào)用遠(yuǎn)程備份設(shè)備的底層驅(qū)動,逐一將寫請求包發(fā)送至遠(yuǎn)禾呈 備份設(shè)備,然后進(jìn)入步驟(53);否則進(jìn)入步驟(52);(52) 如果處于"恢復(fù)狀態(tài)",則將磁盤日志文件中存儲的寫請求包發(fā)往遠(yuǎn)程備份設(shè)備;如果不是,轉(zhuǎn)入步驟(51);(53) 數(shù)據(jù)發(fā)往遠(yuǎn)程備份設(shè)備后,在寫請求包關(guān)聯(lián)的完成例程中判斷數(shù)據(jù)是否發(fā)送成功;(54) 如果數(shù)據(jù)發(fā)送不成功,將設(shè)備異常的信息上報至上層控制,同時終止自身的繼 續(xù)執(zhí)行,進(jìn)入步驟6);(55) 如果數(shù)據(jù)發(fā)送成功,則回到步驟l)。
全文摘要
本發(fā)明涉及連續(xù)數(shù)據(jù)保護(hù)系統(tǒng)在遠(yuǎn)程備份設(shè)備臨時異常時的保護(hù)方法,屬于計算機(jī)數(shù)據(jù)存儲技術(shù)領(lǐng)域,包括判斷被保護(hù)卷的寫操作寫數(shù)據(jù)復(fù)制根據(jù)當(dāng)前工作狀態(tài)將創(chuàng)建的寫請求包進(jìn)行本地緩存或遠(yuǎn)程發(fā)送;將接收到的寫請求包先在內(nèi)存中進(jìn)行緩存,當(dāng)寫請求包緩存到預(yù)先設(shè)定的數(shù)量后,將內(nèi)存中緩存的請求包寫到本地磁盤上;如果發(fā)送失敗,定期檢查遠(yuǎn)程備份設(shè)備的運行狀況。本發(fā)明適用于塊級連續(xù)數(shù)據(jù)保護(hù)系統(tǒng)的實現(xiàn),在系統(tǒng)將變化數(shù)據(jù)通過網(wǎng)絡(luò)發(fā)送到遠(yuǎn)程數(shù)據(jù)備份設(shè)備時,如果遠(yuǎn)程備份設(shè)備發(fā)生異常,采用本方法能保證連續(xù)變化的數(shù)據(jù)內(nèi)容不會丟失,為連續(xù)數(shù)據(jù)保護(hù)系統(tǒng)的任意點數(shù)據(jù)恢復(fù)提供保障。
文檔編號G06F11/14GK101408855SQ20081022559
公開日2009年4月15日 申請日期2008年11月7日 優(yōu)先權(quán)日2008年11月7日
發(fā)明者宏 劉, 徐學(xué)雷, 泓 李, 汪東升, 生擁宏, 鞠大鵬, 鞠秀芳 申請人:北京威視數(shù)據(jù)系統(tǒng)有限公司;清華大學(xué)