一种实现写时复制文件系统的方法及装置的制造方法

文档序号:9371864阅读:424来源:国知局
一种实现写时复制文件系统的方法及装置的制造方法
【技术领域】
[0001]本发明涉及存储、文件系统领域,更具体地说,涉及一种实现写时复制文件系统的方法及装置。
【背景技术】
[0002]普通的Iinux文件系统在修改数据时,会对磁盘上原有数据进行修改,如果在修改的过程中系统宕机,例如电源故障时,就会造成数据损坏,从而造成文件系统的不一致。inux文件系统在写入数据时磁头会在存储在磁盘固定区域的inode数据和data数据间往返多次进行操作,增加了这种“1^&(1-1]10(11€7-'\¥1';^6”过程所付出的不必要的磁盘寻道时间。
[0003]因此,如何保证文件系统时刻处于一致性状态,并减少不必要的磁盘寻道时间是现在需要解决的问题。

【发明内容】

[0004]本发明的目的在于提供一种实现写时复制文件系统的方法及装置,以保证文件系统时刻处于一致性状态,并减少不必要的磁盘寻道时间。
[0005]为实现上述目的,本发明实施例提供了如下技术方案:
[0006]—种实现写时复制文件系统的方法,包括:
[0007]在内存中寻找带有脏数据标识的第一元数据;
[0008]将所述第一元数据的lock标识置位;
[0009]为所述第一元数据对应的脏数据分配新的磁盘空间,并将所述脏数据下刷至所述新的磁盘空间;
[0010]将所述第一元数据写到与所述新的磁盘空间位置相邻的元数据文件中;并将block map文件中的与所述脏数据对应的第二元数据写入所述元数据文件中。
[0011]优选的,所述在内存中寻找带有脏数据标识的第一元数据,包括:
[0012]在内存中寻找有所述脏数据的元数据链表;和/或,没有所述脏数据但元数据本身修改链表上的元数据。
[0013]优选的,为所述第一元数据对应的脏数据分配新的磁盘空间,包括:
[0014]预先将block map文件中初始元数据写入所述元数据文件中,并为所述脏数据分配新的磁盘空间。
[0015]优选的,所述将block map文件中的与所述脏数据对应的第二元数据写入所述元数据文件中之后,包括:
[0016]将所述脏数据对应的数据块的fs位值复制到所述block map文件中的update位。
[0017]优选的,若所述第二元数据没有成功写入所述元数据文件中,则将所述第二元数据存放在write wait队列中,并重新执行将所述第二元数据写入所述元数据文件中的步骤。
[0018]—种实现写时复制文件系统的装置,包括:
[0019]寻找模块,用于在内存中寻找带有脏数据标识的第一元数据;
[0020]置位模块,用于将所述第一元数据的lock标识置位;
[0021]分配模块,用于为所述第一元数据对应的脏数据分配新的磁盘空间;
[0022]下刷模块,用于将所述脏数据下刷至所述新的磁盘空间;
[0023]第一元数据写入模块,用于将所述第一元数据写到与所述新的磁盘空间位置相邻的元数据文件中;
[0024]第二元数据写入模块,用于将block map文件中的与所述脏数据对应的第二元数据写入所述元数据文件中。
[0025]优选的,所述寻找模块,包括:
[0026]在内存中寻找有所述脏数据的元数据链表;和/或,没有所述脏数据但元数据本身修改链表上的元数据。
[0027]优选的,所述分配模块,包括:
[0028]预先将block map文件中初始元数据写入所述元数据文件中,并为所述脏数据分配新的磁盘空间。
[0029]优选的,所述第二元数据写入模块,包括:
[0030]将所述脏数据对应的数据块的fs位值复制到所述block map文件中的update位。
[0031]优选的,若所述第二元数据写入模块没有成功将所述第二元数据写入所述元数据文件中,则将所述第二元数据存放在write wait队列中,并重新将所述第二元数据写入所述元数据文件中。
[0032]通过以上方案可知,本发明实施例提供的一种实现写时复制文件系统的方法及装置,包括:在内存中寻找带有脏数据标识的第一元数据;将所述第一元数据的lock标识置位;为所述第一元数据对应的脏数据分配新的磁盘空间,并将所述脏数据下刷至所述新的磁盘空间;将所述第一元数据写到与所述新的磁盘空间位置相邻的元数据文件中;并将block map文件中的与所述脏数据对应的第二元数据写入所述元数据文件中,这种将脏数据下刷到新的磁盘空间,不直接在原磁盘数据上进行修改的方法,保证了文件系统时刻处于一致性状态,并且将元数据写入元数据文件中,减少了不必要的磁盘寻道时间。
【附图说明】
[0033]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0034]图1为本发明实施例公开的一种实现写时复制文件系统的方法流程示意图;
[0035]图2为本发明实施例公开的文件数据在内存中的组织形式示意图;
[0036]图3为本发明实施例公开的一种实现写时复制文件系统的装置结构示意图。
【具体实施方式】
[0037]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0038]本发明实施例公开了一种实现写时复制文件系统的方法及装置,以保证文件系统时刻处于一致性状态,并减少不必要的磁盘寻道时间。
[0039]参见图1,本发明实施例提供的一种实现写时复制文件系统的方法,包括:
[0040]S101、在内存中寻找带有脏数据标识的第一元数据;
[0041]优选的,所述在内存中寻找带有脏数据标识的第一元数据,包括:
[0042]在内存中寻找有所述脏数据的元数据链表;和/或,没有所述脏数据但元数据本身修改链表上的元数据。
[0043]S102、将所述第一元数据的lock标识置位;
[0044]具体的,在本实施例中,通过对第一元数据的lock标识置位,可以保证在下刷过程中,这些第一元数据的内容不被其他程序修改。
[0045]S103、为所述第一元数据对应的脏数据分配新的磁盘空间,并将所述脏数据下刷至所述新的磁盘空间;
[0046]优选的,为所述第一元数据对应的脏数据分配新的磁盘空间,包括:
[0047]预先将block map文件中初始元数据写入所述元数据文件中,并为所述脏数据分配新的磁盘空间。
[0048]具体的,预先将block map文件的inode (元数据)写入inode file中,是为了将inode file的block map inode所在的相应块弄脏,接下来可以给它分配磁盘空间。
[0049]具体的,为脏数据块分配磁盘空间,包括block map文件和inode file的相应块。
[0050]S104、将所述第一元数据写到与所述新的磁盘空间位置相邻的元数据文件中;并将block map文件中的与所述脏数据对应的第二元数据写入所述元数据文件中。
[0051]具体的,将block map文件的inode重新写入inode file中,为在预先写入的位置重新写入,这次的inode包括block map文件已分配的实际磁盘地址等必要信息。
[0052]优选的,所述将block map文件中的与所述脏数据对应的第二元数据写入所述元数据文件中之后,包括:
[0053]将所述脏数据对应的数据块的fs位值复制到所述block map文件中的update位。
[0054]具体的,更新block map文件,将所有为脏的block的fs位值复制到update位,同样包括block map文件和inode file的脏块。
[0055]具体的,本“写时复制”文件系统元数据包括:inode文件,包含文件系统所有的文件inode ;块图文件,包含文件系统的块描述,用以识别空闲块。
[0056]具体的,本“写时复制”文件系统的inode分为磁盘inode (inode_disk)和内存中的inode (inode_incore),两者结构有一定区别。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1