Board logo

标题: Linux 网络文件系统的数据备份及恢复机制实现(2) [打印本页]

作者: yuyang911220    时间: 2016-9-11 21:17     标题: Linux 网络文件系统的数据备份及恢复机制实现(2)

首先,我们来分析一下系统退出后数据的情形,主要涉及到退出的服务器和正常的主服务器与备份服务器,如图 4 所示:
图 4 一个系统退出后数据状态示意图


在上图中,退出服务器最后生成的版本号为 i,系统退出后,一方面主文件服务器会察觉到同步数据无法从退出服务器返回结果,这样的话它就会重发同步请求,经过 3 次重发后,如果依然没有返回信息,则认为该服务器退出服务,因此会把同步数据备份到磁盘文件中,并记录下该服务器在同步数据文件中的起始位置,这当由多个文件服务器退出时可以分别识别出来。由于退出系统无法继续保持同步,因此其状态会与工作的文件服务器不一致,具体表现在以下几个方面:
正如上面所述,全部服务器均出现问题的概率是很小的,但是,不能简单的排除这种情况的出现,特别是本方案采用数据同步机制,即多个站点的数据是保持快速同步的,这虽然能保证动态迁移的顺利完成,但是也带来较大的风险,就是会出现数据”污染”的自动传播,当主文件服务器中的文件数据因为某些原因(主要是对文件的非法访问)造成数据非法修改时,会立即传播到其他备份节点,这样的话,不管服务迁移到哪台机器均会出现错误。
针对这种情况,我们采取了以下措施:当发现非法修改造成数据污染时,系统可以自动命令各站点恢复到指定的版本,如前一版本(可以由管理员配置成前一、二、三个版本);管理员也可以干预这一过程,强制各站点恢复到同一指定的版本,从而保证全局文件系统使用同一正确版本。
NFS 文件细粒度恢复技术
在传统恢复技术中,一方面由于数据备份不是实时进行的,当出现事故需要恢复时,最新的备份数据与最新数据之间存在一个时间差,这样就造成了该时间段内数据的丢失(见图 5);同时,传统的数据备份是一定时间段后数据的增量备份,是一段时间内所有文件操作叠加后的结果,因而无法精确知道在这段时间内实际数据的变化过程,因而也无法从所有这些操作中定位非法操作,并进行选择性的恢复,以保证数据的正确性。
图 5 因非实时备份造成恢复时的数据丢失示意图


基于上述考虑,我们不但采用了增量方式的多版本备份恢复技术,同时还对文件的修改日志进行了实时的备份,这样就可以在事故发生后进行基于文件操作的精确恢复,并支持允许剔除非法操作的选择性恢复,这样既能尽量避免因事故造成的数据丢失问题,又能通过选择性恢复较好保证数据的正确性,同时,还可以通过对日志的分析,结合数据的精确恢复,达到发现犯罪线索、获得有效证据的目的,为打击网络犯罪提供有力的技术手段。在这里,精确性恢复指的是恢复某一时段的所有操作,一般是在某一版本后的所有操作,不由用户进行选择,而选择性恢复则指的是某一时间段内的所有操作构成的集合的子集,需要恢复的操作由用户通过查询、浏览等工具来进行选择。在我们的定义中,实际上可以认为精确恢复为选择性恢复的一个特例。
我们首先需要有相关的解决方法来记录下具体的操作信息,形成操作日志文件,从而作为分析的证据(参见图 6)。我们使用的策略是通过修改服务器操作系统内核调用 nfsd_write()、nfsd_create()……。从中取到调用处理对象的文件、目录的全路径名,写进文件,在内核中截获相应的文件操作请求。下面以 nfsd_rename()系统调用为例,进行扩充、修改而实现记录操作日志的功能。
[table][/table]

该文件是在 nfs 服务器端执行 nfs 客户机发送过来的修改文件或者是目录的原函数。在这里,我们可以通过添加自己的代码,来将创建的目录和文件名存入一个磁盘文件当中,以备后面的备份和恢复操作。
图 6 NFS 文件细粒度恢复日志产生示意图


获得了操作日志信息,然后就可以进行精确恢复和选择性恢复时。首先由用户利用数据查询、浏览工具确定需要恢复的文件操作集,然后利用相应的日志数据按记录产生顺序逐条生成恢复请求,发送给文件服务器端的代理程序,由它通过 proc 文件请求 NFS 文件系统恢复模块进行恢复,恢复模块收到请求后,取出相关数据,然后通过调用底层 ext3 文件系统基本操作完成该次文件操作的”重放”,最后返回执行结果,通过 proc 文件通知代理程序,代理程序再通知管理端,管理端再发送下一条恢复请求,及到所有选中的操作全完成为止。具体实现模式请参看图 7:




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0