一种异常掉电后的数据修复方法及装置与流程

文档序号:25881983发布日期:2021-07-16 18:44阅读:240来源:国知局
一种异常掉电后的数据修复方法及装置与流程

1.本发明涉及计算机技术领域,尤其涉及一种异常掉电后的数据修复方法及装置。


背景技术:

2.对于目前消费电子产品中,经常将spi nand flash作为存储介质;基于spi nand flash的存储介质的嵌入式系统,所应用的文件系统,基本上都会有垃圾回收的设计,而且这个垃圾回收的是一个后台执行的线程,只要后台空闲,或可用的数据块比较少时,垃圾回收的线程就会执行,对spinand上的数据进行搬移的操作,此时若出现异常断点,而消费的电品产品中,总会有碰到有异常断电的可能,如果刚好这些文件在系统执行垃圾回收过程中搬移数据写到另一个块上时,此时断电了,那么此页就会可能因数据没有写完整,比如oob的ecc数据没有写下去,那么此页就会出现ecc出错的问题,导致文件损坏,这样在重新上电时,会读取到损坏的文件而导致异常,无法正常启动。
3.为解决上述问题,现有技术采用文件备份的方式对异常掉电时所损坏的数据进行修复,具体做法为:将所有文件都进行备份当异常掉电后,重新上电时,系统在扫描文件的过程中若发现有文件数据损坏,则将对应备份的文件复制到损坏的文件上,再重新读取文件;但采用这一方法需要占用多一倍的存储空间,很容易造成设备存储空间不足的问题。


技术实现要素:

4.本发明实施例提供一种异常掉电的数据修复方法及装置,能够在不进行数据备份的前提下,在异常掉电后进行数据修复使设备正常运行。
5.本发明一实施例提供了一种异常掉电后的数据修复方法,适用于设置有spi nand flash的设备,其特征在于,包括:
6.在设备重新上电时,对分区上的所有块进行扫描,获取分区内的所有数据块;
7.对所有所述数据块内的数据页进行读取,并将读取失败的数据页进行删除。
8.进一步的,所述对分区上的所有块进行扫描,获取分区内的所有数据块,具体包括:
9.扫描一所述块,从所扫描的块的初始数据页开始读取数据页中的oob数据;
10.在读取成功时,根据所读取的oob数据判断所扫描的块是否为数据块;若是,则将所扫描的块标识为数据块;
11.在读取失败时,判断当前所读取的数据页是否为所扫描的块中的最后一页,若是,则将所扫描的块进行擦除;若否,则对当前所读取的数据页的下一数据页的oob数据进行读取;
12.在扫描完所述分区内的所有块后,获取所述分区内的所有数据块。
13.进一步的,对所有所述数据块内的数据页进行读取,并将读取失败的数据页进行删除,具体包括:
14.从一所述数据块内的最后一数据页开始读取数据块内的数据页;
15.在当前的数据页读取成功时,判断当前数据块内的所有数据页是否读取完毕;若是,则读取下一个数据块,若否,则对当前所读取的数据页的上一数据页进行读取;
16.在当前的数据页读取失败时,将当前所读取的数据页删除后,对当前所读取的数据页的上一数据页进行读取;
17.在将所有所述数据块的数据页读取完毕时,完成所述设备的数据修复。
18.进一步的,还包括:若根据所读取的oob数据判断所扫描的块不为数据块,则继续判读所扫描的块是否为坏块,若是,则将所扫描的块标识为坏块,若否则判定所扫描的块为空块并将所扫描的块标识为空块。
19.在上述方法项实施例的基础上,本发明对应提供了装置项实施例;
20.本发明一实施例提供了一种异常掉电后的数据修复装置包括数据块识别模块以及数据页删除模块;
21.所述数据块识别模块,用于在设备重新上电时,对分区上的所有块进行扫描,获取分区内的所有数据块;
22.所述数据页删除模块,用于对所有所述数据块内的数据页进行读取,并将读取失败的数据页进行删除。
23.进一步的,所述数据块识别模块,对分区上的所有块进行扫描,获取分区内的所有数据块,具体包括:
24.扫描一所述块,从所扫描的块的初始数据页开始读取数据页中的oob数据;
25.在读取成功时,根据所读取的oob数据判断所扫描的块是否为数据块;若是,则将所扫描的块标识为数据块;
26.在读取失败时,判断当前所读取的数据页是否为所扫描的块中的最后一页,若是,则将所扫描的块进行擦除;若否,则对当前所读取的数据页的下一数据页的oob数据进行读取;
27.在扫描完所述分区内的所有块后,获取所述分区内的所有数据块。
28.进一步的,所述数据页删除模块,对所有所述数据块内的数据页进行读取,并将读取失败的数据页进行删除,具体包括:
29.从一所述数据块内的最后一数据页开始读取数据块内的数据页;
30.在当前的数据页读取成功时,判断当前数据块内的所有数据页是否读取完毕;若是,则读取下一个数据块,若否,则对当前所读取的数据页的上一数据页进行读取;
31.在当前的数据页读取失败时,将当前所读取的数据页删除后,对当前所读取的数据页的上一数据页进行读取;
32.在将所有所述数据块的数据页读取完毕时,完成所述设备的数据修复。
33.通过实施本发明具有如下有益效果:
34.本发明实施例提供了一种异常掉电后的数据修复方法及装置,所述方法在设备重新上电时对分区上的所有块进行扫描,并获取分区内所有数据块,然后对所有数据块内的所有数据页进行读取,并在读取过程中将读取失败的数据页进行删除,从而完成数据修复。在数据页读取的过程中,如果读取失败则说明由于异常掉电的原因,导致文件在系统执行垃圾回收过程中将搬移数据写到这一页时没有写完整,出现ecc错误进而无法读取,此时将这一数据页删除,这样使得系统文件恢复至掉电前未进行数据搬移前的状态,完成数据的
修复,使得设备能够正常启动。相比于现有技术本发明不需要进行文件备份,降低了存储空间的浪费,并且同样能实现掉电后的数据修复。
附图说明
35.图1是本发明一实施例提供的一种异常掉电后的数据修复方法的流程示意图。
36.图2本发明一实施例提供的一种异常掉电后的数据修复装置的结构示意图。
具体实施方式
37.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
38.如图1所示,本发明一实施例提供了一种异常掉电后的数据修复方法,适用于设置有spi nand flash的设备,包括:
39.步骤s101:在设备重新上电时,对分区上的所有块进行扫描,获取分区内的所有数据块。
40.步骤s102:对所有所述数据块内的数据页进行读取,并将读取失败的数据页进行删除。
41.对于步骤s101、在一个优选的实施例中,,所述对分区上的所有块进行扫描,获取分区内的所有数据块,具体包括:扫描一所述块,从所扫描的块的初始数据页开始读取数据页中的oob数据;在读取成功时,根据所读取的oob数据判断所扫描的块是否为数据块;若是,则将所扫描的块标识为数据块;在读取失败时,判断当前所读取的数据页是否为所扫描的块中的最后一页,若是,则将所扫描的块进行擦除;若否,则对当前所读取的数据页的下一数据页的oob数据进行读取;在扫描完所述分区内的所有块后,获取所述分区内的所有数据块。
42.首先需要说明的,spi nand flash内的分区上的“块”主要分为三类,一类为无法存储数据的“坏块”,一类为未存储数据的“空块”另一类为存储有数据的“数据块”;spi nand flash所在的设备一般垃圾回收线程,在可用的数据块比较少时,会执行垃圾回收的动作,在垃圾回收时,先读取一个页的数据,再把这个数据写到另一个块的新页上,如果旧的数据块所有页都读完成,此时会把这旧的数据块进行擦掉,完成一次垃圾回收的动作;而由于spi nand flash的特性,在写数据到每一个块的页上时,都必需要先擦,这样才能正确写数据下去。若在异常断电时,系统正在执行垃圾回收操作,此时spinand的页出现ecc出错,会有两种情况,第一种是正在擦写这一数据块时,刚好掉电,那么此时这一块上所有页,或者个别的页就会出现ecc出错的问题.第二种情况,当垃圾回收到搬移数据到新的一个数据页上时,此时刚好掉电了,这样的话,正在写的这个页就会存在有ecc出错的问题。这样当设备再次上电,系统进行文件配置时由于存在ecc出错的数据页因此会出现启动异常;对此在本发明的一实施例中,当设备重新上电时,先进行文件系统的初始化,扫描spi nand flash分区上的所有块,在每扫描一个块时,先读取所扫描的块的初始数据页,即第0页的oob数据,如果读取成功,则根据oob数据判断所扫描的块是否为数据块,如果是则进行标
记,标记为数据块;如果不是数据块则根据oob数据进一步定时空块还是坏块;并进行相应的标记。如果读取失败,则先判断当前读取的这一页是否为最后一页,如果是则说明这一个块的所有数据页都出现了错位,直接把整个块擦除掉;如果不是则读取下一页的oob数据,若读取成功重复上述是否为数据块的判断操作,若读取失败则再次判断是否为最后一页,按这上述方式当一个块的所有数据页读取完毕后,完成一个块的扫描,然后紧接着扫描下一个数据块,直至分区内所有的块均扫描完毕。当扫描完毕后,即可获取分区内所有的数据块。
43.对于步骤s102、在一个优选的实施例中,对所有所述数据块内的数据页进行读取,并将读取失败的数据页进行删除,具体包括:
44.从一所述数据块内的最后一数据页开始读取数据块内的数据页;在当前的数据页读取成功时,判断当前数据块内的所有数据页是否读取完毕;若是,则读取下一个数据块,若否,则对当前所读取的数据页的上一数据页进行读取;在当前的数据页读取失败时,将当前所读取的数据页删除后,对当前所读取的数据页的上一数据页进行读取;
45.具体的,在步骤1中获取所有的数据块后,开始对数据块的所有页进行读取;对于一个数据块的读取如下:
46.从一个数据块的最后一个数据页开始读取;在读取时,若当前的数据页读取称重,则判断是否已经将该数据块的所有数据页读取完毕了,如果是则读取下一个数据块,如果不是则读取当前所读取的页面的上一页;如果读取失败则说明该数据页因为ecc出错出现异常,将当前所读取的数据页删除后,再读取上一页;重复上述操作,直至将所有数据块的数据页读取完毕,此时完成设备异常掉电后的数据修复过程,然后设备正常开机启动。
47.在上述方法项实施例的基础上,本发明对应提供了装置项实施例;
48.如图2所示,本发明另一实施例提供了一种异常掉电后的数据修复装置,包括数据块识别模块以及数据页删除模块;
49.所述数据块识别模块,用于在设备重新上电时,对分区上的所有块进行扫描,获取分区内的所有数据块;
50.所述数据页删除模块,用于对所有所述数据块内的数据页进行读取,并将读取失败的数据页进行删除。
51.在一个优选的实施例中,所述数据块识别模块,对分区上的所有块进行扫描,获取分区内的所有数据块,具体包括:
52.扫描一所述块,从所扫描的块的初始数据页开始读取数据页中的oob数据;
53.在读取成功时,根据所读取的oob数据判断所扫描的块是否为数据块;若是,则将所扫描的块标识为数据块;
54.在读取失败时,判断当前所读取的数据页是否为所扫描的块中的最后一页,若是,则将所扫描的块进行擦除;若否,则对当前所读取的数据页的下一数据页的oob数据进行读取;
55.在扫描完所述分区内的所有块后,获取所述分区内的所有数据块。
56.在一个优选的实施例中,所述数据页删除模块,对所有所述数据块内的数据页进行读取,并将读取失败的数据页进行删除,具体包括:
57.从一所述数据块内的最后一数据页开始读取数据块内的数据页;
58.在当前的数据页读取成功时,判断当前数据块内的所有数据页是否读取完毕;若是,则读取下一个数据块,若否,则对当前所读取的数据页的上一数据页进行读取;
59.在当前的数据页读取失败时,将当前所读取的数据页删除后,对当前所读取的数据页的上一数据页进行读取;
60.在将所有所述数据块的数据页读取完毕时,完成所述设备的数据修复。
61.需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
62.通过实施本发明实施例,能够在不对系统文件进行备份的前提下,解决设备异常掉电后的数据修复问题,使得设备重新上电后能够正常开机启动。
63.以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1