用于修复文件系统的方法、装置、电子设备和介质与流程

文档序号:37257521发布日期:2024-03-12 20:33阅读:16来源:国知局
本公开的实施例主要涉及计算机,尤其是操作系统技术。更具体地,本公开的实施例涉及用于修复文件系统的方法、装置、电子设备、计算机可读存储介质以及计算机程序产品。
背景技术
::1、诸如计算机、手机的电子设备在使用过程中可能发生异常,例如系统错误或意外掉电,如果电子设备正在对其存储设备进行写操作,那么文件系统可能发生损坏,存在不一致的情况。例如,数据块可能被标记为已分配,但实际上并没有任何文件在使用这个数据块,或者一些数据块可能被多个文件使用,导致文件错误。2、已有一些工具使用文件系统的元数据来检查文件系统的一致性问题。元数据被保存在存储设备的起始区域。当设备上电时,通过读取并分析元数据来发现不一致问题。如果存在不一致,则通过修改文件系统的数据以及元数据来修复文件系统。然而,存在文件系统的修复过程中再次发生系统错误或意外掉电的风险。这将导致文件系统完全损坏,用户数据丢失。技术实现思路1、本公开的实施例提供了用于修复文件系统的方案。2、根据本公开的第一方面,提供了一种用于修复文件系统的方法。方法包括:从存储设备读取文件系统的元数据;基于所读取的元数据,检查文件系统是否存在不一致;在文件系统存在不一致的情况下,更新所读取的元数据;以及将经更新的元数据写入到存储设备,其中,在存储设备中的经更新的元数据的存储地址不同于所读取的所述元数据的存储地址。基于这样的方式,在文件系统的修改过程中采用异地更新的方式,即使在修复过程中出现异常,文件系统可以回到修复之前的状态,而不会进一步导致文件系统损坏。由此,增加了文件系统修复的稳定性和可靠性,保障了用户数据安全。3、在一些实施例中,文件系统还可以包括与元数据互为备份的另一元数据,并且将经更新的元数据写入到所述存储设备可以包括:将经更新的元数据存储在另一元数据的位置处,以覆盖另一元数据。为了文件系统的可靠性,可以交替地将元数据保存在不同的位置处。在一份元数据失效时,可以使用另一份有效的元数据。在修复文件系统的过程中,用于修复目的的元数据在更新后被写入到备份元数据(无效或过期)的地址。基于这样的方式,能够更有效地管理文件系统的元数据,以提高文件系统的稳定性。4、在第一方面的一些实施例中,元数据可以包括检查点(checkpoint)、段信息表(segment information table)和节点信息表(node information table)。检查点具有版本信息,段信息表记录了文件系统的段或块的信息,并且节点信息表记录了文件系统的节点的地址。5、文件系统的元数据可以存储在持久性存储设备(例如,磁盘或固态硬盘)的开始地址,之后是文件系统的主区。在一些实施例中,从存储设备的开始位置依次可以包括超级块(superblock)、检查点、段信息表、节点信息表等元数据。之后是存储设备的主区,包括文件系统的节点区和数据区。超级块保存文件系统的核心元数据的结构,例如,包括存储设备大小,各个元数据的起始地址等。6、检查点的版本信息可以用于确定文件系统的最新的有效元数据。例如,在更新元数据时,先在检查点头部写入版本号,然后写检查点的数据内容,最后再写一次版本号。具有完整的头部和尾部的两个版本信息的检查点被认为是有效检查点。文件系统可以具有多个检查点,这些检查点互为备份,交替更新。当设备发生异常并重新启动时,可以检查文件系统的具有最新版本信息的有效检查点。没有完整版本信息的检查点将被认为已损坏而不可用。在一些实施例中,检查点还可以包括磁头信息,其指示处于激活状态的访问地址。7、段信息表保存了存储设备中的至少一种存储单位的信息。存储单位可以包括例如段(segment)、其大小为2m byte或其他。存储单位还可以包括数据块(block),大小为4kbyte或其他。在一些实施例中,段信息表可以利用位图来保存数据块的有效性信息,是否已被分配并且属于文件或目录。段信息表还可以保存段的修改时间。8、节点信息表保存了节点标识(nid)和对应的物理地址,例如通过位图的方式。文件系统为每个节点分配节点标识,并且可以根据节点标识从节点信息表查找到节点在存储设备上的物理地址,然后从存储设备读取出来。由此,可以从文件系统的节点区获取节点内容,例如,文件的属性,文件的数据块的存储地址等。9、基于这样的方式,可以利用检查点、段信息表和节点信息表对存储设备上的文件系统进行全面且可靠的检查。10、在第一方面的一些实施例中,从存储设备读取文件系统的元数据可以包括:将文件系统的具有最新版本的检查点确定为有效检查点;确定与所确定的检查点相关联的段信息表和节点信息表;以及从存储设备读取所确定的检查点、段信息表和节点信息表。文件系统可以包括多个检查点、多个段信息表和多个节点信息表。每个检查点指示与其相关联的段信息表和节点信息表,例如通过位图方式。在一些实施例中,文件系统可以更新段信息表和节点信息表,然后,基于更新后的段信息表和节点信息表来更新一个对应的检查点。换句话说,检查点是基于其所指示的段信息表和节点信息表而被更新的。11、基于这样的方式,在设备异常导致文件系统出错的情况下,可以从最新且有效的元数据开始修复文件系统,由此保障了用户数据安全。12、在第一方面的一些实施例中,检查点包括关于段信息表中的段或块以及节点信息表中的节点的摘要信息,并且检查文件系统是否存在不一致可以包括:检查检查点中的摘要信息与段信息表和节点信息表的内容是否存在不一致。13、在设备正常更新文件系统时,检查点中的摘要信息应当是基于对应的段信息表和节点信息表生成的。基于这样的方式,可以对元数据本身进行一致性检查。14、在第一方面的一些实施例中,文件系统包括在存储设备中的主区,主区包括节点区,节点区包括文件系统的文件的信息。检查文件系统是否存在不一致还可以包括:通过遍历文件系统的目录树,检查文件系统的节点区是否存在不一致。遍历文件系统的目录树可以获取所有文件的节点标识,每个文件可以具有一个或多个节点标识。可以从文件系统根目录开始,获取节点标识,然后利用节点标识在节点信息表查找到节点区中的节点的内容,例如,节点状态、节点链接数、节点的数据块的地址等。由此对节点区的节点内容进行一致性检查。当节点内容存在不一致时,可以在主区,更具体地,在节点区修复节点的数据块,并更新对应的元数据。在一些实施例中,在文件系统的节点区存在不一致的情况下,更新所读取的元数据可以包括:确定存储设备中的空闲区域;将修复后的数据块写入空闲区域;以及基于写入修复后的数据块,更新所读取的段信息表和节点信息表中至少一项。15、基于这样的方式,可以在微观层面检查文件系统的节点的一致性,并且在修复时通过异地更新来修复节点数据,由此,即使在此过程中再次出现异常,发生更新的元数据尚未被写入,而且原有的节点数据也不受影响,因此不会进一步损坏文件系统。16、在第一方面的一些实施例中,检查文件系统是否存在不一致还可以包括:通过遍历文件系统的目录树,检查段信息表和节点信息表与节点区的内容是否存在不一致。在段信息表和节点信息表与节点区的内容存在不一致的情况下,更新所读取的元数据可以包括基于从节点区获取的结果,更新段信息表和节点信息表中的至少一项。17、基于这样的方式,可以在宏观层面检查文件系统的整体元数据与主区的一致性。例如,通过位图方式,可以检查主区中的数据块的有效性是否与段信息表一致,还可以检查主区中的节点标识是否与节点信息表一致。18、在第一方面的一些实施例中,更新所读取的元数据可以包括基于经更新的段信息表和节点信息表中的至少一项,更新检查点。更新检查点可以包括更新关于段信息表和节点信息表的摘要信息,并且在检查点的最后添加版本信息,使得检查点完整而有效。19、基于这样的方式,可以维持文件系统的元数据整体一致性。20、在第一方面的一些实施例中,将经更新的元数据写入到存储设备可以包括:在经更新的段信息表和节点信息表被写入存储设备之后,将经更新的检查点写入所述存储设备。这里,文件系统的修复依赖于检查点本身,其他元数据是通过检查点来获取的,在更新后的检查点被写入之后,文件系统的修复就已经全部完成。而且,只要更新的检查点尚未被成功异地写入,在此之前的所有修复均不会被记录到文件系统中作为有效数据。21、基于这样的方式,在文件系统修复过程中发生在任何时间的异常都不会损坏文件系统的当前元数据,从而提高了文件系统修复的稳定性和可靠性,保障了用户数据安全。例如,如果在元数据被写入之前发生异常,则更新后的元数据仍在内存中,不影响原来的元数据。在原始数据写入过程中发生异常,由于文件系统的修复数据和元数据均被异地写入,因此,也不影响原始的文件系统数据。22、在第一方面的一些实施例中,存储设备可以是闪存,文件系统可以是闪存友好型文件系统(f2fs)。23、根据本公开的第二方面,提供了一种用于修复文件系统的装置。装置包括读取单元、检查点云、更新单元和写入单元。读取单元被配置为从存储设备读取所述文件系统的元数据。检查单元被配置为基于所读取的元数据检查文件系统是否存在不一致。更新单元被配置为在文件系统存在不一致的情况下更新所读取的元数据。写入单元被配置为将经更新的元数据写入到存储设备,其中,存储设备中的经更新的元数据的存储地址不同于所读取的元数据的存储地址。24、在第二方面的一些实施例中,元数据可以包括检查点、段信息表和节点信息表。检查点具有版本信息,段信息表包括文件系统的段或块的信息,节点信息表包括文件系统的节点的地址。25、在第二方面的一些实施例中,读取单元还可以被配置为:将文件系统的具有最新版本的检查点确定为有效检查点;确定与所确定的检查点相关联的段信息表和节点信息表;以及从存储设备读取所确定的检查点、段信息表和节点信息表。26、在第二方面的一些实施例中,检查点包括关于段信息表中的段或块以及节点信息表中的节点的摘要信息,并且检查单元还可以被配置为检查检查点中的摘要信息与段信息表和节点信息表的内容是否存在不一致。27、在第二方面的一些实施例中,文件系统可以包括在存储设备中的主区,主区包括节点区,节点区包括文件系统的文件的信息。检查单元还可以被配置为:通过遍历文件系统的目录树,检查文件系统的节点区是否存在不一致。在文件系统的节点区存在不一致的情况下,更新单元还可以被配置为确定存储设备中的空闲区域,将修复后的数据块写入空闲区域,以及基于写入修复后的数据块来更新所读取的段信息表和节点信息表中至少一项。28、在第二方面的一些实施例中,检查单元还可以被配置为:通过遍历文件系统的目录树,检查段信息表和节点信息表与节点区的内容是否存在不一致。在段信息表和节点信息表与节点区的内容存在不一致的情况下,更新单元还可以被配置为:基于从节点区获取的结果,更新段信息表和节点信息表中的至少一项。29、在第二方面的一些实施例中,更新单元还可以被配置为基于经更新的段信息表和节点信息表中的至少一项来更新检查点。30、在第二方面的一些实施例中,文件系统还包括与元数据互为备份的另一元数据,并且写入单元还可以被配置为:将经更新的元数据存储在另一元数据的位置处,以覆盖另一元数据。31、在第二方面的一些实施例中,存储设备可以是闪存,文件系统可以是闪存友好型文件系统。32、根据本公开的第三方面,提供了一种电子设备。电子设备包括:处理器,处理器包括多个处理核;以及存储器,其中,多个处理核中的至少一个处理核被配置用于执行存储器中的指令,使得电子设备执行根据本公开的第一方面的方法。33、根据本公开的第四方面,提供了一种计算机可读存储介质,其上存储有一条或多条计算机指令,其中一条或多条计算机指令被处理器执行使处理器执行根据本公开的第一方面所述的方法。34、根据本公开的第五方面,提供了一种计算机程序产品,包括机器可执行指令,机器可执行指令在由设备执行时使设备执行根据本公开的第一方面所述的方法。35、上述参考本公开的第一方面的实施例所描述的更多细节和有益效果同样适合于第二方面、第三方面、第四方面和第五方面的任何实施例,这里不再赘述。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1