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

文档序号:9371864阅读:来源:国知局

[0057]1、inode_disk:
[0058]本实施例提供的Inode_disk由两部分组成,第一部分包括所有者、权限、atime等信息。第二部分为16个指向数据块或间接块的指针,每个指针长度为4Byte,当文件数据长度不足64Byte时,数据直接放在inode_disk的第二部分;当文件数据长度不足64KB时,16个指针直接指向数据块;当文件数据长度不足64M时,通过一级间接块组织数据;当大于等于64M时,需要两级间接块组织数据。
[0059]2、inode_incore:
[0060]本实施例提供的inode_incore由三部分组成。第一部分包括dirty标记、dirty标记,以及所处内存inode链表的指针。第二部分同样为16个数据结构的指针,同inode_disk相似,每个指针长4Byte,指向数据块或间接块。第三部分为inode_disk结构,该部分由磁盘的inode file中的inode载入。
[0061]具体的,参见图2,为本实施例提供的文件数据在内存中的组织形式示意图,inode_incore的buffer指针指向间接数据buffer,间接buffer中包含1024个指针指向2014个4k文件数据buffer,并记录1024个文件数据块的磁盘地址。
[0062]具体的,在本实施例中,每个block map长度为32bit,bitO标示block是否在当前活动文件系统中;bitl_bit20为snapshot位,标示是否在某个快照中;bit31为update位,标示当前block是否需要下刷到磁盘。只有当block map的所有位都为O时,此block才是空闲可用的。
[0063]本发明实施例提供的一种实现写时复制文件系统的方法,包括:在内存中寻找带有脏数据标识的第一元数据;将所述第一元数据的lock标识置位;为所述第一元数据对应的脏数据分配新的磁盘空间,并将所述脏数据下刷至所述新的磁盘空间;将所述第一元数据写到与所述新的磁盘空间位置相邻的元数据文件中;并将block map文件中的与所述脏数据对应的第二元数据写入所述元数据文件中,这种将脏数据下刷到新的磁盘空间,不直接在原磁盘数据上进行修改的方法,保证了文件系统时刻处于一致性状态,并且将元数据写入元数据文件中,减少了不必要的磁盘寻道时间。
[0064]优选的,在本发明的另一实施例中,若所述第二元数据没有成功写入所述元数据文件中,则将所述第二元数据存放在write wait队列中,并重新执行将所述第二元数据写入所述元数据文件中的步骤。
[0065]参见图3,本发明实施例提供的一种实现写时复制文件系统的装置,包括:
[0066]寻找模块100,用于在内存中寻找带有脏数据标识的第一元数据;
[0067]置位模块200,用于将所述第一元数据的lock标识置位;
[0068]分配模块300,用于为所述第一元数据对应的脏数据分配新的磁盘空间;
[0069]下刷模块400,用于将所述脏数据下刷至所述新的磁盘空间;
[0070]第一元数据写入模块500,用于将所述第一元数据写到与所述新的磁盘空间位置相邻的元数据文件中;
[0071]第二元数据写入模块600,用于将block map文件中的与所述脏数据对应的第二元数据写入所述元数据文件中。
[0072]优选的,在本发明的另一实施例中,所述寻找模块100,包括:
[0073]在内存中寻找有所述脏数据的元数据链表;和/或,没有所述脏数据但元数据本身修改链表上的元数据。
[0074]优选的,在本发明的另一实施例中,所述分配模块300,包括:
[0075]预先将block map文件中初始元数据写入所述元数据文件中,并为所述脏数据分配新的磁盘空间。
[0076]优选的,在本发明的另一实施例中,所述第二元数据写入模块600,包括:
[0077]将所述脏数据对应的数据块的fs位值复制到所述block map文件中的update位。
[0078]优选的,在本发明的另一实施例中,若所述第二元数据写入模块600没有成功将所述第二元数据写入所述元数据文件中,则将所述第二元数据存放在write wait队列中,并重新将所述第二元数据写入所述元数据文件中。
[0079]本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
[0080]对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
【主权项】
1.一种实现写时复制文件系统的方法,其特征在于,包括: 在内存中寻找带有脏数据标识的第一元数据; 将所述第一元数据的lock标识置位; 为所述第一元数据对应的脏数据分配新的磁盘空间,并将所述脏数据下刷至所述新的磁盘空间; 将所述第一元数据写到与所述新的磁盘空间位置相邻的元数据文件中;并将blockmap文件中的与所述脏数据对应的第二元数据写入所述元数据文件中。2.根据权利要求1所述的方法,其特征在于,所述在内存中寻找带有脏数据标识的第一元数据,包括: 在内存中寻找有所述脏数据的元数据链表;和/或,没有所述脏数据但元数据本身修改链表上的元数据。3.根据权利要求2所述的方法,其特征在于,为所述第一元数据对应的脏数据分配新的磁盘空间,包括: 预先将block map文件中初始元数据写入所述元数据文件中,并为所述脏数据分配新的磁盘空间。4.根据权利要求3所述的方法,其特征在于,所述将blockmap文件中的与所述脏数据对应的第二元数据写入所述元数据文件中之后,包括: 将所述脏数据对应的数据块的fs位值复制到所述block map文件中的update位。5.根据权利要求4所述的方法,其特征在于,若所述第二元数据没有成功写入所述元数据文件中,则将所述第二元数据存放在write wait队列中,并重新执行将所述第二元数据写入所述元数据文件中的步骤。6.一种实现写时复制文件系统的装置,其特征在于,包括: 寻找模块,用于在内存中寻找带有脏数据标识的第一元数据; 置位模块,用于将所述第一元数据的lock标识置位; 分配模块,用于为所述第一元数据对应的脏数据分配新的磁盘空间; 下刷模块,用于将所述脏数据下刷至所述新的磁盘空间; 第一元数据写入模块,用于将所述第一元数据写到与所述新的磁盘空间位置相邻的元数据文件中; 第二元数据写入模块,用于将block map文件中的与所述脏数据对应的第二元数据写入所述元数据文件中。7.根据权利要求6所述的装置,其特征在于,所述寻找模块,包括: 在内存中寻找有所述脏数据的元数据链表;和/或,没有所述脏数据但元数据本身修改链表上的元数据。8.根据权利要求7所述的装置,其特征在于,所述分配模块,包括: 预先将block map文件中初始元数据写入所述元数据文件中,并为所述脏数据分配新的磁盘空间。9.根据权利要求8所述的装置,其特征在于,所述第二元数据写入模块,包括: 将所述脏数据对应的数据块的fs位值复制到所述block map文件中的update位。10.根据权利要求9所述的装置,其特征在于,若所述第二元数据写入模块没有成功将所述第二元数据写入所述元数据文件中,则将所述第二元数据存放在write wait队列中,并重新将所述第二元数据写入所述元数据文件中。
【专利摘要】本发明实施例公开了一种实现写时复制文件系统的方法及装置,包括:在内存中寻找带有脏数据标识的第一元数据;将所述第一元数据的lock标识置位;为所述第一元数据对应的脏数据分配新的磁盘空间,并将所述脏数据下刷至所述新的磁盘空间;将所述第一元数据写到与所述新的磁盘空间位置相邻的元数据文件中;并将block?map文件中的与所述脏数据对应的第二元数据写入所述元数据文件中,这种将脏数据下刷到新的磁盘空间,不直接在原磁盘数据上进行修改的方法,保证了文件系统时刻处于一致性状态,并且将元数据写入元数据文件中,减少了不必要的磁盘寻道时间。
【IPC分类】G06F3/06
【公开号】CN105094711
【申请号】CN201510607910
【发明人】苑忠科, 张会健, 李美欣
【申请人】浪潮(北京)电子信息产业有限公司
【公开日】2015年11月25日
【申请日】2015年9月22日
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1