发明名称 Linux文件系统的多点备份和实时保护方法
摘要 本发明公开了一种Linux文件系统的多点备份和实时保护方法,包括步骤:在Linux文件系统存储介质的未使用空间上建立备份区,对Linux文件系统的读写操作进行实时监控,将修改Linux文件系统的数据存储到备份区,并标记为备份版本,对Linux文件系统进行备份;备份区支持保存多个备份版本,还原Linux文件系统时,按照所选择的备份版本对Linux文件系统进行还原;拦截对Linux文件系统存储介质的读写请求,防止未授权的读写操作,实时保护Linux文件系统和备份区。本发明能够快速备份、快速还原Linux文件系统到任意备份版本、实时保护Linux文件系统不被修改。
申请公布号 CN102508743B 申请公布日期 2014.06.04
申请号 CN201110353794.6 申请日期 2011.11.10
申请人 武汉噢易科技有限公司 发明人 刘奇;曾丽星;邹新宇
分类号 G06F11/14(2006.01)I 主分类号 G06F11/14(2006.01)I
代理机构 北京科亿知识产权代理事务所(普通合伙) 11350 代理人 汤东凤
主权项 一种Linux文件系统的多点备份和实时保护方法,其特征在于包括以下步骤:A、在Linux文件系统存储介质的未使用空间上建立备份区,对Linux文件系统的读写操作进行实时监控,将修改Linux文件系统的数据存储到备份区,并标记为备份版本,对Linux文件系统进行备份;步骤A中建立备份区的过程如下:A101、将Linux文件系统的存储介质连续划分为固定大小的块,并顺次对块进行编号;A102、在保存Linux文件系统的存储介质上划分一块未被Linux文件系统使用的空闲区域作为备份区;A103、在备份区建立参数区,保存块引用计数表、备份版本信息表、映射数据缓冲区信息表和备份版本描述信息区;所述备份版本信息表中的每条记录包括以下字段:唯一id、备份版本类型type、备份版本的描述信息desc、备份版本的块类型表在备份版本描述信息区的偏移位置blk_type_table、备份版本的块映射表在备份版本描述信息区的偏移位置blk_redir_table;映射数据缓冲区信息表记录了预分配的缓冲区的属性信息,包括以下字段:缓冲区的起始位置begin、缓冲区的结束位置end、缓冲区中首个未分配的空闲块在缓冲区的偏移位置free_offset;A104、在备份版本描述信息区,保存每个备份版本的块类型表和块映射表,块的类型包括:有效数据、空闲、临时有效数据、正式映射源、临时映射源,块映射表中包括映射源块号src和映射目标块号dst;A105、在备份区建立映射数据缓冲区,保存每个备份版本中产生的映射目标块,缓冲区的参数由映射数据缓冲区信息表维护;A106、初始化备份区,自动创建Linux文件系统的初始备份版本;A107、自动创建临时备份版本;步骤A中对Linux文件系统进行备份的过程如下:A201、查询备份版本信息表,找到第一个临时备份版本的记录,称为BP1;A202、遍历BP1的块类型表,找到类型为“临时有效数据”和“临时映射源”的块,在块引用计数表中将对应块的引用计数加1;A203、修改BP1的块类型表,将类型“临时有效数据”改为“有效数据”,将类型“临时映射源”改为“正式映射源”;A204、修改BP1,设置type为正式备份版本,设置唯一id;A205、复制BP1在备份版本描述信息区中的记录,称为BD2;A206、查询备份版本信息表,找到第一个id为0的备份版本记录,称为BP2,修改BP2,设置blk_type_table指向BD2的块类型表,设置blk_redir_table指向BD2的块映射表;B、备份区支持保存多个备份版本,还原Linux文件系统时,按照所选择的备份版本对Linux文件系统进行还原;步骤B中还原Linux文件系统的过程如下:B1、选择待还原的备份版本,作为源备份版本;B2、查询备份版本信息表中源备份版本的记录SRC‑BP;B3、查询备份版本信息表中的临时备份版本记录,如果不存在,查询第一个id为0的备份版本记录,被查询到的记录称为TMP‑BP,修改该记录的类型为临时版本;B4、用SRC‑BP的块类型表覆盖TMP‑BP的块类型表;B5、回收TMP‑BP映射数据占用的缓冲块;B6、用SRC‑BP的块映射表覆盖TMP‑BP的块映射表;C、拦截对Linux文件系统存储介质的读写请求,防止未授权的读写操作,实时保护Linux文件系统和备份区;步骤C中实时保护Linux文件系统的过程如下:C1、查询备份版本信息表中第一个id为0的备份版本记录BP2;C2、拦截到对Linux文件系统的读操作请求后,以被请求块的块号为索引,在BP2的块类型表中查询被请求块的类型,如果被请求块的类型为“有效数据”、“空闲”或“临时有效数据”,则直接读被请求块的数据;如果被请求块的类型为“正式映射源”或“临时映射源”,则以被请求块号为索引,在BP2的块映射表中查找块的映射关系记录,根据记录的dst字段,获得映射目标块号,从映射数据缓冲区读取映射目标块的内容;C3、拦截到对Linux文件系统的写操作请求后,以被请求块的块号为索引,在BP2的块类型表中查询被请求块的类型,C301、如果被请求块的类型为“空闲”且块的引用计数为0,则直接修改被请求块的数据,然后在BP2的块类型表中将块类型“空闲”改为“临时有效数据”;C302、如果被请求块的类型为“空闲”且块的引用计数大于0,则执行以下步骤:C3021、从映射数据缓冲区申请一个缓冲块;C3022、申请一个内存缓冲区,从被请求块读取块的原始内容到内存缓冲区;C3023、将写请求的内容写入内存缓冲区;C3024、将内存缓冲区的内容写入缓冲块;C3025、在BP2的块映射表中增加一条记录,将被请求块的块号作为映射源块号保存在记录的src字段,将缓冲块的块号作为映射目标块号保存在记录的dst字段;C3026、修改BP2的块类型表,将被请求块的类型“空闲”改为“临时映射源”;C303、如果被请求块的类型为“临时有效数据”,则直接修改被请求块的内容;C304、如果被请求块的类型为“有效数据”,则执行以下步骤:C3041、从映射数据缓冲区申请一个缓冲块;C3042、申请一个内存缓冲区,从被请求块读取块的原始内容到内存缓冲区;C3043、将写请求的内容写入内存缓冲区;C3044、将内存缓冲区的内容写入缓冲块;C3045、修改BP2的块映射表,增加一条新记录,将被请求块的块号作为映射源块号保存在src字段,将缓冲块的块号作为映射目标块号保存在dst字段;C3046、修改BP2的块类型表,将被请求块的类型“有效数据”改为“临时映射源”;C305、如果被请求块的类型为“临时映射源”,则以被请求块的块号为索引,查询BP2的块映射表,根据记录的dst字段,获得映射目标块号,用写请求的内容修改映射目标块;C306、如果被请求块的类型为“正式映射源”,则执行以下步骤:C3061、从映射数据缓冲区申请一个缓冲块;C3062、申请一个内存缓冲区,以被请求块的块号为索引,查询BP2的映射表获得映射目标块号,读取映射目标块的内容到内存缓冲区;C3063、将写请求的内容写入内存缓冲区;C3064、将内存缓冲区的内容写入缓冲块;C3065、修改BP2的块映射表,将缓冲块的块号作为映射目标块号保存在被请求块的记录的dst字段;C3066、修改BP2的块类型表,将被请求块的类型“正式映射源”改为“临时映射源”。
地址 430074 湖北省武汉市东湖高新技术开发区SBI创业街6栋7层