CN117667504A - 用于修复文件系统的方法、装置、电子设备和介质 - Google Patents

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

Info

Publication number
CN117667504A
CN117667504A CN202211009033.3A CN202211009033A CN117667504A CN 117667504 A CN117667504 A CN 117667504A CN 202211009033 A CN202211009033 A CN 202211009033A CN 117667504 A CN117667504 A CN 117667504A
Authority
CN
China
Prior art keywords
file system
information table
node
metadata
storage device
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.)
Pending
Application number
CN202211009033.3A
Other languages
English (en)
Inventor
王晓珺
方炜
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN202211009033.3A priority Critical patent/CN117667504A/zh
Publication of CN117667504A publication Critical patent/CN117667504A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本公开的实施例提供了用于修复文件系统的方法、装置、电子设备和介质。方法包括从存储设备读取文件系统的元数据;基于所读取的元数据,检查文件系统是否存在不一致;在文件系统存在不一致的情况下,更新所读取的元数据;以及将经更新的元数据写入到存储设备,其中,在存储设备中的经更新的元数据的存储地址不同于所读取的所述元数据的存储地址。基于这样的方式,在文件系统的修改过程中采用异地更新的方式,即使在修复过程中出现异常,文件系统可以回到修复之前的状态,而不会进一步导致文件系统损坏。由此,增加了文件系统修复的稳定性和可靠性,保障了用户数据安全。

Description

用于修复文件系统的方法、装置、电子设备和介质
技术领域
本公开的实施例主要涉及计算机技术领域,尤其是操作系统技术。更具体地,本公开的实施例涉及用于修复文件系统的方法、装置、电子设备、计算机可读存储介质以及计算机程序产品。
背景技术
诸如计算机、手机的电子设备在使用过程中可能发生异常,例如系统错误或意外掉电,如果电子设备正在对其存储设备进行写操作,那么文件系统可能发生损坏,存在不一致的情况。例如,数据块可能被标记为已分配,但实际上并没有任何文件在使用这个数据块,或者一些数据块可能被多个文件使用,导致文件错误。
已有一些工具使用文件系统的元数据来检查文件系统的一致性问题。元数据被保存在存储设备的起始区域。当设备上电时,通过读取并分析元数据来发现不一致问题。如果存在不一致,则通过修改文件系统的数据以及元数据来修复文件系统。然而,存在文件系统的修复过程中再次发生系统错误或意外掉电的风险。这将导致文件系统完全损坏,用户数据丢失。
发明内容
本公开的实施例提供了用于修复文件系统的方案。
根据本公开的第一方面,提供了一种用于修复文件系统的方法。方法包括:从存储设备读取文件系统的元数据;基于所读取的元数据,检查文件系统是否存在不一致;在文件系统存在不一致的情况下,更新所读取的元数据;以及将经更新的元数据写入到存储设备,其中,在存储设备中的经更新的元数据的存储地址不同于所读取的所述元数据的存储地址。基于这样的方式,在文件系统的修改过程中采用异地更新的方式,即使在修复过程中出现异常,文件系统可以回到修复之前的状态,而不会进一步导致文件系统损坏。由此,增加了文件系统修复的稳定性和可靠性,保障了用户数据安全。
在一些实施例中,文件系统还可以包括与元数据互为备份的另一元数据,并且将经更新的元数据写入到所述存储设备可以包括:将经更新的元数据存储在另一元数据的位置处,以覆盖另一元数据。为了文件系统的可靠性,可以交替地将元数据保存在不同的位置处。在一份元数据失效时,可以使用另一份有效的元数据。在修复文件系统的过程中,用于修复目的的元数据在更新后被写入到备份元数据(无效或过期)的地址。基于这样的方式,能够更有效地管理文件系统的元数据,以提高文件系统的稳定性。
在第一方面的一些实施例中,元数据可以包括检查点(checkpoint)、段信息表(segment information table)和节点信息表(node information table)。检查点具有版本信息,段信息表记录了文件系统的段或块的信息,并且节点信息表记录了文件系统的节点的地址。
文件系统的元数据可以存储在持久性存储设备(例如,磁盘或固态硬盘)的开始地址,之后是文件系统的主区。在一些实施例中,从存储设备的开始位置依次可以包括超级块(superblock)、检查点、段信息表、节点信息表等元数据。之后是存储设备的主区,包括文件系统的节点区和数据区。超级块保存文件系统的核心元数据的结构,例如,包括存储设备大小,各个元数据的起始地址等。
检查点的版本信息可以用于确定文件系统的最新的有效元数据。例如,在更新元数据时,先在检查点头部写入版本号,然后写检查点的数据内容,最后再写一次版本号。具有完整的头部和尾部的两个版本信息的检查点被认为是有效检查点。文件系统可以具有多个检查点,这些检查点互为备份,交替更新。当设备发生异常并重新启动时,可以检查文件系统的具有最新版本信息的有效检查点。没有完整版本信息的检查点将被认为已损坏而不可用。在一些实施例中,检查点还可以包括磁头信息,其指示处于激活状态的访问地址。
段信息表保存了存储设备中的至少一种存储单位的信息。存储单位可以包括例如段(segment)、其大小为2M Byte或其他。存储单位还可以包括数据块(block),大小为4KByte或其他。在一些实施例中,段信息表可以利用位图来保存数据块的有效性信息,是否已被分配并且属于文件或目录。段信息表还可以保存段的修改时间。
节点信息表保存了节点标识(nid)和对应的物理地址,例如通过位图的方式。文件系统为每个节点分配节点标识,并且可以根据节点标识从节点信息表查找到节点在存储设备上的物理地址,然后从存储设备读取出来。由此,可以从文件系统的节点区获取节点内容,例如,文件的属性,文件的数据块的存储地址等。
基于这样的方式,可以利用检查点、段信息表和节点信息表对存储设备上的文件系统进行全面且可靠的检查。
在第一方面的一些实施例中,从存储设备读取文件系统的元数据可以包括:将文件系统的具有最新版本的检查点确定为有效检查点;确定与所确定的检查点相关联的段信息表和节点信息表;以及从存储设备读取所确定的检查点、段信息表和节点信息表。文件系统可以包括多个检查点、多个段信息表和多个节点信息表。每个检查点指示与其相关联的段信息表和节点信息表,例如通过位图方式。在一些实施例中,文件系统可以更新段信息表和节点信息表,然后,基于更新后的段信息表和节点信息表来更新一个对应的检查点。换句话说,检查点是基于其所指示的段信息表和节点信息表而被更新的。
基于这样的方式,在设备异常导致文件系统出错的情况下,可以从最新且有效的元数据开始修复文件系统,由此保障了用户数据安全。
在第一方面的一些实施例中,检查点包括关于段信息表中的段或块以及节点信息表中的节点的摘要信息,并且检查文件系统是否存在不一致可以包括:检查检查点中的摘要信息与段信息表和节点信息表的内容是否存在不一致。
在设备正常更新文件系统时,检查点中的摘要信息应当是基于对应的段信息表和节点信息表生成的。基于这样的方式,可以对元数据本身进行一致性检查。
在第一方面的一些实施例中,文件系统包括在存储设备中的主区,主区包括节点区,节点区包括文件系统的文件的信息。检查文件系统是否存在不一致还可以包括:通过遍历文件系统的目录树,检查文件系统的节点区是否存在不一致。遍历文件系统的目录树可以获取所有文件的节点标识,每个文件可以具有一个或多个节点标识。可以从文件系统根目录开始,获取节点标识,然后利用节点标识在节点信息表查找到节点区中的节点的内容,例如,节点状态、节点链接数、节点的数据块的地址等。由此对节点区的节点内容进行一致性检查。当节点内容存在不一致时,可以在主区,更具体地,在节点区修复节点的数据块,并更新对应的元数据。在一些实施例中,在文件系统的节点区存在不一致的情况下,更新所读取的元数据可以包括:确定存储设备中的空闲区域;将修复后的数据块写入空闲区域;以及基于写入修复后的数据块,更新所读取的段信息表和节点信息表中至少一项。
基于这样的方式,可以在微观层面检查文件系统的节点的一致性,并且在修复时通过异地更新来修复节点数据,由此,即使在此过程中再次出现异常,发生更新的元数据尚未被写入,而且原有的节点数据也不受影响,因此不会进一步损坏文件系统。
在第一方面的一些实施例中,检查文件系统是否存在不一致还可以包括:通过遍历文件系统的目录树,检查段信息表和节点信息表与节点区的内容是否存在不一致。在段信息表和节点信息表与节点区的内容存在不一致的情况下,更新所读取的元数据可以包括基于从节点区获取的结果,更新段信息表和节点信息表中的至少一项。
基于这样的方式,可以在宏观层面检查文件系统的整体元数据与主区的一致性。例如,通过位图方式,可以检查主区中的数据块的有效性是否与段信息表一致,还可以检查主区中的节点标识是否与节点信息表一致。
在第一方面的一些实施例中,更新所读取的元数据可以包括基于经更新的段信息表和节点信息表中的至少一项,更新检查点。更新检查点可以包括更新关于段信息表和节点信息表的摘要信息,并且在检查点的最后添加版本信息,使得检查点完整而有效。
基于这样的方式,可以维持文件系统的元数据整体一致性。
在第一方面的一些实施例中,将经更新的元数据写入到存储设备可以包括:在经更新的段信息表和节点信息表被写入存储设备之后,将经更新的检查点写入所述存储设备。这里,文件系统的修复依赖于检查点本身,其他元数据是通过检查点来获取的,在更新后的检查点被写入之后,文件系统的修复就已经全部完成。而且,只要更新的检查点尚未被成功异地写入,在此之前的所有修复均不会被记录到文件系统中作为有效数据。
基于这样的方式,在文件系统修复过程中发生在任何时间的异常都不会损坏文件系统的当前元数据,从而提高了文件系统修复的稳定性和可靠性,保障了用户数据安全。例如,如果在元数据被写入之前发生异常,则更新后的元数据仍在内存中,不影响原来的元数据。在原始数据写入过程中发生异常,由于文件系统的修复数据和元数据均被异地写入,因此,也不影响原始的文件系统数据。
在第一方面的一些实施例中,存储设备可以是闪存,文件系统可以是闪存友好型文件系统(F2FS)。
根据本公开的第二方面,提供了一种用于修复文件系统的装置。装置包括读取单元、检查点云、更新单元和写入单元。读取单元被配置为从存储设备读取所述文件系统的元数据。检查单元被配置为基于所读取的元数据检查文件系统是否存在不一致。更新单元被配置为在文件系统存在不一致的情况下更新所读取的元数据。写入单元被配置为将经更新的元数据写入到存储设备,其中,存储设备中的经更新的元数据的存储地址不同于所读取的元数据的存储地址。
在第二方面的一些实施例中,元数据可以包括检查点、段信息表和节点信息表。检查点具有版本信息,段信息表包括文件系统的段或块的信息,节点信息表包括文件系统的节点的地址。
在第二方面的一些实施例中,读取单元还可以被配置为:将文件系统的具有最新版本的检查点确定为有效检查点;确定与所确定的检查点相关联的段信息表和节点信息表;以及从存储设备读取所确定的检查点、段信息表和节点信息表。
在第二方面的一些实施例中,检查点包括关于段信息表中的段或块以及节点信息表中的节点的摘要信息,并且检查单元还可以被配置为检查检查点中的摘要信息与段信息表和节点信息表的内容是否存在不一致。
在第二方面的一些实施例中,文件系统可以包括在存储设备中的主区,主区包括节点区,节点区包括文件系统的文件的信息。检查单元还可以被配置为:通过遍历文件系统的目录树,检查文件系统的节点区是否存在不一致。在文件系统的节点区存在不一致的情况下,更新单元还可以被配置为确定存储设备中的空闲区域,将修复后的数据块写入空闲区域,以及基于写入修复后的数据块来更新所读取的段信息表和节点信息表中至少一项。
在第二方面的一些实施例中,检查单元还可以被配置为:通过遍历文件系统的目录树,检查段信息表和节点信息表与节点区的内容是否存在不一致。在段信息表和节点信息表与节点区的内容存在不一致的情况下,更新单元还可以被配置为:基于从节点区获取的结果,更新段信息表和节点信息表中的至少一项。
在第二方面的一些实施例中,更新单元还可以被配置为基于经更新的段信息表和节点信息表中的至少一项来更新检查点。
在第二方面的一些实施例中,文件系统还包括与元数据互为备份的另一元数据,并且写入单元还可以被配置为:将经更新的元数据存储在另一元数据的位置处,以覆盖另一元数据。
在第二方面的一些实施例中,存储设备可以是闪存,文件系统可以是闪存友好型文件系统。
根据本公开的第三方面,提供了一种电子设备。电子设备包括:处理器,处理器包括多个处理核;以及存储器,其中,多个处理核中的至少一个处理核被配置用于执行存储器中的指令,使得电子设备执行根据本公开的第一方面的方法。
根据本公开的第四方面,提供了一种计算机可读存储介质,其上存储有一条或多条计算机指令,其中一条或多条计算机指令被处理器执行使处理器执行根据本公开的第一方面所述的方法。
根据本公开的第五方面,提供了一种计算机程序产品,包括机器可执行指令,机器可执行指令在由设备执行时使设备执行根据本公开的第一方面所述的方法。
上述参考本公开的第一方面的实施例所描述的更多细节和有益效果同样适合于第二方面、第三方面、第四方面和第五方面的任何实施例,这里不再赘述。
附图说明
结合附图并参考以下详细说明,本申请公开各实施例的上述和其他特征、优点及方面将变得更加明显。在附图中,相同或相似的附图标注表示相同或相似的元素,其中:
图1示出了本公开的多个实施例能够在其中实现的示例环境的示意图;
图2示出了根据本公开的实施例的用于修复文件系统的示例性过程的示意流程图;
图3示出了根据本公开的实施例的示例性文件系统的布局的示意图;
图4示出了根据本公开的实施例的示例性检查点的布局的示意图;
图5示出了根据本公开的实施例的示例性段信息表的布局的示意图;
图6示出了根据本公开的实施例的示例性节点信息表的布局的示意图;
图7示出了根据本公开的实施例的示例性段摘要区的布局的示意图;
图8示出了根据本公开的实施例的修复文件系统的示例性过程的示意流程图;
图9示出了根据本公开的实施例的修复文件系统的示例性过程的示意流程图;
图10示出了根据本公开的实施例的修复文件系统的示例性过程的示意流程图;
图11示出了根据本公开的实施例的将元数据写入存储设备的示例性过程的示意流程图;
图12示出了根据本公开的实施例的用于修复文件系统的示例性装置的示意框图;
图13示出了实现本公开的实施例的示例性过程的示意流程图;以及
图14示出了可以用来实施本公开的实施例的示例设备的示意性框图。
具体实施方式
下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
在本公开的实施例的描述中,术语“包括”及其类似用语应当理解为开放性包含,即“包括但不限于”。术语“基于”应当理解为“至少部分地基于”。术语“一个实施例”或“该实施例”应当理解为“至少一个实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。
如上文所讨论的,电子设备的使用过程中可能发生异常,导致其文件系统存在不一致而损坏,需要进行修复。一些文件系统可能在电子设备的持久性存储设备(例如,磁盘、闪存、固态盘等)上保存多份元数据。当一份元数据损坏时,可以使用最新的有效元数据来检查文件系统的一致性并修复文件系统。发明人注意到,已有工具修复元数据的方式均为原地更新(in-place update,IPU)。当写入过程中再次出现异常情况时,则可能造成原本有效的元数据损坏,造成所有元数据均损坏的情况,导致用户数据丢失。
有鉴于此,本公开的实施例提供了用于修复文件系统的改进方法。方法包括从存储设备读取文件系统的元数据。例如,在电子设备因异常而重启时,首先从存储设备的起始地址处将最新的有效元数据读取到内存中,然后,使用所读取的元数据来检查文件系统的一致性。如果存在不一致的情况,则修复文件系统,并相应地更新所读取的元数据。这种更新发生在电子设备的内存之中。更新完成后,将内存中的经更新的元数据写入(也称为“冲刷”)到存储设备上与所读取的元数据的存储地址不同的存储地址处。在文本中,存储位置和存储地址均指代在存储设备上的位置和地址,并且二者可以互换使用。也就是说,本公开的实施例采用了异地更新(out-place update,OPU)的方式来修复文件系统。整个修复过程不对存储设备上的有效元数据进行修改。
以下参照图1至14详细描述本公开的一些示例实施例。
图1示出了本公开的多个实施例能够在其中实现的示例环境100的示意图。环境100是电子设备101,分为三个层级:硬件层的存储设备110、中间层的内核120、应用层的用户空间130。本申请实施例中的电子设备101可以是手机、平板电脑、膝上型计算机、手持计算机、笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,UMPC)、蜂窝电话、个人数字助理(personal digital assistant,PDA)、增强现实(Augmented reality,AR)/虚拟现实(virtual reality,VR)设备等设备,还可以是电视、大屏、音箱、电视机、冰箱、空调、车载设备、打印机、投影仪等设备。电子设备101的示例性实施例包括但不限于搭载 Harmony或者其它操作系统的电子设备。
存储设备110可以是诸如磁盘、固态盘、闪存等的持久性存储设备。在电子设备101掉电或发生系统错误的情况下,存储设备101能够保持其数据。存储设备101上部署电子设备101运行所需要的软件,例如操作系统、应用程序等。电子设备101还可以包括非持久性存储器(未示出),其也被称为“内存”。电子设备101可以将存储设备110保存的数据通过输入输出(I/O)操作来读取到非持久性存储器并访问,并且还可以将非持久性存储器中的数据写入存储设备110。存储设备110可以被分区并基于分区进行管理。
电子设备101还包括内核120。内核120可以是操作系统的一部分。如图所示,内核120包括设备驱动程序121。设备驱动程序121是一种内核模块,负责管理硬件设备(例如,存储设备101)的底层I/O操作。设备驱动程序是使用标准接口编写的,内核120可通过调用该标准接口与硬件设备进行交互,例如,读数据和写数据。
内核120还包括块层122。块层122也被称为块设备层,用于处理电子设备101中所有对块设备的请求。块层122将来自上层文件系统123的I/O请求转换为请求,并交给设备驱动成121来处理。
在块层122之上是文件系统123。文件系统123是操作系统用于明确存储设备110或存储设备101的分区上的文件的方法和数据结构。文件系统用于对存储设备110的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。示例性的文件系统包括例如FAT 16、FAT 32、NTFS、Ext2、Ext3、Ext4、闪存友好型文件系统(F2FS)等。其中,F2FS文件系统是专门为基于NAND的存储设备设计的闪存文件系统,其特别针对NAND闪存存储介质做了友好设计。应理解,本公开对文件系统的类型不做限制。
内核120还包括虚拟文件系统124。虚拟文件系统124是文件系统123与上层用户空间130之间的一个接口层。虚拟文件系统124对系统中的每个文件系统进行抽象,使得不同的文件系统123对于上层用户空间130来说都是相同的。换句话说,虚拟文件系统124可以屏蔽各种各样不同文件系统的相异操作形式,使得异构的文件系统可以在统一的形式下,以标准化的方法访问、操作。
如图所示,电子设备101还包括应用层的用户空间130。用户空间130包括修复工具131和应用132。修复工具131可以被用户调用,以便检查文件系统123是否存在不一致问题,并且在存发现不一致问题时对文件系统123进行修复。附加地或备选地,修复工具131也可以被内核120调用,例如,在电子设备因异常而重启时。应用132可以是例如通信类应用、社交类应用、游戏、设备管理应用等。
以上参考图1描述了能够实施本公开的实施例的示例性环境。应理解,图1仅是示意性的,环境还可以包括更多的模块或组件,或者可以省略一些模块或组件,或者所示的模块或组件可以重新组合。本公开的实施例可以在与图1所示不同的环境中实施,本公开对此不做限制。
图2示出了根据本公开的实施例的用于修复文件系统的示例性过程200的示意流程图。过程200可以由例如图1所示的电子设备101来实现。具体地,过程200可以被实现为修复工具131的至少一部分。应当理解,过程200还可以包括未示出的附加动作和/或可以省略所示出的动作,本公开的范围在此方面不受限制。以下结合图1详细描述过程200。
在框210,电子设备101从存储设备110读取文件系统123的元数据。
在电子设备101掉电或异常退出时,文件系统123可能被损坏存在不一致的情况。在重新启动设备时,其内核120或其用户可以调用检查和修复文件系统123的工具。
如上所述,文件系统123对存储设备110的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索。文件系统123将存储设备110划分为若干个区域,用于保存文件系统123的文件的数据以及文件系统123的元数据。在本文中,文件包括文件系统的目录,目录被视为一种特殊的文件。元数据指代关于文件系统的基本数据,其可以保存在存储设备110的开始地址处。
当检查文件系统时,电子设备101从存储设备101的开始地址处获取元数据。具体地来说,电子设备101可以将元数据从持久性的存储设备101上读取到电子设备101的内存中以用于由处理器进行访问。在一些实施例中,电子设备101可以确定最后一次的有效元数据,并读取该元数据。
在框220,电子设备101基于所读取的元数据,检查文件系统123是否存在不一致。在一些实施例中,电子设备101可以检测元数据之间是否存在不一致,还可以检查文件系统123的文件与元数据之间是否存在不一致,以及文件系统123的文件本身是否存在不一致。
在框230,电子设备101在文件系统123存在不一致的情况下,更新所读取的元数据。每当发现不一致的情况时,电子设备101可以根据该不一致的实际情况,采用相应的方式进行修复。例如,电子设备101可以通过删除不一致数据或增加数据来修改文件系统的元数据。在一些情况下,电子设备101可以先修复文件系统123的文件的不一致,然后再更新元数据。修复文件系统123的文件的不一致包括对存储设备101上的文件的数据进行操作,例如,修改文件的节点内容,分配新的数据块来存储文件的节点内容等。
需要说明的是,这里更新元数据是指更新内存中的元数据,直到文件系统123所有的不一致都已经被发现和修复为止。因此,如果在这个过程中再次发生掉电或异常,所有的修复操作均不会被记录到存储设备101。
在框240,电子设备101将经更新的元数据写入到存储设备101,在存储设备101中的经更新的元数据的存储地址不同于所读取的元数据的存储地址。
也就是说,在文件系统的修复过程中采用异地更新的方式,即使在修复过程中出现异常,文件系统可以回到修复之前的状态,而不会进一步导致文件系统损坏。由此,增加了文件系统修复的稳定性和可靠性,保障了用户数据安全。
在一些实施例中,文件系统可以包括与元数据互为备份的多个元数据,它们具有不同的存储地址。电子设备101在运行时交替地对这些两份元数据进行更新。在一份元数据失效时,可以使用另一份元数据。如果在框110读取了其中的一份元数据作为有效元数据(另一份元数据被视为过期或无效),则电子设备101可以将经更新的元数据写入到已失效的另一元数据的位置处,以覆盖另一元数据。基于这样的方式,能够更有效地管理文件系统的元数据,以提高文件系统的稳定性。
以下参考图3至图14,描述本公开的更多实施例。图3示出了根据本公开的实施例的示例性文件系统的布局的示意图。示例性文件系统可以是例如F2FS文件系统。文件系统划分为元数据区和主区。元数据区可以被设置存储设备110的起始地址部分,主区设置在元数据区之后。元数据区保存文件系统的元数据。从存储设备110的起始地址开始,元数据区包括超级块(super block,SB)305、两个检查点(checkpoint,CP)310和311、两个段信息表(segment information table,SIT)320和321、两个节点信息表(node informationtable,NIT)330和331、段摘要区(segment summary area,SSA)340。在F2FS文件系统中,利用段和块来管理文件系统。例如,段的大小可以是2MB,块的大小可以是4KB,每个段包括512个块。块是文件系统分配和回收存储空间的最小单位。
超级块305记录整个文件系统的分区信息,可以包括段和块的总数,已经使用的段和块的数目、以及检查点、段信息表、节点信息表、段摘要区的大小和起始位置、主区的起始位置等基本信息。在一些实施例中,每个检查点的大小可以是一个段,每个段信息表的大小可以是一个段、每个节点信息表的大小可以是一个段。当电子设备101启动时,从存储设备110中的超级块305读取相关数据。
文件系统可以包括互为备份的多个检查点,例如,如图所示包括两个检查点310和311。每个检查点可以记录了针对存储设备的磁头信息,其指示处于激活状态的访问地址(即,当前空闲块分配到哪个位置)以用于给下次分配新的空闲存储空间。因为文件系统可能包括多个段信息表和多个节点信息表,所以检查点还可以指示(例如通过位图)相关联的段信息表和节点信息表,以便使用它们来检查和修复文件系统。下文将详细描述,这里暂不详述。
文件系统可以包括互为备份的多个段信息表,例如,如图所示包括两个段信息表320和321。每个段信息表保存了每个段的信息,例如,这个段中已经被分配的块的数目,哪个块正在使用,哪个块是无效的需要被回收。通过这些信息去管理已经被使用了的块和未使用的块,使系统可以合理分配块。文件系统中,每个段具有段号(segno),系统可以通过segno快速地查询到该段的分配信息。
文件系统可以包括互为备份的多个节点信息表,例如,如图所示包括两个节点信息表330和331。每个节点信息表通过表来保存了每个节点的物理地址信息。文件系统的每个节点具有节点标识(node id或nid),系统可以通过节点标识在节点信息表330或331中找到对应节点的物理地址,从而从存储设备读取节点内容。
文件系统还包括段摘要区340。该区域通过表保存块与节点标识之间的对应关系以及其他相关信息。通过查询段摘要区340,从块物理地址查询到其所属的节点或文件,这可以用于垃圾回收功能。
主区350被实现为被4KB大小的块所填充。这些块可以分配给文件,用于存储文件的节点内容或数据,由此,主区可以被分为节点区352和数据区354。主区350是文件系统的主要数据保存区域。节点区352保存文件系统的文件的信息,数据区354保存文件的内容。
应理解,取决于文件系统的具体实施方式,文件系统的各个区域的命名可能有所不同。例如,不同的文件系统可以不使用段,而是直接基于块进行管理。在这种情况下,文件系统可以使用其他数据结构来替代段信息表,将其称之为段信息表或其他命名。只要其保存了文件系统的块的有效性信息(是否已经分配或使用)即可。类似地,文件系统还可以使用其他类似的数据结构来替代节点信息表和段摘要表等。
电子设备101可以根据超级块305找到检查点310和311的位置,并且将判断检查点310和检查点311中的哪一个检查点是有效检查点。在一些实施例中,文件系统可以交替地使用检查点310和检查点311,并且以递增的方式在其中记录版本信息。如图4所示,其示出了示例性检查点的布局的示意图。
以检查点310为例,描述检查点的布局。检查点311的布局是相同的。当在存储设备110中写入检查点时,首先在开头部分记录新的版本号312,例如相比于检查点311递增。然后,再写入摘要信息314、磁头信息316和版本位图317,其中,摘要信息314可以是针对相关联的段信息表和节点信息表的数据的统计信息,例如,有效节点的数目和有效(或空闲)段或块的计数等。磁头信息316指示处于激活状态的访问地址,其用于在存储设备110中搜索和分配空闲数据块。版本位图317可以用于指示与该检查点相关联的段信息表和节点信息表,也就是说,该检查点是根据所指示的段信息表和节点信息表而生成的。如图3所示,检查点310指示段信息表320和节点信息表330是与其相关联的有效段信息表和有效节点信息表。最后,在检查点的结束部分再次写入版本号318。如果检查点的开始和结束部分的版本不同,则认为该检查点是无效检查点。
电子设备101将具有最新版本号且有效的检查点确定为用于检查和修复文件系统的检查点,并且通过版本位图317确定相关联的段信息表和节点信息表。在一些实施例中,电子设备101将所确定的检查点、相关联的段信息表和节点信息表的内容从存储设备110读取到内存中,以便检查文件系统的一致性。
为了方便理解,在描述本公开的实施例的检查文件系统的一致性的细节之前,对作为元数据的一部分的段信息表、节点信息表以及段摘要进行说明。
图5示出了根据本公开的实施例的示例性段信息表的布局的示意图。以段信息表320为例进行说明,另一个段信息标记321具有相同的布局。
如图所示,段信息表320包括连续的段信息条目325,每个段信息条目325指示文件系统的主区350的每个段的状态信息。段信息条目的数目与文件系统的主区350的所有段的数目相同。在一些实施例中,基于主区350中的段的地址,可以在段信息表320中找到对应的段信息条目325。例如,根据段信息条目的大小,在段信息表区域的每个块可以包括固定数目的段信息条目325,由此,可以对段信息表320进行随机访问以确定主区的段的状态信息。
段信息条目325可以包括相关的段的有效块计数328、有效性位图326和修改时间327。有效块计数328保存该段中的已经被分配的块的数目。有效性位图316保存了段的每个数据块是否已经被分配的信息。例如,位“1”表示这个数据块已经被分配,即有效,位“0”表示这个数据块未被分配,即无效,因此被视为空闲的数据块用于后续分配,或者被回收。应理解,位“0”和“1”的含义只是示意性的,实际含义可以相反。修改时间327表示段的最近一次修改的时间。
应理解,不包括段的其他文件系统中可能存在类似的数据结构来保存文件系统的块的有效性信息。本公开的实施例同样适用于这些文件系统。
图6示出了根据本公开的实施例的示例性节点信息表的布局的示意图。以节点信息表330为例进行说明,另一个节点信息表331具有相同的布局。
如图所示,节点信息表330包括连续的节点信息条目335,每个节点信息条目335指示文件系统的每个节点在存储设备110的物理地址。文件系统为其中的每个文件分配了至少一个节点。节点保存文件的相关信息例如文件大小、读写权限、所有者、文件的数据块的地址等,这些信息被保存在文件系统的节点区352。如图所示,节点信息条目330包括节点标识336和对应的节点的存储地址338。因此,可以通过节点标识在节点信息表中查找到节点的存储地址,进而访问该存储地址来获取节点的内容,例如,文件的数据块的地址。节点信息条目330还可以包括其他信息,例如版本。在一些实施例中,节点信息表330可以具有表格的形式,可以对其进行随机访问。
图7示出了根据本公开的实施例的示例性段摘要区的布局的示意图。段摘要区340是F2FS用于集中管理物理地址到逻辑地址(例如,文件的节点标识)的映射关系的结构。映射关系的主要作用是当给出一个块的物理地址的时候,可以通过段摘要区340得到对应的逻辑地址。
如图所示,段摘要区340包括连续的摘要条目345。每个摘要条目345保存节点标识346和序号。节点标识346指示对应的块所属的节点,序号348指示这个块在节点中的序号,即,第几个块。在一些实施例中,段摘要区340可以实现为表的形式,由此,基于主区350中的块的地址,可以在段摘要区340中找到对应的摘要条目345。例如,根据摘要条目345的大小,段摘要区的每个块可以包括固定数目的段摘要条目345,由此,可以根据要查询的块的地址可以定位到对应的摘要条目。也就是说,段摘要区340也是可以进行随机访问的。
在一些实施例中,电子设备101可以将所确定的最新的有效检查点、与这个有效检查点相关联的节点信息表和段信息表、以及段摘要区作为元数据读取到内存中。
图8示出了根据本公开的实施例的修复文件系统的示例性过程800的示意流程图。为方便说明,参考图3至图7所示的FSFS的文件系统布局来描述过程800。应理解,过程800也适用于其他文件系统。
在框810,电子设备101检查元数据之间的一致性。电子设备101可以检查文件系统的有效的检查点310与相关联的段信息表320和节点信息标志330之间的一致性。
如上所述,检查点310记录段信息表320中关于段或者块的摘要信息,并且还可以记录节点信息表中的节点的摘要信息。电子设备101可以检查摘要信息与对应的段信息表320和节点信息表330是否存在不一致。附加地,电子设备101还可以检查段信息表320和节点信息表330之间是否存在不一致。作为示例而非限制,检查项目可以包括:段信息表320中的空闲段的计数结果是否等于检查点310记录的空闲段的数目,节点信息表330中的有效节点的计数结果是否等于检查点310记录的有效节点的数目等等。
在框820,电子设备101检查文件系统的主区350的一致性。更具体地,检查主区350的一致性包括检查节点区352中是否存在不一致。
在一些实施例中,可以通过遍历文件系统的目录树来检查文件系统的文件和节点内容是否存在不一致。电子设备101可以获取根目录的节点标识,根目录开始遍历目录树。这可以被视为针对文件系统的微观上的检查。
利用目录树,可以获取文件系统的所有文件和目录的节点标识,借助节点信息表来查询到节点的地址,以获取在节点区352中的对应节点内容。如上所述,在节点区352中保存了文件的数据块的地址。为了检查节点区352,检查项目可以包括但不限于:节点的数据块的地址是否在合法的范围内,利用段摘要区340来检查数据块对应的节点标识是否一致,利用段信息表320来检查数据块的有效性是否一致,等等。在发现主区的不一致时,电子设备101可以修复该不一致。
图9示出了根据本公开的实施例的修复文件系统的示例性过程900的示意流程图。过程900可以被实施以用于发现和修复节点区352的不一致。
在框910,电子设备101确定是否存在不一致。电子设备101获取每个节点的节点内容,并且逐个检查它们是否存在不一致。如果没有不一致的情况,则过程900前进到框950,确定是否已经完成检查,如果尚未检查完所有节点,则回到框910继续。
如果确定存在不一致,则将修复不一致的数据。过程900前进到框920,电子设备101确定存储设备101中的空闲区域。在一些实施例中,电子设备101可以从有效的检查点310获取当前的磁头信息,从磁头信息所指示的位置开始搜索空闲区域。例如,电子设备101可以结合段信息表320的有效性位图326确定空闲的数据块。
然后,在框930,电子设备101将修复的数据写入空闲区域。在一些实施例中,电子设备101可以将存在不一致的节点整体进行修复,并保存在空闲区域。这时候,内存中的检查点的磁头信息也相应更新。
在框940,电子设备101基于写入修复后的数据,更新所读取的段信息表320和节点信息表330中的至少一项。对于段信息表320,更新的内容可以包括更新相关的段信息条目325,包括修复后的数据所在的数据块的有效性位图326、有效块计数328以及修改时间327。对于节点信息表,更新的内容可以包括将相关的节点的地址338修改为修复后的数据所在的地址。
在一些实施例中,还可以更新段摘要区340。在段摘要区340中为新的有效数据块设置被修复的节点的节点标识。段摘要区340的更新可以在存储设备101上实施,与写入修复数据一起实施。
需要注意的是,针对段信息表320和节点信息表330中任一个的更新均是在内存中实现的,而不是在存储设备101进行操作。
接下来,在框950,电子设备101确定是否已经完成针对节点区的检查和修复。如果确定已经完成,则过程900结束。可以看出,本公开的实施例对文件系统的节点区的修复是通过异地更新的方式实现的,并且相应的元数据修改在内存中实现。如果在修复过程中发生掉电或异常,也不会对原来的文件系统造成进一步的损坏。
图10示出了根据本公开的实施例的修复文件系统的示例性过程1000的示意流程图。过程1000可以被实施以发现和修复元数据与主区350中的节点区352的不一致。过程1000可以在过程900之后实施。
在一些实施例中,电子设备101通过遍历文件系统的目录树,检查段信息表320和节点信息表330与节点区352的内容是否存在不一致,并且在段信息表320和节点信息表330与节点区352的内容存在不一致的情况下,基于从节点区352获取的结果,更新段信息表320和节点信息表330中的至少一项。
具体地,在框1010,电子设备101检查段信息表320与节点区352的内容是否不一致。在一些实施例中,电子设备101将节点所使用的数据块与段信息表320中的有效性位图326进行比较。例如,电子设备101可以创建一个位图并初始化为空,每当访问到节点的数据块就对位图进行置位。然后在遍历完成后,将这个位图与段信息表320的有效性位图326进行比较。
如果不一致,在框1020,电子设备101基于从节点区352获取的结果,更新段信息表。例如,电子设备101可以使用根据节点区352进行置位的位图来更新段信息表320。电子设备101还可以更新段信息表320的其他数据。
在框1030,电子设备101检查节点信息表330与节点区352的内容是否不一致。在一些实施例中,电子设备101可以来自节点区352的节点标识与节点信息表330中的节点标识336进行比较。例如,电子设备101可以创建一个位图并根据节点信息表330进行初始化,每当访问到一个节点标识时,就从这个位图上清除对应的节点标识。然后,在遍历完成后,检查该位图,其中任何未被清除的节点标识就是应当被删除的节点标识,因为没有任何文件在使用它。
相应地,在框1040,电子设备101基于从节点区352获取的结果,更新节点信息表。例如,从节点信息表330中删除在检查过程中未被清除的节点标识。应理解,上述段信息表和节点信息表的更新均是在内存中完成的。
在框1050,电子设备101基于更新后的节点信息表和段信息表来更新检查点。更新可以包括以递增的方式在检查点的头部和结束处更新版本信息。更新还可以包括对节点信息表和段信息中的相关信息进行统计,得到关于它们的摘要信息,并将其更新到检查点。更新还可以包括更新检查点的位图,更新后的位图指向当前内存中的节点信息表和段信息表将被写入到存储设备101上的位置,该位置不同于节点信息表和段信息表被读取时的位置。
在内存中的元数据均完成更新之后,将把它们写入存储设备101以完成文件系统的修复。
图11示出了根据本公开的实施例的将元数据写入存储设备的示例性过程的示意流程图。过程1100可以被实现为框240的具体实施方式。
在框1110,电子设备101将经更新的段信息表写入存储设备110。经更新的段信息表被写入与被读取的段信息表不同的存储地址处。如上所述,文件系统可以包括互为备份的元数据。参考图3,如果被读取的段信息表是段信息表320,则经更新的段信息表被写到段信息表321的存储地址处。反之亦然。
在框1120,电子设备101将经更新的节点信息表写入存储设备110。经更新的节点信息表被写入与被读取的节点信息表不同的存储地址处。参考图3,如果被读取的节点信息表是节点信息表330,则经更新的节点信息表被写到节点信息表331的存储地址处。反之亦然。段信息表和节点信息表的写入先后顺序可以是任意的,或同时进行。
然后,在段信息表和节点信息表均被写入存储设备101之后,在框1130,电子设备101将经更新的检查点写入存储设备110。经更新的检查点被写入与被读取的检查点不同的存储地址处。参考图3,如果被读取的节点信息表是检查点310,则经更新的检查点被写到检查点311的存储地址处。反之亦然。
以上参考图1至图11描述了根据本公开的实施例的修复文件系统的方法。相比于现有技术,本公开的实施例使用异地更新机制,并在更新元数据时,使用事务机制,等元数据完全更新完成后,完成了元数据的主备转换。在此过程中,如果出现掉电或异常退出时会回滚到修复之前的最初状态,避免元数据全部损坏或使文件系统处于更不一致的情况。由此,增加了文件系统修复的稳定性和可靠性,保障了用户数据安全。
图12示出了根据本公开的实施例的用于修复文件系统的装置1200的示意框图。装置1200可以被实现为电子设备101之中或者由电子设备101来实现。
装置1200包括读取单元1210、检查单元1220、更新单元1230和写入单元1240。读取单元1210被配置为从存储设备读取所述文件系统的元数据。检查单元1220被配置为基于所读取的元数据检查文件系统是否存在不一致。更新单元被配置为在文件系统存在不一致的情况下更新所读取的元数据。写入单元被配置为将经更新的元数据写入到存储设备,其中,存储设备中的经更新的元数据的存储地址不同于所读取的元数据的存储地址。
在第二方面的一些实施例中,文件系统还包括与元数据互为备份的另一元数据,并且写入单元还可以被配置为:将经更新的元数据存储在另一元数据的位置处,以覆盖另一元数据。
在第二方面的一些实施例中,元数据可以包括检查点、段信息表和节点信息表。检查点具有版本信息,段信息表包括文件系统的段或块的信息,节点信息表包括文件系统的节点的地址。
在第二方面的一些实施例中,读取单元1210还可以被配置为:将文件系统的具有最新版本的检查点确定为有效检查点;确定与所确定的检查点相关联的段信息表和节点信息表;以及从存储设备读取所确定的检查点、段信息表和节点信息表。
在第二方面的一些实施例中,检查点包括关于所述段信息表中的段或块以及节点信息表中的节点的摘要信息,并且检查单元1220还可以被配置为检查检查点中的摘要信息与段信息表和节点信息表的内容是否存在不一致。
在第二方面的一些实施例中,文件系统可以包括在存储设备中的主区,主区包括节点区,节点区包括文件系统的文件的信息。检查单元1220还可以被配置为:通过遍历文件系统的目录树,检查文件系统的节点区是否存在不一致。在文件系统的节点区存在不一致的情况下,更新单元还可以被配置为确定存储设备中的空闲区域,将修复后的数据块写入空闲区域,以及基于写入修复后的数据块来更新所读取的段信息表和节点信息表中至少一项。
在第二方面的一些实施例中,检查单元1220还可以被配置为:通过遍历文件系统的目录树,检查段信息表和节点信息表与节点区的内容是否存在不一致。在段信息表和节点信息表与节点区的内容存在不一致的情况下,更新单元还可以被配置为:基于从节点区获取的结果,更新段信息表和节点信息表中的至少一项。
在第二方面的一些实施例中,更新单元1230还可以被配置为基于经更新的段信息表和节点信息表中的至少一项来更新检查点。
在第二方面的一些实施例中,存储设备可以是闪存,文件系统可以是闪存友好型文件系统。
图13示出了实现本公开的实施例的示例性过程1300的示意流程图。
在框1310,用户使用电子设备,例如,手机、平板电脑、笔记本电脑等。
在框1320,电子设备发生异常,例如掉电或系统错误等,导致电子设备其重启。
在框1330,电子设备检查文件系统。例如,在电子设备重启过程中,在文件系统挂载之前,文件系统需要用工具检测、修复、保障文件系统的一致性。否则手机无法挂载,启动会失败。
在框1340,电子设备确定是否存在有效的检查点。如果没有有效检查点,则过程1300前进到框1380,文件系统损坏,无法修复。
如果存储有效检查点,则电子设备前进到框1350,修复文件系统。采用根据本公开的实施例,例如图2所述的过程200来修复文件系统。
在框1360,确定修复过程中是否有异常。如果修复过程没问题,则在框1370,完成修复。电子设备将正常启动,。如果修复过程也出现异常情况,如用户强制重启、掉电、系统错误等,造成手机重启,则过程1300返回框1330。
如果是现有方案,修复过程中的异常可能导致文件系统彻底损坏,无法修复,导致用户数据丢失。如果采用本本公开的实施例,修复过程中的异常不会进一步导致文件系统损坏,会回到第一次重启修复的场景,确保能正常修复文件系统,保障用户数据安全。
图14示出了可以用来实施本公开的实施例的示例设备1400的示意性框图。设备1400可以用于实现如图2、图8、图9、图10、图11所示的过程以及如图12所示的装置。设备1400可以被用于实现图1所示的电子设备。如图所示,设备1400包括中央处理单元(CPU)1401,中央处理单元1401可以包括多个核,每个核可以根据存储在只读存储器(ROM)1402中的计算机程序指令或者从存储设备1408加载到随机访问存储器(RAM)1403中的计算机程序指令,来执行各种适当的动作和处理。在RAM 1403中,还可存储设备1400操作所需的各种程序和数据。CPU 1401、ROM 1402以及RAM 1403通过总线1404彼此相连。输入/输出(I/O)接口1405也连接至总线1404。
设备1400中的多个部件连接至I/O接口1405,包括:输入单元1406,例如键盘、鼠标等;输出单元1407,例如各种类型的显示器、扬声器等;存储设备1408,例如磁盘、闪存、固态盘等;以及通信单元1409,例如网卡、调制解调器、无线通信收发机等。通信单元1409允许设备1400通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
上文所描述的各个过程和处理,例如过程200、800、900、1000、1100可由处理单元1401中的一个或多个核来执行。例如,在一些实施例中,上述任一过程可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储设备1208。在一些实施例中,计算机程序的部分或者全部可以经由ROM 1402和/或通信单元1209而被载入和/或安装到设备1400上。当计算机程序被加载到RAM 1403并由CPU 1401或CPU的核执行时,可以执行上文描述的过程的一个或多个动作。
本公开可以是方法、装置、系统和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于执行本公开的各个方面的计算机可读程序指令。
计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,编程语言包括面向对象的编程语言—诸如Smalltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。
这里参照根据本公开实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理单元,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理单元执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
附图中的流程图和框图显示了根据本公开的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本公开的各实施方式,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施方式。在不偏离所说明的各实施方式的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施方式的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其他普通技术人员能理解本文披露的各实施方式。

Claims (23)

1.一种用于修复文件系统的方法,包括:
从存储设备读取所述文件系统的元数据;
基于所读取的所述元数据,检查所述文件系统是否存在不一致;
在所述文件系统存在不一致的情况下,更新所读取的所述元数据;以及
将经更新的所述元数据写入到所述存储设备,在所述存储设备中的所述经更新的元数据的存储地址不同于所读取的所述元数据的存储地址。
2.根据权利要求1所述的方法,其中,所述文件系统还包括与所述元数据互为备份的另一元数据,并且将经更新的所述元数据写入到所述存储设备包括:
将所述经更新的所述元数据写入在所述另一元数据的位置处,以覆盖所述另一元数据。
3.根据权利要求1所述的方法,其中,所述元数据包括检查点、段信息表和节点信息表,所述检查点具有版本信息,所述段信息表包括所述文件系统的段或块的信息,所述节点信息表包括所述文件系统的节点的地址。
4.根据权利要求3所述的方法,其中,从存储设备读取所述文件系统的元数据包括:
将所述文件系统的具有最新版本的检查点确定为有效检查点;
确定与所确定的检查点相关联的段信息表和节点信息表;以及
从所述存储设备读取所确定的检查点、段信息表和节点信息表。
5.根据权利要求3所述的方法,其中,所述检查点包括关于所述段信息表中的段或块以及所述节点信息表中的节点的摘要信息,并且检查所述文件系统是否存在不一致包括:
检查所述检查点中的所述摘要信息与所述段信息表和所述节点信息表的内容是否存在不一致。
6.根据权利要求5所述的方法,其中,所述文件系统包括在所述存储设备中的主区,所述主区包括节点区,所述节点区包括所述文件系统的文件的信息,
检查所述文件系统是否存在不一致还包括:
通过遍历所述文件系统的目录树,检查所述文件系统的节点区是否存在不一致;并且
在所述文件系统的所述节点区存在不一致的情况下,更新所读取的所述元数据包括:
确定所述存储设备中的空闲区域;
将修复的数据写入所述空闲区域;以及
基于写入所述修改后的数据,更新所读取的段信息表和节点信息表中至少一项。
7.根据权利要求5所述的方法,其中,
检查所述文件系统是否存在不一致还包括:
通过遍历所述文件系统的目录树,检查所述段信息表和所述节点信息表与所述节点区的内容是否存在不一致;并且
在所述段信息表和所述节点信息表与所述节点区的内容存在不一致的情况下,更新所读取的所述元数据包括:
基于从所述节点区获取的结果,更新所述段信息表和所述节点信息表中的至少一项。
8.根据权利要求6或7所述的方法,其中更新所读取的所述元数据包括:
基于经更新的段信息表和节点信息表中的至少一项,更新所读取的所述检查点。
9.根据权利要求8所述的方法,其中,将经更新的所述元数据写入到所述存储设备包括:
在所述经更新的段信息表和节点信息表被写入所述存储设备之后,将所述经更新的检查点写入所述存储设备。
10.根据权利要求1所述的方法,其中,所述存储设备是闪存,所述文件系统是闪存友好型文件系统(F2FS)。
11.一种用于修复文件系统的装置,包括:
读取单元,被配置为从存储设备读取所述文件系统的元数据;
检查单元,被配置为基于所读取的所述元数据,检查所述文件系统是否存在不一致;
更新单元,被配置为在所述文件系统存在不一致的情况下,更新所读取的所述元数据;以及
写入单元,被配置为将经更新的所述元数据写入到所述存储设备,其中,在所述存储设备中的所述经更新的元数据的存储地址不同于所读取的所述元数据的存储地址。
12.根据权利要求11所述的装置,其中,所述文件系统还包括与所述元数据互为备份的另一元数据,并且所述写入单元还被配置为:
将所述经更新的所述元数据存储在所述另一元数据的位置处,以覆盖所述另一元数据。
13.根据权利要求11所述的装置,其中,所述元数据包括检查点、段信息表和节点信息表,所述检查点具有版本信息,所述段信息表包括所述文件系统的段或块的信息,所述节点信息表包括所述文件系统的节点的地址。
14.根据权利要求13所述的装置,其中,所述读取单元还被配置为:
将所述文件系统的具有最新版本的检查点确定为有效检查点;
确定与所确定的检查点相关联的段信息表和节点信息表;以及
从所述存储设备读取所确定的检查点、段信息表和节点信息表。
15.根据权利要求13所述的装置,其中,所述检查点包括关于所述段信息表中的段或块以及所述节点信息表中的节点的摘要信息,并且所述检查单元还被配置为:
检查所述检查点中的所述摘要信息与所述段信息表和所述节点信息表的内容是否存在不一致。
16.根据权利要求15所述的装置,其中,所述文件系统包括在所述存储设备中的主区,所述主区包括节点区,所述节点区包括所述文件系统的文件的信息,
所述检查单元还被配置为:
通过遍历所述文件系统的目录树,检查所述文件系统的节点区是否存在不一致;并且
在所述文件系统的所述节点区存在不一致的情况下,所述更新单元还被配置为:
确定所述存储设备中的空闲区域;
将修复后的数据块写入所述空闲区域;以及
基于写入所述修复后的数据块,更新所读取的段信息表和节点信息表中至少一项。
17.根据权利要求15所述的装置,其中,
所述检查单元还被配置为:
通过遍历所述文件系统的目录树,检查所述段信息表和所述节点信息表与所述节点区的内容是否存在不一致;并且
在所述段信息表和所述节点信息表与所述节点区的内容存在不一致的情况下,所述更新单元还被配置为:
基于从所述节点区获取的结果,更新所述段信息表和所述节点信息表中的至少一项。
18.根据权利要求16或17所述的装置,其中,所述更新单元还被配置为:
基于经更新的段信息表和节点信息表中的至少一项,更新所读取的所述检查点。
19.根据权利要求18所述的装置,其中,所述写入单元被配置为:
在所述经更新的段信息表和节点信息表被写入所述存储设备之后,将所述经更新的检查点写入所述存储设备。
20.根据权利要求11所述的装置,其中,所述存储设备是闪存,所述文件系统是闪存友好型文件系统(F2FS)。
21.一种电子设备,包括
处理器,所述处理器包括多个处理核;以及
存储器;
所述多个处理核中的至少一个处理核被配置用于执行所述存储器中的指令,使得所述电子设备执行根据权利要求1至10中任一项所述的方法。
22.一种计算机可读存储介质,其上存储有一条或多条计算机指令,其中一条或多条计算机指令被处理器执行使所述处理器执行根据权利要求1至10中任一项所述的方法。
23.一种计算机程序产品,包括机器可执行指令,所述机器可执行指令在由设备执行时使所述设备执行根据权利要求1至10中任一项所述的方法。
CN202211009033.3A 2022-08-22 2022-08-22 用于修复文件系统的方法、装置、电子设备和介质 Pending CN117667504A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211009033.3A CN117667504A (zh) 2022-08-22 2022-08-22 用于修复文件系统的方法、装置、电子设备和介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211009033.3A CN117667504A (zh) 2022-08-22 2022-08-22 用于修复文件系统的方法、装置、电子设备和介质

Publications (1)

Publication Number Publication Date
CN117667504A true CN117667504A (zh) 2024-03-08

Family

ID=90070133

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211009033.3A Pending CN117667504A (zh) 2022-08-22 2022-08-22 用于修复文件系统的方法、装置、电子设备和介质

Country Status (1)

Country Link
CN (1) CN117667504A (zh)

Similar Documents

Publication Publication Date Title
US9830342B2 (en) Optimizing database deduplication
CN110018998B (zh) 一种文件管理方法、系统及电子设备和存储介质
CN109086388B (zh) 区块链数据存储方法、装置、设备及介质
US8180811B2 (en) Identifying unreferenced file system components
US9305049B2 (en) Addressing cross-allocated blocks in a file system
US20140281359A1 (en) Apparatus and method for referencing dense and sparse information in multi-dimensional to linear address space translation
CN110109915B (zh) 用于管理哈希表的方法、设备和计算机程序产品
CN111177143B (zh) 键值数据存储方法、装置、存储介质与电子设备
CN103559231A (zh) 一种文件系统配额管理方法、装置及系统
US20210081388A1 (en) Methods, apparatuses and computer program products for managing metadata of storage object
TWI567649B (zh) 動態韌體更新技術
US11119685B2 (en) System and method for accelerated data access
US11210273B2 (en) Online file system check using file system clone
CN106528322B (zh) 检测数据的无记载损坏的方法和设备
CN111475100B (zh) 用于管理存储系统的方法、设备和计算机可读介质
CN117131014A (zh) 数据库迁移方法、装置、设备及存储介质
KR101676175B1 (ko) 전원 손실 이후 데이터 손실을 방지하기 위한 메모리 저장 장치 및 방법
US20200334108A1 (en) System and method for searchable backup data
CN117667504A (zh) 用于修复文件系统的方法、装置、电子设备和介质
CN111857556A (zh) 管理存储对象的元数据的方法、装置和计算机程序产品
US7949632B2 (en) Database-rearranging program, database-rearranging method, and database-rearranging apparatus
CN111444114B (zh) 一种非易失性内存中数据的处理方法、装置及系统
CN112860628A (zh) 一种文件系统规模管理方法及系统
CN107305582B (zh) 一种元数据处理方法及装置
CN111125041A (zh) 数据读取方法、电子设备和计算机程序产品

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication