发明内容
本发明要解决的技术问题在于,针对现有技术的上述仅小部分损坏的存储介质被更换而产生极大浪费的缺陷,提供一种基于预分配FAT文件系统的坏簇处理方法及装置。
本发明解决其技术问题所采用的技术方案是:
一方面,构造一种基于预分配FAT文件系统的坏簇处理方法,包括以下步骤:
在存储介质的预分配文件中存储数据时,若发生存储异常,则记录发生存储异常的预分配文件的文件名以及文件偏移位置;
依据所述文件名、所述文件偏移位置和所述FAT文件系统的FAT表定位导致发生存储异常的预分配文件中的坏簇;
判断所述发生存储异常的预分配文件中的累计坏簇个数是否超过预设阈值,若未超过预设阈值则利用备份簇替换所述坏簇,并继续在所述发生存储异常的预分配文件中存储数据;
若所述累计坏簇个数超过预设阈值,则用另一预分配文件替换所述发生存储异常的预分配文件,以及在新的预分配文件中重新进行数据存储。
在一个实施例中,所述若未超过预设阈值则利用备份簇替换所述坏簇,并继续在所述发生存储异常的预分配文件中存储数据进一步包括:
在所述FAT表中对坏簇进行标记,并根据替换后的簇更新所述FAT表。
在一个实施例中,所述用另一预分配文件替换所述发生存储异常的预分配文件,以及在新的预分配文件中重新进行数据存储进一步包括:
将所述发生存储异常的预分配文件中的簇作为备份簇,并更新FAT表。
在一个实施例中,所述在存储介质的预分配文件中存储数据之前还包括:
将所述存储介质的数据区划分为预分配区和备份区;
其中,所述预分配区包括多个用于存储数据的预分配文件,每个预分配文件包括若干簇,;
所述备份区包括多个用于替换所述预分配文件中的坏簇的备份簇。
在一个实施例中,所述方法进一步包括:
判断所述累计坏簇个数是否大于所述备份簇的数量,若大于,则选择一个或多个预分配文件并将其中的簇作为备份簇。
另一方面,构造一种基于预分配FAT文件系统的坏簇处理装置,包括:
记录模块,用于在存储介质的预分配文件中存储数据时,若发生存储异常,则记录发生存储异常的预分配文件的文件名以及文件偏移位置;
坏簇定位模块,用于依据所述文件名、所述文件偏移位置和所述FAT文件系统的FAT表定位导致发生存储异常的预分配文件中的坏簇;
判断模块,用于判断所述发生存储异常的预分配文件中的累计坏簇个数是否超过预设阈值;
坏簇替换模块,用于若所述判断模块的判断结果为未超过预设阈值则利用备份簇替换坏簇,并继续在所述发生存储异常的预分配文件中存储数据;
文件替换模块,用于若所述判断模块的判断结果为累计坏簇个数超过预设阈值,则用另一预分配文件替换所述发生存储异常的预分配文件,以及在新的预分配文件中重新进行数据存储。
在一个实施例中,所述坏簇替换模块进一步包括:
第一FAT表更新单元,用于在FAT表中对坏簇进行标记,并根据替换后的簇更新FAT表。
在一个实施例中,所述文件替换单元进一步包括:
第二FAT表更新单元,用于将发生存储异常的预分配文件中的簇作为备份簇,并更新FAT表。
在一个实施例中,所述装置进一步包括:分区模块,用于将所述存储介质的数据区划分为预分配区和备份区;
其中,预分配区包括多个用于存储数据的预分配文件,每个预分配文件包括若干簇,;备份区包括多个用于替换预分配文件中的坏簇的备份簇。
在一个实施例中,所述装置进一步包括:
备份簇增加模块,用于判断累计坏簇个数是否大于备份簇的数量,若大于,则选择一个或多个预分配文件并将其中的簇作为备份簇。
本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
具体实施方式
为了对本发明的技术特征、目的和效果有更加清楚的理解,现对照附图详细说明本发明的具体实施方式。
参见图1为本发明实施例的基于预分配FAT文件系统的坏簇处理方法的流程图。
本发明实施例的FAT文件系统对存储介质(例如,硬盘、磁盘)空间管理以簇(cluster)为最小分配单位,不同的簇用簇号来区别。
本发明实施例的基于FAT文件系统的存储介质可划分为根目录区、文件分配表区(FAT区)和数据区。根目录区保存根目录下的各文件的目录项,每个目录项包括:文件正名、文件扩展名、文件属性、文件名字节校验和、文件建立时间、文件最新访问日期、存储文件起始簇的簇号、文件最新修改时间、文件最新修改日期、文件字节长度等。数据区是用来存放数据的区域,该区域以簇为分配单位来使用。FAT区共保存了两个相同的文件分配表(FAT表),便于第一个损坏时,还有第二个可用。FAT表中包括文件名称、起始簇号以及占用每个簇的簇号。簇号可能是不连续的。数据区中每簇的使用情况通过查找其在FAT表中相应位置的填充值即可获知。
在本发明的实施例中,将存储介质的数据区分为预分配区和备份区。其中,预分配区可以包括多个用于存储数据的预分配文件,例如:预分配文件1、预分配文件2、预分配文件3……预分配文件N。每个预分配文件的大小是不固定的。每个预分配文件包括若干簇,一簇对应固定的2n(n为非负整数)个连续扇区。
备份区包括多个用于替换预分配文件中的坏簇的备份簇。例如,存储介质的数据区存储容量为64G,则可分配25M的空间作为备份区。
在本发明的实施例中,FAT表中包括预分配区各个预分配文件的名称、起始簇号以及占用每个簇的簇号。FAT表还包括备份簇的文件名和簇号信息。
参见图1,本发明实施例的FAT文件系统的坏簇处理方法包括以下步骤:
步骤S11、在存储介质的预分配文件中存储数据时,若发生存储异常,则记录发生存储异常的预分配文件的文件名以及文件偏移位置。
本发明实施例中,预分配文件的文件大小已被预先分配好。基于预分配文件进行数据存储的好处是:
(1)不怕断电:因为FAT文件系统存储数据时,根据数据的大小,不断在FAT区写入实际占用簇的簇序号。在数据存储结束时,写入结束簇序号(例如,oxffffff0f)。如果突然断电,数据存储结束,但其结束簇序号没有写入,后果是严重的,文件将不能被正常使用。而基于预分配文件的数据存储不存在该问题,因为,预分配文件时把该用的簇序号都写完毕了,结束簇序号也写入了,以后不再写入FAT表,只在预分配文件内部固定的簇序号中存储或读取数据。
(2)不怕磁盘碎片:由于数据每次读写占用簇的总数不一致,存储介质被覆盖存储的时候,删除数据,重新写入新的数据,占用的簇总数不一样,所以多出来的簇可能就利用不到,就作为碎片存在。如果碎片存在过多,就要整理磁盘碎片。而基于预分配文件的数据存储不存在数据的删除,因而不会产生磁盘碎片。
步骤S12、依据发生存储异常的预分配文件的文件名、文件偏移位置和FAT表定位发生存储异常的预分配文件中的坏簇。
在本发明的实施例中,在存储介质的预分配文件中存储数据时,发生存储异常时即无法达到读写的预期结果,此时的文件系统返回值为-1(也可能为其他的预定值)。由此,可根据存储数据时的返回值确定是否发生存储异常。当发生存储异常时,即停止数据存储,并记录发生存储异常的预分配文件的文件名及文件偏移位置。再根据FAT表定位到发生存储异常的坏簇。文件偏移位置即发送存储异常的预分配文件的坏簇所在的位置。根据该位置就能在FAT表中定位获取到坏簇的簇序号等信息。
步骤S13、判断发生存储异常的预分配文件中的累计坏簇个数是否超过预设阈值,若未超过预设阈值则执行步骤S14,否则,执行步骤S15。
具体的,对于同一预分配文件(例如,预分配文件n),每发生一次存储异常,则坏簇的个数加1,例如,当存储数据到一预分配文件n中时,第一次发生存储异常,则坏簇的个数为1,第二次发生存储异常,则坏簇的个数为1+1个(2个),依此类推。由此,可累计得到预分配文件n中的坏簇的个数。在本发明的实施例中,累计坏簇的个数,并将其与预设阈值进行比较,由此判断是进行坏簇替换还是预分配文件的替换,是因为:预分配文件是由若干个簇组成的,如果坏簇的个数超过预设阈值,则该预分配文件不宜再用于存储数据。预设阈值可根据实际进行设定,例如,可设定为20、25等。
步骤S14、利用备份簇替换坏簇,并继续在发生存储异常的预分配文件中存储数据。
具体的,利用备份簇替换坏簇的过程为:在FAT表中将坏簇的簇号替换为备份簇的簇号。替换后,数据的存储(或读出)即根据新的簇号进行相应操作。
步骤S14还进一步包括:在FAT表中对坏簇进行标记以及根据替换后的簇更新FAT表。对坏簇进行标记(即放入垃圾箱),例如,在FAT表中将坏簇相应位置填入特定值0FFFFFF7H标识。
步骤S15、用另一预分配文件替换发生存储异常的预分配文件,以及在新的预分配文件中重新进行数据存储。
具体的,另一预分配文件为除当前正在进行数据存储的预分配文件以外的其他预分配文件。
为了节约存储介质的存储空间,步骤S15进一步包括:将发生存储异常的预分配文件中的簇作为备份簇,并更新FAT表。具体的,该步骤有两种实现方式:
(1)由于坏簇所在的预分配文件中已成功写入(存储)数据的簇为完好的簇,因此将这些簇作为备份簇。由此可确保作为备份簇的簇都为完好的簇。
(2)将该预分配文件全部作为备份簇。当使用这样的备份簇替换预分配文件的坏簇时,若备份簇中出现坏簇,则可继续执行替换,直到替换的备份簇为好簇,由此,可进一步节约存储空间。
在本发明的实施例中,当使用发生存储异常的预分配文件中的簇作为备份簇,而替换坏簇时,数据存储时会覆盖掉簇中已存储的数据而实现数据存储。
在本发明的实施例中,步骤S11和S12为坏簇确定步骤;步骤S14坏簇替换步骤;步骤S15为文件替换步骤。
在本发明的另一个实施例中,若累计得到的坏簇个数大于备份簇的数量,则释放一预分配文件(除当前正在进行数据存储的预分配文件外的其他预分配文件)作为备份簇。具体的,由于备份簇为设置于数据区的存储空间,因此,备份簇的大小是固定的。如果备份簇已使用完,则将预分配文件中释放,以作为备份簇。这样的有益效果为,保证所有坏簇均能被替换和修复。
参见图2为本发明实施例的基于预分配FAT文件系统的坏簇处理方法的详细流程图。在步骤S21中,在存储介质的预分配文件中进行数据(例如,音视频数据)存储,若在存储过程中发生存储异常,则在步骤S22中记录发生存储异常的预分配文件的文件名以及文件偏移位置;若未发生存储异常则判断数据存储是否结束,若结束则结束流程,否则继续执行步骤S21。在步骤S23中依据记录的文件名、文件偏移位置和FAT文件系统的FAT表定位发送存储异常的预分配文件中的坏簇。在步骤S24中累计发生存储异常的预分配文件的坏簇个数。在步骤S25中,判断累计坏簇个数是否大于备份簇的数量,若大于则在步骤S30释放一预分配文件作为备份簇,并执行步骤S26;若小于或等于则在步骤S26中,判断累计坏簇个数是否大于预设阈值,若小于或等于,则在步骤S27中利用备份簇替换坏簇以继续进行数据存储,并在步骤S28中在FAT表中对坏簇进行标记以及根据替换后的簇更新FAT表,在步骤S29中判断数据存储是否结束,若结束则结束流程,若未结束则执行步骤S21。若在步骤S26中判断的结果为累计坏簇个数大于预设阈值,则在步骤S31中用另一预分配文件替换发生存储异常的预分配文件,以及在新的预分配文件中重新进行数据存储,并在步骤S32中将发生存储异常的预分配文件中的簇作为备份簇,并更新FAT表,以及执行步骤S29判断数据存储是否结束,若结束则结束流程,若未结束则执行步骤S21。
参见图3为本发明实施例的基于预分配FAT文件系统的坏簇处理装置的结构框图。本发明实施例的FAT文件系统的坏簇处理装置包括:
记录模块301,用于在存储介质的预分配文件中存储数据时,若发生存储异常,则记录发生存储异常的预分配文件的文件名以及文件偏移位置。
坏簇定位模块302,用于依据文件名、文件偏移位置和FAT文件系统的FAT表定位导致发生存储异常的预分配文件中的坏簇。
判断模块303,用于判断发生存储异常的预分配文件中的累计坏簇个数是否超过预设阈值。
坏簇替换模块304,用于若判断模块303的判断结果为未超过预设阈值则利用备份簇替换坏簇,并继续在发生存储异常的预分配文件中存储数据。
文件替换模块305,用于若判断模块303的判断结果为累计坏簇个数超过预设阈值,则用另一预分配文件替换发生存储异常的预分配文件,以及在新的预分配文件中重新进行数据存储。
坏簇替换模块304进一步包括:第一FAT表更新单元,用于在FAT表中对坏簇进行标记,并根据替换后的簇更新FAT表。
文件替换单元305进一步包括:第二FAT表更新单元,用于将发生存储异常的预分配文件中的簇作为备份簇,并更新FAT表。
本发明实施例的FAT文件系统的坏簇处理装置进一步包括:分区模块和备份簇增加模块。
其中,分区模块用于将存储介质的数据区划分为预分配区和备份区。其中,预分配区包括多个用于存储数据的预分配文件,每个预分配文件包括若干簇,;备份区包括多个用于替换预分配文件中的坏簇的备份簇。
备份簇增加模块用于判断累计坏簇个数是否大于备份簇的数量,若大于,则选择一个或多个预分配文件并将其中的簇作为备份簇。
应理解,本发明实施例的FAT文件系统的坏簇处理装置为与上述FAT文件系统的坏簇处理方法对应的,以实现相应的功能。
本发明实施例的FAT文件系统的坏簇处理方法及装置通过合理的修复(替换)方法,当存储介质出现损坏时,通过定位坏簇,以替换坏簇或预分配文件,而不必浪费掉整个存储介质,可继续利用剩余有效存储空间继续存储,提高了存储介质的利用率,可节约存储空间和资源。
流程图中或在本发明的实施例中以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所述技术领域的技术人员所理解。
在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
本发明实施例提到的存储介质可以是硬盘、磁盘、光盘、U盘或SD卡等。优选的,本发明实施例的FAT文件系统为FAT32文件系统。
上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本发明的保护之内。