專利名稱:一種文件系統(tǒng)的斷電保護(hù)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及信息處理技術(shù)領(lǐng)域,尤其涉及文件系統(tǒng)的斷電保護(hù)方法。
背景技術(shù):
在數(shù)字化音視頻監(jiān)控領(lǐng)域,隨著嵌入式技術(shù)的發(fā)展,嵌入式數(shù)字硬盤錄像機(jī)(EDVR, Embedded Digital Video Recorder)在性能、功能、適用性、可維護(hù)性、穩(wěn)定性各方面有了根本性的改善,因此其應(yīng)用領(lǐng)域也越來越廣,從最初的金融領(lǐng)域發(fā)展到交通、公安、電力、移動(dòng)車載、采礦等各種應(yīng)用場所。隨著應(yīng)用環(huán)境的多樣化、復(fù)雜化,對(duì)嵌入式數(shù)字硬盤錄像機(jī)的可靠性和故障恢復(fù)能力提出了更高的要求。常見的嵌入式硬盤錄像機(jī)無法正常錄像或丟失錄像文件主要是由于系統(tǒng)異常掉電等原因引起的文件系統(tǒng)關(guān)鍵信息丟失或不完整等原因?qū)е碌腻e(cuò)誤。傳統(tǒng)的文件系統(tǒng),如fat32、ext3等在異常斷電這塊做的并不是很好,經(jīng)常在多次異常斷電后出現(xiàn)大量文件丟失,或者文件系統(tǒng)遭到破壞無法再恢復(fù)。其主要原因是文件系統(tǒng)在更新關(guān)鍵數(shù)據(jù)時(shí)發(fā)生斷電,此時(shí)就可能造成文件丟失,或者文件系統(tǒng)關(guān)鍵數(shù)據(jù)不完整造成文件系統(tǒng)不可用的情況。針對(duì)這一問題,目前已有一種解決辦法就是在格式化時(shí)把文件系統(tǒng)關(guān)鍵數(shù)據(jù)一次性寫完,以后就不再修改,這種方法會(huì)使文件系統(tǒng)不具有通用性,不能適用很多應(yīng)用場景。
發(fā)明內(nèi)容
為克服上述不足,本發(fā)明提供了一種文件系統(tǒng)的斷電保護(hù)方法,該方法包括以下步驟:將文件系統(tǒng)在運(yùn)行過程中可能會(huì)修改的關(guān)鍵數(shù)據(jù)都保存兩份,對(duì)應(yīng)為關(guān)鍵數(shù)據(jù)區(qū)一和關(guān)鍵數(shù)據(jù)區(qū)二;寫日志,所述日志記錄的信息包括關(guān)鍵數(shù)據(jù)中需要修改的數(shù)據(jù)的地址以及數(shù)據(jù)的長度;同步計(jì)數(shù),關(guān)鍵數(shù)據(jù)每修改一次,同步計(jì)數(shù)更新一次;以及校驗(yàn)碼,該校驗(yàn)碼用于確認(rèn)該條日志是否完整;所述寫日志的步驟包括:把關(guān)鍵數(shù)據(jù)中需要修改的數(shù)據(jù)的地址以及數(shù)據(jù)的長度記錄到日志中;同步計(jì)數(shù)更新一次;以及計(jì)算校驗(yàn)碼;把日志保存到日志區(qū)一,對(duì)應(yīng)為日志一;在關(guān)鍵數(shù)據(jù)區(qū)一修改數(shù)據(jù);把日志保存到日志區(qū)二,對(duì)應(yīng)為日志二 ;在關(guān)鍵數(shù)據(jù)區(qū)二修改數(shù)據(jù);以及,在斷電重啟后數(shù)據(jù)的恢復(fù)步驟包括:讀取日志一和日志二,校驗(yàn)日志一和日志二的完整性,根據(jù)日志一和日志二的完整性以及日志一和日志二的日志記錄的信息來恢復(fù)關(guān)鍵數(shù)據(jù)。通過本發(fā)明,保證了異常斷電時(shí),文件目錄完整,減少文件的丟失,防止文件系統(tǒng)因?yàn)楫惓嚯娫斐杀罎ⅰ?br>
圖1是根據(jù)本發(fā)明一個(gè)實(shí)施方案的修改關(guān)鍵數(shù)據(jù)的流程圖;圖2是根據(jù)本發(fā)明一個(gè)實(shí)施方案的斷電恢復(fù)的流程圖。
具體實(shí)施例方式下面結(jié)合附圖和實(shí)例,對(duì)本發(fā)明的監(jiān)控存儲(chǔ)設(shè)備文件系統(tǒng)的斷電保護(hù)方法做進(jìn)一步闡述。本發(fā)明所采用的技術(shù)方案包括硬盤分區(qū)格式化、關(guān)鍵數(shù)據(jù)的修改、斷電重啟后關(guān)鍵數(shù)據(jù)的恢復(fù)三個(gè)方面。在進(jìn)行介紹之前,先說明下本發(fā)明中的日志中需要記錄的信息:1、關(guān)鍵數(shù)據(jù)中需要修改的地址以及數(shù)據(jù)的長度,用于記錄關(guān)鍵數(shù)據(jù)中修改了哪些地方,這樣在斷電恢復(fù)的時(shí)候只需要把其中一份關(guān)鍵數(shù)據(jù)中的部分?jǐn)?shù)據(jù)寫入到另一份就行了,不需要整份關(guān)鍵數(shù)據(jù)都拷貝過去,可以節(jié)省斷電恢復(fù)的時(shí)間;2、同步計(jì)數(shù),關(guān)鍵數(shù)據(jù)每修改一次(這里的一次為一個(gè)修改過程,即為兩塊關(guān)鍵數(shù)據(jù)區(qū)都修改),同步計(jì)數(shù)更新一次,同步計(jì)數(shù)多更新一次的日志對(duì)應(yīng)的關(guān)鍵數(shù)據(jù)更新(例如,同步計(jì)數(shù)加1,在此情況下,同步計(jì)數(shù)大的日志對(duì)應(yīng)的那塊關(guān)鍵數(shù)據(jù)更新),同時(shí)也用于恢復(fù)關(guān)鍵數(shù)據(jù)時(shí)判斷哪份數(shù)據(jù)是完整的;3、校驗(yàn)碼,用于確認(rèn)該條日志是否完整,因?yàn)閿嚯娨部赡馨l(fā)生在寫日志的過程中,此時(shí)日志可能只寫了部分?jǐn)?shù)據(jù),那么這份日志就不是一份完整的日志。硬盤分區(qū)格式化包括:1.1)、文件系統(tǒng)的關(guān)鍵數(shù)據(jù)都保存兩份,分別記為關(guān)鍵數(shù)據(jù)區(qū)一,二。1.2)、分配出兩塊區(qū)域用于記錄日志,分別記為日志區(qū)一、二,每塊區(qū)域記錄一份日志。關(guān)鍵數(shù)據(jù)的修改過程如下,對(duì)應(yīng)流程圖見圖1:2.1)在做修改之前,先在內(nèi)存中寫好日志。把關(guān)鍵數(shù)據(jù)中需要修改的地址以及數(shù)據(jù)的長度記錄到日志中,同步計(jì)數(shù)加1,計(jì)算校驗(yàn)碼。(此處使用CRC校驗(yàn)的方式計(jì)算校驗(yàn)碼)。但可以理解,任何可以用于實(shí)現(xiàn)本發(fā)明中所提及的校驗(yàn)碼的用意的校驗(yàn)碼計(jì)算方法都可以使用。如上文所述,本發(fā)明中校驗(yàn)碼用于確認(rèn)一條日志是否完整。2.2)把日志保存到日志區(qū)一。2.3)在關(guān)鍵數(shù)據(jù)區(qū)一修改數(shù)據(jù)。2.4)把日志保存到日志區(qū)二。2.5)在關(guān)鍵數(shù)據(jù)區(qū)二修改數(shù)據(jù)。斷電重啟后關(guān)鍵數(shù)據(jù)的恢復(fù)過程如下,對(duì)應(yīng)流程圖見圖2:3.1)分別從日志區(qū)一、二中讀取兩份日志,記為日志一、二。3.2)首先校驗(yàn)這兩份日志的完整性,日志的完整性有三種情況:1、在寫日志區(qū)一的時(shí)候發(fā)生斷電,日志只寫入了部分沒有完全寫入,這種情況日志一是不完整的(對(duì)應(yīng)于校驗(yàn)失敗);2、在寫日志區(qū)二的時(shí)候發(fā)生斷電,日志只寫入了部分沒有完全寫入,這種情況日志二是不完整的(對(duì)應(yīng)于校驗(yàn)失敗);3、斷電沒有發(fā)生在寫日志區(qū)的過程中,這種情況下兩份日志都是完整(對(duì)應(yīng)于校驗(yàn)成功)的。3.3)若日志一不完整,即發(fā)生了 3.2)中的第一種情況。這種情況說明還沒開始寫關(guān)鍵數(shù)據(jù)區(qū),關(guān)鍵數(shù)據(jù)是完整的,只是最后那份修改的數(shù)據(jù)丟了。只需要把日志二寫到日志區(qū)一中就行了。3.4)若日志二不完整,即發(fā)生了 3.2)中的第二種情況。這種情況說明關(guān)鍵數(shù)據(jù)已經(jīng)成功寫入到關(guān)鍵數(shù)據(jù)區(qū)一,還沒開始寫關(guān)鍵數(shù)據(jù)區(qū)二,需要更新關(guān)鍵數(shù)據(jù)區(qū)二的數(shù)據(jù)。根據(jù)日志一中記錄的地址以及數(shù)據(jù)長度,從關(guān)鍵數(shù)據(jù)區(qū)一中讀取這些數(shù)據(jù),寫到關(guān)鍵數(shù)據(jù)區(qū)二。然后把日志一寫入到日志區(qū)二。3.5)若兩塊日志都是完整的(即,兩塊日志的信息都正確),即發(fā)生了 3.2)中的第三種情況。那么斷電可能發(fā)生在寫關(guān)鍵數(shù)據(jù)區(qū)的時(shí)候,光從日志的完整性已經(jīng)無法分析出關(guān)鍵數(shù)據(jù)的寫入情況了,需要比較兩份日志中的的同步計(jì)數(shù)。兩份日志中的同步計(jì)數(shù)有三種情況:1、在寫關(guān)鍵數(shù)據(jù)區(qū)一的時(shí)候發(fā)生斷電,此時(shí)日志成功寫入到日志區(qū)一,還沒有寫日志區(qū)二,這種情況日志一中的同步計(jì)數(shù)比日志二中的同步計(jì)數(shù)大I ;2、斷電發(fā)生在寫關(guān)鍵數(shù)據(jù)區(qū)二,此時(shí)日志成功寫入到日志區(qū)一、二,這種情況兩份日志的同步計(jì)數(shù)相同;3、斷電沒有發(fā)生在寫關(guān)鍵數(shù)據(jù)區(qū)和日志的時(shí)候,此時(shí)既沒寫日志也沒寫關(guān)鍵數(shù)據(jù),這種情況兩份日志的同步計(jì)數(shù)也都相同。3.6)若日志一中的同步計(jì)數(shù)比日志二中的同步計(jì)數(shù)大1,即發(fā)生了 3.5)中的第一種情況。這種情況無法斷定關(guān)鍵數(shù)據(jù)是否已經(jīng)成功寫入到關(guān)鍵數(shù)據(jù)區(qū)一,需要恢復(fù)關(guān)鍵數(shù)據(jù)區(qū)一中的修改。根據(jù)日志一中記錄的地址以及數(shù)據(jù)長度,從關(guān)鍵數(shù)據(jù)區(qū)二中讀取這些數(shù)據(jù),寫到關(guān)鍵數(shù)據(jù)區(qū)一。然后把日志二寫入到日志區(qū)一。3.7)若同步計(jì)數(shù)相同,無法分辯是發(fā)生了 3.5)中的第二種還是第三種情況,統(tǒng)一當(dāng)?shù)诙N情況處理,因?yàn)槿绻堑谌N情況無非就是多了一次無用的數(shù)據(jù)拷貝,不影響數(shù)據(jù)的正確性。這種情況無法斷定關(guān)鍵數(shù)據(jù)是否已經(jīng)成功寫入到關(guān)鍵數(shù)據(jù)區(qū)二,需要更新關(guān)鍵數(shù)據(jù)區(qū)二的數(shù)據(jù),此時(shí)兩份日志的數(shù)據(jù)是完全相同的。根據(jù)日志(日志一或日志二)中記錄的地址以及數(shù)據(jù)長度,從關(guān)鍵數(shù)據(jù)區(qū)一中讀取這些數(shù)據(jù),寫到關(guān)鍵數(shù)據(jù)區(qū)二。
權(quán)利要求
1.一種文件系統(tǒng)的斷電保護(hù)方法,其特征在于,該方法包括以下步驟: 將文件系統(tǒng)在運(yùn)行過程中可能會(huì)修改的關(guān)鍵數(shù)據(jù)都保存兩份,對(duì)應(yīng)為關(guān)鍵數(shù)據(jù)區(qū)一和關(guān)鍵數(shù)據(jù)區(qū)二; 寫日志,所述日志記錄的信息包括關(guān)鍵數(shù)據(jù)中需要修改的數(shù)據(jù)的地址以及數(shù)據(jù)的長度;同步計(jì)數(shù),關(guān)鍵數(shù)據(jù)每修改一次,同步計(jì)數(shù)更新一次;以及校驗(yàn)碼,該校驗(yàn)碼用于確認(rèn)該條日志是否完整; 所述寫日志的步驟包括:把關(guān)鍵數(shù)據(jù)中需要修改的數(shù)據(jù)的地址以及數(shù)據(jù)的長度記錄到日志中;同步計(jì)數(shù)更新一次;以及計(jì)算校驗(yàn)碼; 把日志保存到日志區(qū)一,對(duì)應(yīng)為日志一; 在關(guān)鍵數(shù)據(jù)區(qū)一修改數(shù)據(jù); 把日志保存到日志區(qū)二,對(duì)應(yīng)為日志二 ; 在關(guān)鍵數(shù)據(jù)區(qū)二修改數(shù)據(jù); 以及,在斷電重啟后數(shù)據(jù)的恢復(fù)步驟包括: 讀取日志一和日志二,校驗(yàn)日志一和日志二的完整性,根據(jù)日志一和日志二的完整性以及日志一和日志二的日志記錄的信息來恢復(fù)關(guān)鍵數(shù)據(jù)。
2.根據(jù)權(quán)利要求1所述的文件系統(tǒng)的斷電保護(hù)方法,其特征在于,如果校驗(yàn)結(jié)果為日志一不完整,日志二完整,則將日志二拷貝給日志一。
3.根據(jù)權(quán)利要求1所述的文件系統(tǒng)的斷電保護(hù)方法,其特征在于,如果校驗(yàn)結(jié)果為日志一完整,日志二不完整,則根據(jù)日志一中記錄的地址以及數(shù)據(jù)長度,從關(guān)鍵數(shù)據(jù)區(qū)一中讀取這些數(shù)據(jù),寫到關(guān)鍵數(shù)據(jù)區(qū)二,然后把日志一寫入到日志區(qū)二。
4.根據(jù)權(quán)利要求1所述的文件系統(tǒng)的斷電保護(hù)方法,其特征在于,如果校驗(yàn)結(jié)果為日志一和日志二都完整,以及日志一的同步計(jì)數(shù)相對(duì)于日志二同步計(jì)數(shù)多更新了一次,則根據(jù)日志一中記錄的地址以及數(shù)據(jù)長度,從關(guān)鍵數(shù)據(jù)區(qū)二中讀取這些數(shù)據(jù),寫到關(guān)鍵數(shù)據(jù)區(qū)一,然后把日志二寫入到日志區(qū)一;如果比較結(jié)果為兩塊日志都完整,以及日志一同步計(jì)數(shù)與日志二同步計(jì)數(shù)相同,則根據(jù)日志一或二中記錄的地址以及數(shù)據(jù)長度,從關(guān)鍵數(shù)據(jù)區(qū)一中讀取這些數(shù)據(jù),寫到關(guān)鍵數(shù)據(jù)區(qū)二。
全文摘要
本發(fā)明涉及一種文件系統(tǒng)的斷電保護(hù)方法,包括1.一種文件系統(tǒng)的斷電保護(hù)方法,其特征在于,該方法包括以下步驟將文件系統(tǒng)在運(yùn)行過程中可能會(huì)修改的關(guān)鍵數(shù)據(jù)都保存兩份,對(duì)應(yīng)為關(guān)鍵數(shù)據(jù)區(qū)一和關(guān)鍵數(shù)據(jù)區(qū)二;寫日志,包括把關(guān)鍵數(shù)據(jù)中需要修改的數(shù)據(jù)的地址以及數(shù)據(jù)的長度記錄到日志中;同步計(jì)數(shù)更新一次;以及計(jì)算校驗(yàn)碼;把日志保存到日志區(qū)一,對(duì)應(yīng)為日志一;在關(guān)鍵數(shù)據(jù)區(qū)一修改數(shù)據(jù);把日志保存到日志區(qū)二,對(duì)應(yīng)為日志二;在關(guān)鍵數(shù)據(jù)區(qū)二修改數(shù)據(jù);以及,在斷電重啟后數(shù)據(jù)的恢復(fù)步驟包括讀取日志一和日志二,校驗(yàn)日志一和日志二的完整性,根據(jù)日志一和日志二的完整性以及日志一和日志二的日志記錄的信息來恢復(fù)關(guān)鍵數(shù)據(jù)。
文檔編號(hào)G06F11/14GK103092719SQ20111033610
公開日2013年5月8日 申請(qǐng)日期2011年10月28日 優(yōu)先權(quán)日2011年10月28日
發(fā)明者姚國勤, 陳小軍, 吳立, 潘海江, 楊斌, 張興明, 傅利泉, 朱江明, 吳軍, 吳堅(jiān) 申請(qǐng)人:浙江大華技術(shù)股份有限公司