一种文件管理方法及装置技术领域
本发明涉及计算机存储技术领域,更具体地说,涉及一种文件管理方法
及装置。
背景技术
在常用的存储设备,尤其是Flash类存储设备中存储的数据,可能出现由
于某种原因,比如震荡、磁化等而发生错误的情况,因此,为了确保数据的
完整性及可靠性,通常可以通过对数据进行错误校验,进而完成读取或写入
等操作。
但是,对数据进行错误校验通常会对系统的读写性能造成不良影响,且,
存储设备往往存储有大量不同种类的数据,这些数据不仅包括对其完整性要
求较高的数据,也包括对其完整性要求不高的数据,而对后一类数据进行错
误校验并不是必要的,因此,现有技术中为了确保数据完整性及可靠性对存
储设备存储的全部数据均进行错误校验的技术方案会造成逻辑资源的浪费,
同时会加剧进行错误校验时对读写性能造成的不良影响。
综上所述,现有技术中存在浪费逻辑资源及加剧错误校验对读写性能造
成的不良影响的问题。
发明内容
本发明的目的是提供一种文件管理方法及装置,以解决现有技术中存在
的浪费逻辑资源及加剧错误校验对读写性能造成的不良影响的问题。
为了实现上述目的,本发明提供如下技术方案:
一种文件管理方法,包括:
确定需要读取的文件为目标文件,获取该目标文件的目标重要级别,并
判断所述目标重要级别是否为预设重要级别;
如果所述目标重要级别为所述预设重要级别,则利用预先写入所述目标
文件中的校验码对所述目标文件中包含的数据进行校验,并在校验成功后读
取所述目标文件中包含的数据;
如果所述目标重要级别不为所述预设重要级别,则直接读取所述目标文
件中包含的数据。
优选的,预先将所述校验码写入所述目标文件的过程包括:
获取所述目标文件的目标重要级别,并当判断出所述目标重要级别为所
述预设重要级别时,按照与所述目标重要级别对应级别的校验方法对所述目
标文件中包含的数据进行计算,生成对应的校验码,并将所述校验码写入所
述目标文件中。
优选的,利用所述校验码对所述目标文件中包含的数据进行校验,包括:
利用与所述校验码对应的校验方法对所述目标文件中除所述校验码之外
的其他数据进行计算得到读校验码,如果所述读校验码与所述目标文件中包
含的对应校验码一致,则确定校验成功。
优选的,获取所述目标文件的目标重要级别,包括:
查询所述目标文件的inode结构,以获取所述inode结构中标示该目标文
件的重要级别的级别属性,并确定预先创建该目标文件时为所述级别属性设
置的属性值为所述目标重要级别。
优选的,预先创建所述目标文件时为所述级别属性设置属性值,包括:
获取所述目标文件的目标后缀名,将所述目标后缀名与预先建立的后缀
列表中包含的后缀名进行匹配,并依据匹配得到的匹配结果设置所述级别属
性的属性值。
优选的,所述后缀名列表的预先建立过程,包括:
获取其重要级别为所述预设重要级别的全部文件对应的后缀名,并将具
有相同首字母的后缀名以数组的形式存放在平衡二叉树的同一节点中,确定
所述平衡二叉树为所述后缀名列表。
一种文件管理装置,包括:
判断模块,用于确定需要读取的文件为目标文件,获取该目标文件的目
标重要级别,并判断所述目标重要级别是否为预设重要级别;
第一执行模块,用于如果所述目标重要级别为所述预设重要级别,则利
用预先写入所述目标文件中的校验码对所述目标文件中包含的数据进行校
验,并在校验成功后读取所述目标文件中包含的数据;
第二执行模块,用于如果所述目标重要级别不为所述预设重要级别,则
直接读取所述目标文件中包含的数据。
优选的,还包括:
写入模块,用于获取所述目标文件的目标重要级别,并当判断出所述目
标重要级别为所述预设重要级别时,按照与所述目标重要级别对应级别的校
验方法对所述目标文件中包含的数据进行计算,生成对应的校验码,并将所
述校验码写入所述目标文件中。
优选的,第一执行模块包括:
校验单元,用于利用与所述校验码对应的校验方法对所述目标文件中除
所述校验码之外的其他数据进行计算得到读校验码,如果所述读校验码与所
述目标文件中包含的对应校验码一致,则确定校验成功。
优选的,判断模块包括:
获取单元,用于查询所述目标文件的inode结构,以获取所述inode结构
中标示该目标文件的重要级别的级别属性,并确定预先创建该目标文件时为
所述级别属性设置的属性值为所述目标重要级别。
本发明提供的一种文件管理方法及装置,其中,该方法包括:确定需要
读取的文件为目标文件,获取该目标文件的目标重要级别,并判断所述目标
重要级别是否为预设重要级别;如果所述目标重要级别为所述预设重要级别,
则利用预先写入所述目标文件中的校验码对所述目标文件中包含的数据进行
校验,并在校验成功后读取所述目标文件中包含的数据;如果所述目标重要
级别不为所述预设重要级别,则直接读取所述目标文件中包含的数据。与现
有技术相比,本申请在获取文件的重要级别之后,判断重要级别是否为预设
重要级别,如果是,则对其数据进行校验,否则,则直接读取数据,由此,
对于重要级别较高的,或者说对其完整性要求较高的数据进行错误验证,而
对于重要级别较低的,或者说对其完整性要求较低的数据则不进行错误验证,
不同于现有技术中对于存储的全部数据均进行错误校验的技术方案,因此,
有效减少了进行错误校验的次数,从而节省了逻辑资源的同时,大大降低了
错误校验对读写性能造成的不良影响。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实
施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面
描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不
付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例提供的一种文件管理方法的流程图;
图2为本发明实施例提供的一种文件管理方法中包含有后缀名的平衡二
叉树的结构示意图;
图3为本发明实施例提供的一种文件管理装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行
清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而
不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做
出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1,其示出了本发明实施例提供的一种文件管理方法的流程图,
可以包括以下步骤:
S11:确定需要读取的文件为目标文件,获取该目标文件的目标重要级别。
需要说明的是,目标文件可以为任一需要读取的文件,而目标文件的重
要级别即为目标重要级别。其中,文件的重要级别代表了该文件的重要程度,
或者说,代表了对该文件的完整性要求的高低,如果文件重要级别高,说明
对其完整性要求高,此时,任何损毁都会对文件中数据的利用造成影响,因
此,需要对其进行错误校验,以保证数据的完整性及可靠性;如果文件重要
级别低,说明对其完整性要求低,此时,少量的损毁对文件中数据的利用并
不会造成太大影响,因此,无需对其进行错误校验。举例来说,对于文件中
包含的音视频类的多媒体数据,对其完整性要求较低,而对于文件中包含的
账户、邮件等数据,对其完整性要求较高。且,通常对其完整性要求较高的
数据量通常较小,而对其完整性要求较低的数据量通常较大。因此,不对对
其完整性要求较低的数据进行错误校验,能够大大节省逻辑资源,以及大大
降低错误校验对读写性能的不良影响。
S12:判断目标重要级别是否为预设重要级别,如果是,则执行步骤S13,
如果否,则执行步骤S14。
其中,预设重要级别可以根据实际需要进行确定,且,预设重要级别可
以包括一个重要级别,也可以包括多个重要级别,如当将文件对应的重要级
别分为两种时,可以分别用0和1表示,其中,0表示重要级别较高,即为预
设重要级别,而1表示重要级别较低,即不是预设重要级别,又如将文件对
应的重要级别分为三种时,可以用0、1及2表示,其中,0和1表示重要级
别较高,即均为预设重要级别,2表示重要级别较低,即不是预设重要级别等,
在此不做具体限定。
S13:利用预先写入目标文件中的校验码对目标文件中包含的数据进行校
验,并在校验成功后读取目标文件中包含的数据。
目标重要级别为预设重要级别,说明该文件中存储的数据的重要级别较
高,因此,在对目标文件执行写操作时,可以利用现有技术中的任一种校验
方法对需要写入目标文件的数据进行计算,以得到对应的校验码,并将校验
码与数据一同写入目标文件中,在需要对目标文件中的数据进行校验时,利
用该校验方法及校验码确定文件中数据的完整性及正确定,并在校验成功,
即数据没有问题时完成读操作。
S14:直接读取目标文件中包含的数据。
如果目标重要级别不为预设重要级别,说明该文件中存储的数据的重要
级别较低,则在对目标文件进行写操作时,无需对其进行计算得到校验码,
对应的,在读取文件时,无需判断其数据的完整性及正确性,因此,可以直
接读取目标文件中包含的数据。
本申请在获取文件的重要级别之后,判断重要级别是否为预设重要级别,
如果是,则对其数据进行校验,否则,则直接读取数据,由此,对于重要级
别较高的,或者说对其完整性要求较高的数据进行错误验证,而对于重要级
别较低的,或者说对其完整性要求较低的数据则不进行错误验证,不同于现
有技术中对于存储的全部数据均进行错误校验的技术方案,因此,有效减少
了进行错误校验的次数,从而节省了逻辑资源的同时,大大降低了错误校验
对读写性能造成的不良影响。
另外,本发明公开的上述技术方案适用于对数据的完整性要求较高的文
件系统(如基于Flash的文件系统),也适用于对数据的完整性要求较低的文
件系统,更适用于包含有对其完整性较高的数据及对其完整性要求较低的数
据的文件系统,即,本申请提供的上述方案通过结合文件系统中不同数据完
整性要求不一致的特点,实现基于文件内容的更灵活的文件管理策略,具有
通用性。
上述实施例提供的一种文件管理方法中,预先将校验码写入目标文件的
过程可以包括:
获取目标文件的目标重要级别,并当判断出目标重要级别为预设重要级
别时,按照与目标重要级别对应级别的校验方法对目标文件中包含的数据进
行计算,生成对应的校验码,并将校验码写入目标文件中。
需要说明的是,当判断出目标文件的重要级别为预设重要级别时,说明
需要对目标文件进行对应的错误校验操作,因此,需要对目标文件中的数据
进行校验码的计算,而由于预设重要级别也可以具体分为不同的重要级别,
因此,对于符合预设重要级别的不同重要级别文件可以采用不同的校验方法,
即实现分级纠错。
具体来说,根据符合预设重要级别的文件中包含的数据的重要性经其分
成不同的级别,而在对其数据进行校验码的计算时,需要按照与其重要级别
对应级别的校验方法进行校验码的计算,其中,校验方法具体可以包括海明
校验、奇偶校验、CRC(循环冗余)校验等,均为现有技术中的经典校验方
法,在此不再赘述,而不同的校验方法所能检测到的错误数据量和所能纠正
的错误数据量是不同的,对应的,其计算复杂度、计算时间及对文件系统性
能的影响也不同,简单来说,复杂度越高的校验方法的校验纠错性能越好,
在符合预设重要级别的文件中,按照文件重要级别由高至低选择对应复杂度
由高至低的校验方法对其进行错误校验,从而,能够使得文件系统在满足校
验纠错(容错)要求的同时又能最大可能的提高数据的读写速度。
上述实施例提供的一种文件管理方法中,利用校验码对目标文件中包含
的数据进行校验,可以包括:
利用与校验码对应的校验方法对目标文件中除校验码之外的其他数据进
行计算得到读校验码,如果读校验码与目标文件中包含的对应校验码一致,
则确定校验成功。
需要说明的是,有的校验方法能够在检测出错误时自动纠错,有些智能
检测错误而不能纠错,因此,对应的,在步骤S13中的校验成功对应于能够
自动纠错的校验方法指的是检测出错误并成功纠错后,而对应于不能够自动
纠错的检验方法值得是未检测出错误后,在校验成功后返回读操作成功的信
息,而对应的如果校验不成功则直接返回错误,并停止读操作。
上述实施例提供的一种文件管理方法中,获取目标文件的目标重要级别,
可以包括:
查询目标文件的inode结构,以获取inode结构中标示该目标文件的重要
级别的级别属性,并确定预先创建该目标文件时为级别属性设置的属性值为
目标重要级别。
文件的inode结构中级别属性的属性值即为该文件的重要级别,其中,
inode结构是文件系统中一个文件所有属性的集合,其标示了文件的名称、大
小、创建时间、修改时间等,是每一个文件所必须有的数据结构,并且在文
件的读写过程中都会对对应的inode结构进行读写操作。具体来说,本申请中
通过在inode结构中加入级别属性,可以用file_level来表示,来标示文件的
重要级别。
其中,预先创建目标文件时为级别属性设置属性值,可以包括:
获取目标文件的目标后缀名,将目标后缀名与预先建立的后缀列表中包
含的后缀名进行匹配,并依据匹配得到的匹配结果设置级别属性的属性值。
其中,后缀名列表中可以包括全部不同重要级别文件的后缀名,利用目
标后缀名与后缀名列表中的后缀名进行匹配,能够获得目标后缀名相同的后
缀名,此时,该后缀名对应的重要级别即为目标后缀名对应的重要级别;后
缀名列表中也可以包括一部分重要级别的后缀名,如后缀名列表中只包括预
设重要级别的后缀名,或者只包括不为预设重要级别的后缀名,此时,如果
能够由后缀名列表中获取与目标后缀名相同的后缀名,则确定目标后缀名的
重要级别为与后缀名列表中包含的后缀名对应的重要级别相同的重要级别,
否则,则确定目标后缀名的重要级别为不与后缀名列表中包含的后缀名对应
的重要级别相同的重要级别,或者根据实际需要进行其他设定,均在本发明
的保护范围之内。
而对应的,后缀名列表中只包括预设重要级别的后缀名时,后缀名列表
的预先建立过程,可以包括:
获取其重要级别为预设重要级别的全部文件对应的后缀名,并将具有相
同首字母的后缀名以数组的形式存放在平衡二叉树的同一节点中,如图2所
示,确定平衡二叉树为后缀名列表。
另外,所存储的后缀名可以均为大写字母,或者均为小写字母,并且通
过平衡二叉树的方式,能够确定出与目标后缀名首字母相同的节点,进而在
该节点中确定与该目标后缀名相同的后缀名,进而确定目标后缀名对应的重
要级别,由此,能够加快利用文件的后缀名查询其对应后缀名的匹配速度,
进而加快确定文件的重要级别的速度。对应的,确定文件的重要级别可以先
将后缀名转换为大写字母或者小写字母,以与平衡二叉树中存储的后缀名的
格式一致。
当然,也可以将前两位字母相同的后缀名放入同一节点,具体可以根据
实际需要进行设定,均在本发明的保护范围之内。另外,可以根据文件的后
缀名进行匹配,也可以根据为不同文件设置的标志位与预设的标志位列表进
行匹配,从而确定文件的重要级别,具体可以根据实际需要进行确定,均在
本发明的保护范围之内。
本发明实施例中以扩展海明校验为例说明对文件进行操作的过程,其中,
扩展海明校验方法是对一个32位的数据进行编码或者解码,其由信息码和校
验码组成,信息码26位记为I0-I25,校验码6位记为P0-P5,而普通的海明
码校验方法是在32位数据中的特殊位置上插入校验码,其校验码和信息码是
交叉混合在一起的,扩展海明码中将校验码P0-P5放在数据的高位,而信息
码放在数据的低位。另外,假设文件的重要级别分别为1或0,其中,0表示
重要级别较高,1表示重要级别较低,即0为预设重要级别。具体来说,创建
新文件的具体过程为:
文件系统通过open操作调用sys_open(系统调用)打开名称为filename
的文件,并通过sys_open调用相应函数由进程空间获取该文件的路径名。
调用相应函数获得一个新的文件对象并设置该文件对象的相关属性,根
据路径名查找对应文件,如果对应该文件的标志O_CREATE为1,且并未查
找到对应文件,则调用文件创建函数创建一个新的文件,并设置该文件的inode
结构,根据所指定的文件名即filename确定该文件的重要级别,并将该重要
级别设置为inode结构中的属性file_level的属性值。
而文件系统的写操作是接收用户空间传递过来的数据缓冲区(以data_buf
表示),并通过调用文件系统指定的写函数将数据写入到对应文件中。其中,
文件系统的写函数(以f_op->write表示)是由文件系统的文件操作集合指定
的,因此对文件写操作的改进主要在f_op->write函数中。具体来说,对文件
进行写操作的具体过程为:
读取文件inode结构中的file_level属性,以获取其重要级别,如果文件
的重要级别为1,则依据data_buf中生成下层写操作函数所需的IO结构iovec,
调用下层函数完成写操作。如果文件的重要级别为0,则申请新的数据缓冲区
data_buf_new,并对data_buf中的数据以26位为单位分割并利用海明校验方
法对应的海明编码生成32位的数据,将其存放到data_buf_new缓冲区中,依
据数据量的改变对响应参数进行修改,并释放data_buf,通过data_buf_new
中生成下层写操作函数所需的IO结构iovec,调用下层函数完成写操作。
另外,文件系统读操基于f_op->read函数中实现,该函数接收下层函数
传来的iovec结构中的数据并将数据传到用户缓冲区data_buf中,具体来说,
对文件进行读操作的流程包括:
申请数据缓冲区data_buf_tmp,并将下层返回的iovec中的数据存入
data_buf_tmp中;读取文件inode结构中的file_level属性,确定其重要级别,
如果其重要级别为1,则将data_buf_tmp中的数据存入data_buf中,结束并返
回读取成功,如果其重要级别为0,则对data_buf_tmp中的数据以32位为单
位分割,并用海明校验方法重新计算读取的数据的读校验码,并将读校验码
与文件中存储的校验码进行对比,如果完全一致说明数据正确,将分割后的
数据去除校验码部分,然后将数据存入data_buf中,结束并返回读取成功,
如果校验码不一致,则根据海明校验方法的规则判断出错的数据位数,如果
只有一位数据出错,则判断出错数据位的位置并纠错,进一步将分割并去除
校验码后的数据存入data_buf中,结束并返回读取成功,如果有两位及两位
以上出错则直接返回错误。
与上述方法实施例相对应,本发明实施例一种文件管理装置,如图3所
示,可以包括:
判断模块11,用于确定需要读取的文件为目标文件,获取该目标文件的
目标重要级别,并判断目标重要级别是否为预设重要级别;
第一执行模块12,用于如果目标重要级别为预设重要级别,则利用预先
写入目标文件中的校验码对目标文件中包含的数据进行校验,并在校验成功
后读取目标文件中包含的数据;
第二执行模块13,用于如果目标重要级别不为预设重要级别,则直接读
取目标文件中包含的数据。
本申请在获取文件的重要级别之后,判断重要级别是否为预设重要级别,
如果是,则对其数据进行校验,否则,则直接读取数据,由此,对于重要级
别较高的,或者说对其完整性要求较高的数据进行错误验证,而对于重要级
别较低的,或者说对其完整性要求较低的数据则不进行错误验证,不同于现
有技术中对于存储的全部数据均进行错误校验的技术方案,因此,有效减少
了进行错误校验的次数,从而节省了逻辑资源的同时,大大降低了错误校验
对读写性能造成的不良影响。
上述实施例提供的一种文件管理装置中,还可以包括:
写入模块,用于获取目标文件的目标重要级别,并当判断出目标重要级
别为预设重要级别时,按照与目标重要级别对应级别的校验方法对目标文件
中包含的数据进行计算,生成对应的校验码,并将校验码写入目标文件中。
上述实施例提供的一种文件管理装置中,第一执行模块可以包括:
校验单元,用于利用与校验码对应的校验方法对目标文件中除校验码之
外的其他数据进行计算得到读校验码,如果读校验码与目标文件中包含的对
应校验码一致,则确定校验成功。
上述实施例提供的一种文件管理装置中,判断模块可以包括:
获取单元,用于查询目标文件的inode结构,以获取inode结构中标示该
目标文件的重要级别的级别属性,并确定预先创建该目标文件时为级别属性
设置的属性值为目标重要级别。
上述实施例提供的一种文件管理装置中,还可以包括:
创建模块,用于获取目标文件的目标后缀名,将目标后缀名与预先建立
的后缀列表中包含的后缀名进行匹配,并依据匹配得到的匹配结果设置级别
属性的属性值。
上述实施例提供的一种文件管理装置中,还可以包括:
建立模块,用于获取其重要级别为预设重要级别的全部文件对应的后缀
名,并将具有相同首字母的后缀名以数组的形式存放在平衡二叉树的同一节
点中,确定平衡二叉树为后缀名列表。
由于上述装置实施例与上述方法实施例相对应,因此,对于其具体说明
请参见上述方法实施例中对应部分的说明,在此不再赘述。
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发
明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文
中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实
施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要
符合与本文所公开的原理和新颖特点相一致的最宽的范围。