一種閃存文件的數據恢復方法和裝置的制造方法
【技術領域】
[0001]本發明涉及存儲技術領域,尤其涉及一種閃存文件的數據恢復方法和裝置。
【背景技術】
[0002]閃存(Flash)結合了只讀存儲器(Read Only Memory,ROM)和隨機存儲器(RamdomAccess Memory, RAM)的長處,不僅具備電子可擦除可編程(EEPR0M)的性能,還具有非易失性隨機訪問存儲器(Non-Volatile Random Access Memory, NVRAM)的優勢一可以快速讀取數據,使數據不會因為斷電而丟失。在過去的20年里,嵌入式系統一直使用R0M/EPR0M作為它們的存儲設備,然而,近年來Flash全面代替了 R0M/EPR0M在嵌入式系統中的地位,用作存儲系統啟動前引導程序(Bootloader)、操作系統和程序代碼;或者,直接當硬盤如固體硬盤(SSD)使用。通常,Flash上存儲有很多重要數據,一旦損壞或丟失都將造成嚴重后果。
[0003]存儲技術發展多年,針對傳統的機械硬盤即采用磁性介質的硬盤已有較為成熟的文件數據恢復技術,但目前還沒有針對Flash具體可行的數據恢復方案。當前,許多閃存都采用第 2 版閃存日志型文件系統(Journalling Flash File System Vers1n 2, JFFS2)將各種信息以文件的形式進行管理和存儲。在JFFS2中,對于刪除或者修改文件的指令,JFFS2并不實際刪除或修改原有的文件數據,而是通過寫入新的文件數據節點來實現,這就為針對閃存文件的數據恢復提供了可能。
【發明內容】
[0004]為解決現有存在的技術問題,本發明實施例期望提供一種閃存文件的數據恢復方法和裝置,能夠針對基于JFFS2的閃存進行文件的數據恢復。
[0005]本發明實施例的技術方案是這樣實現的:
[0006]本發明實施例提供一種閃存文件的數據恢復方法,該方法包括:
[0007]掃描閃存存儲區域,為文件數據節點創建對應的數據節點描述符,為文件創建對應的內核描述符,所述文件數據節點包括已被標記為無效節點的數據節點,所述文件包括已被標記為刪除文件的文件;
[0008]根據數據節點描述符,為文件建立對應的臨時紅黑樹,所述臨時紅黑樹中包含文件的已被標記為無效節點在內的全部數據節點所對應的數據節點描述符;
[0009]根據文件對應的內核描述符和臨時紅黑樹,確定文件的最大版本號;
[0010]當文件的最大版本號為N時,遍歷所述文件對應的臨時紅黑樹,建立所述文件的N個版本所對應的N個文件紅黑樹;其中,N為正整數。
[0011]上述方案中,在對文件數據節點創建對應的數據節點描述符之前,所述方法還包括:
[0012]對文件數據節點進行循環冗余校驗。
[0013]上述方案中,,所述遍歷所述文件對應的臨時紅黑樹,建立所述文件的N個版本所對應的N個文件紅黑樹為:
[0014]按照版本號的降序或升序,建立所述文件的Ν個文件紅黑樹。
[0015]上述方案中,當為所述文件建立版本號η對應的文件紅黑樹時,所述方法包括:
[0016]遍歷所述臨時紅黑樹;
[0017]將所述臨時紅黑樹中所有版本號小于或等于η的節點加入版本號η對應的文件紅黑樹中;
[0018]其中,1彡η彡Ν,η為正整數。
[0019]上述方案中,當已建立文件的不同版本對應的文件紅黑樹時,所述方法還包括:
[0020]建立不同的結構體,以描述不同的文件版本,所述結構體中包括文件的版本號和指向所述版本號對應的文件紅黑樹的根節點指針。
[0021]本發明實施例還提供一種閃存文件的數據恢復裝置,該裝置包括:掃描模塊、臨時紅黑樹建立模塊、版本號確定模塊和文件紅黑樹建立模塊;其中,
[0022]掃描模塊,用于掃描閃存存儲區域,為文件數據節點創建對應的數據節點描述符,為文件創建對應的內核描述符,所述文件數據節點包括已被標記為無效節點的數據節點,所述文件包括已被標記為刪除文件的文件;
[0023]臨時紅黑樹建立模塊,用于根據數據節點描述符,為文件建立對應的臨時紅黑樹,所述臨時紅黑樹中包含文件的已被標記為無效節點在內的全部數據節點所對應的數據節點描述符;
[0024]版本號確定模塊,用于根據文件對應的內核描述符和臨時紅黑樹,確定文件的最大版本號;
[0025]文件紅黑樹建立模塊,用于當文件的最大版本號為Ν時,遍歷所述文件對應的臨時紅黑樹,建立所述文件的Ν個版本所對應的Ν個文件紅黑樹;其中,Ν為正整數。
[0026]上述方案中,所述掃描模塊包括:
[0027]校驗單元,用于在對文件數據節點創建對應的數據節點描述符之前,對文件數據節點進行循環冗余校驗。
[0028]上述方案中,所述文件紅黑樹建立模塊包括:
[0029]排序單元,用于按照版本號的降序或升序,建立所述文件的Ν個文件紅黑樹。
[0030]上述方案中,所述文件紅黑樹建立模塊包括:
[0031]遍歷單元,用于遍歷所述臨時紅黑樹;
[0032]文件紅黑樹建立單元,用于將所述臨時紅黑樹中所有版本號小于或等于η的節點加入版本號η對應的文件紅黑樹中;
[0033]其中,1彡η彡Ν,η為正整數。
[0034]上述方案中,所述裝置還包括:
[0035]結構體建立模塊,用于當已建立文件的不同版本對應的文件紅黑樹時,建立不同的結構體,以描述不同的文件版本,所述結構體中包括文件的版本號和指向所述版本號對應的文件紅黑樹的根節點指針。
[0036]本發明實施例所提供的閃存文件的數據恢復方法和裝置,針對基于JFFS2的閃存,利用JFFS2中的內存描述符和紅黑樹機制,通過為文件建立所有版本號對應的文件紅黑樹,在臟塊回收破壞數據前,能恢復全部刪除數據或者歷史數據;即使有部分數據被破壞未通過校驗,其余通過校驗的部分刪除數據或者歷史數據也可以被恢復。
【附圖說明】
[0037]圖1為本發明實施例提供的閃存文件數據恢復方法的實現流程示意圖;
[0038]圖2為本發明實施例提供的閃存文件數據恢復裝置的組成結構示意圖。
【具體實施方式】
[0039]為了更清楚地說明本發明實施例和技術方案,下面將結合附圖及實施例對本發明的技術方案進行更詳細的說明,顯然,所描述的實施例是本發明的一部分實施例,而不是全部實施例。基本發明的實施例,本領域普通技術人員在不付出創造性勞動的前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
[0040]在本發明實施例中,閃存采用JFFS2管理所存儲的信息。JFFS2是一個日志結構(log-structured)的文件系統,包含數據和原數據(meta-data)的節點在閃存上順序的存儲。JFFS2之所以選擇日志結構的存儲方式,是因為閃存的擦寫塊的擦寫次數有限,因此,對閃存的更新應該是out-of-place的更新方式,即對文件數據的更新不在原存儲區域,而是開辟新的存儲區域存儲更新后的數據,并以版本號來標識,以實現擦寫塊的磨損平衡(wearleveling)。
[0041 ] 操作系統內核掃描閃存時,將為閃存中每個文件建立多個描述符,用以表述文件,其中最關鍵的是索引節點。索引節點可涵蓋多種文件系統,只描述所有文件系統共有的普通信息。為了更具體的表述文件,索引節點中包含有一個指針(u域),指向具體文件系統的用以描述文件的結構體,對于JFFS2,u域指向結構體jffs2_inode_info。在現有的JFFS2中,一個文件對應一個結構體jffs2_in