首页 / 一种用于国产化系统的文件系统定位检查点方法

一种用于国产化系统的文件系统定位检查点方法实质审查 发明

技术领域

[0001] 本发明属于文件系统定位查点技术领域,涉及一种文件系统的定位检查点的方法,尤其是一种用于国产化系统的文件系统定位检查点方法。

相关背景技术

[0002] 日志式文件系统即将文件的元数据和内容组织为日志式的结构,在文件追加、修改文件内容等文件系统操作像记录日志一样,在基本以顺序的形式写入磁盘介质。而当日志式文件系统启动时,要求驱动程序从磁盘海量的介质中较快地找到关闭文件系统前最后的“检查点(checkpoint)”,即恢复最后的现场。
[0003] 日志式文件系统的特征是,对数据的组织像日志一样,对文件系统的改动(增、删、改文件或目录等)都以写日志的方式记录追加在线性的磁盘介质上。通常(也必然),日志式文件系统要写“日志”的同时(一定间隔地)生成检查点。程序可通过检查点快速生成文件系统的界面,即可访问所有文件内容的一种数据结构。
[0004] 由此可见,如果文件系统突然中止,失去当前内存,如何通过磁盘上已经写入的数据快速恢复到最后检查点的状态,提供可继续访问和操作的界面,这便是所谓日志式文件系统的定位检查点的方法。
[0005] 现有的日志式文件系统在定位检查点的方法有两类,一是以F2FS和LinLogFS为典型的非日志式管理整体元数据的方法,二是以NILFS为典型的持续修改超级块(superblock)的方法。
[0006] 第一种方法(非日志式管理整体元数据的方法)中,整体元数据并不是采用日志式组织的,只有文件数据和文件元数据是日志式组织的。所以,磁盘所存储的数据分割为二个区域,一个是以一般形式组织的整体元数据,一个是日志式组织的文件元数据和数据。在这样的系统中,通常在整体元数据区域中有二个固定地址的超级块,以乒乓使用的方式改写这二个超级块。如,生成第一个检查点,将此检查点的地址写入第一个超级块的字段,之后生成第二个检查点,将第二个检查点的地址写入第二个超级块中,接着生成第三个检查点,将第三个检查点的地址写入第一个超级块中,依此类推。当重新启动文件系统时,程序读出两个超级块的内容,可通过超级块的版本号决定哪个是最后的检查点地址。
[0007] 第二种方法(持续修改超级块)中,整体元数据和文件元数据、文件数据均以日志式组织,但在固定于开始扇区的超级块需要不断改写,以指向最新的检查点。如生成第一个检查点,将此检查点地址写入超级块的字段,之后生成第二个,也将其地址写入超级块中。超级块虽使用不断修改到最后的检查点地址。当重新启动文件系统时,程序读出超级块的内容,得到最后检查点的地址。
[0008] 上述两种的方式都存在如下缺陷:超级块在固定扇区,频繁改动容易造成超级块介质损坏。
[0009] 经检索,未发现与本发明相同或相似的现有技术的文献。

具体实施方式

[0044] 以下结合附图对本发明实施例作进一步详述:
[0045] 一种用于国产化系统的文件系统定位检查点方法,如图3所示,包括以下步骤:
[0046] 步骤1、对日志式文件系统的磁盘布局进行改进,获得改进后的日志式文件系统的磁盘布局;
[0047] 所述步骤1的改进后的日志式文件系统的磁盘布局包括:超级块、数据库区和段数据区;
[0048] 将从零号扇区开始到一个块作为超级块,该超级块在格式化时改动一次后设置为仅可读,所述超级块用于提供文件系统的基本信息,包括:逻辑块的字节数、生成检查点的空间间隔和时间间隔、段的大小和总数量。
[0049] 在所述超级块之后,设置一个由若干连续扇区组成的存储区,作为数据库区,用于存储最后检查点地址;
[0050] 在所述数据库区之后,设置一个分割为若干个段的海量存储区,作为段数据区,用于存储文件元数据、数据和检查点数据。
[0051] 在本实施例中,如图1所示,在磁盘介质的开始,即零号扇区开始,到一个块(block)大小(可能占连续的多个扇区),作为超级块。
[0052] 超级块是在格式化时改动一次,之后仅可读。
[0053] 超级块提供了文件系统的基本信息,如逻辑块的字节数、生成检查点的空间间隔和时间间隔、段(segment)的大小和总数量等。
[0054] 在超级块之后,是一个若干连续扇区组成的存储区,我们用于按照本方法存储最后检查点地址,称为数据库区。
[0055] 在数据库区之后,是分割为若干个段的海量存储区,用于存储文件元数据、数据以及检查点数据(整体元数据)。
[0056] 步骤2、基于步骤1所获得的改进后的日志式文件系统的磁盘布局,在数据库区的若干连续的扇区中,进行日志式文件系统的定位检查点;
[0057] 所述步骤2的具体步骤包括:
[0058] (1)在数据库区的每个扇区中存储一条记录;
[0059] 其记录的内容包括:
[0060] uuid是在格式化文件系统时生成的补重复的128位的标识,用于避免脏扇区的影响;
[0061] cp_no是检查点的序号,日志式文件系统启动时,得到上次运行的最后产生的检查点的值;并生成新的检查点,每次都增1。
[0062] cp_addr是这个检查点的地址,即相对磁盘零号扇区起始位置的偏移值;
[0063] number是计数,表示记录的序号,在数据库每增加一条记录,number会增1;
[0064] (2)设置扇区布局为:前部为struct dbsec结构体、中间为补零,最后为64位哈希摘要;
[0065] (3)验证扇区有效性:根据uuid和哈希摘要,验证一个扇区的有效性,仅当uuid与当前文件系统一致,且扇区内容符合哈希摘要时,验证扇区为有效扇区;
[0066] (4)找出上次关闭文件系统时的最后的检查点的地址,即找出number最大的扇区;
[0067] (5)当文件系统生成新的检查点时,将当前的number值增1,并在当前number最大的扇区的后一个扇区写入新的struct dbsec结构体,如果当前number最大的扇区已经是数据库扇区的最后一个,则从数据库扇区的第零个写入,即循环地利用数据库扇区。
[0068] (6)考虑内存限制和每次读取磁盘的效率,则从数据库扇区搜索出number最大的扇区,即找出存储最后检查点地址的扇区;
[0069] 所述步骤2第(6)步的具体步骤包括:
[0070] ①在内存分配512个扇区大小的空间;
[0071] ②设当前最大的number的扇区副本是全零
[0072] ③从首个数据库扇区开始,读入512个扇区到内存,如果不足,仅读入余下的扇区;
[0073] ④在内存中遍历所有扇区,如果扇区内容合法且存在number比当前扇区副本大的,则将它的内容复制到当前扇区副本;
[0074] ⑤判断是否已经处理所有数据库扇区;
[0075] ⑥若已经处理所有数据库扇区,则清除内存512个扇区的空间,将当前扇区副本即为number最大扇区的内容,进而找到number最大的数据库扇区。
[0076] 在本实施例中,在超级块与段存储区之间的数据库区,如何利用这一连续的扇区,以日志式的存储方式频繁地记录当前的最后检查点的地址。
[0077] 数据库区是若干连续的扇区,每个扇区存储一条记录。
[0078] 记录的内容以C语言结构体表述如下:
[0079]
[0080] 其中,uuid是在格式化文件系统时生成的补重复的128位的标识,用于避免脏扇区的影响。
[0081] cp_no是检查点的序号,日志式文件系统启动时,可得到上次运行的最后产生的检查点的值。生成新的检查点,每次都增一。
[0082] cp_addr是这个检查点的地址,即相对磁盘零号扇区起始位置的偏移值。
[0083] number是计数,表示记录的序号,在数据库每增加一条记录,number会增一。它可以理解为此文件系统实例的逻辑的单调时钟。number最大的即是最后生成的。
[0084] 每个数据库扇区的布局如图2所示。
[0085] 在本实施例中,磁盘的扇区是512字节,则在前部40字节是dbsec结构体,最后8个字节是前面504字节的哈希摘要,中间的补零为464字节(512‑8‑40)。
[0086] 哈希摘要可以选择任何一种哈希算法,推荐xxhash。
[0087] 根据uuid和哈希摘要,可以验证一个扇区的有效性。仅当uuid与当前文件系统一致(uuid写在超级块中)且扇区内容符合哈希摘要。
[0088] 找出上次关闭文件系统时的最后的检查点的地址,并不是找出cp_no最大的数据库扇区,而是找出number最大的扇区。因为用户可能想回滚文件系统(回到之前的版本),而number表示操作上的先后次序。
[0089] 当文件系统生成新的检查点时,将当前的number值增一,并在当前number最大的扇区的后一个扇区写入新的dbsec,如果当前number最大的扇区已经是数据库扇区的最后一个,则从数据库扇区的第零个写入。也即循环地利用数据库扇区。
[0090] 考虑到内存限制和每次读取磁盘的效率,则从数据库扇区搜索出number最大的扇区(即找出存储最后检查点地址的扇区)的流程如图3所示。
[0091] 上述的流程是找到number最大的数据库扇区的优化方法。一般来说,对于机械硬盘的4TB大小的分区,一般选用1MB的数据库总大小,当日志式文件系统启动时(仅启动时使用本发明所述的方法),可以于瞬间从磁盘搜索到number最大的数据库扇区,同时获得最后的检查点序号和此检查点的地址。
[0092] 本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD‑ROM、光学存储器等)上实施的计算机程序产品的形式。
[0093] 本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0094] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0095] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

当前第1页 第1页 第2页 第3页