1.本发明涉及数据存储技术领域,尤其涉及一种文件系统元数据分离存储方法、装置及存储介质。
背景技术:2.在存储系统中,物理存储空间由文件系统进行管理。文件系统为实现空间管理功能,除了保存用户数据,还需要对用户数据在磁盘上的分布情况、用户数据的尺寸、修改时间等信息进行记录,这些辅助的记录信息即为元数据。
3.相对于用户数据,元数据通常是少量而离散的。常用的文件系统,如xfs、ext3/4、btrfs等等,均是将用户数据和元数据混合记录在同一个存储设备上统一管理,如图1所示。上述元数据存储方式会存在以下问题:1、大容量的存储系统通常采用机械磁盘作为存储设备。对于离散分布在磁盘上的元数据信息,在存取时需要频繁的移动磁头进行寻道操作,致使元数据访问效率低。
4.2、对于同时正在进行的用户数据io,其原本连续、大量的io操作会被碎片化的元数据请求打断,影响整个系统的性能。
5.若考虑在文件系统中直接进行元数据分离,则需要为文件系统添加多存储设备管理功能,将元数据和用户数据分别存入不同的设备,这需要对文件系统进行结构性调整,不仅开发难度高、工作量大,且难以确保可靠性。因此,亟需提供一种能够实现文件系统元数据分离存储的方法,同时能够降低实现复杂度以及尽可能的减少对文件系统本身的调整。
技术实现要素:6.本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种实现方法简单、成本低、无需对文件系统进行结构性调整,且元数据存取效率高、用户数据连续io请求不会受元数据操作影响的文件系统元数据分离存储方法、装置及存储介质。
7.为解决上述技术问题,本发明提出的技术方案为:一种文件系统元数据分离存储方法,步骤包括:当文件系统生成元数据io请求时,为元数据添加指定标签;通过预先注册的虚拟存储设备截获元数据io请求以及用户数据io请求;当截获到io请求时,虚拟存储设备根据是否带有所述标签对io请求类型进行鉴别,根据所述io请求类型进行地址映射并将请求重定向到对应存储设备,其中如果为元数据io请求则重定向至元数据存储设备,如果为用户数据请求则重定向到用户数据存储设备。
8.进一步的,如果是元数据io请求,进行地址映射的步骤包括:搜索预先建立的元数据映射记录树,如果搜索到当前元数据io请求对应的映射节点,则根据搜索结果修改当前io请求的地址为对应的映射地址,所述元数据映射记录树包括元数据映射记录以及对应的父子节点信息;
如果没有在所述元数据映射记录树中搜索到对应的映射节点,则搜索预先建立的用户数据映射记录树,根据是否搜索到当前元数据io请求对应的映射节点分配元数据映射地址,并修改当前元数据io请求的地址为对应分配的映射地址,所述用户数据映射记录树包括用户数据映射记录以及对应的父子节点信息。
9.进一步的,所述根据是否搜索到对应的映射节点分配元数据映射地址包括:判断在所述用户数据映射记录树中是否有搜索到对应的映射节点,如果有则释放用户数据映射记录以及释放用户数据映射记录树节点后分配元数据映射地址,如果没有搜索到对应的映射节点则直接分配元数据映射地址,分配完元数据映射地址后更新元数据映射记录文件。
10.进一步的,如果是用户io请求,进行地址映射的步骤包括:搜索预先建立的用户数据映射记录树,如果搜索到当前用户io请求对应的映射节点,则根据搜索结果修改用户io请求的地址为对应的映射地址,所述用户数据映射记录树包括用户数据映射记录以及对应的父子节点信息;如果在所述用户数据映射记录树中没有搜索到当前用户io请求对应的映射节点,则搜索元数据映射记录树,根据是否搜索到当前用户io请求对应的映射节点分配用户数据映射地址,并修改当前用户数据io请求的地址为对应分配的映射地址,所述元数据映射记录树包括元数据映射记录以及对应的父子节点信息。
11.进一步的,所述根据是否搜索到当前用户io请求对应的映射节点分配用户数据映射地址包括:判断在所述元数据映射记录树中是否有搜索到对应的映射节点,如果有则释放元数据映射记录以及释放元数据映射记录树节点后分配用户数据映射地址,如果没有搜索到对应的映射节点则直接分配用户数据映射地址,分配完用户数据映射地址后更新用户数据映射记录文件。
12.进一步的,所述映射记录树为以虚拟设备磁盘偏移量为索引的平衡二叉树,其中每一个节点包括虚拟设备磁盘偏移量、数据长度、物理存储器偏移量、数据映射记录编号、父节点以及子节点信息。
13.进一步的,所述通过预先注册的虚拟存储设备截获元数据io请求以及用户数据io请求前还包括启动虚拟存储设备,通过从配置文件读取物理设备信息,加载数据映射记录到虚拟存储设备后分别建立元数据映射记录树、用户数据映射记录树,所述元数据映射记录树包括元数据映射记录以及对应的父子节点信息,所述用户数据映射记录树包括用户数据映射记录以及对应的父子节点信息。
14.进一步的,所述虚拟存储设备预先注册在通用块设备层上,所述虚拟存储设备的映射驱动程序具有从指定位置加载预设映射规则的功能。
15.一种文件系统元数据分离存储装置,包括:标签添加模块,用于当文件系统生成元数据io请求时,为元数据添加指定标签;虚拟存储设备,用于截获元数据io请求以及用户数据io请求,并当截获到io请求时,根据是否带有所述标签对io请求类型进行鉴别,根据所述io请求类型进行地址映射并将请求重定向到对应存储设备,其中如果为元数据io请求则重定向至元数据存储设备,如果为用户数据请求则重定向到用户数据存储设备。
16.一种存储有计算机程序的计算机可读存储介质,所述计算机程序执行时实现如上述方法。
17.与现有技术相比,本发明的优点在于:本发明通过在文件系统提交io请求的时候,针对元数据请求添加指定的标签,由一虚拟存储设备截获io请求并进行鉴别,根据io请求类型进行地址映射并将请求重定向到不同存储设备意分离存储与访问,实现对真实存储设备的管理和io请求的映射、转发,能够在尽可能少的修改文件系统程序的条件下实现对元数据的分离存储,使用户数据的连续io请求不受元数据操作的影响,同时大幅提高元数据存取速度,改善整体操作性能。
附图说明
18.图1是传统文件系统中元数据与用户数据的存储原理示意图。
19.图2是本实施例文件系统元数据分离存储方法的实现流程示意图。
20.图3是本实施例中建立的数据映射记录二叉树的结构原理示意图。
21.图4是本实施例中存储设备数据结构及可用空间管理机制的原理示意图,其中(a)表示存储设备的磁盘空间配置,(b)表示空间位图的具体表示。
22.图5是本实施例中虚拟块设备加载的流程示意图。
23.图6是本发明具体应用实施例中拦截bio请求的原理示意图。
24.图7是本发明具体应用实施例中实现文件系统元数据分离存储的详细流程示意图。
具体实施方式
25.以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。
26.如图2所示,本实施例文件系统元数据分离存储方法的步骤包括:s01.当文件系统生成元数据io请求时,为元数据添加指定标签;s02.通过预先注册的虚拟存储设备截获元数据io请求以及用户数据io请求,并当虚拟存储设备截获到io请求时,根据是否带有标签对io请求类型进行鉴别,根据io请求类型进行地址映射并将请求重定向到对应存储设备,其中如果为元数据io请求则重定向至元数据存储设备,如果为用户数据请求则重定向到用户数据存储设备。
27.本实施例通过在文件系统和真实的存储设备之间添加一个虚拟存储设备,当文件系统提交io请求的时候,针对元数据请求添加指定的标签,由该虚拟存储设备(驱动程序)截获io请求并进行鉴别,根据io请求类型进行地址映射并将请求重定向到不同存储设备以分离存储与访问,实现对真实存储设备的管理和io请求的映射、转发,即由虚拟存储设备向上对文件系统隐藏具体的物理设备,向下将元数据的io请求和用户数据io请求重定向到不同的存储设备,从而实现元数据与用户数据发往不同的设备,能够在尽可能少的修改文件系统程序的条件下实现对元数据的分离存储,使用户数据的连续io请求不受元数据操作的影响,同时大幅提高元数据存取速度,改善整体操作性能。
28.由虚拟存储设备的驱动程序将元数据操作映射到更小空间的高速存储器执行io。
29.上述元数据存储设备具体可以为高性能的固态存储设备等,用户数据存储设备可
以为大容量的机械存储设备,以使得可以将元数据操作映射到更小空间的高速存储器执行io,用户数据操作由大容量的机械存储设备执行,平衡数据存储实现的性能和成本。
30.本实施例步骤s01中,具体通过简单调整修文件系统,以使得在生成元数据io请求时在请求的私有字段中附加元数据标记,用户数据io请求则保持原样不作修改,虚拟存储设备的驱动程序在后续处理流程中根据该标记,即可鉴别出请求是元数据io请求还是用户数据bio请求。
31.本实施例虚拟存储设备具体可采用虚拟块设备(block device)实现,虚拟存储设备的映射驱动程序具有从指定位置加载预设映射规则的功能,通过虚拟块设备实现对元数据和用户数据进行拦截和重定向到不同存储设备,该虚拟存储设备事先注册到通用块设备层上。通过在文件系统和真实的存储设备之间添加一个虚拟的存储设备,文件系统将所有的块设备io请求(block io request,bio请求)发往该虚拟块设备,虚拟块设备接收来自文件系统的元数据bio请求和用户数据bio请求,由虚拟存储设备代替传统流程中的真实存储设备,向文件系统提供一个统一的地址空间,并管理组成该空间的真实存储设备。该虚拟块设备驱动程序按照用户设定的配置,可以将元数据io请求重定向到所需的元数据存储设备(如小容量的高速固态存储设备),将用户数据io请求定向到所需的用户数据存储设备(如大容量机械磁盘阵列)。
32.本实施例中通过虚拟块设备实现对元数据和用户数据io请求拦截和重定向前还包括启动虚拟存储设备,通过从配置文件读取物理设备信息,加载数据映射记录到虚拟存储设备后分别建立元数据映射记录树、用户数据映射记录树,元数据映射记录树包括元数据映射记录以及对应的父子节点信息,用户数据映射记录树包括用户数据映射记录以及对应的父子节点信息,其中父子节点信息包括父节点、左子节点、右子节点信息等。
33.如图3所示,数据映射树(元数据映射记录树、用户数据映射记录树)是一颗以虚拟设备磁盘偏移量为索引的平衡二叉树,以用于根据虚拟设备偏移量快速搜索映射记录,数据映射树中每一个节点包含虚拟设备磁盘偏移量、数据长度、物理存储器偏移量、数据映射记录编号、父节点、左子节点、右子节点信息等。
34.如表1所示,在具体应用实施例中数据映射记录文件中每一条记录长度固定,包含虚拟设备磁盘偏移量、数据长度、数据存储器偏移量、数据映射记录号信息等,即为映射记录在磁盘上的存储形式。
35.表1:数据映射记录表数据映射记录号虚拟设备偏移量数据长度数据存储器偏移量034713640960132153610244096247001620488192
……………………
102433554432512524288如图4所示,其中,图4中(a)表示存储设备的磁盘空间配置,图4中(b)表示空间位图的具体表示,本实施例中在元数据存储设备和用户数据存储设备的前端分配有两个固定的磁盘空间,分别用来存储映射记录和空间位图,以位图的形式实现对空间的管理。空间位图具体以1个二进制位代表4096字节的存储空间,值0表示空间未使用,值1表示空间已使
用。
36.在具体应用实施例中,如图5所示,本实施例实现虚拟块设备(虚拟存储设备)的加载过程为:步骤1.虚拟块设备启动步骤2.从配置文件(存储于操作系统配置文件目录)读取物理设备信息,设置元数据存储设备和用户数据存储设备。
37.步骤3.从元数据存储设备的映射记录文件中加载元数据映射记录。
38.步骤4.将元数据映射记录插入内存中的元数据映射二叉树。
39.步骤5.从用户数据存储设备的映射记录文件中加载用户数据映射记录。
40.步骤6.将用户数据映射记录插入内存中的用户数据映射二叉树。
41.步骤7.虚拟块设备向操作系统的注册操作完成。
42.上述各步骤之间并不限定时序关系,各步骤之间的先后顺序是可以调整的,例如元数据与用户数据映射二叉树可以是先后建立,也可以是同时建立的,具体执行时序可以根据实际需求配置。
43.由于文件系统发出的请求都处于同一个地址空间,而元数据分离要求用户数据和元数据分别存储到对应的设备上,因此需要对地址空间进行修改,且针对元数据存储设备和用户数据存储设备在空间上的差异,需要将来自文件系统的虚拟地址io请求按照元数据和用户数据进行分类后,各自重新映射到真实物理设备的地址空间中。本实施例步骤s02中,在虚拟存储设备注册到通用块设备层的时候,其对应的映射驱动程序会从指定位置加载用户定义的映射规则;在读写流程中,通过启动映射驱动程序对io请求进行鉴别,根据映射规则将请求的地址映射到对应存储设备的地址空间中,使用新的地址将元数据io请求重定向至元数据存储设备、将用户数据重定向到用户数据存储设备。
44.本实施例步骤s02中如果是元数据io请求,进行地址映射的步骤包括:s211.搜索预先建立的元数据映射记录树,如果搜索到当前元数据io请求对应的映射节点,则根据搜索结果修改当前io请求的地址为对应的映射地址,元数据映射记录树包括元数据映射记录以及对应的父子节点信息;s212.如果没有在元数据映射记录树中搜索到对应的映射节点,则搜索预先建立的用户数据映射记录树,根据是否搜索到当前元数据io请求对应的映射节点分配元数据映射地址,并修改当前元数据io请求的地址为对应分配的映射地址,用户数据映射记录树包括用户数据映射记录以及对应的父子节点信息。
45.上述步骤s212中根据是否搜索到对应的映射节点分配元数据映射地址具体包括:判断在用户数据映射记录树中是否有搜索到对应的映射节点,如果有则释放用户数据映射记录以及释放用户数据映射记录树节点后分配元数据映射地址,如果没有搜索到对应的映射节点则直接分配元数据映射地址,分配完元数据映射地址后更新元数据映射记录文件。
46.本实施例具体对于元数据io请求,如果在元数据映射记录树中找到对应的映射节点,则可以直接修改请求的地址为映射后地址(具体可通过修改请求的磁盘偏移量为映射后的磁盘偏移量),如果没有找到对应的映射节点,则进一步搜索用户数据映射记录树,如果仍然不存在相应的节点,表明当前的io请求需要新分配空间,则可以从元数据存储器的
可用空间中分配满足当前io请求的空间;如果在用户数据映射二叉树中找到了与当前io请求地址对应的节点,表明当前的请求地址曾用于存储用户数据,则释放用户数据映射记录(将用户数据存储设备空间位图相应位标为可用,从用户数据映射文件中删除记录,从用户数据映射记录树中删除该映射节点),然后再分配元数据映射地址,即可以实现元数据的地址映射与重定向。
47.本实施例步骤s02中,如果是用户io请求,进行地址映射的步骤包括:s221.搜索预先建立的用户数据映射记录树,如果搜索到当前用户io请求对应的映射节点,则根据搜索结果修改用户io请求的地址为对应的映射地址,用户数据映射记录树包括用户数据映射记录以及对应的父子节点信息;s222.如果在用户数据映射记录树中没有搜索到当前用户io请求对应的映射节点,则搜索元数据映射记录树,根据是否搜索到当前用户io请求对应的映射节点分配用户数据映射地址,并修改当前用户数据io请求的地址为对应分配的映射地址,元数据映射记录树包括元数据映射记录以及对应的父子节点信息。
48.上述步骤s222中根据是否搜索到当前用户io请求对应的映射节点分配用户数据映射地址包括:判断在元数据映射记录树中是否有搜索到对应的映射节点,如果有则释放元数据映射记录以及释放元数据映射记录树节点后分配用户数据映射地址,如果没有搜索到对应的映射节点则直接分配用户数据映射地址,分配完用户数据映射地址后更新用户数据映射记录文件。
49.本实施例具体对于用户数据请求,先根据用户数据请求的磁盘起点偏移量搜索用户数据映射记录树,如果找到对应的映射节点,则直接修改请求的地址为映射后地址(具体可修改请求的磁盘偏移量为映射后的磁盘偏移量);如果没有找到对应的映射节点,则进一步搜索元数据映射记录树,如果仍然不存在相应的节点,表明当前的io请求需要新分配空间,从用户数据存储器的可用空间中分配满足当前io请求的空间;如果在元数据映射记录树中找到了与当前io请求地址对应的节点,表明其当前的请求地址曾用于存储元数据,则释放元数据映射记录(将元数据存储设备空间位图相应位标为可用,从元数据映射文件中删除记录,从元数据映射记录树中删除该映射节点),然后为其分配用户数据映射地址,即可以实现用户数据的地址映射与重定向。
50.本实施例通过上述步骤,可以使元数据和用户数据存储设备通过虚拟存储设备地址查找到真实数据所在的位置,从而使两种数据都能够正确进行存储和读取。
51.在具体应用实施例中,如图6所示,虚拟存储设备采用块设备,将文件系统的元数据bio请求和用户数据bio请求发送至虚拟块设备,如图7所示,虚拟块设备中虚拟快设备驱动程采用本发明上述映射操作实现不同数据地址映射的详细步骤为:步骤a.从操作系统的bio请求的私有数据中提取元数据标志。
52.步骤b.如果检测到元数据标志,则修改目标磁盘字段,将bio请求重定向到元数据存储设备。
53.针对元数据请求的地址映射与重定向:步骤c.针对元数据请求的磁盘起点偏移量搜索元数据映射二叉树,如果找到对应的映射节点,则修改请求的磁盘偏移量为映射后的磁盘偏移量。
54.步骤d.如果没有找到对应的映射节点,则进一步搜索用户数据映射二叉树,如果仍然不存在相应的节点,表明当前的bio请求需要新分配空间,从元数据存储器的可用空间中分配满足当前bio请求的空间;如果在用户数据映射二叉树中找到了与bio请求地址对应的节点,释放用户数据映射记录以及从用户数据映射记录树中删除该映射节点,然后为其分配元数据映射地址。
55.步骤e.向元数据映射二叉树插入新的映射记录。
56.步骤f.更新元数据映射记录文件。
57.步骤g.修改bio请求的磁盘偏移量为映射后的磁盘偏移量。
58.步骤h.发送元数据bio请求。
59.步骤i.如果步骤b未检测到元数据标记,修改目标磁盘为用户数据存储设备。
60.步骤j.针对用户数据请求的磁盘起点偏移量搜索用户数据映射二叉树,如果找到对应的映射节点,则修改请求的磁盘偏移量为映射后的磁盘偏移量。
61.步骤k.如果没有找到对应的映射节点,则进一步搜索元数据映射二叉树,如果仍然不存在相应的节点,说明当前的bio请求需要新分配空间,从用户数据存储器的可用空间中分配满足当前bio请求的空间;如果在元数据映射二叉树中找到了与bio请求地址对应的节点,释放元数据映射记录以及从元数据映射记录树中删除该映射节点,然后为其分配用户数据映射地址。
62.步骤l.向用户数据映射二叉树插入新的映射记录。
63.步骤m.更新用户数据映射记录文件。
64.步骤n.修改bio请求的磁盘偏移量为映射后的磁盘偏移量。
65.步骤o.发送用户数据bio请求。
66.本实施例文件系统元数据分离存储装置包括:标签添加模块,用于当文件系统生成元数据bio请求时,为元数据添加指定标签;虚拟存储设备,用于截获元数据bio请求以及用户数据bio请求,并当截获到bio请求时,根据是否带有标签对bio请求类型进行鉴别,根据bio请求类型进行地址映射并将请求重定向到对应存储设备,其中如果为元数据bio请求则重定向至元数据存储设备,如果为用户数据请求则重定向到用户数据存储设备。
67.上述标签添加模块可以采用在文件系统中增设标签添加功能实现,仅需要简单修改文件系统,而无需结构性调整文件系统,即可以实现元数据与用户数据的分离存储与访问。
68.本实施例文件系统元数据分离存储装置与上述文件系统元数据分离存储方法对应,在此不再一一赘述。
69.本实施例还提供存储有计算机程序的计算机可读存储介质,计算机程序执行时实现如上述方法。
70.上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。