分享
 
 
 

使用nfs进行网络备份

王朝other·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

关于一个网络的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的知识,但是总而言之,这是保护有价值数据的最可信赖的方式之一。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有