新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > Linux 网络文件系统的数据备份及恢复机制实现

Linux 网络文件系统的数据备份及恢复机制实现

作者:时间:2016-09-12来源:网络收藏

系统简介

本文引用地址:http://www.eepw.com.cn/article/201609/304200.htm

系统(NFS)协议是由 Sun MicroSystem 公司在 20 世纪 80 年代为了提供对共享文件的远程访问而设计和实现的,它采用了经典的客户机/服务器模式提供服务。为了达到如同 NFS 协议通过使用 Sun 公司开发的远在本机上使用本地文件系统一样便捷的效果,NFS 通过使用远程过程调用协议(RPC Protocol)来实现运行在一台计算机上的程序来调用在另一台远程机器上运行的子程序。同时,为了解决不同平台上的数据交互问题,它提供了外部数据表示(XDR)来解决这个问题。为了灵活地提供文件共享服务,该协议可以在 TCP 协议或者是 UDP 协议上运行,典型的情况是在 UDP 协议上运行。在此基础上,NFS 在数据的传送过程中需要 RPC 命令得到确认,而且在需要的时候会要重传,这样既可以通过 UDP 协议获得较高的通信效率,也能通过 RPC 来获得较高的通信可靠性。

由于 NFS 基于 C/S 模式提供服务,所以它的核心组件主要包括客户机和服务器两部分。图 1 详细说明了 NFS 的主要组件以及主要的配置文件。在服务器端,portmap、mountd、nfsd 三个监控程序将在后台运行。portmap 监控程序用来注册基于 RPC 的服务。当一个 RPC 的监控程序启动的时候,它告诉 portmap 监控程序它在哪一个端口进行侦听,并且它在进行什么样的 RPC 服务。当一个客户机向服务器提出一个 RPC 请求,那么它就会和 portmap 监控程序取得联系以确定 RPC 消息应该发往的端口号。而 Mountd 监控程序的功能是来读取服务器端的/etc/exportfs 文件并且创建一个将服务器的本地文件系统导出的主机和网络列表,因而客户机的挂接(mount)请求都被定位到 mountd 监控程序(daemon)。当验证了服务器确实具有挂接所请求的文件系统的权限以后,mountd 为请求的挂接点返回一个文件句柄。而 nfsd 监控程序则被服务器用来处理客户机端发送过来的请求。由于服务器需要同时处理多个客户机的请求,所以在缺省情况下,操作系统将会自动启动八个 nfsd 线程。当然,如果 NFS 服务器特别忙的时候,系统有可能根据实际情况启动更多的线程。

图 1 系统简图

图 1 网络文件系统简图

NFS 的客户机与服务器之间通过 RPC 进行通信,通信过程如下所示:

用户将 NFS 服务器的共享目录挂载到本地文件系统中。

客户访问 NFS 目录中的文件时,NFS 客户端向 NFS 服务器端发送 RPC 请求。

NFS 服务端接收客户端发来的 RPC 请求,并将这个请求传递给本地文件访问程序,然后访问服务器主机上的一个本地的磁盘文件。NFS 服务器可以同时接收多个 NFS 客户端的请求,并对其进行并发控制。

NFS 客户端向服务器主机发出一个 RPC 调用,然后等待服务器的应答。NFS 客户端收到服务器的应答后,把结果信息展现给用户或应用程序。

NFS 下的、恢复的主要功能

对数据进行备份与恢复是保证数据安全和业务连续性的非常成熟的做法。在 下的本地文件系统(例如 Ext2、Ext3 等)中,和恢复一般采用常规的办法来进行操作,例如使用 Tar、Archive 等。而对于 NFS 来说,其需要采用量身定制的方法来进行。

为了保证数据在灾难环境中的可用性和业务连续性,针对它的数据备份、恢复方案应具备如下重要功能:

通过对系统重要数据的快速备份,切实保证系统数据的安全;

可以根据指令完成备份系统的实时切入,保证服务不被中断,保持系统持续运行的能力;

通过实时记录所有文件的操作日志,系统管理员能够在发生灾难的情况下对日志进行分析和取证,从而发现入侵者的蛛丝马迹。

NFS 多版本备份技术

为了保证服务器出现故障后能迅速恢复,要求系统数据能快速恢复到一个最近的正确状态,所有这些都需要多版本技术的支持,通过同步记录文件的在某些时刻的状态,在整个系统范围内建立起类似于数据库系统的”检查点”,以保证上述目标的实现。

对于多版本系统而言,需要较好地解决两个方面的问题:性能和空间利用率。对于前者,最主要的是保证在生成版本的时候能够快速完成,同时恢复时也具有较好的性能。此外,系统引入多版本造成的整体开销也应该比较理想。对于第二点,主要考虑是节约磁盘空间,虽然随着硬件技术的不断发展,磁盘空间越来越大,性价比也越来越高,但是当版本较多而且文件数量较多、较大时,引入多版本增加的开销也可能相当可观,同时,较大的空间也意味着版本生成时可能需要更多的写操作,这样也必将影响总体性能。

为了保证引入多版本特性后文件系统仍具有较好的性能,以及保证较高的空间利用率,我们开发了一种高效的惰性版本生成算法。主要思想是:生成版本时不进行文件的复制,仅复制目录结构,在新版本生成后到下一版本生成前,如果有文件需要修改,则第一次修改时对该文件进行复制,从而保证该文件状态与对应的版本保持一致。

在一般情况下,目录结构的数据量远远小于文件的数据量,因而这种方法可以大大降低版本生成时需要复制的数据量,因而具有较高的性能。同时,这种把单个文件版本生成的实际操作推后到非做不可的时候,并且任意文件在两次版本之间最多生成一次版本,因此这种惰性策略可以使需要实际生成版本的文件数量达到最少,同时还可以把多个文件版本生成操作分散到具体的文件操作中,从而避免了集中的一次性版本生成方法可能造成的服务暂时停顿的问题。

版本生成后的结构如图 2 所示。

图 2 多版本生成示意图

图 2 多版本生成示意图

具体算法包括两个部分,即版本生成算法和文件第一次修改处理算法,版本生成算法主要完成版本生成工作,主要过程如下:

找到需要形成版本的最高层目录作为原目录;

利用文件系统提供的函数,生成新的目录节点,称为新目录;


上一页 1 2 3 4 5 6 下一页

评论


相关推荐

技术专区

关闭