本发明的具体实施方式
为便于理解本发明的闪存介质中数据保护方法,首先对目前的闪存介质数据读写技术进行说明。图1示出了现有闪存介质的物理构造,如图所示,目前通用的闪存介质一般划分为多个存储块(Block,即物理块),每个存储块由多个页(Page)构成,每个页包括若干字节的数据存储区和若干字节的冗余区,例如每页可以包含512字节的数据存储区和16字节的冗余区,或者每页可以包含2K字节的数据存储区和64字节的冗余区。所述数据存储区一般用于记录用户数据,所述冗余区一般记录该页所在的闪存芯片的专用信息和该页所在存储块地址等索引信息,以及其他可由用户自行设定的信息,该区域也可以弃而不用。根据现有技术规范,每一个存储块中都保存有该块的逻辑地址,该地址通常保存在存储块的第一页中。该逻辑地址是查找存储块的依据。
当用户向闪存介质中写入新数据或对原来已存在的数据进行修改时,根据闪存介质特殊的读写特性,首先要将写数据控制指令中的指定地址所指向的存储块(以下称之为原块)中的要保留的数据由原块“搬迁”到另一个存储块中(以下称之为新块)中。
上述要保留的数据是指原块记录的原始数据中,不会被要写入的新数据覆盖的页中的数据。要保留的数据可能是原块中的全部原始数据,也可能是原始数据中的一部分。
从闪存介质读取数据需要通过读文件分配表、目录区等来获得闪存介质内文件的信息。如果在将要保留的数据进行上述搬迁的过程中,发生意外或用户误操作等情况造成非法断电,会使这个搬迁过程意外中断。在断电时刻对要保留的数据的搬迁工作尚未完成,这部分数据的逻辑地址在文件分配表、目录区等内并没有及时的更新,那么这些参与搬迁的数据将无法读取,变为无效数据。这样,在此之前保存的含有这部分数据的文件成为无效文件,即造成数据文件丢失。
另外,在数据搬迁工作完成后,要对原存储块进行擦除操作,使其为“空”;该操作是将存储块中的所有位设置为逻辑“1”。经过擦除操作,内部所有位都为逻辑“1”的块称为“空块”。如果在擦除过程中断电,可能存在该存储块中一部分位已经为逻辑“1”,而尚余部分位仍为逻辑“0”的情况。这时,若再向该存储块写入新数据就会出错。
如图3示出了闪存介质中页内的冗余区的划分示例。根据相关标准,页冗余区中包含有存放地址信息的区域,本实施例设置一个存储块内的所有页的标注信息都一样,都是该存储块的逻辑地址。存储块的逻辑地址与对照表中的地址信息具有对应关系。根据数据操作指令中的指定地址,通过地址变换可得出相应的指定逻辑地址(以下统称为指定逻辑地址),根据该指定逻辑地址查找对照表,找出与指定逻辑地址相应的逻辑地址,再找出该逻辑地址对应的物理地址,就可以从闪存介质中找到指定的存储块。所述对指定地址的地址变换操作可以采用现有的地址变换技术进行。
在冗余区中,还设置有校验码区域,用于存放校验码。对页的数据存储区内的数据进行计算,可以得出校验值。将该校验值与校验码区域内的校验码相比较,根据比较结果可以判断数据存储区内存放的数据是否正确完整。在本发明实施过程中,对存储块的每一页进行数据操作的同时,控制器根据该页的数据存储区内的数据计算得出校验值,存放在该校验码区域中。
接下来将根据图2,图3和图4说明本发明闪存介质的数据保护方法的一个具体实施例,然而,本领域普通技术人员可以理解,该具体实施例并不是对本发明的限定。
根据该实施例,当在闪存介质中采用本发明的数据保护方法时,数据操作可以在图2所示的存储块800和900之间进行,其中存储块800为原块,其为数据操作指令中的地址所指向的存储块。存储块900为新块,在实施数据搬迁时,将原块800中要保留的数据搬迁到新块900相应的页。
具体来说,如图4所示,当所述闪存介质接收到来自操作系统的数据操作指令,例如写入新数据指令(步骤1)后,闪存装置的控制器根据所述指令中的指定地址寻找要写入数据的存储块,即原块800(步骤2)。
在步骤3中,判断是否找到该指定地址所指向的原块800。
如果数据操作指令中的指定地址所指向的原块不存在,则进行步骤3’,在所述闪存介质中找出一个空块,将该空块虚拟为一个已经存有数据的原块800。具体做法是:在该空块的冗余区写入根据指定地址变换得到的指定逻辑地址,保持该空块的其余存储空间仍然为空,再进行步骤4。
如果能找到原块800,则直接进行步骤4。
在步骤4中,找出一个空白的新块900。
接下来在步骤5中,闪存装置的控制器根据指令中指定要写入数据的页号,判断原块800中的哪些页将被新数据覆盖,哪些页中的原始数据需要保留。对于所述原块800中要保留的数据,控制器将其按页复制到新块900中,即对原块中的不被新数据覆盖的部分页中的原始数据(即要保留的数据)进行搬迁。在每向新块900中写入一页数据的同时在该页的冗余区内标注指定逻辑地址(即原块800的逻辑地址)。
对于数据操作指令中的指定地址所指的原块不存在的情况,在前述步骤3’中进行虚拟得到的原块800,同样进行步骤4及步骤5的操作,将其不被新数据覆盖的部分页内的数据复制到新块900中并在新块900的相应页中标注指定逻辑地址。
对于第一次进行数据写入操作的闪存芯片,根据本实施例中的写数据方法,由指定逻辑地址无法找到指定写入数据的原块800,应进行步骤3’,即找出一空白存储块,在其每一页的冗余区中写入指定逻辑地址,将其虚拟为原块800;再找出一空白的新块900,进行上述数据搬迁的操作(步骤5)。
接着,将要写入的数据写入所述新块900中,在每写入一页的同时在该页的冗余区内标注指定逻辑地址(步骤6)。直到新块900的每一页都存储有迁入的要保留的数据或新写入的数据。也就是说,新块900的所有页都标注了指定逻辑地址。
以上说明的是步骤5与步骤6顺序执行,即首先进行要保留的数据的搬迁,将原块800中要保留的数据搬迁到新块900的对应页中,同时在该页中标注指定逻辑地址,直到要保留的数据全部搬迁完毕;然后再向新块900的其余页中写入新数据并在相应页中标注指定逻辑地址,直到新块900的每一页存储有数据并标注有指定逻辑地址。
事实上,步骤5和步骤6也可以同时进行,即在将数据从原块800搬迁到新块900的某些页并在相应页面标注指定逻辑地址的同时,将新数据写入到新块900的其他页中并在相应页面标注指定逻辑地址。
步骤5和6还可以混合交叉进行,例如按照新块900中页的顺序,逐页进行数据操作。控制器根据指令中指定要写入新数据的页号,判断原块800中的哪些页将被新数据覆盖,哪些页中的原始数据需要保留。根据判断结果,如果新块900中的当前页对应原块800中要保留的数据所在的页,应按照步骤5将原块800中的要保留的数据搬迁到新块900;如果新块中当前页对应要写入的新数据,应按照步骤6写入新数据。如此进行直到新块的最后一页操作完成,此时新块900的所有页全部进行过数据操作。
在完成了步骤5和6之后,原块800中要求保留的数据已全部复制到新块900中,根据数据操作指令要写入的数据也全部写入完成。同时,新块900的每一页都已标注了指定逻辑地址。接下来,执行步骤7,即将原块800完全擦除。
重复上述操作直至所有要写入的新数据全部写完(步骤8),更新对照表中的对应地址信息(步骤9),更新方法是将对照表中存储块900的逻辑地址修改为指定逻辑地址。写入新数据的操作完成。
从对本发明上述实施例的描述可以理解,本发明的数据保护方法的特征在于在对新块进行数据操作的过程中,例如将原块要保留的数据复制到新块和向新块中写入新数据时,对新块的页进行标注。
利用本发明上述的数据保护方法,在对所述闪存介质进行数据写入时,即使发生非法断电,可以保证闪存介质中原有文件中的数据不会丢失。
也就是说,通过上述的闪存介质的数据保护方法,无论在操作过程的哪个步骤发生非法断电,该闪存介质在重新加电时都可以恢复要保留的数据。
例如,非法断电如果发生在将要保留的数据复制到新块900之前(步骤5进行之前),或在原块800被擦除之后(步骤7完成之后),由于数据读写操作尚未开始或已经完成,不需进行恢复操作。
如果在步骤5进行过程中发生非法断电,或者步骤5进行完毕但步骤6还未开始进行时发生非法断电,从以上描述可知,无论哪种情况,新块900中只有部分页迁入数据并且标注了指定逻辑地址。再次上电后,对新块900内各页的逻辑地址进行检查,如果发现有某页的逻辑地址与指定逻辑地址不同,说明对新块900的数据操作处于数据搬迁阶段,新块900中数据不全。这时,尽管新块900的数据不全,但原块的数据还未擦除,所以要保留的数据不会丢失,可以恢复。
由于步骤6仍然是对新块900进行数据操作,还未对原块800进行擦除,原块中的要保留的数据不会丢失。若在步骤6进行过程中发生非法断电,由于步骤6还未完成,新块900中还是只有部分页写入数据并且标注了指定逻辑地址。再次上电后,对新存储块900内各页的逻辑地址进行检查,如果发现有某页的逻辑地址与标注的指定逻辑地址不同,说明新块900中数据不全。如上所述,由于未对原块800进行擦除,原块800中的数据得以保留。在重新上电之前,原块800中的要保留的数据可以恢复。
如果在步骤6完成之后、步骤7进行之前发生非法断电,此时新存储块900已经保存有迁入的要保留的数据及新写入的数据,并且所有页都标注了指定逻辑地址。而原块中的数据尚未开始擦除,两个存储块每一页的逻辑地址都与指定逻辑地址相同,但两个存储块内部数据存储区保存的数据不同。重新加电时,擦除原块800或新块900的任一个即可。为了进一步排除可能出错的数据,需要通过校验码检验各存储块中每页数据是否正确,找出数据有错的存储块并擦除;如果两个存储块的数据都是正确的,则任意擦除一个。
利用校验码对数据的检验方法是:在向存储块写数据过程中,每写入一页数据时,控制器根据要写入的数据,根据现有技术已知的算法计算出校验码,将其保存在该页冗余区中。在使用校验码对数据进行检验时,根据页内数据存储区保存的数据,采用相同的算法计算出校验值,将该值与该页冗余区中的保存的校验码比较,如果两者不相同,说明该页内数据存储区保存的数据与要写入的数据不同,该页内的数据有错。
如果在步骤7进行过程中发生非法断电,此时原存储块800可能已有部分页被擦除,丢失逻辑地址;若发现原块800中有某页的逻辑地址与指定逻辑地址不同,说明对原块800的擦除操作未完成,部分页已经擦除,部分页尚余数据。此时应对原存储块800的每一页数据进行检查,若发现有未完全擦除的页就对原存储块800进行完全擦除操作,以保证原存储块800为空;
以上是说明在实施本发明数据保护方法的闪存介质遭遇非法断电后数据恢复的可能性。
接下来结合附图5具体说明闪存介质中实施了上述的数据保护方法,当该闪存介质因非法断电造成操作中断后,对该闪存介质的数据恢复方法。
所述存储装置再次上电后,或再次进行数据操作前,控制器读取所述存储装置的存储空间中所有存储块的冗余区信息,根据读到的信息建立对照表(步骤1);建立对照表的操作可采用现有技术进行。在对所有存储块进行读取操作、建立对照表的过程中,若发现存储空间中有两个存储块800和900具有相同的逻辑地址,则中断建立对照表的步骤,转到对这两个存储块进行数据恢复操作(步骤2)。
在逻辑地址相同的两个存储块800和900内,可能有一个含有不完整的数据信息。此时检验找到的其中一个存储块800/900中每页的逻辑地址是否与指定逻辑地址相符(步骤3),如果有某页逻辑地址与指定逻辑地址不符,说明该存储块内数据不完整,将存储块800/900擦除(步骤3’)。否则检查另一个存储块900/800的逻辑地址是否与指定逻辑地址相符。
如果通过对另一个存储块900/800的逻辑地址进行检查(步骤4),发现有某页逻辑地址与指定逻辑地址不符,说明该存储块内数据不完整,将存储块900/800擦除(步骤4’)。
如果两个存储块的逻辑地址都相符,说明两个存储块内的数据都是完整的。但两个存储块内部数据存储区保存的数据可能不同,需要分别对两个存储块通过校验码来检验数据是否正确。此时,根据存储块900/800中每页存储的数据计算校验值,并与该页冗余区内存储的校验码比较(步骤5);如果发现某页校验码不符,说明该存储块检验结果不正确,该存储块内部数据不完整,则擦除存储块900/800(步骤5’)。
如果存储块900/800内所有页的检验结果都正确,则对存储块800/900进行相同的校验码检查(步骤6);如发现存储块800/900内校验码有不符则擦除存储块800/900(步骤6’);否则说明两个存储块内的数据都是正确的,可以擦除其中任一个,此处擦除存储块900/800(步骤6”)。
通过该做法排除了对存储块数据操作中断可能造成的存储块数据错误、丢失或重复情况,然后判断此时对照表建立完毕与否(步骤7);如果没有完毕,则重新进行建立对照表的步骤(步骤1),直到不再发现逻辑地址相同的存储块,对照表建立完毕为止,数据恢复流程结束(步骤8)。
在上述实施例中,在向新块搬迁和写入数据的时候,要在所进行操作的相应页面标注指定逻辑地址。该指定逻辑地址与原块800的逻辑地址相同。如上所述,在写入数据阶段,当未能找到原块800而虚拟原块800时(步骤3’),也要在所虚拟的原块800的每一个页面标注指定逻辑地址。通过该标注信息,在写数据的任何时刻即使非法断电也能实现数据恢复。
根据本发明,对存储块所作的标注,其标注信息内容并不局限于上述实施例中的指定逻辑地址,还可以采用数值、字符或数值与字符的组合。标注信息的设置方式也不仅限于对所有页标注同样信息,还可以设置成递增、递减、累加、累乘和/或按照其他规律或规则变化的数值、字符或数值与字符的组合。标注信息存放的位置也不是唯一的,可以存放在逻辑地址区,也可以存放在保留区或其他区域;标注信息所占字节数目也不是唯一的。本领域技术人员可以理解,对标注信息的内容、存放位置以及变化规律的设置方法有多种可能,只要是按照某种规律或规则加注标注信息,都将落入本发明的保护范围内。
例如,可采用递增的数值作为标注信息,在写入数据的过程中,对新块900的每一页按照页号顺序,逐页加一的方式加注标注信息。设置第一页标注数值1,第二页标注数值2,如此累加直至该块的最后一页,最后一页的标注数值应该等于该存储块中包含的页的数目。
在采用上述标注方法写数据的过程中如果发生非法断电,可能存在新块900的部分页已经被标注,而剩余页无标注信息的情况。根据本发明的思想,通过对标注信息的检查,可以判断存储块内数据是否完整。进而结合对校验码的检查,找出完整正确的数据并进行恢复操作。
数据恢复操作的原理同上述实施例,所述闪存装置的控制器根据写入新数据指令中的指定地址,经过地址变换、查找对照表,在闪存介质中寻找所有地址信息与该指定逻辑地址相符的存储块,再通过检查其每一页的标注信息来判断存储块内数据是否完整;结合校验码找出正确的数据进行恢复。
在上述实施例中,进行数据恢复需要对可能有错误的存储块的每一页检查逻辑地址,只要有一页的逻辑地址不符,就认为该存储块存在错误数据。然而本发明不局限于此。在一个优选实施方案中,规定对存储块的数据操作都按照存储块内页的次序进行,可以从存储块中的第一页顺序进行到最后一页。同样地,也可以先从最后一页开始操作,按照页号倒序进行,最后对第一页操作。
如果采用上述方法对存储块写入数据,步骤5与步骤6可能需要混合交叉进行,按照新块900中页的顺序,逐页进行数据操作。控制器根据数据操作指令中指定要写入新数据的页号,判断原块800中的哪些页将被新数据覆盖,哪些页中的原始数据需要保留。根据判断结果,如果新块900中的当前页对应原块800中要保留的数据所在的页,应按照步骤5将原块800中的要保留的数据搬迁到新块900;如果新块中当前页对应要写入的新数据,应按照步骤6写入新数据。如此进行直到新块的最后一页操作完成,此时新块900的所有页全部进行过数据操作。
由于在本实施例的写数据过程中,对存储块的所有数据操作,包括数据搬迁、新数据的写入和标注都是从该块的第一页开始,依次进行到最后一页的,如果中途发生非法断电,数据操作未能进行到存储块的最后一页,必然会造成第一页和/或最后一页的标注信息不完整。因此在数据恢复过程中,仅需对每一个存储块的第一页和最后一页的标注信息进行检查,大大提高了数据恢复程序的效率。
上述数据操作的次序也可以是从最后一页,按照倒序进行到第一页的。其恢复数据阶段对存储块内标注信息的检查,也可以只检查第一页和最后一页。
为了进一步简化操作,可以只对存储块的最后一个进行操作的页的标注信息进行检查。对于对所有页标注信息为同一内容的情况,在写入新数据的过程中根据预先定义好的标注信息以及数据操作顺序进行标注;而在数据恢复阶段,控制器依旧根据该标注信息和数据操作顺序,检查存储块中按照该数据操作顺序,应当最后进行数据操作的那一页中的标注信息;对于标注信息按照某规则进行变化的情况,在写入新数据的过程中根据预先定义好的标注信息变化规则、初始内容以及数据操作顺序进行标注;在数据恢复阶段,控制器根据标注信息变化规则、初始内容以及数据操作顺序,计算得到该存储块中,按照该数据操作顺序最后应标注的内容,与存储块中存储块中按照该数据操作顺序,最后进行数据操作的那一页中的实际标注信息是否相符。此时,对存储块标注的检查简化到只需检查一页中的标注信息,大大缩短了检查时间。
以下是本发明的另一个优选实施例,其具体体现了上述改进的数据保护方法。
在本实施例中假设每个存储块包含64个页,对所有64个页从0开始顺序进行编号,最后一页页号为63。本实施例还对执行的数据操作及标注的方法作如下规定:对存储块的数据操作从存储块的第一页(页号为0)开始,按照页号的顺序依次进行到最后一页(页号为63);标注信息的编码规则为“字母+数值”,其中的数值按照递增规则变化,即在存储块的第一页(页号为0)中的初始标注为“A1”,对第二页(页号为1)应标注“A2”......直至最后一页(页号为63)应标注“A64”。
现参照图2和图6,说明本实施例在闪存介质中数据保护的方法。如图2所示,当在闪存介质中采用本实施例提供的数据保护方法时,数据操作可以在存储块800和900之间进行,其中存储块800为原块,其为数据操作指令中的指定地址所指向的存储块。存储块900为新块,在实施数据搬迁时,将原块800中应当保留的数据搬迁到新块900相应的页。
具体来说,如图6所示,当所述闪存介质接收到来自操作系统的数据操作指令,例如写入新数据指令(步骤1)后,闪存装置的控制器根据所述指令中的指定地址寻找要写入数据的存储块,即原块800(步骤2)。
在步骤3中,判断是否找到该指定地址所指向的原块800。
如果数据操作指令中的指定地址所指向的原块不存在,则进行步骤3’,在所述闪存介质中找出一个空块,将该空块虚拟为一个已经存有数据的原块800。虚拟原块800的具体方法与上一个实施例相似,其不同之处在于在所述空块每页的冗余区依次写入根据上述标注的编码规则得到的标注信息,第一页(页号为0)标注“A1”,第二页(页号为1)标注“A2”......如此直到最后一页(页号为63)标注“A63”。保持该空块的其余存储空间仍然为空,再进行步骤4。
如果能找到原块800,则直接进行步骤4。
在步骤4中,找出一个空白的新块900。
接下来在步骤5中,闪存装置的控制器根据指令中指定要写入数据的页号,判断原块800中的哪些页将被新数据覆盖,哪些页中的原始数据需要保留。对于所述原块800中要保留的数据,控制器将其按页复制到新块900中,即对原块中的不被新数据覆盖的部分页中的要保留的数据进行搬迁。在每向新块900中写入一页数据的同时,根据上述标注信息编码规则计算该页的标注信息,并写入该页的冗余区内。
对于数据操作指令中的指定地址所指的原块不存在的情况,在前述步骤3’中进行虚拟得到的原块800,同样进行步骤4及步骤5的操作,将其不被新数据覆盖的部分页复制到新块900中,计算标注信息,并在新块900的相应页中写入该标注信息。
对于第一次进行数据写入操作的闪存芯片,根据本实施例中的写数据方法,由指定逻辑地址无法找到指定写入数据的原块800,应进行步骤3’,找出一空白存储块,在其每一页的冗余区中写入相应的标注信息,将其虚拟为原块800;再找出空白的新块900,进行上述数据搬迁的操作(步骤5)。
接着,将要写入的数据写入所述新块900中,在每写入一页的同时计算标注信息,并在该页的冗余区内写入标注信息(步骤6)。直到新块900的每一页都存储有搬迁的要保留的数据或新写入的数据。也就是说,新块900的所有页都进行了相应的标注。
上述操作中,步骤5和6可以混合交叉进行。此时对存储块的数据操作要按照预先定义的顺序,逐页进行。控制器根据指令中指定要写入新数据的页号,判断原块800中的哪些页将被新数据覆盖,哪些页中的原始数据需要保留。根据判断结果,如果新块900中的当前页对应原块800中要保留的数据所在的页,应按照步骤5将原块800中的要保留的数据搬迁到新块900;如果新块中当前页对应要写入的新数据,应按照步骤6写入新数据,如此进行直到最后一页(页号63)操作完成,此时新块900的所有页全部进行过数据操作并且全部进行了标注。
在完成了步骤5和6之后,原块800中要求保留的数据已全部复制到新块900中,根据数据操作指令要写入的数据也全部写入完成。同时,新块900的每一页都已标注了相应的标注信息。接下来,执行步骤7,即将原块800完全擦除。
重复上述操作直至所有要写入的新数据全部写完(步骤8),更新对照表中的对应地址信息(步骤9),更新方法是将对照表中存储块900的逻辑地址修改为指定逻辑地址。写入新数据的操作完成。
如果在上述写操作过程中发生非法断电,存储块800及900中可能产生错误的情况与实施例一中相似,故不赘述。
现在结合附图6及附图7具体说明闪存介质中实施了本实施例提供的数据保护方法,当该闪存介质因非法断电造成操作中断后,对该闪存介质再次加电时的数据恢复方法。
所述存储装置再次上电后,或再次进行数据操作前,控制器读取所述存储装置的存储空间中所有存储块的冗余区信息,根据读到的信息建立对照表(步骤1);建立对照表的操作可采用现有技术进行。在对所有存储块进行读取操作、建立对照表的过程中,若发现存储空间中有两个存储块800和900具有相同的逻辑地址,则中断建立对照表的步骤,转到对这两个存储块进行数据恢复操作(步骤2)。
在逻辑地址相同的两个存储块800和900内,可能有一个含有不完整的数据信息。此时检验找到的其中一个存储块800/900的最后一页(页号为63)应标注的信息:预定义标注信息的编码规则为“字母+数值”,其中的数值按照递增规则变化,存储块中包含64个页,由此可得出,该存储块中最后一页(页号为63)的标注信息应为“A64”。
将该计算结果与所述存储块中最后一页(页号为63)中的标注信息进行比较,根据本发明的数据保护方法可知,只要是所述最后一页(页号为63)内标注信息与计算得出的标注信息不相符,就说明该存储块在中断前的数据操作中使用过,说明该块数据不完整,将其擦除(步骤3’),否则采用同样方法检查另一个存储块900/800最后一页的标注信息。
如果通过对另一个存储块900/800的最后一页标注信息进行检查(步骤4),若最后一页的标注信息与计算得出的标注信息不相符,说明该存储块内数据不完整,将存储块900/800擦除(步骤4’)。
如果第二个存储块内最后一页的标注信息也正确,说明两个存储块内的数据都是完整的。但两个存储块内部数据存储区保存的数据可能不同,需要分别对两个存储块通过校验码来检验数据是否正确。此时,根据存储块900/800中每页存储的数据计算校验值,并与该页冗余区内存储的校验码比较(步骤5);如果发现某页校验码不符,说明该存储块检验结果不正确,则擦除存储块900/800(步骤5’)。
如果存储块900/800内所有页的检验结果都正确,则对存储块800/900进行相同的校验码检查(步骤6);如发现存储块800/900内校验码有不符则擦除存储块800/900(步骤6’);否则说明两个存储块内的数据都是正确的,可以擦除其中任一个,此处擦除存储块900/800(步骤6”)。
通过该做法排除了对存储块数据操作中断可能造成的存储块数据错误、丢失或重复情况,然后判断此时对照表建立完毕与否(步骤7);如果没有完毕,则重新进行建立对照表的步骤(步骤1),直到不再发现逻辑地址相同的存储块,对照表建立完毕为止,数据恢复流程结束(步骤8)。
在上述实施例中,在向新块搬迁和写入数据的时候,要在进行数据操作的页面标注相应标注信息。如上所述,当未能找到原块800而虚拟原块800时(步骤3′),也要在所虚拟的原块800的每一个页面标注相应标注信息。通过该标注信息,在写数据的任何时刻即使非法断电也能实现数据恢复。
根据本发明方法的又一个实施例,按照SSFDC协议将所述闪存介质分成若干个区(Zone),每个区由若干个存储块构成,并且每个区都有设置至少一个空存储块,用于将要保留的数据复制到该存储块中。在写入新数据阶段,如果需要查找新块900,则直接调用该预留的空存储块,节省了查找空存储块的时间。
在本实施例中,采用与前述实施例类似的数据保护方法对各区内的数据进行操作,其不同之处在于在写数据操作时,寻找新块的范围局限在原块所在的区中;在恢复数据操作阶段,由于数据读写操作只是在同一区内的两个存储块之间进行,所述闪存介质的其他区在上述写数据过程中不会出错,故只需根据指定逻辑地址查找本区内的存储块并排除错误即可。借此,提高了在所述闪存介质中写数据的速度及恢复数据的速度。
引入区(Zone)的机制,使得参与数据操作的存储块集中在相对紧凑的存储空间中,在数据的读写和恢复过程中,节省了操作时间。
以上是对本发明示例性地说明,本领域普通技术人员可以理解,对页内的标注信息设置的方法,以及校验码算法都不是唯一的,搜寻存储块的途径也可采用各种已知的技术。本发明的精髓是在数据操作时设置标注信息以鉴别所涉及的存储块的状态,结合对校验码的检验以鉴别存储块内数据的正确性,从而在发生非法断电后能有效地恢复原有数据文件,保证数据的完整性。
而本发明的数据恢复方法的精髓在于根据闪存介质中存储块中的标志进行检查,结合对页的校验码的检查,判断中断发生时刻存储块的状态及存储块内数据的完整性,进而找出要保留的数据,进行相应的数据恢复操作,排除存储块擦除不完全的错误。因此,对于写数据方法中的步骤调整而造成恢复数据方法的改变,是不偏离本发明思想的。
不偏离本发明思想的对本发明技术方案的各种改型将落入本发明权利要求所限定的范围中。