一種基于時(shí)間戳的yaffs2文件最終版恢復(fù)方法
【專利摘要】本發(fā)明提供一種基于時(shí)間戳的YAFFS2文件最終版恢復(fù)方法,該方法在研究NAND閃存的特性和YAFFS2文件系統(tǒng)的存儲(chǔ)、回收機(jī)制的基礎(chǔ)上,根據(jù)YAFFS2數(shù)據(jù)結(jié)構(gòu)特征,利用Yst_atime時(shí)間戳信息為依據(jù)可以恢復(fù)出數(shù)據(jù)文件的最終版本,提出基于Yst_atime時(shí)間戳的YAFFS2文件最終版本恢復(fù)方法,該方法能從物理芯片上擦除的數(shù)據(jù)重新拼裝進(jìn)行恢復(fù)。
【專利說明】—種基于時(shí)間戳的YAFFS2文件最終版恢復(fù)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及信息安全中數(shù)字取證【技術(shù)領(lǐng)域】,尤其涉及一種基于時(shí)間戳的YAFFS2文件最終版恢復(fù)方法。
【背景技術(shù)】
[0002]ndroid智能平臺(tái)功能日益多樣,儲(chǔ)存的用戶數(shù)據(jù)越來越多,因此恢復(fù)用戶誤刪除的文件技術(shù)也越來越重要。目前YAFFS2文件系統(tǒng)下數(shù)據(jù)恢復(fù)技術(shù)有基于系統(tǒng)元信息的文件恢復(fù)方法。基于系統(tǒng)元信息的文件恢復(fù),利用YAFFS2實(shí)現(xiàn)NAND閃存所要求的無重復(fù)寫操作與磨損均衡的特殊方式,通過對(duì)象頭、標(biāo)志位、NAND塊序號(hào)等元信息將那些邏輯上被刪除,但實(shí)際并未從物理芯片上擦除的數(shù)據(jù)重新拼裝進(jìn)行恢復(fù)。該方法是按照閃存數(shù)據(jù)塊物理偏移順序進(jìn)行編號(hào),按照塊序號(hào)從大到小排序。只存儲(chǔ)創(chuàng)建時(shí)間距文件恢復(fù)時(shí)刻最接近的頁面,以解決文件的分片和失序問題。
【發(fā)明內(nèi)容】
[0003]針對(duì)上述問題中存在的不足之處,本發(fā)明提出一種基于時(shí)間戳的YAFFS2文件最終版恢復(fù)方法,該方法在NAND閃存的特性和YAFFS2文件系統(tǒng)的存儲(chǔ)、回收機(jī)制的基礎(chǔ)上,根據(jù)YAFFS2數(shù)據(jù)結(jié)構(gòu)特征,利用Yst_atime時(shí)間戳信息為依據(jù)可以恢復(fù)出數(shù)據(jù)文件的最終版本。
[0004]為實(shí)現(xiàn)上述目的,本發(fā)明的基于時(shí)間戳的YAFFS2文件最終版恢復(fù)方法,其包括以下步驟:
[0005]1.一種基于時(shí)間戳的YAFFS2文件最終版恢復(fù)方法,其特征在于,包括:
[0006]步驟1,從YAFFS2文件中的最大塊序號(hào)的數(shù)據(jù)塊開始掃描,最大塊序號(hào)標(biāo)記為N,塊序號(hào)為N的數(shù)據(jù)塊標(biāo)記為BlockN,掃描所述BlockN ;
[0007]步驟2,從所述BlockN的最后一個(gè)頁面開始掃描,該最后一個(gè)頁面標(biāo)記為M,數(shù)據(jù)塊內(nèi)第M個(gè)頁面標(biāo)記為PageM,掃描所述PageM,并對(duì)該P(yáng)ageM進(jìn)行判斷:如果所述PageM是所述BlockN中第一個(gè)頁面,則執(zhí)行步驟4,如果所述PageM不是所述BlockN中第一個(gè)頁面,則執(zhí)行步驟3 ;
[0008]步驟3,令M=M-1,執(zhí)行步驟2 ;
[0009]步驟4,對(duì)所述BlockN進(jìn)行判斷,如果所述BlockN是最小塊,則找到當(dāng)當(dāng)前塊的當(dāng)前頁的對(duì)象號(hào)和頁面號(hào),掃描結(jié)束,執(zhí)行步驟6,否則執(zhí)行步驟5 ;
[0010]步驟5,令N=N-1,執(zhí)行步驟I ;
[0011]步驟6,根據(jù)所述對(duì)象號(hào)和頁面號(hào)的訪問時(shí)間戳Yst_atime字段確定文件最終版本對(duì)象頭,從該最終版本對(duì)象頭的Object header頁面中獲取文件的描述信息。
[0012]進(jìn)一步的,所述步驟6包括:
[0013]步驟1,從閃存的當(dāng)前塊的當(dāng)前頁上讀取頁面號(hào),對(duì)該頁面號(hào)進(jìn)行解包判斷;
[0014]步驟2,如果所述頁面號(hào)為0,則該頁面是對(duì)象頭,查找所述對(duì)象頭的對(duì)象號(hào)和Yst_atime字段,并根據(jù)所述Yst_atime字段的訪問時(shí)間戳確定文件最終版本對(duì)象頭,否則尋找當(dāng)前頁的前一個(gè)頁面,執(zhí)行步驟I ;
[0015]步驟3,查尋與所述最終版本對(duì)象頭具有相同對(duì)象號(hào)的頁面,并按從大到小的頁面號(hào)和從遠(yuǎn)到近的時(shí)間順序排序,得到排序結(jié)果;
[0016]步驟5,根據(jù)所述排序結(jié)果獲取定位存儲(chǔ)創(chuàng)建時(shí)間距Yst_atime字段最近的頁面,驗(yàn)證所述最近的頁面的文件相關(guān)信息,并將其拼裝恢復(fù)并輸出最終文件數(shù)據(jù);
[0017]其中,所述字段Ystjntime:表示修改時(shí)間是文件本身的內(nèi)容發(fā)生了變化,是在寫入文件時(shí)隨文件內(nèi)容的更改而更改的。本發(fā)明的有益效果在于:
[0018]本發(fā)明在NAND閃存的特性和YAFFS2文件系統(tǒng)的存儲(chǔ)、回收機(jī)制的基礎(chǔ)上,根據(jù)YAFFS2數(shù)據(jù)結(jié)構(gòu)特征,利用Yst_atime時(shí)間戳信息為依據(jù)可以恢復(fù)出數(shù)據(jù)文件的最終版本,提出了基于Yst_atime時(shí)間戳的YAFFS2文件最終版本恢復(fù)方法,從物理芯片上擦除的數(shù)據(jù)重新拼裝進(jìn)行恢復(fù)。
【專利附圖】
【附圖說明】
[0019]圖1是本發(fā)明的基于時(shí)間戳的YAFFS2文件最終版恢復(fù)方法的原數(shù)據(jù)掃描算法流程圖;
[0020]圖2是本發(fā)明的基于時(shí)間戳的YAFFS2文件最終版恢復(fù)方法流程圖。
【具體實(shí)施方式】
[0021]為了使發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,下面結(jié)合附圖與實(shí)例對(duì)本發(fā)明作進(jìn)一步詳細(xì)說明。但所舉實(shí)例不作為對(duì)本發(fā)明的限定。
[0022]本發(fā)明提出一種從用戶角度出發(fā),根據(jù)YAFFS2數(shù)據(jù)結(jié)構(gòu)特征,NAND閃存下面向Android利用文件的最后訪問時(shí)間戳Yst_atime為依據(jù),恢復(fù)文件最終版本的方法。
[0023]YAFFS2文件系統(tǒng)下儲(chǔ)存的每個(gè)文件都會(huì)有一個(gè)文件頭,存儲(chǔ)文件名、文件大小等信息。并且,YAFFS2采用遞增的數(shù)字序列來標(biāo)記每一個(gè)塊,每當(dāng)一個(gè)新塊被分配,塊序號(hào)加
I。從具有最大塊序號(hào)的數(shù)據(jù)塊開始,到具有最小塊序號(hào)的數(shù)據(jù)塊,對(duì)每個(gè)塊從最后一個(gè)頁面到第一個(gè)頁面依次掃描。用上述方法遍歷NAND閃存,根據(jù)用戶輸入的文件名,尋找目標(biāo)文件的所有對(duì)象頭頁面。
[0024]YAFFS的每個(gè)頁面都有各自的標(biāo)簽,其中對(duì)象號(hào)ObjectID是該頁面所屬對(duì)象的ID號(hào),頁面號(hào)Chunkid用于標(biāo)識(shí)該頁面在所處對(duì)象中的邏輯位置,如Chunkid為O表示該頁面是對(duì)象頭,Chunkid為I表示該頁面是所屬對(duì)象的第一個(gè)數(shù)據(jù)頁面。由于NAND閃存異地更新的特性,經(jīng)過修改操作的文件會(huì)有不同歷史版本存在于閃存上,所以搜索到的文件頭頁面可能為一個(gè)或多個(gè)。對(duì)于用戶來說,僅需要恢復(fù)最新版本的文件。文件頭儲(chǔ)存的一些字段信息對(duì)文件恢復(fù)十分有用。其中,字段Yst_mtime:表示修改時(shí)間(modification time),是文件本身的內(nèi)容發(fā)生了變化,是在寫入文件時(shí)隨文件內(nèi)容的更改而更改的;字段Yst_ctime:表示改變時(shí)間(change time),是文件的索引節(jié)點(diǎn)發(fā)生了改變,是在寫入文件、更改所有者、權(quán)限或鏈接設(shè)置時(shí)隨Inode的內(nèi)容更改而更改的;字段Yst_atime:表示訪問時(shí)間(accesstime),是文件最后一次被讀取的時(shí)間;是在讀取文件或者執(zhí)行文件時(shí)更改的。
[0025]若找到目標(biāo)文件的對(duì)象頭只有一個(gè),說明文件只有一個(gè)版本存在于閃存上,讀取其objectID,尋找所有具有相同ObjectID的數(shù)據(jù)頁面。若找到多個(gè)目標(biāo)文件的對(duì)象頭,說明對(duì)象被修改過,具有相同ObjectID同時(shí)chunkID也相同的頁面屬于該文件的不同版本。讀取所有chunkID為O的對(duì)象頭中Yst_atime時(shí)間戳。在Android系統(tǒng)中,時(shí)間戳一般表示自1970年I月I日至今的毫秒數(shù),所以我們可以直接比較Yst_atime值的大小,值最大的一個(gè)為最后一次訪問時(shí)間。YAFFS2文件系統(tǒng)是根據(jù)對(duì)象頭來決定把哪些文件內(nèi)容呈現(xiàn)給用戶。我們則根據(jù)最后一次訪問的對(duì)象頭,找到該版本下的所有數(shù)據(jù)頁面。將找到的所有數(shù)據(jù)頁面的內(nèi)容拷貝到新的空閑塊中,按照chunk ID由小到大排序,重組成完整的目標(biāo)文件??截悢?shù)據(jù)時(shí)調(diào)用文件系統(tǒng)的寫操作,將數(shù)據(jù)內(nèi)容作為新的文件寫入閃存,文件系統(tǒng)重新為其分配一個(gè)新的對(duì)象頭,這樣數(shù)據(jù)頁面的狀態(tài)全部為有效。
[0026]如圖1,2所示,本發(fā)明提供一種NAND閃存下面向Android基于時(shí)間戳的YAFFS2文件恢復(fù)方法,包括:
[0027]用BlockN表示塊序號(hào)為N的數(shù)據(jù)塊,PageM表示塊內(nèi)第M個(gè)頁面。采用從當(dāng)前塊BlockN到BlockN-1的遍歷順序逐塊掃描整個(gè)閃存,對(duì)當(dāng)前塊BlockN內(nèi)數(shù)據(jù)頁面的掃描也從PageM到PageM-1逐頁掃描,直至整個(gè)塊掃描結(jié)束,跳轉(zhuǎn)至BlockN-1繼續(xù)。其掃描算法流程步驟如下:
[0028]步驟ISlOlScan BlockN ;
[0029]步驟2S102Scan當(dāng)前Block中pageM ;如果PageM是當(dāng)前block中第一個(gè)頁面,則轉(zhuǎn)到(4);
[0030]步驟3S103M=M_1,轉(zhuǎn)到(2);
[0031]步驟4S104如果當(dāng)前block塊是當(dāng)前塊中最小塊,則掃描結(jié)束;
[0032]步驟5S105N=N_1,轉(zhuǎn)到(I)。
[0033]在上述掃描過程中,尋找對(duì)象頭頁面,根據(jù)訪問時(shí)間戳Yst_atime字段確定文件最新版本對(duì)象頭,從最終對(duì)象頭Object header頁面中獲取文件的描述信息。其算法思想如下:
[0034]步驟1S201 從 NAND Flash 每頁的 spare 區(qū)讀取 yaffs_tags 中的 chunkID,經(jīng)解包后判斷是對(duì)象頭頁面還是數(shù)據(jù)頁面。
[0035]步驟2S202chunkID=0,該 Flash Page 存放的數(shù)據(jù)為 ObjectHeader,查找此 tags中的ObjectID和Yst_atime字段,根據(jù)訪問時(shí)間戳Yst_atime字段確定文件最新版本對(duì)象頭 ObjectID ;
[0036]步驟3S203從最終對(duì)象頭0bject header頁面中獲取文件的描述信息,用于恢復(fù)數(shù)據(jù)和驗(yàn)證文件數(shù)據(jù)恢復(fù)是否成功;
[0037]步驟4S204查尋具有相同ObjectID的頁面,判斷chunkID>0:表示該P(yáng)age存放的數(shù)據(jù)為某個(gè)Object的Data,并按從大到小的Chunkid和從遠(yuǎn)到近的時(shí)間順序排序;
[0038]步驟5S205定位存儲(chǔ)創(chuàng)建時(shí)間距Yst_atime最近的頁面,驗(yàn)證文件相關(guān)信息,拼裝恢復(fù)并輸出最終文件數(shù)據(jù)。
[0039]本方案適用于NAND閃存下面向Android基于時(shí)間戳的YAFFS2文件恢復(fù),根據(jù)YAFFS2文件系統(tǒng)的存儲(chǔ)、回收機(jī)制和數(shù)據(jù)結(jié)構(gòu)特征、NAND閃存的特性,結(jié)合數(shù)據(jù)塊和頁的倒序遍歷算法實(shí)現(xiàn)最終文件版本的恢復(fù)。
[0040]其中,字段Yst_mtime:表示修改時(shí)間(modification time),是文件本身的內(nèi)容發(fā)生了變化,是在寫入文件時(shí)隨文件內(nèi)容的更改而更改的;
[0041]字段Yst_ctime:表示改變時(shí)間(change time),是文件的索引節(jié)點(diǎn)發(fā)生了改變,是在寫入文件、更改所有者、權(quán)限或鏈接設(shè)置時(shí)隨Inode的內(nèi)容更改而更改的;
[0042]字段Yst_atime:表示訪問時(shí)間(access time),是文件最后一次被讀取的時(shí)間;是在讀取文件或者執(zhí)行文件時(shí)更改的。
[0043]對(duì)時(shí)間戳的比較分析可以看出,訪問時(shí)間Yst_atime是文件最后一次被讀取的時(shí)間。因此閱讀一個(gè)文件會(huì)更新它的訪問時(shí)間,此時(shí)它的改變時(shí)間Yst_Ctime并沒有變化(文件的信息沒有被改變),它的修改時(shí)間Ystjntime也同樣如此(文件本身沒有被改變)。因此,根據(jù)Yst_atime時(shí)間戳信息為依據(jù)可以恢復(fù)出數(shù)據(jù)文件的最終版本。根據(jù)Ystjntime時(shí)間戳信息為依據(jù)可以恢復(fù)出數(shù)據(jù)文件的不同版本。
[0044]惟以上所述者,僅為本發(fā)明的較佳實(shí)施例而已,舉凡熟悉此項(xiàng)技藝的專業(yè)人士。在了解本發(fā)明的技術(shù)手段之后,自然能依據(jù)實(shí)際的需要,在本發(fā)明的教導(dǎo)下加以變化。因此凡依本發(fā)明申請(qǐng)專利范圍所作的同等變化與修飾,都應(yīng)仍屬本發(fā)明專利涵蓋的范圍內(nèi)。
【權(quán)利要求】
1.一種基于時(shí)間戳的YAFFS2文件最終版恢復(fù)方法,其特征在于,包括: 步驟1,從YAFFS2文件中的最大塊序號(hào)的數(shù)據(jù)塊開始掃描,最大塊序號(hào)標(biāo)記為N,塊序號(hào)為N的數(shù)據(jù)塊標(biāo)記為BlockN,掃描所述BlockN ; 步驟2,從所述BlockN的最后一個(gè)頁面開始掃描,該最后一個(gè)頁面標(biāo)記為M,數(shù)據(jù)塊內(nèi)第M個(gè)頁面標(biāo)記為PageM,掃描所述PageM,并對(duì)該P(yáng)ageM進(jìn)行判斷:如果所述PageM是所述BlockN中第一個(gè)頁面,則執(zhí)行步驟4,如果所述PageM不是所述BlockN中第一個(gè)頁面,則執(zhí)行步驟3 ; 步驟3,令M=M-1,執(zhí)行步驟2 ; 步驟4,對(duì)所述BlockN進(jìn)行判斷,如果所述BlockN是最小塊,則找到當(dāng)當(dāng)前塊的當(dāng)前頁的對(duì)象號(hào)和頁面號(hào),掃描結(jié)束,執(zhí)行步驟6,否則執(zhí)行步驟5 ; 步驟5,令N=N-1,執(zhí)行步驟I ; 步驟6,根據(jù)所述對(duì)象號(hào)和頁面號(hào)的訪問時(shí)間戳Yst_atime字段確定文件最終版本對(duì)象頭,從該最終版本對(duì)象頭的Object header頁面中獲取文件的描述信息。
2.如權(quán)利要求1所述的基于時(shí)間戳的YAFFS2文件最終版恢復(fù)方法,其特征在于,所述步驟6包括: 步驟1,從閃存的當(dāng)前塊的當(dāng)前頁上讀取頁面號(hào),對(duì)該頁面號(hào)進(jìn)行解包判斷; 步驟2,如果所述頁面號(hào)為0,則該頁面是對(duì)象頭,查找所述對(duì)象頭的對(duì)象號(hào)和Yst_atime字段,并根據(jù)所述Yst_atime字段的訪問時(shí)間戳確定文件最終版本對(duì)象頭,否則尋找當(dāng)前頁的前一個(gè)頁面,執(zhí)行步驟I ; 步驟3,查尋與所述最終版本對(duì)象頭具有相同對(duì)象號(hào)的頁面,并按從大到小的頁面號(hào)和從遠(yuǎn)到近的時(shí)間順序排序,得到排序結(jié)果; 步驟5,根據(jù)所述排序結(jié)果獲取定位存儲(chǔ)創(chuàng)建時(shí)間距Yst_atime字段最近的頁面,驗(yàn)證所述最近的頁面的文件相關(guān)信息,并將其拼裝恢復(fù)并輸出最終文件數(shù)據(jù); 其中,所述字段YstJiitime:表示修改時(shí)間是文件本身的內(nèi)容發(fā)生了變化,是在寫入文件時(shí)隨文件內(nèi)容的更改而更改的。
【文檔編號(hào)】G06F17/30GK103870364SQ201410126109
【公開日】2014年6月18日 申請(qǐng)日期:2014年3月31日 優(yōu)先權(quán)日:2014年3月31日
【發(fā)明者】何涇沙, 黃娜, 張玉強(qiáng), 趙斌, 劉公政, 萬雪姣 申請(qǐng)人:北京工業(yè)大學(xué)