CN101482837A - 闪存文件系统纠错方法和装置 - Google Patents
闪存文件系统纠错方法和装置 Download PDFInfo
- Publication number
- CN101482837A CN101482837A CNA2009100019986A CN200910001998A CN101482837A CN 101482837 A CN101482837 A CN 101482837A CN A2009100019986 A CNA2009100019986 A CN A2009100019986A CN 200910001998 A CN200910001998 A CN 200910001998A CN 101482837 A CN101482837 A CN 101482837A
- Authority
- CN
- China
- Prior art keywords
- unit number
- logical unit
- physical sector
- flash memory
- physical
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明实施例提供了一种闪存文件系统纠错方法和装置。该方法包括:对逻辑映射表中的逻辑单元号进行唯一性检测;当检测到与在前逻辑单元号重复的在后逻辑单元号时,根据重复的逻辑单元号对应物理块的物理扇区完整性检测结果,将物理扇区不完整的物理块所对应的逻辑单元号确定为错误逻辑单元号。该装置包括唯一性检测模块和错误识别模块,唯一性检测模块对逻辑映射表中的逻辑单元号进行唯一性检测;当检测到与在前逻辑单元号重复的在后逻辑单元号时,错误识别模块根据物理扇区完整性检测结果确定错误逻辑单元号。本发明实施例的上述技术方案可以提高FFS的查错、纠错性能。
Description
技术领域
本发明涉及文件系统处理技术,尤其涉及一种闪存文件系统纠错方法和装置。
背景技术
文件系统是操作系统中负责管理和存储文件信息的软件机构,闪存文件系统(Flash File System;以下简称:FFS)顾名思义是采用闪存(Flashmemory)作为外存储器实现的一种文件系统,例如“M-Systems”公司的“TrueFFS”文件系统,该文件系统可以集成到风河公司的嵌入式操作系统“VxWorks”中,为闪存设备提供统一的块设备接口,并且具有可重入、线程安全的特点。
FFS需要考虑闪存的特点,即闪存具有以一定空间为单位进行擦除且擦除次数有限的特点,这样的独立擦除空间单位可以称为物理块(block)。因此,现有FFS通常采用映射方式来实现损耗均衡,尽量均衡使用各个物理块,以延长闪存整体的使用寿命。
目前,集成于嵌入式操作系统中的FFS广泛使用于通讯设备的各种单板中,例如使用在无线通信产品的基站中。但是,发明人发现现有技术中存在着如下问题:单板由于各种原因可能会频繁进行复位重启,复位重启后需要进行文件系统挂载(Mount),而在挂载时,往往会发生FFS不可用现象而导致挂载失败。现有技术应对挂载失败的方法一般只有重新格式化FFS,这种恢复方法的缺点是不仅原本保存在闪存中的文件数据全部丢失,而且整个FFS的格式化过程非常缓慢。格式化缓慢的原因在于,格式化文件系统需要擦除闪存,闪存的擦除因为物理原因所限而很耗时间,导致整个格式化过程缓慢,所以使得通信设备的启动性能指标极为恶劣。例如,对于擦除或非闪存(NORFlash)中一个128千字节(K byte)的物理块来说,大概需要1秒时间,那么对于64兆字节(M byte)的闪存,就需要至少25分钟的格式化时间,对于256M byte存储容量的基站,则重启格式化所耗费的时间是难以接受的。因此,现有技术急待解决FFS异常断开后查错、纠错困难等容错性差的问题,以避免由于FFS容错性差而导致其所应用的设备必须格式化才能恢复FFS,缓慢的格式化过程进而导致设备启动性能下降。
发明内容
本发明实施例提供一种闪存文件系统纠错方法和装置,以改善闪存文件系统的容错性。
本发明实施例提供了一种闪存文件系统纠错方法,包括:
对逻辑映射表中的逻辑单元号进行唯一性检测;
当检测到与在前逻辑单元号重复的在后逻辑单元号时,根据重复的逻辑单元号对应物理块的物理扇区完整性检测结果,将物理扇区不完整的物理块所对应的逻辑单元号确定为错误逻辑单元号。
本发明实施例还提供了一种闪存文件系统纠错装置,包括:
唯一性检测模块,用于对逻辑映射表中的逻辑单元号进行唯一性检测;
错误识别模块,用于当所述唯一性检测模块检测到与在前逻辑单元号重复的在后逻辑单元号时,根据重复的逻辑单元号对应物理块的物理扇区完整性检测结果,将物理扇区不完整的物理块所对应的逻辑单元号确定为错误逻辑单元号。
采用本发明实施例的上述技术方案通过逻辑单元号的唯一性检测可以缩小错误逻辑单元号的范围,进一步根据物理扇区完整性检测结果即可以在重复的逻辑单元号中确定错误逻辑单元号,因此本发明实施例的技术方案可以提高FFS的查错性能,进而便于进行纠错,从而完善FFS的容错性能。
附图说明
图1为本发明闪存文件系统纠错方法实施例所基于的闪存存储结构示意图;
图2为本发明闪存文件系统纠错方法第一实施例的流程图;
图3为本发明闪存文件系统纠错方法第二实施例的流程图;
图4为本发明闪存文件系统纠错方法第二实施例中挂载操作的流程图;
图5为本发明闪存文件系统纠错方法第三实施例的流程图;
图6为本发明闪存文件系统纠错装置第一实施例的结构示意图;
图7为本发明闪存文件系统纠错装置第二实施例的结构示意图;
图8为本发明闪存文件系统纠错装置第三实施例的结构示意图。
具体实施方式
在实现本发明的过程中,为解决挂载操作失败导致必须格式化恢复FFS的问题,发明人首先针对挂载操作失败的单板进行了研究和分析,并发现下述情况:当挂载操作失败时,由文件翻译层(FS Translation Layer;以下简称:FTL)维护的逻辑映射表中通常都存在着重复的逻辑单元号。
本发明实施例提供了闪存文件系统纠错方法,可以执行查错功能进而便于纠错,从而进一步提高FFS的健壮性。对于FFS的纠错需要针对闪存的存储结构和写入流程来设计,本发明实施例的闪存文件系统纠错方法具体可以基于下述闪存存储结构和写入流程来执行。
图1为本发明闪存文件系统纠错方法实施例所基于的闪存存储结构示意图。闪存中的存储空间包括预先划分的多个物理块(block),每个物理块具有设定的存储空间,例如可以为128千字节(Kbyte),各物理块为独立的擦除单元。每个物理块又包括三个区域,第一区域存储该物理块的逻辑单元号,相当于逻辑地址;第二区域存储该物理块的块分配映射(Block AllocationMap;以下简称:BAM)表;第三区域为实际的数据存储空间,包括一个或多个用于存储数据的物理扇区(sector),每个物理扇区分配有一个在本物理块内能唯一标识的物理扇区号,即该物理扇区的地址。该BAM表中存储的内容包括物理扇区号和物理扇区的状态,以及该物理扇区中存储的文件块号,如表1所示。
表1
物理扇区号 | 状态 | 文件块号 |
110100 | 有效 | 5 |
110110 | 无效 | 3 |
110111 | 空闲 | 2 |
…… | …… | …… |
物理扇区的状态至少包括“空闲”、“有效”和“无效”等,“空闲”代表该物理扇区可以直接被写入数据而不用擦除;“有效”代表该物理扇区中存储的数据有效;“无效”代表该物理扇区存储的数据是无效的,但是需要被擦除后才能写入新的数据,“无效”的物理扇区也就是垃圾物理扇区。在整个闪存中,可以结合逻辑单元号和物理块内的物理扇区号来唯一定位闪存中的任一物理扇区。在闪存中还存储有上述逻辑映射表和物理扇区号数组。逻辑映射表也称FTL表,其中包含了物理块号和逻辑单元号之间的映射关系,如表2所示。
表2
物理块号 | 逻辑单元号 |
1 | 4 |
2 | 2 |
…… | …… |
逻辑映射表中物理块号通常是顺序存储的,而逻辑单元号会随该物理块中实际存储的逻辑单元号而更新。物理扇区号数组则用于存储所有物理扇区号。
闪存中所存储文件的文件目录可以作为一个文件进行存储,且该文件目录对应一个固定的逻辑单元号存储。文件目录中存储着该闪存中存储的文件信息,主要是各个文件及其对应的文件块号。上层文件系统,例如磁盘操作系统(Disk Operation System;以下简称:DOS)可以根据各文件的文件块号来查询BAM表,依据BAM表中物理扇区号与文件块号的关联关系索引到存储文件的具体物理扇区,以便读取或删除等。
由于闪存中物理扇区的擦除次数有限,所以FFS需要使闪存中的各个物理扇区能够均衡使用,因此,可能会执行垃圾碎片回收、交换写入等操作。因此,对应各个物理块号的逻辑单元号可能被改变,且闪存中可以设置至少一块物理块为交换物理块,该交换物理块在交换写入的过程中使用,对于用户来说不是可用的存储空间,交换物理块中各物理扇区的物理扇区号不编入物理扇区号数组中。
例如,当需要向闪存写入一文件时,首先由上层文件系统确定待写入的逻辑位置,在FFS层面表现为确定待写入的逻辑单元号,对于上层文件系统而言,逻辑单元号与存储空间的对应看似是不变的;在该逻辑单元号对应的物理块内的BAM表中查询各个物理扇区的状态,如果有足够的“空闲”物理扇区,则执行写入操作,如果按照设定的规则判断出该物理块内的“无效”物理扇区很多,“空闲”物理扇区不够,为了避免将该物理块整体擦除,则可以执行交换写入的操作。
当出现上述需要交换写入的情况时,将待交换的原物理块内的“有效”物理扇区的数据拷贝到交换物理块的“空闲”物理扇区中,交换写入的具体过程为:将原物理块的逻辑单元号拷入交换物理块中以替换交换物理块的原逻辑单元号,且同时更新逻辑映射表中的逻辑单元号;将原物理块中BAM表内的物理扇区号拷贝到交换物理块的BAM表中;根据原物理块中BAM表内的物理扇区状态将“有效”物理扇区中的数据拷贝到交换物理块的“空闲”物理扇区中,同时更新交换物理块中BAM表内对应物理扇区的状态,即将交换物理块中拷贝了有效数据的物理扇区的状态设置为“有效”,且对应记录文件块号。交换物理块BAM表中各物理扇区的状态及对应的文件块号是对应于物理扇区的实际状态和所存储的数据来更新的,即除了“有效”物理扇区之外,交换物理块的其他物理扇区状态仍为“空闲”;将原物理块中BAM表内的物理扇区号设置为交换物理扇区号,且将物理扇区状态设置为“无效”,可以拷贝数据时逐个物理扇区的修改,也可以在所有数据拷贝入交换物理块中之后一并修改物理扇区号和物理扇区状态,其中,交换物理扇区号是交换物理块中原物理扇区对应的编号,一般交换物理块的逻辑单元号和交换物理扇区号的各字节可以均设置为“0”,则在执行完交换写入后将原物理块的逻辑单元号和交换物理扇区号均清零即可,物理扇区所对应的状态也可以清零以表示为“无效”物理扇区;而后将原物理块中的逻辑单元号设置为交换物理块的逻辑单元号,且更新逻辑映射表中的逻辑单元号。至此,原物理块已经替换为交换物理块,在使用前将交换物理块中的数据进行擦除即可。
在上述交换写入的过程中,由于需要满足先写后擦的要求,所以有短时间内两个物理块中的逻辑单元号是重复的,且在原物理块的逻辑单元号未更新之前,BAM表内部分或全部物理扇区号已经被置为交换物理扇区号。异常掉电、单板的复位操作等异常动作如果恰好在此时间内发生,则导致逻辑映射表中存在了重复的逻辑单元号,但对应的两个物理块中的BAM表内物理扇区号并不完整,可能导致上层文件系统的文件分区错误,无法根据文件目录、物理扇区号和文件块号等索引信息正确索引到相应的物理扇区。
本发明实施例提出了一种闪存文件系统纠错方法和装置,可适用于上述情况下以进一步改善FFS的容错、纠错性能,增强FFS的健壮性。下面通过具体实施例并结合附图对本发明做进一步的详细描述。
闪存文件系统纠错方法第一实施例
图2为本发明闪存文件系统纠错方法第一实施例的流程图,本实施例可以由FFS中或闪存中的纠错装置来实现,纠错装置可以为软件或硬件形式。该方法具体包括如下步骤:
步骤201、纠错装置对逻辑映射表中的逻辑单元号进行唯一性检测,具体可以按照逻辑映射表中物理块号的顺序,顺次将物理块号所对应的逻辑单元号与在前的逻辑单元号进行比对,以便检测当前被检测的逻辑单元号作为在后逻辑单元号是否与在前逻辑单元号重复;
步骤202、当纠错装置检测到与在前逻辑单元号重复的在后逻辑单元号时,根据重复的逻辑单元号对应物理块的物理扇区完整性检测结果,将物理扇区不完整的物理块所对应的逻辑单元号确定为错误逻辑单元号。
采用上述技术方案,通过逻辑单元号的唯一性检测可以缩小错误逻辑单元号的范围,进一步根据物理扇区完整性检测结果即可以在重复的逻辑单元号中确定错误逻辑单元号,因此本实施例的技术方案可以提高FFS的查错性能,进而便于进行纠错,从而完善FFS的容错性能。
在上述步骤202中,物理扇区完整性检测结果即对物理块中的物理扇区号是否完整进行检测而获得的结果,可以通过多种途径获取,其中一种具体实施方式为,在检测到与在前逻辑单元号重复的在后逻辑单元号之后,进一步在重复的逻辑单元号对应的块分配映射表中,检测物理扇区状态,以产生物理扇区完整性检测结果。
其中,在重复的逻辑单元号对应的块分配映射表中,检测物理扇区状态,以产生物理扇区完整性检测结果可以具体为:
在重复的逻辑单元号对应的块分配映射表中,根据物理扇区号数组对物理扇区进行完整性检测,以产生物理扇区完整性检测结果,即在两个重复的逻辑单元号分别对应的BAM表中,可以在物理扇区号数组中查询对应逻辑单元号所应有的物理扇区号,而后在BAM表中逐一比对是否存在所有的物理扇区号。
或者,在重复的逻辑单元号对应的块分配映射表中,检测物理扇区状态,以产生物理扇区完整性检测结果还可以具体为:
在重复的逻辑单元号中的至少一个所对应的块分配映射表中,判断是否存在“无效”物理扇区,存在“无效”物理扇区的物理块的物理扇区完整性检测结果为物理扇区不完整。
上述技术方案即进一步通过检测出现重复逻辑单元号的物理块中的BAM表来识别错误逻辑单元号。
可以分别检测两个重复逻辑单元号所对应物理块中的BAM表,检测两个BAM中是否存在“无效”状态的物理扇区,若有,则该BAM表所在物理块应该是未来得及更新的原物理块,对应的逻辑单元号是错误逻辑单元号,没有“无效”物理扇区的物理块,其逻辑单元号正确。上述状态检测过程可以仅检测一个物理块的BAM表就可以确定出错误的逻辑单元号。
本实施例的技术方案可以通过对逻辑映射表中逻辑单元号的唯一性检测来简便地缩小错误逻辑单元号所在的范围,并进一步通过小范围内的物理扇区完整性检测来准确定位错误物理块的错误逻辑单元号,改善了FFS的查错、容错性能。在根据物理扇区完整性检测结果确定错误逻辑单元号之后,由于错误的物理块实际上是未来得及更新的原物理块,其中的数据已经被拷贝到交换物理块中,已经无效,因此可以将错误逻辑单元号变更为设定的交换物理块的逻辑单元号,同时相应的更新逻辑映射表中的映射关系,则可以恢复闪存中索引数据的正确性,使FFS能够纠正错误,正常运行。
闪存文件系统纠错方法第二实施例
图3为本发明闪存文件系统纠错方法第二实施例的流程图,本实施例与第一实施例的区别在于,本实施例的闪存文件系统纠错方法具体是应用于FFS进行挂载操作失败后的情况,即本实施例的方法包括如下步骤:
步骤300、当FFS挂载操作失败后,执行下述步骤;
步骤301、纠错装置对逻辑映射表中的逻辑单元号进行唯一性检测;
步骤302、当纠错装置检测到与在前逻辑单元号重复的在后逻辑单元号时,根据重复逻辑单元号对应物理块的物理扇区完整性检测结果,将物理扇区不完整的物理块所对应的逻辑单元号确定为错误逻辑单元号。
其中,根据重复逻辑单元号对应物理块的物理扇区完整性检测结果,将物理扇区不完整的物理块所对应的逻辑单元号确定为错误逻辑单元号具体为:以挂载操作失败作为物理扇区完整性检测结果,根据挂载操作失败确定在前逻辑单元号为错误逻辑单元号。
在确定错误逻辑单元号之后,可以进一步执行下述步骤:
步骤303、将错误逻辑单元号变更为设定的交换物理块的逻辑单元号,即将该错误逻辑单元号对应物理块中的逻辑单元号变更为交换物理块的逻辑单元号,一般是某个设定的逻辑单元号,以纠正FFS的错误,且同时更新逻辑映射表中该物理块对应的逻辑单元号。
上述FFS挂载操作通常发生在文件系统初始化时,例如单板复位后就需要进行文件系统初始化,此时执行的FFS挂载操作包括如下步骤:
在逻辑映射表中按照物理块号顺序依次读取对应的逻辑单元号,当读取到重复的在后逻辑单元号时,将重复的在后逻辑单元号设置为交换物理块的逻辑单元号并跳过以读取下一个逻辑单元号,例如可以将在后逻辑单元号清零,不再读取该逻辑单元号对应物理块中的BAM表,直接读取下一个逻辑单元号;在读取每个逻辑单元号时,根据物理扇区号数组在对应的BAM表中对物理扇区进行完整性检测,即检测是否所有物理扇区号都存在,若都存在则物理扇区完整,可以索引到该闪存中所有的可用存储空间。若检测到物理扇区不完整时,挂载操作失败而停止。
图4为本发明闪存文件系统纠错方法第二实施例中挂载操作的流程图,具体包括如下步骤:
步骤401、在逻辑映射表中按照物理块号顺序读取对应的逻辑单元号;
步骤402、判断当前逻辑单元号是否与在前的逻辑单元号重复,若是,则表示当前逻辑单元号作为一个在后的逻辑单元号,与某一个在前的逻辑单元号重复,进而执行步骤403,若否,则执行步骤404;
步骤403、将重复的在后逻辑单元号设置为交换物理块的逻辑单元号,并返回执行步骤401;
步骤404、读取当前逻辑单元号所对应的BAM表,并根据物理扇区号数组标识各物理扇区号的读取记录;
步骤405、判断是否所有逻辑单元号读取完毕,若否,则执行步骤401,以便读取下一个逻辑单元号,若是,则执行步骤406;
步骤406、根据标识的物理扇区号读取记录进行物理扇区完整性检测,即判断是否所有物理扇区都存在,若是,则挂载成功,若否,则挂载失败,停止挂载操作。
在上述挂载成功后,可以进一步根据文件目录和BAM表建立上层文件系统所需的文件分区列表,判断是否能够根据BAM表索引到闪存应存储的所有文件数据,若否,则虽然挂载成功,但是有文件数据的丢失或损坏。
在上述挂载过程中,系统默认首先读取的逻辑单元号是正确的,如果出现另一个重复的逻辑单元号则默认其是无效的,将其设置为交换物理块的逻辑单元号,认为其中存储的数据均为无效数据,不再读取其中的BAM表。如果重复的在后逻辑单元号都对应的是交换物理块,则这种重复不会导致FFS错误,因为交换物理块中的物理扇区都不属于用户可用的存储空间,因此不会导致物理扇区不完整,读取文件错误。
基于上述挂载过程,如果出现挂载失败的现象,则说明重复的逻辑单元号第一个出现的是错误的,所以BAM表完整性检测失败,导致挂载失败。在挂载失败后对逻辑映射表进行唯一性检测,只需要确定重复的逻辑单元号中在先出现的是错误逻辑单元号即可,无须进一步检测BAM表,因为挂载失败相当于是一个对物理扇区完整性的检测结果。如果进一步检测BAM表内容则可以提高这种错误识别的准确性。基于挂载操作失败的结果,可以直接将两个重复逻辑单元号中的在前逻辑单元号确定为错误逻辑单元号,并可以执行上述步骤303,将错误逻辑单元号变更为设定的交换物理块的逻辑单元号来进行纠错。
本实施例的技术方案应用了挂载失败的原因,挂载操作读取过程实际上也是一次对FFS错误的检测,再结合上述对逻辑映射表唯一性的检测,即可直接定位错误物理块。而后可以通过简单的将错误逻辑单元号置换为交换物理块的逻辑单元号来恢复纠正FFS的错误。
可以在每次挂载失败后即执行上述唯一性检测和逻辑单元号变更操作,在将错误逻辑单元号变更为交换物理块的逻辑单元号之后,再次执行闪存文件系统的挂载操作,且当挂载操作失败时返回对逻辑映射表中的逻辑单元号进行唯一性检测,而后顺次执行后续操作,可以反复执行直至挂载成功或唯一性检测完毕。本实施例的技术方案解决了挂载失败后必须格式化来恢复FFS的问题,一方面避免了格式化所需的大量时间,改善了采用FFS的通信设备的启动性能,以软件形式实现上述方案时仅需几百条指令,显著提高了FFS从错误中恢复的速度;另一方面尽可能的不损失文件数据,符合对FFS健壮性的要求。
闪存文件系统纠错方法第三实施例
图5为本发明闪存文件系统纠错方法第三实施例的流程图。本实施例的方法可以在上述实施例的基础上执行向闪存写入文件的操作,且写入文件的操作包括如下步骤:
步骤501、FFS及上层文件系统确定文件待写入的逻辑单元号,且根据逻辑映射表确定待写入物理块,例如可以采用文件配置表(File AllocationTable;以下简称:FAT)技术或DOS的分区表技术作为上层文件系统来确定某个文件有待写入的逻辑空间;
步骤502、根据待写入的逻辑单元号写入文件,且同时将文件及其写入闪存的索引信息记录在备份存储区中,该备份存储区设置在闪存之外,例如可以是单板硬件中的内存等非缓存空间。
其中,文件写入闪存的索引信息可以包括逻辑单元号、该文件对应的文件块号,以及各文件块号所对应的物理扇区号等。
将写入闪存中的文件和索引信息进行预留备份,可以预防FFS错误,当发生写入错误时,可以从备份存储区中将文件写入闪存。
上述技术方案尤其适用于进行交换写入操作的情况进行数据备份,在交换写入的过程中,FFS还可以根据待写入物理块中的BAM表识别待写入物理块中的物理扇区状态;当FFS检测到状态识别结果达到设定门限值时,确定执行交换写入操作。设定门限值可以根据具体情况来设定,例如可以为“空闲”状态物理扇区的数量低于某一数值,或“无效”状态物理扇区的数量高于某一数值等。
交换写入操作具体可以包括如下步骤:
FFS将待写入物理块中的逻辑单元号和BAM表中的物理扇区号拷贝到交换物理块中,同时更新逻辑映射表中的逻辑单元号,即更新逻辑映射表中交换物理块的逻辑单元号为待写入物理块的逻辑单元号;
根据待写入物理块中BAM表内的物理扇区号及物理扇区状态,将“有效”物理扇区内的数据拷贝到交换物理块中的“空闲”物理扇区中,同时在交换物理块的BAM表中更新物理扇区的状态;
将待写入物理块中块分配映射表内的物理扇区号设置为交换物理扇区号,且将物理扇区状态设置为“无效”,具体可以是在拷贝“有效”物理扇区中的数据之后将该物理扇区的状态设置为“无效”,且将物理扇区号设置为交换物理扇区号,或者可以是在所有有效数据拷贝完成之后,统一更新物理扇区号及状态;
设置待写入物理块中的逻辑单元号为交换物理块的逻辑单元号,且更新逻辑映射表中的逻辑单元号,即将原物理块对应的逻辑单元号更新为交换物理块原本应有的逻辑单元号。
执行交换写入的操作后,可以将文件写入待写入逻辑单元号当前对应的物理块中的“空闲”物理扇区中。
采用上述预留存储的技术方案之后,当上层文件系统基于FFS读取闪存中的文件失败时,或在发生异常后文件初始化执行文件系统挂载操作之前,即可以首先从备份存储区查询文件写入闪存的索引信息,而后根据索引信息将文件写入闪存,以便对可能发生的错误写入进行弥补,这样可以有效的避免文件挂载失败。该技术方案尤其适用于当异常断开发生在文件向“空闲”物理扇区写入的情况,如果文件写入“空闲”物理扇区时断开,虽然逻辑单元号和BAM表等信息正确可以成功挂载,但是文件数据还未完全写入,导致一部分未写入的数据丢失。采用本实施例的技术方案可以有效的降低异常断开导致的数据损失。
本发明的闪存文件系统纠错方法可以适用于多种FFS中,当FFS应用在频繁复位的单板的嵌入式操作系统中时,查错和纠错性能的提高可以在FFS挂载失败后提供除了格式化之外的一种有效的恢复方式,可以避免缓慢格式化操作的执行,从而提高挂载失败后的恢复速度,保证尽可能少损失文件。因此,FFS容错性能的改善可以提高其所应用的设备的相关性能,例如提高单板复位后的启动速度。
闪存文件系统纠错装置第一实施例
图6为本发明闪存文件系统纠错装置第一实施例的结构示意图。如图6所示,该闪存文件系统纠错装置可以包括唯一性检测模块10和错误识别模块20,分别与闪存100交互。其中,唯一性检测模块10对逻辑映射表中的逻辑单元号进行唯一性检测;当唯一性检测模块10检测到与在前逻辑单元号重复的在后逻辑单元号时,错误识别模块20根据重复逻辑单元号对应物理块的物理扇区完整性检测结果,将物理扇区不完整的物理块所对应的逻辑单元号确定为错误逻辑单元号。
在本实施例的基础上,该闪存文件系统纠错装置还可以包括挂载模块30,该挂载模块30与错误识别模块20分别相连,执行对闪存文件系统执行挂载操作,挂载操作失败作为物理扇区完整性检测结果,确定重复的逻辑单元号中在前逻辑单元号对应物理块的物理扇区不完整。挂载模块30将挂载操作失败提供给错误识别模块20。
进一步的,该挂载操作模块30可以包括读取单元31和检测单元32。其中,读取单元31在逻辑映射表中按照物理块号顺序依次读取对应的逻辑单元号,当读取到重复的在后逻辑单元号时,将重复的在后逻辑单元号设置为交换物理块的逻辑单元号并跳过以读取下一个逻辑单元号;检测单元32在读取单元31读取每个逻辑单元号时,根据物理扇区号数组在对应的块分配映射表中对物理扇区进行完整性检测,当检测到物理扇区不完整时,挂载操作失败并停止挂载操作。
在本实施例的基础上,该闪存文件系统纠错装置还可以包括纠错模块40,纠错模块40在错误识别模块20确定错误逻辑单元号之后,将逻辑映射表中的错误逻辑单元号变更为交换物理块的逻辑单元号。
本实施例的技术方案具体可以执行本发明闪存文件系统纠错方法第二实施例的技术方案,通过逻辑单元号的唯一性检测来缩小错误逻辑单元号的范围,且将挂载操作本身作为对物理扇区完整性的检测,则可以在挂载操作失败后准确定位错误的逻辑单元号,因此本实施例的技术方案可以进一步提高FFS的查错、纠错性能。
闪存文件系统纠错装置第二实施例
图7为本发明闪存文件系统纠错装置第二实施例的结构示意图。如图7所示,与上述第一实施例的区别在于,本实施例中闪存文件系统纠错装置还可以包括完整性检测模块50,以替换挂载模块30。完整性检测模块50在唯一性检测模块10检测到与在前逻辑单元号重复的在后逻辑单元号之后,在重复的逻辑单元号对应的块分配映射表中,检测各物理扇区状态,以产生物理扇区完整性检测结果,提供给错误识别模块20。
本实施例具体可以执行本发明闪存文件系统纠错方法第一实施例的技术方案,可以在逻辑单元号唯一性检测后缩小错误逻辑单元号的范围,进一步在重复的逻辑单元号中进行物理扇区完整性检测,可以便捷、准确的定位错误逻辑单元号,提高FFS的查错、纠错性能。
闪存文件系统纠错装置第三实施例
图8为本发明闪存文件系统纠错装置第三实施例的结构示意图。如图8所示,本实施例在上述两个实施例的基础上,进一步包括备份存储区60、写入模块70和再写入模块80。其中,备份存储区60设置在闪存100之外;写入模块70根据确定的待写入逻辑单元号向闪存100写入文件,同时将文件及其写入闪存100的索引信息记录在备份存储区60中;再写入模块80当读取闪存100中的文件失败时或执行文件系统挂载操作之前,从备份存储区60查询文件写入闪存100的索引信息,将文件写入闪存100。
本实施例的闪存文件纠错装置将写入闪存中的文件和索引信息进行预留备份,可以预防FFS错误,当发生写入错误时,可以从备份存储区中将文件写入闪存。
本发明闪存文件纠错装置各实施例可以软件或硬件形式集成在FFS中和/或存储在闪存中,具体可以执行本发明闪存文件系统纠错方法任一实施例的技术方案。将具有本发明闪存文件纠错装置各实施例的FFS应用到单板等设备的操作系统中时,频繁复位、挂载的单板可以通过确定并变更错误逻辑单元号来尝试重新挂载,解决了挂载失败后必须进行缓慢格式化的问题,能够显著提高单板等设备的启动性能。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (18)
1、一种闪存文件系统纠错方法,其特征在于,包括:
对逻辑映射表中的逻辑单元号进行唯一性检测;
当检测到与在前逻辑单元号重复的在后逻辑单元号时,根据重复的逻辑单元号对应物理块的物理扇区完整性检测结果,将物理扇区不完整的物理块所对应的逻辑单元号确定为错误逻辑单元号。
2、根据权利要求1所述的闪存文件系统纠错方法,其特征在于,所述对逻辑映射表中的逻辑单元号进行唯一性检测之前还包括:检测到闪存文件系统挂载操作失败。
3、根据权利要求2所述的闪存文件系统纠错方法,其特征在于,所述根据重复的逻辑单元号对应物理块的物理扇区完整性检测结果,将物理扇区不完整的物理块所对应的逻辑单元号确定为错误逻辑单元号包括:
以所述挂载操作失败作为物理扇区完整性检测结果,根据所述挂载操作失败确定在前逻辑单元号对应物理块的物理扇区不完整,对应的逻辑单元号为错误逻辑单元号。
4、根据权利要求3所述的闪存文件系统纠错方法,其特征在于,所述闪存文件系统挂载操作具体包括:
在所述逻辑映射表中按照物理块号顺序依次读取对应的逻辑单元号,当读取到重复的在后逻辑单元号时,将重复的在后逻辑单元号设置为交换物理块的逻辑单元号并跳过以读取下一个逻辑单元号;在读取每个逻辑单元号时,根据物理扇区号数组在对应的块分配映射表中对物理扇区进行完整性检测,当检测到物理扇区不完整时,挂载操作失败而停止。
5、根据权利要求1所述的闪存文件系统纠错方法,其特征在于,根据重复的逻辑单元号对应物理块的物理扇区完整性检测结果,将物理扇区不完整的物理块所对应的逻辑单元号确定为错误逻辑单元号具体包括:
根据重复的逻辑单元号对应的块分配映射表,检测物理扇区状态,以产生所述物理扇区完整性检测结果;
根据所述物理扇区完整性检测结果将物理扇区不完整的物理块所对应的逻辑单元号确定为错误逻辑单元号。
6、根据权利要求5所述的闪存文件系统纠错方法,其特征在于,根据重复的逻辑单元号对应的块分配映射表,检测物理扇区状态,以产生所述物理扇区完整性检测结果包括:
在重复的逻辑单元号对应的块分配映射表中,根据物理扇区号数组对物理扇区进行完整性检测,以产生物理扇区完整性检测结果。
7、根据权利要求5所述的闪存文件系统纠错方法,其特征在于,根据重复的逻辑单元号对应的块分配映射表,检测物理扇区状态,以产生所述物理扇区完整性检测结果包括:
在重复的逻辑单元号中的至少一个所对应的块分配映射表中,判断是否存在无效物理扇区,存在无效物理扇区的物理块的物理扇区完整性检测结果为物理扇区不完整。
8、根据权利要求1~7任一所述的闪存文件系统纠错方法,其特征在于,在确定错误逻辑单元号之后,还包括:
将所述错误逻辑单元号变更为交换物理块的逻辑单元号。
9、根据权利要求8所述的闪存文件系统纠错方法,其特征在于,在将所述错误逻辑单元号变更为交换物理块的逻辑单元号之后,还包括:执行闪存文件系统挂载操作,且当挂载操作失败时返回对逻辑映射表中的逻辑单元号进行唯一性检测。
10、根据权利要求1~7任一所述的闪存文件系统纠错方法,其特征在于,还包括执行向闪存写入文件的操作,且所述写入文件的操作包括:
确定文件待写入的逻辑单元号,且根据逻辑映射表确定待写入物理块;
根据待写入的逻辑单元号写入文件,且同时将所述文件及其写入闪存的索引信息记录在备份存储区中,所述备份存储区设置在所述闪存之外。
11、根据权利要求10所述的闪存文件系统纠错方法,其特征在于,还包括交换写入操作,所述交换写入操作包括:
将所述待写入物理块中的逻辑单元号和块分配映射表中的物理扇区号拷贝到交换物理块中,同时更新所述逻辑映射表中的逻辑单元号;
根据所述待写入物理块中块分配映射表内的物理扇区号及物理扇区状态,将有效物理扇区内的数据拷贝到所述交换物理块中的空闲物理扇区中,同时在所述交换物理块的块分配映射表中更新物理扇区的状态;
将所述待写入物理块中块分配映射表内的物理扇区号设置为交换物理扇区号,且将物理扇区状态设置为无效;
设置所述待写入物理块中的逻辑单元号为交换物理块的逻辑单元号,且更新所述逻辑映射表中的逻辑单元号。
12、根据权利要求10所述的闪存文件系统纠错方法,其特征在于,当读取所述闪存中的文件失败时或执行文件系统挂载操作之前,还包括:
从所述备份存储区查询所述文件写入闪存的索引信息,将所述文件写入所述闪存。
13、一种闪存文件系统纠错装置,其特征在于,包括:
唯一性检测模块,用于对逻辑映射表中的逻辑单元号进行唯一性检测;
错误识别模块,用于当所述唯一性检测模块检测到与在前逻辑单元号重复的在后逻辑单元号时,根据重复的逻辑单元号对应物理块的物理扇区完整性检测结果,将物理扇区不完整的物理块所对应的逻辑单元号确定为错误逻辑单元号。
14、根据权利要求13所述的闪存文件系统纠错装置,其特征在于,还包括:
挂载模块,用于执行对闪存文件系统执行挂载操作,挂载操作失败作为物理扇区完整性检测结果,确定重复的逻辑单元号中在前逻辑单元号对应物理块的物理扇区不完整。
15、根据权利要求14所述的闪存文件系统纠错装置,其特征在于,所述挂载模块包括:
读取单元,用于在所述逻辑映射表中按照物理块号顺序依次读取对应的逻辑单元号,当读取到重复的在后逻辑单元号时,将重复的在后逻辑单元号设置为交换物理块的逻辑单元号并跳过以读取下一个逻辑单元号;
检测单元,用于在所述读取单元读取每个逻辑单元号时,根据物理扇区号数组在对应的块分配映射表中对物理扇区进行完整性检测,当检测到物理扇区不完整时,挂载操作失败并停止挂载操作。
16、根据权利要求13所述的闪存文件系统纠错装置,其特征在于,还包括:
完整性检测模块,用于在所述唯一性检测模块检测到与在前逻辑单元号重复的在后逻辑单元号之后,在重复的逻辑单元号对应的块分配映射表中,检测各物理扇区状态,以产生所述物理扇区完整性检测结果。
17、根据权利要求14~16任一所述的闪存文件系统纠错装置,其特征在于,还包括:
纠错模块,用于在所述错误识别模块确定错误逻辑单元号之后,将所述错误逻辑单元号变更为交换物理块的逻辑单元号。
18、根据权利要求13~16任一所述的闪存文件系统纠错装置,其特征在于,还包括:
备份存储区,设置在闪存之外;
写入模块,用于根据确定的待写入逻辑单元号向闪存写入文件,同时将所述文件及其写入闪存的索引信息记录在所述备份存储区中;
再写入模块,用于当读取所述闪存中的文件失败时或执行文件系统挂载操作之前,从所述备份存储区查询所述文件写入闪存的索引信息,将所述文件写入所述闪存。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009100019986A CN101482837B (zh) | 2009-01-21 | 2009-01-21 | 闪存文件系统纠错方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009100019986A CN101482837B (zh) | 2009-01-21 | 2009-01-21 | 闪存文件系统纠错方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101482837A true CN101482837A (zh) | 2009-07-15 |
CN101482837B CN101482837B (zh) | 2011-03-16 |
Family
ID=40879960
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009100019986A Active CN101482837B (zh) | 2009-01-21 | 2009-01-21 | 闪存文件系统纠错方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101482837B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102081577A (zh) * | 2011-01-12 | 2011-06-01 | 厦门雅迅网络股份有限公司 | Flash存储器的数据存储结构及其数据操作方式 |
CN102193982A (zh) * | 2011-03-25 | 2011-09-21 | 北京世纪互联工程技术服务有限公司 | 图形数据库联机事务中查询数据的控制方法 |
CN102436406A (zh) * | 2010-09-15 | 2012-05-02 | 株式会社东芝 | 半导体装置及其数据存取方法 |
CN101763295B (zh) * | 2009-12-28 | 2012-05-30 | 北京握奇数据系统有限公司 | 一种数据备份、备份项擦除及数据恢复方法和装置 |
CN105830067A (zh) * | 2015-06-05 | 2016-08-03 | 深圳市大疆创新科技有限公司 | 一种文件信息处理方法、装置及文件处理设备、系统 |
CN107025178A (zh) * | 2015-09-22 | 2017-08-08 | 三星电子株式会社 | 存储器控制器、非易失性存储器系统及其操作方法 |
CN107577417A (zh) * | 2016-07-05 | 2018-01-12 | 慧荣科技股份有限公司 | 数据储存装置与数据储存方法 |
CN109710317A (zh) * | 2018-11-16 | 2019-05-03 | 华为技术有限公司 | 系统启动方法、装置、电子设备及存储介质 |
CN112800005A (zh) * | 2021-01-22 | 2021-05-14 | 中孚安全技术有限公司 | 一种文件系统深度检查方法、系统、终端及存储介质 |
-
2009
- 2009-01-21 CN CN2009100019986A patent/CN101482837B/zh active Active
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101763295B (zh) * | 2009-12-28 | 2012-05-30 | 北京握奇数据系统有限公司 | 一种数据备份、备份项擦除及数据恢复方法和装置 |
CN102436406A (zh) * | 2010-09-15 | 2012-05-02 | 株式会社东芝 | 半导体装置及其数据存取方法 |
CN102081577A (zh) * | 2011-01-12 | 2011-06-01 | 厦门雅迅网络股份有限公司 | Flash存储器的数据存储结构及其数据操作方式 |
CN102081577B (zh) * | 2011-01-12 | 2013-02-13 | 厦门雅迅网络股份有限公司 | 对Flash存储器的数据存储结构进行数据操作的方法 |
CN102193982A (zh) * | 2011-03-25 | 2011-09-21 | 北京世纪互联工程技术服务有限公司 | 图形数据库联机事务中查询数据的控制方法 |
CN102193982B (zh) * | 2011-03-25 | 2012-12-19 | 北京世纪互联宽带数据中心有限公司 | 图形数据库联机事务中查询数据的控制方法 |
CN105830067A (zh) * | 2015-06-05 | 2016-08-03 | 深圳市大疆创新科技有限公司 | 一种文件信息处理方法、装置及文件处理设备、系统 |
WO2016192110A1 (zh) * | 2015-06-05 | 2016-12-08 | 深圳市大疆创新科技有限公司 | 一种文件信息处理方法、装置及文件处理设备、系统 |
CN105830067B (zh) * | 2015-06-05 | 2018-02-02 | 深圳市大疆创新科技有限公司 | 一种文件信息处理方法、装置及文件处理设备、系统 |
CN107025178A (zh) * | 2015-09-22 | 2017-08-08 | 三星电子株式会社 | 存储器控制器、非易失性存储器系统及其操作方法 |
US11243878B2 (en) | 2015-09-22 | 2022-02-08 | Samsung Electronics Co., Ltd. | Simultaneous garbage collection of multiple source blocks |
CN107577417A (zh) * | 2016-07-05 | 2018-01-12 | 慧荣科技股份有限公司 | 数据储存装置与数据储存方法 |
US10754566B2 (en) | 2016-07-05 | 2020-08-25 | Silicon Motion, Inc. | Data storage device and data storage method |
CN109710317A (zh) * | 2018-11-16 | 2019-05-03 | 华为技术有限公司 | 系统启动方法、装置、电子设备及存储介质 |
CN112800005A (zh) * | 2021-01-22 | 2021-05-14 | 中孚安全技术有限公司 | 一种文件系统深度检查方法、系统、终端及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN101482837B (zh) | 2011-03-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101482837B (zh) | 闪存文件系统纠错方法和装置 | |
US8046528B2 (en) | Data writing method for flash memory, and flash memory controller and storage device thereof | |
US8448018B2 (en) | Stripe-based memory operation | |
TWI432960B (zh) | 操作記憶體單元之方法,記憶體控制器以及記憶體系統 | |
CN102576332B (zh) | 用于电力中断管理的方法和包含电力中断管理的存储器系统 | |
EP2359252B1 (en) | Storage system snapshot assisted by ssd technology | |
US8239714B2 (en) | Apparatus, system, and method for bad block remapping | |
JP4371771B2 (ja) | 不揮発性メモリシステムにおいて用いられる電力管理ブロック | |
CN101515276B (zh) | 一种文件数据写操作的方法、文件数据恢复方法及系统 | |
CN101944386B (zh) | 识别闪速存储器中错误数据的控制电路及存储系统与方法 | |
CN103270500A (zh) | 事务日志恢复 | |
CN103577121A (zh) | 一种基于nand flash的高可靠线性文件存取方法 | |
WO2010059173A1 (en) | System and method for recovering solid state drive data | |
CN103577574A (zh) | 一种基于nand flash的高可靠线性文件系统 | |
CN102073600B (zh) | 数据备份方法、闪存控制器及闪存储存系统 | |
CN101567220A (zh) | 闪存的损坏区块辨识方法、储存系统及其控制器 | |
CN101546294A (zh) | 一种Flash存储器的数据存储方法 | |
CN102890655A (zh) | 存储器储存装置、其存储器控制器与有效数据识别方法 | |
US8966161B2 (en) | Memory storage device and restoring method thereof | |
CN111984547B (zh) | 一种地址映射表管理装置、方法、系统及计算机存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |