一种闪存文件的数据恢复方法和装置的制造方法_2

文档序号:9727216阅读:来源:国知局
ode_info,在结构体jffs2_inode_info中,包含对应文件的最高版本号、指向文件红黑树根结点的指针和指向jffs2_inode_cache的指针等信息。jffs2_inode_CaChe是系统内核为表述对应文件而建立的内核描述符,包含有对应文件的标识号(ino)、硬链接(hard link)数、指向jffs2_raw_node_ref链表的头指针(nodes)等信息。jffs2_raw_node_ref是系统内核为表述文件的数据节点而建立的内核描述符,以下简称数据节点描述符;文件的一个数据节点对应唯一的数据节点描述符。一个文件的所有数据节点描述符组成一个以nodes为头指针的双向链表,该双向链表中数据节点描述符的存储顺序由系统内核扫描闪存的顺序决定。此外,系统内核为每个文件建立一个对应的临时红黑树,此临时红黑树中包含一个文件所有的数据节点描述符,且按照数据节点的版本号的降序/升序排列。通常,系统内核通过宏ref_0bSelete可判断一个数据节点是否为有效的数据节点,通过宏jfTs2_first_valid_node可得到文件的数据节点描述符双向链表中第一个有效的数据节点的指针,从而JFFS2可将当前有效的数据节点所对应的数据节点描述符按照该数据节点在闪存中偏移的由小到大组成文件红黑树,该文件红黑树的根节点地址存储于文件对应的结构体jffs2_inode_info中。系统内核通过遍历jffs2_inode_info中所指向的文件红黑树,即可获取当前有效的文件数据。当jffs2_inode_cache中硬链接数为0时,表示该jffs2_inode_cache所对应的文件为删除文件,因此现有的JFFS2中不会为该文件建立对应的文件红黑树,即jffs2_inode_info中对应的指针为空。通过jfTs2_raW_node_ref,系统内核可获取到对应的文件数据节点,从而获取该数据节点的版本号。当文件被修改时,JFFS2并不修改原有数据节点,而是在闪存上重新建立新的数据节点,将更新的数据写入,新建立的数据节点的版本号为:原数据节点版本号+1 ;因此,版本号越大表明该数据节点越新。当文件被删除时,JFFS2并不删除原有数据节点,而是写入一个与原硬链接对应的数据节点同名的数据节点,该数据节点类型设为无效,该数据节点的版本号在原数据节点版本号的基础上加1,将原来的硬链接节点设置为无效。
[0042]图1为本发明实施例提供的闪存文件的数据恢复方法的实现流程示意图,如图1所示,该方法包括:
[0043]步骤101,扫描闪存存储区域,为文件数据节点创建对应的数据节点描述符,为文件创建对应的内核描述符,所述文件数据节点包括已被标记为无效节点的数据节点,所述文件包括已被标记为删除文件的文件;
[0044]具体的,系统内核为文件数据节点创建对应的数据节点描述符jffs2_raw_node_ref,为文件创建对应的内核描述符jffs2_inode_cache,过程与前述现有JFFS2的处理方法相同。
[0045]进一步的,在对文件数据节点创建对应的数据节点描述符之前,本步骤中还包括:对文件数据节点进行循环冗余校验(CRC)。
[0046]具体的,JFFS2中,文件数据节点中都包含CRC字段,只有CRC校验有效的数据节点中的数据才是可能有恢复价值的数据,若某个文件数据节点不能通过CRC校验,则表明该文件数据节点中的数据已被破坏或污染,不再有进行恢复的价值。
[0047]步骤102,根据数据节点描述符为文件建立对应的临时红黑树,所述临时红黑树中包含文件的已被标记为无效节点在内的全部数据节点所对应的数据节点描述符。
[0048]具体的过程与前述现有JFFS2的处理方法相同。
[0049]步骤103,根据文件对应的内核描述符和临时红黑树,确定文件的最大版本号。
[0050]具体的,文件的内核描述符jffs2_inode_cache中包含有对应文件的标识号;由文件的标识号可获取文件的临时红黑树,临时红黑树的节点本身是按照节点对应的数据节点的版本号的降序/升序存储,因此只要获取临时红黑树的头节点或尾节点所对应数据节点的版本号即此临时红黑树对应的文件的最大版本号。例如:文件的标识号为A,临时红黑树节点对应的数据节点的最大版本号N为3,则文件A的最大版本号为3。
[0051]步骤104,当文件的最大版本号为N时,遍历所述文件对应的临时红黑树,建立所述文件的N个版本所对应的N个文件红黑树;其中,N为正整数。
[0052]进一步的,本步骤中遍历所述文件对应的临时红黑树,建立所述文件的N个版本所对应的N个文件红黑树,可以是:
[0053]按照版本号的降序或升序,建立所述文件的N个文件红黑树。
[0054]具体的,当为所述文件建立版本号η对应的文件红黑树时,本步骤包括:
[0055]遍历所述临时红黑树;
[0056]将所述临时红黑树中所有版本号小于或等于η的节点加入版本号η对应的文件红黑树中;
[0057]其中,1彡η彡Ν,η为正整数。
[0058]在一个实施例中,文件Α的最大版本号为3,即N = 3,按照版本号的降序,步骤104具体可包括:
[0059]系统内核建立依次建立版本号3、2、1对应的文件红黑树,即遍历所述临时红黑树,将该临时红黑树中所有版本号小于或等于3的节点加入版本号3对应的文件红黑树中;将该临时红黑树中所有版本号小于或等于2的节点加入版本号2对应的文件红黑树中;将该临时红黑树中所有版本号小于或等于1的节点加入版本号1对应的文件红黑树中,具体过程与JFFS2现有建立文件红黑树的机制相同。
[0060]进一步的,当已建立文件的不同版本对应的文件红黑树时,步骤104中还可包括:
[0061]建立不同的结构体,以描述不同的文件版本,所述结构体中包括文件的版本号和指向所述版本号对应的文件红黑树的根节点指针。
[0062]具体的,将文件的不同版本都视为新的文件,为所述新的文件建立对应的索引节点,并将该索引节点的U域指向一个新的结构体jffs2_inode_info,因此,每个jffs2_inode_info对应一个版本的文件,即在现有的JFFS2中对同一个文件的内核描述符jffs2_inode_cache对应不止一个结构体jffs2_inode_info,每个结构体jffs2_inode_info表述一个版本号的文件数据。
[0063]使用上述实施例提供的闪存文件的数据恢复方法,针对基于JFFS2的闪存,利用JFFS2原有的内存描述符和红黑树机制,通过为文件建立所有版本号对应的文件红黑树,在脏块回收破坏数据前,可恢复全部删除数据或者历史数据;即使在部分数据被破坏后,也可恢复部分删除数据或者历史数据。
[0064]图2是本发明实施例提供的闪存文件的数据恢复装置的组成结构示意图,如图2所示,该数据恢复装置包括:扫描模块21、临时红黑树建立模块22、版本号确定模块23和文件红黑树建立模块24 ;其中,
[0065]扫描模块21,用于扫描闪存存储区域,为文件数据节点创建对应的数据节点描述符,为文件创建对应的内核描述符,所述文件数据节点包括已被标记为无效节点的数据节点,所述文件包括已被标记为删除文件的文件;
[0066]临时红黑树建立模块22,用于根据数据节点描述符,为文件建立对应的临时红黑树,所述临时红黑树中包含文件的已被标记为无效节点在内的全部数据节点所对应的数据节点描述符;
[0067]版本号确定模块23,用于根据文件对应的内核描述符和临时红黑树,确定文件的最大版本号;
[0068]文件红黑树建立模块24,用于当文件的最大版本号为N时,遍历所述文件对应的临
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1