UnixLinux 自动化管理 数据备份与同步

数据是 Unix/Linux 系统中最重要的组成部分 , 但是数据的备份与同步却是最容易被忽略的任务。通过定期的数据备份与同步,可以在磁盘出现故障时,最大程度的降低数据损失。当用户误操作导致数据损坏或者丢失时,可以快速恢复。

数据的备份不同于整个系统备份,将不同数据按照优先级分类,根据用户需求,备份重要文件。

从而使数据独立于操作系统,降低备份成本与时间。

不同的操作系统可能使用不同的数据备份方式,本文介绍了通用的 Unix/Linux 实用程序(tar 和 cpio),标准的 AIX 实用程序 (mksysb 和 backup),以及远程备份工具 rsync。[@more@]确定备份策略

在商业环境中,必须首先确定需要备份哪些文件以及备份所消耗的时间。如果备份过多的文件,会导致备份系统的成本过于庞大,从而带来不必要的开支。如果没有备份足够的数据,那么可能导致重要数据的丢失,反而带来更大的损失。

当然,备份整个系统是简单易行的,但是通常这样的备份是浪费的且缺乏意义的。从减少备份系统的成本出发,只有当某些数据足够重要,需要共享,才具有备份的必要。

基本数据一般分为以下几类:

* 用户数据:所有的用户数据以及用户目录,及私人文件等。
* 系统信息:系统用户,组,密码,主机列表等。
* 应用程序:系统上启动的服务,比如 web 应用程序,apache 等。
* 应用程序的配置文件与数据:针对不同的应用程序,不同的配置参数和重要数据文件。
* 数据库:事实上数据库可以单独提供针对数据库所有数据的备份与同步功能。

简单的数据备份是指一次性备份所有数据,然后再备份上次备份之后所做的修改。第一次备份是指“完全备份”,后一次备份是“增量备份”。通常适用于个人或者小型网站。对于机构或者大型网站来说,需要采用“多级备份”。将完全备份设定为 0 级,增量备份的级别分别是 1,2,3 等。在每个增量备份级别上,可备份同级或上一级的上次备份以来的变动。

比如,如果我们有 1 0 盘磁带,如果使用简单备份进行日备份,则可恢复两周内的数据。

如果使用多级备份,例如:

磁带 1-2, 月备份,每月第一个星期五

磁带 3-6, 周备份,每周星期五(排除第一周)

磁带 7-10,日备份,每周星期一到四,则可以将备份历史扩展到两个月。



实用程序和命令

tar 命令

tar 命令是通用性较强的 Unix/Linux 归档命令。tar 将一个或多个文件和目录打包为单个文件,并保持原始文件的大小、拥有者、权限、文件类型及其在文件系统层次结构中的位置。tar 是磁带存档程序 (tape archive) 的首字母缩写,是最易用的数据备份实用程序。

表 1. tar 命令的常用参数:
参数 含义
-c 该参数会创建一个新的存档
-v 该参数会列出每个处理的文件名称
-f 该参数会指定存档或设备名称
-z 该参数将用 gzip 对存档进行压缩或解压
-x 该参数将从存档文件中提取一个或多个文件

要创建 /CriticalData 的存档文件,使用:

# tar -czvf backup.tar.gz /CriticalData/


要恢复该目录,使用:

# tar -xzvf backup.tar.gz /CriticalData/


tar 在提取文件和较小的目录方面表现不错,如果要恢复文件系统和卷组,我们更倾向于选用 cpio, 或是使用专用性更强的 Linux/Unix 数据备份实用程序。

cpio 命令

cpio 与 tar 类似,是通用性较强的 Unix/Linux 归档命令。一般被用来备份和恢复文件及目录结构。

表 2. cpio 命令的常用参数:
参数 含义
-o 该参数会将数据拷贝到文件或设备中
-i 该参数会将数据从文件或设备中还原到系统中
-v 该参数会列出每个处理的文件名称
-z 该参数会按需要建立目录
-x 该参数会从标准输入读取文件路径名称,然后将这些文件复制到指定的目录
-d 该参数会按需要建立目录
-p 该参数会从标准输入读取文件路径名称,然后将这些文件复制到指定的目录
-B 该参数会将 I/O block 增加到 5120bytes,默认是 512bytes。加快数据备份速度
-m 该参数会保留时间属性
-u 该参数自动将较新的文件替换到较旧的文件

将 /CriticalDate 目录和它的所有文件和子目录建立存档,使用:

# find /CriticalData/ -depth | cpio -ov > backup.cpio


要恢复该目录,使用:

# cpio -ivdum

cpio 建立起来的归档文件包括文件头和文件数据两部分。文件头包含了对应文件的信息。如文件的 UID,GID,连接数以及文件大小等。其好处是可以保留硬连接,在恢复时默认情况下保留时间戳,无文件名称长度的限制。

mksysb 介绍

IBM AIX 与其它的 Unix 系统相比 , 有两个重要的特性: LVM (logical volume manager) 和 ODM (object database manager)。一般而言 , 用 cpio 或 tar 的指令亦可以备份 volume groups ,

但并不能完全正确的备份完整的系统。利用 mksysb 来备份时,可制作一个可开机的磁带 , 并且可以正常的还原系统的 LVM 和 ODM。

mksysb 备份一般用来在文件中或可启动磁带上创建 rootvg 的可安装镜像。如果需要对用户卷组进行备份的话,可使用 savevg。

mksysb 的格式包括:

* 基本操作系统启动镜像
* 基本操作系统安装镜像
* 虚拟目录 (TOC)
* rootvg 上的实际数据


图 1. mksysb 的格式

mkinsttape 镜像包括以下重要文件:

* Tapeblksz 该文件包含运行 mksysb 前设置的磁带驱动器的块大小。
* bosinst.data 该文件指定目标系统的需求以及基本操作系统安装程序是怎样运行
* image.data 该文件包含安装过程中实际安装的镜像的描述数据(文件大小、名称、装入点等)。

表 3. mksysb 命令的常用参数:
参数 含义
-e 该参数将不备份 /etc/exclude.rootvg 文件中定义的文件
-i 该参数将调用 mkszfile 命令自动生成一个新的 image.data 文件
-m 该参数将调用 mkszfile 命令生成映射文件

在运行 mksysb 前,可以运行 mksysb -i 命令来自动生成一个新的 image.data 文件。虚拟 TOC 可以确保 mksysb 磁带中包含的镜像数与基本操作系统安装磁带中的镜像数相同。最后,rootvg 数据包含用 mksysb 命令备份的实际数据。它实际上会使用 backup 命令保存 rootvg 中所有装入的文件系统的内容。

如果对用户卷组进行备份的话,可使用下列的命令:

# savevg -if /dev/rmt0 uservg


其中,-i 参数将调用 mkvgdata 命令;-f 参数将数据存储到指定设备或文件中。

backup 介绍

backup 是 AIX 系统提供的一种备份文件和文件系统的方法,其本身就可以支持增量备份和多级备份,不必借助其它方式,其好处在此不在赘述。

表 4. backup 命令的常用参数:
参数 含义
-level 该参数指定备份级别(0-9), 默认是 9
-i 该参数将按名称备份整个文件系统
-f 该参数将数据备份到指定设备中
-p 该参数在归档之前先打包或压缩,且小于 2G 的文件。适用于不活动的文件系统
-q 该参数指可移动介质已准备就绪
-u 该参数将用文件系统的原始设备名称 , 时间日期以及备份级别来更新 /etc/dumpdates 文件
-v 该参数将在 backup 时显示附加信息

将 /CriticalDate 目录和它的所有文件和子目录备份到指定设备,使用:

# find /CriticalDate -depth | backup -i -f /dev/rmt0


将-level 和 -u 参数结合,可以进行多级和增量备份:

# backup -0 -uf /dev/rmt0 /home


rsync 介绍

如果将数据备份与远程传输结合起来,譬如 scp,就可以实现数据的远程备份。但通常的备份方法,都无法对本地和远程目录中的内容进行同步。

rsync(Remote Sync)是 Unix/Linux 系统下一款优秀的数据备份与同步工具。它可以对文件集进行同步。然而更有价值的是,rsync 使用文件的增量,也就是说,它在网络中仅发送两个文件集合有区别的部分。这样可以占用更少的带宽,并且速度更快。

rsync 的特性:

* 能够更新整个目录树和文件系统
* 保持原文件的权限,时间,软硬链接
* 安装无需特殊权限
* 优化的流程,文件传输速率高
* 可以通过直接的 socket 连接传输文件,或者选择 rsh,ssh 等方式
* 支持匿名传输

表 5. rsync 命令的常用参数:
参数 含义
-a 该参数表示以递归方式传输文件,并保持所有文件属性
-v 该参数显示详细的传输处理
-z 该参数对备份的文件在传输时进行压缩处理
-P 该参数将显示备份过程

如果在客户端对服务器上的重要数据进行备份的话,可使用下列的命令:

清单 1. rsync 命令演示


#rsync – avzP rsync@Server::CriticalData /Backup

===========================
This is Critical Data Server
===========================

receiving file list ...
9 files to consider
Location/
Location/Locationlist1
97164953 13% 1.11MB/s 0:08:57


706609152 100% 1.17MB/s 0:09:37 (xfer#1, to-check=5/9)
Name/Name1
44 100% 0.16kB/s 0:00:00 (xfer#2, to-check=3/9)
Name/Name2
22 100% 0.08kB/s 0:00:00 (xfer#3, to-check=2/9)
Time/Monday
17 100% 0.06kB/s 0:00:00 (xfer#4, to-check=0/9)

sent 32111 bytes received 497214837 bytes 847820.88 bytes/sec
total size is 706609242 speedup is 1.42


首次传输过程进行完全备份,当再次运行该命令时,rsync 将只传输数据的增量。从而完成增量备份。

如果在客户端对服务器上的重要数据进行同步的话,可使用下列的命令:

# rsync -avzP --delete rsync@Server::CriticalData /Backup


这里调用 --delete 选项,表示客户端上的数据要与服务器端完全一致,如果 /Backup 目录中有服务器不存在的文件,则删除。从而保持客户端与服务器的数据同步。

注意:谨慎使用 --delete 选项,最好不要把已经有重要数所据的目录当做客户端的备份目录,否则会误删除重要数据。

如果用客户端的备份数据去恢复服务器,可使用下列的命令:

#rsync – avzPO /Backup/ rsync@Server::CriticalData


这里需要将 rsync.conf 中 read only 设置为 false,同时使 /CirticalData 目录具有写权限。

注意:也可调用 --delete 选项来保持客户端与服务器端的数据同步。在后面,将详细介绍 rsync.conf 的配置。-O 参数用于忽略目录的时间属性。



数据备份与同步的自动化实现

系统管理员必须执行的数据备份与同步任务大多牵涉到某种形式的系统配置,当管辖的任务比较庞大,数据量较多,但操作一样且有固定周期时,采用自动化脚本就成为必然。尤其是为多个操作系统提供支持时。

要实现自动化操作,脚本编制是必须掌握的基本技能。一个脚本由一系列命令构成,这些命令负责执行各种各样的任务。系统管理员在重复执行了几遍类似的命令后,通常就能准确地掌握要点,并希望利用脚本,将重复性的工作交给计算机去做。常用的脚本语言有 Shell,Perl,Tcl/Expect 等。

实用命令的自动化实现

本文的示例主要是通过 Shell 来实现的。Shell 是一种“解释性”语言,列出了管理员通过键盘敲入的相同命令, 并且每次执行一次这样的命令。

例如执行一条简单的 tar 命令,可以使用下面的一个简单的脚本。

清单 2. tar 自动化示例脚本


#!/bin/sh
tar -czvf backup.tar.gz /CriticalData/


如果我们想用其它的命令来实现数据备份,可以将以上的示例脚本中的命令部分替换掉,例如执行一条简单的 cpio 命令,可替换为下面一个简单的脚本。

清单 3. mksysb 自动化示例脚本


#!/bin/sh
find /CriticalData/ -depth | cpio -ov > backup.cpio


事实上我们可以通过 shell 中一些变量设置,条件测试以及流程控制语句来实现不同的需求。例如,管理员希望能够在周一到周日,通过 backup 命令做多级备份。

我们可以设置 Level 变量,当变量满足不同条件时,就可以实现多级备份。

清单 4. backup 自动化示例脚本


#!/bin/sh

// 判读当前系统的日期是星期几
DATE=`date | awk '{ printf $1 }'`
case $DATE in
Mon) LEVEL=1;;
Tue) LEVEL=2;;
Wed) LEVEL=3;;
Thu) LEVEL=4;;
Fri) LEVEL=5;;
Sat) LEVEL=6;;
Sun) LEVEL=7;;
esac

// 备份命令
backup -$LEVEL -uf /dev/rmt0 /home


虽然各种实用程序和命令以及参数各不相同,但 shell 自动化脚本的基本思路是类似的。如果系统管理员需要连续地定期地执行脚本,可以借助 Unix/Linux 系统的 crontab 功能。

rsync 的自动化实现

由于 rsync 在数据备份与同步上的优秀表现,本文将主要介绍用 rsync 来实现数据的备份与同步。

要使用 rsync,只需要将主服务器安装并配置成为 rsync 服务器,将另外一台装有 rsync 的机器作为备份客户端。在对 rsync 服务器配置结束以后,就可以在客户端发出 rsync 命令来实现将服务器端的文件备份到客户端来。在客户端创建自动化脚本,并启用 cron 服务,就可以定期对主服务器的数据进行自动备份与同步。

1. 在服务器端手动创建 rsync 配置文件

创建 rsync.conf 作为服务器配置文件

假设我们在服务器端,设置需要备份的目录 /CriticalData, 但不需要备份 /CriticalData 目录下的 Common 目录。

先创建一个目录,用于存放 rsync 相关配置文件

# mkdir /etc/rsyncd


创建 rsync.conf

#touch /etc/rsyncd/rsyncd.conf


编辑 rsyncd.conf

清单 5.rsyncd.conf 配置文件


清单 5.rsyncd.conf 配置文件


gid = users
read only = true
use chroot = true
transfer logging = true
log format = %h %o %f %l %b
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
secrets file = /etc/rsyncd.secrets
hosts allow = 192.168.0.0/255.255.255.0
max connections = 5
timeout = 300
motd file = /etc/rsyncd/rsyncd.motd

[CriticalData]
path = /CriticalData
list = true
ignore errors
comment =This is Critical Data
auth users = rsync
secrets file = /etc/rsyncd/rsyncd.secrets
exclude = Common/


rsync.conf 中主要分为全局变量和模块两部分。模块用 [ ] 表示,模块之前的为全局变量。

重要参数说明:

path
指定该模块所定义的备份目录的路径,该参数是必须指定的。

exclude
用来指定多个由空格隔开的多个文件或目录 ( 相对路径 ),并将其添加到 exclude 列表中。这等同于在客户端命令中使用 --exclude 参数。一个模块只能指定一个 exclude 选项。但是需要注意的一点是该选项有一定的安全性问题,客户端很有可能绕过 exclude 列表,如果希望确保特定的文件不能被访问,那就最好结合 uid/gid 选项一起使用。

auth users
该选项指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户不一定是客户端存在的用户。如果"auth users"被设置,那么客户端发出对该模块的连接请求时,需要对用户身份进行验证。用户的名和密码以明文方式存放在"secrets file"选项指定的文件中。默认情况下无需密码就可以连接模块 ( 也就是匿名方式 )。

创建 rsync.secrets 作为用户密码文件

#touch /etc/rsyncd/rsyncd.secrets
#chmod 600 /etc/rsyncd/rsyncd.secrets


编辑 rsyncd.secrets, 格式为“用户 : 密码”

rsync:passwd


注意:rsync是服务器上存在的用户,同时将/CriticalData的使用者改为rsync

#chown -R rsync /CriticalData/


创建 rsync.motd 作为登录消息文件

此文件是选择性配置文件,也可以不创建。

#touch /etc/rsyncd/rsyncd.motd


编辑 rsyncd.conf

============================
This is Critical Data Server
=============================



2. 启动 rsync

将 rsync 启动

#/usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf


可以将这个命令写入 /etc/rc.d/rc.local 中,当系统启动时,自动运行 rsync。
3. 创建脚本

在客户端创建一个 /root/rsync/ 目录用来存放自动化脚本和其它文件。

创建 /root/rsync/rsync.sh 自动化脚本,保证权限为 755。


清单 6. rsync 自动化示例脚本


#!/bin/sh

export RSYNC_PASSWORD=passwd
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin

// 设置远程服务器与需要备份的目录
SERVER=rsync@Server
DIR=CriticalData

// 设置客户端上的用于备份的目录
BDIR=/Backup
BASE=Current
INCREMENTDIR=`date +%Y-%m-%d`

// 在客户端灵活使用 exclude 功能;设置日志
EXCLUDES=/root/rsync/excludes
LOG=/tmp/rsync.log

// 参数设置,调用 backup-dir 将服务器端的增量文件存储到 INCREMENTDIR 目录下
OPTS="-avz--force --delete --delete-excluded --exclude-from=$EXCLUDES -b
--backup-dir=$BDIR/$INCREMENTDIR --ignore-errors"

// 确保客户端上的用于备份的目录存在
install -d $BDIR/$BASE

// 实现数据备份与同步,将日志邮寄给 root 用户
run_rsync()
{
echo "==========Begin rsync: `date`===========" >>$LOG 2>&1
du -s $BDIR/* >>$LOG 2>&1
rsync $OPTS $SERVER::$DIR $BDIR/$BASE >>$LOG 2>&1
echo "==========End rsync: `date`===========" >>$LOG 2>&1
mail root -s "Backup Report" < $LOG
rm $LOG
}

// 条件测试,运行程序
if [ -f $EXCLUDES ]; then
if [ -d $BDIR ]; then
run_rsync
else
echo "cant find $BDIR"; exit
fi
else
echo "cant find $EXCLUDES"; exit
fi


执行完 rsync.sh 后,可以查看 /Backup 目录来检查数据的正确性。将有两种目录,一个是 Current 目录,用于存放当前服务器端备份和同步后的数据。在脚本运行过程中,进行增量传输。另外还有一个类似于 2009-06-16 的目录,用于存放已在服务器端删除的增量数据。目录的名称将根据脚本执行的日期定义。

# pwd
/Backup
# ls
2009-06-16 Current



4. 启用 cron 服务,实现定期自动备份

如果系统管理员需要连续地定期地执行脚本,那么就需要借助 Unix/Linux 系统的 crontab 功能,使系统可以定期地调用 rsync.sh 脚本。

使用命令“crontab -e”编辑 crontab,添加一条类似于以下的项:

0 0 * * * /root/rsync/rsync.sh 2>&1>>/root/rsync/rsync_cron.log


重新启动 cron 服务,并用“crontab – l” 查看任务是否添加成功。也可以定期查看 /root/rsync/rsync_cron.log 来监控 cron 服务的运行情况。
5. 监控脚本的执行过程

如果配置正确 , rysnc.sh 的执行过程将会邮寄给 root 用户,通过 mail 命令可读取这些邮件。


清单 7. 使用 mail 命令读取监控输出

# mail
Mail version 8.1 6/6/93. Type ? for help.
"/var/spool/mail/root": 1 message 1 new
>N 1 root@cdlf2ler02.clus Tue Jun 16 16:53 32/1050 "Backup Report"
&


敲入回车,可显示具体的邮件内容。类似于:


清单 8. 邮件内容


Message 1:
From root@cdlf2ler02.clusters.com Tue Jun 16 16:53:35 2009
Date: Tue, 16 Jun 2009 16:52:14 -0400
From: root
To: root@cdlf2ler02.clusters.com
Subject: Backup Report

==========Begin rsync: Tue Jun 16 16:52:14 EDT 2009===========
16 /Backup/Current
===========================
This is Critical Data Server
===========================


receiving file list ... done
deleting b/
./
Location/
Name/
Name/Namelist1

sent 214 bytes received 317 bytes 1062.00 bytes/sec
total size is 3 speedup is 0.01
==========End rsync: Tue Jun 16 16:52:14 EDT 2009===========




小结

本文介绍了在 Unix/Linux 上广泛应用的实用命令和程序。随着磁盘的容量变得越来越大,要想跟踪所有的数据更加困难。只有更好的了解数据组成,进行数据分类,分析重要数据,结合工具的使用,才能低成本,高效率的进行数据备份与同步。自动化的实现同时也为数据备份与同步提供了很大的方便性,是另一种节省时间和精力并减少人工错误的方法。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/678020/viewspace-1044922/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/678020/viewspace-1044922/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值