关于一个网络的unix主机的正确备份方法,系统管理员们存在很多的争论。有些 认为磁带就是答案,而其他一些人则倾向于更先进一些的方法,比如可重写的cdrom。 不管什么方法,他们的最终目标都是:备份网络主机,并能够方便地索引和恢复。 80年代末期,为节省开支,我决定使用一个闲置的服务器运行nfs,它有一个装载了 1/4英寸的dc6525磁带的500兆磁带机。方法很简单,同时它工作的也很好。我为每台主机 分配了三盘磁带,每星期进行三次循环备份。唯一的问题是磁带太笨重了,而且很多情况 下不可靠。dc6525的时代过去了,更贵、更复杂的设备取代了它们。 过去几年里,我开始更新我的24台主机的网络。在开始前, 我考虑了可写cdrom和其 他一些商业产品。在对比了海量存储设备的商业产品的开销后, 我断定建造一个运行 linux的中心nfs服务器更为经济。基于我的原始模式,我用两个运行raid的热插拔scsi硬 盘取代了磁带机。这样能进行实时备份,数据可移动,同时将来能方便的扩充。 本文中我将探讨nfs使用的一些很基本的方法。这些方法很多为你们所熟知, 但往往 被认为太复杂、太过时或者太难以实现而丢在一边。我们将仅仅接触nfs庞大冰山的一角。 由于nfs几乎是无限的可定制,这里的例子仅仅用来作为基本的指导。 一般而言,进行任何形式的备份都需要思考,计划,以及对文件、外设和每个主机任 务的深入了解。网络中任何两个备份方案都不尽相同。备份的核心包括/etc目录下的配置 文件,各种cron文件,以及各系统特定的二进制程序。服务器中,根据服务器任务的不同, 我们需要备份/var/mail,web目录,或者/var/db。 制定备份计划的第一步是,仔细检查目标系统,确定系统相关的文件,并记录下来。 nfs基础 在开始前,先介绍一些nfs的基本概念。nfs运行于udp上,在1989年三月由sun微系统 公司提出并定为rfc1094。多数人认为nfs不够安全,容易受到一系列漏洞的攻击,特别是 rpc portmapper的漏洞。除开安全性不谈, nfs仍然是公认的装载和备份远程文件系统的 方法,特别是在局域网上。也就是说,在公网上使用nfs时,理解防火墙技术相当重要。 你至少需要使用tcp wrapper或者在/etc/hosts.allow文件中提供可信赖名单。 永远不要 毫无保护的使用nfs,并且总是在没有使用时杀掉mountd和rcp.portmap进程。 nfs的运作原理是远程装载,在每个主机上运行unix的portmapper和mountd(处理nfs 装载请求的服务器)守护进程。/etc/exports控制对服务器的访问,它包含一个授权主机 的清单,以及用户权限和允许的目录。 下面是mountd帮助手册的一段话: 当mountd启动时,会使用mount系统调用将输出主机的地址和配置载入到内核中。 一 旦更改exports文件,应当向mountd进程发送挂起信号,以使其重新载入配置信息。 在发 送SIGHUP信号后,应检查syslog确认mountd没有在exports文件中发现语法错误。如果 mountd发现内核不支持nfs,将试图装载包含nfs程序的lkm。 大部分bsd内核缺省时内置了nfs支持并可以在/etc/rc.conf中配置, 而linux则需要 可加载模块或者重新编译内核。 nfs备份原理 nfs备份方法相对来说很简单:将所有主机装载到nfs服务器上,编写一个.tar备份脚 本,并检查所有机器的下列权限设定是否一致:1、读写存取 2、装载权限 3、 GID/UID 输出和权限: /etc/exports文件包括了nfs服务器的各个选项。在下面的例子中, jack.foo.com将 在nfs上装载到/jack,并允许读写。 # File /etc/exports on NFS Server # When backing up an entire system, including root files (UID 0) # you would use the no_root_squash option as outlined below * # For files belonging to jack, the only option required is 'rw' /jack jack.foo.com(rw,no_root_squash) UID/GID设置可能会令人混淆,特别在nfs服务器和主机是不同unix变种,或者使用不 同的密码机制的情况下。所有者和组权限依赖于UID/GID,在client和server段必须一致。 如果用户jack在客户机jack上的UID是2020,他必须在nfs服务器上的UID也是2020。 如果nfs服务器上已经有用户使用UID2020,假设叫sam,则从客户机的UID2020在服务 器上显示为sam。当UID 2020还未使用时,文件将简单标记为UID 2020所有, 而没有用户 标识。(我们经常碰到这种情况,当解压ftp下来的文件时,原文件用户joe的UID 1010在 我们的系统上属于另一个用户,结果解压出来的文件就归另一用户所有了。) 当恢复数据的时候,基于同样的原因,必须确认目标主机的UID/GID匹配。exports的 帮助手册说: 通常,不希望客户机上的root用户在nfs服务器上也有root权限。为此,uid 0通常映 射为另一个id:所谓的匿名或者nobody。这叫做root squashing,是默认配置,可使用 no_root_squash关闭。小心使用此选项。 注意要备份密码和组文件。每当在客户机上加减用户,记得要更新备份。 两个简单的nfs服务器脚本 本例中,我们启动rpc.portmap, rpc.mountd和rcp.nfsd, 并将每个进程的进程id写 入nfs.pid #!/bin/bash # Script to start NFS /usr/sbin/rpc.portmap sleep 1 /usr/sbin/rpc.mountd sleep 1 /usr/sbin/rpc.nfsd /sbin/pidof /usr/sbin/rpc.portmap > /var/run/nfs.pid /sbin/pidof /usr/sbin/rpc.nfsd >> /var/run/nfs.pid /sbin/pidof /usr/sbin/rpc.mountd >> /var/run/nfs.pid echo "NFS READY" # EOF 我们使用下面的脚本杀掉nfs.pid中的所有进程,从而停止nfs。 #!/bin/bash # Script to stop NFS kill `cat /var/run/nfs.pid` /bin/rm /var/run/nfs.pid echo "NFS HALTED" 同步备份 通过在所有主机和nfs服务器上设置cron任务来在特定时间启动、停止和使用nfs,我 们可以实现同步备份。在备份后,所有主机停止nfs服务。为了精确同步, 所有主机应当 使用中心ntp时间服务调整时间。 nfs服务器通过与上面相似的脚本在cron中启动, 并依据完全备份所需要的时间来确 定激活的时间段。对较大的备份来说,30分钟是一个不错的选择。之后,所有客户端装载 到服务器上,写入它们的文件,然后卸载。本例中使用tar。其他方法包括使用dump等命令。 #!/bin/sh # File NFSBackup Script for jack.foo.com echo 'Initialize NFS Backup' mount nfs.foo.com:/jack /mnt/jack df echo "Is nfs.foo.com mounted?" read ans; echo "Full Backup of Jack to follow" sleep 4 cd /mnt/jack tar -cvvf jack.tar /vmlinuz /System.map /root /mydocs /etc /bin /sbin /var/local /var/spool /usr/sbin /usr/bin home /usr/home/glenn /usr/home/ifconfig sleep 5 umount /mnt/jack echo "finished" 恢复文件 几乎所有实际应用中,都使用手工恢复。直到今天,完全恢复还是令人混淆,特别是 当目标主机有多种用途。典型情况下,我们将主机装载到nfs服务器, 从远端文件系统读 取备份来完成恢复工作。 使用mount命令将jack.foo.com装载到nfs.foo.com上: mount nfs.foo.com:/jack /mnt/jack; 然后改变路径到 /mnt/jack 只需简单的从nfs.foo.com上untar jack.tar即可进行恢复。 tar -xvf jack.tar 然后将需要的文件从/mnt/jack拷贝到适当的位置。 以上仅仅是众多可用方法中的一种。 概述 下面是需要遵循的基本规则: * 在完全重新安装系统的情况下,确认新安装的操作系统版本和原系统相同。这对所有配置文件的匹配尤其重要。 * 确认所有用户的UID/GID和以前相同。使用原始的的密码和组文件检查所有用户。注意每个UID/GID与远端系统一致。简单的使用root恢复一切是不够的。 * 记得在重装时恢复原始的内核。比如在linux下,运行lilo或者grub装载原来的内核。 * 记住存档备份并放置到安全的地方,最好是离线。冗余能够在物理损坏时挽救你的数据。 我的工作始终围绕着unix,其间我接触过不下50种备份方法,包括复杂的硬件设备,媒质,各种图形界面和基于web的界面。有些现在仍然使用,而大多数则已淘汰。就我而言,nfs加上tar(dump)仍然是最好的选择。它需要一些正确配置nfs的知识,但是总而言之,这是保护有价值数据的最可信赖的方式之一。 (责任编辑:IT) |