cpio建立起来的归档文件包括文件头和文件数据两部分。
文件头包含了对应文件的信息。
如文件的UID,GID,连接数以及文件大小等。
其好处是可以保留硬连接,在恢复时默认情况下保留时间戳,无文件名称长度的限制。
mksysb介绍
IBMAIX与其它的Unix系统相比,有两个重要的特性:
LVM(logicalvolumemanager)和ODM(objectdatabasemanager)。
一般而言,用cpio或tar的指令亦可以备份volumegroups,
但并不能完全正确的备份完整的系统。
利用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/rmt0uservg
其中,-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(RemoteSync)是Unix/Linux系统下一款优秀的数据备份与同步工具。
它可以对文件集进行同步。
然而更有价值的是,rsync使用文件的增量,也就是说,它在网络中仅发送两个文件集合有区别的部分。
这样可以占用更少的带宽,并且速度更快。
rsync的特性:
∙能够更新整个目录树和文件系统
∙保持原文件的权限,时间,软硬链接
∙安装无需特殊权限
∙优化的流程,文件传输速率高
∙可以通过直接的socket连接传输文件,或者选择rsh,ssh等方式
∙支持匿名传输
表5.rsync命令的常用参数:
参数
含义
-a
该参数表示以递归方式传输文件,并保持所有文件属性
-v
该参数显示详细的传输处理
-z
该参数对备份的文件在传输时进行压缩处理
-P
该参数将显示备份过程
如果在客户端对服务器上的重要数据进行备份的话,可使用下列的命令:
清单1.rsync命令演示
#rsync–avzPrsync@Server:
:
CriticalData/Backup
===========================
ThisisCriticalDataServer
===========================
receivingfilelist...
9filestoconsider
Location/
Location/Locationlist1
9716495313%1.11MB/s0:
08:
57
706609152100%1.17MB/s0:
09:
37(xfer#1,to-check=5/9)
Name/Name1
44100%0.16kB/s0:
00:
00(xfer#2,to-check=3/9)
Name/Name2
22100%0.08kB/s0:
00:
00(xfer#3,to-check=2/9)
Time/Monday
17100%0.06kB/s0:
00:
00(xfer#4,to-check=0/9)
sent32111bytesreceived497214837bytes847820.88bytes/sec
totalsizeis706609242speedupis1.42
首次传输过程进行完全备份,当再次运行该命令时,rsync将只传输数据的增量。
从而完成增量备份。
如果在客户端对服务器上的重要数据进行同步的话,可使用下列的命令:
#rsync-avzP--deletersync@Server:
:
CriticalData/Backup
这里调用--delete选项,表示客户端上的数据要与服务器端完全一致,如果/Backup目录中有服务器不存在的文件,则删除。
从而保持客户端与服务器的数据同步。
注意:
谨慎使用--delete选项,最好不要把已经有重要数所据的目录当做客户端的备份目录,否则会误删除重要数据。
如果用客户端的备份数据去恢复服务器,可使用下列的命令:
#rsync–avzPO/Backup/rsync@Server:
:
CriticalData
这里需要将rsync.conf中readonly设置为false,同时使/CirticalData目录具有写权限。
注意:
也可调用--delete选项来保持客户端与服务器端的数据同步。
在后面,将详细介绍rsync.conf的配置。
-O参数用于忽略目录的时间属性。
数据备份与同步的自动化实现
系统管理员必须执行的数据备份与同步任务大多牵涉到某种形式的系统配置,当管辖的任务比较庞大,数据量较多,但操作一样且有固定周期时,采用自动化脚本就成为必然。
尤其是为多个操作系统提供支持时。
要实现自动化操作,脚本编制是必须掌握的基本技能。
一个脚本由一系列命令构成,这些命令负责执行各种各样的任务。
系统管理员在重复执行了几遍类似的命令后,通常就能准确地掌握要点,并希望利用脚本,将重复性的工作交给计算机去做。
常用的脚本语言有Shell,Perl,Tcl/Expect等。
实用命令的自动化实现
本文的示例主要是通过Shell来实现的。
Shell是一种“解释性”语言,列出了管理员通过键盘敲入的相同命令,并且每次执行一次这样的命令。
例如执行一条简单的tar命令,可以使用下面的一个简单的脚本。
清单2.tar自动化示例脚本
#!
/bin/sh
tar-czvfbackup.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$DATEin
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
readonly=true
usechroot=true
transferlogging=true
logformat=%h%o%f%l%b
logfile=/var/log/rsyncd.log
pidfile=/var/run/rsyncd.pid
secretsfile=/etc/rsyncd.secrets
hostsallow=192.168.0.0/255.255.255.0
maxconnections=5
timeout=300
motdfile=/etc/rsyncd/rsyncd.motd
[CriticalData]
path=/CriticalData
list=true
ignoreerrors
comment=ThisisCriticalData
authusers=rsync
secretsfile=/etc/rsyncd/rsyncd.secrets
exclude=Common/
rsync.conf中主要分为全局变量和模块两部分。
模块用[]表示,模块之前的为全局变量。
重要参数说明:
path
指定该模块所定义的备份目录的路径,该参数是必须指定的。
exclude
用来指定多个由空格隔开的多个文件或目录(相对路径),并将其添加到exclude列表中。
这等同于在客户端命令中使用--exclude参数。
一个模块只能指定一个exclude选项。
但是需要注意的一点是该选项有一定的安全性问题,客户端很有可能绕过exclude列表,如果希望确保特定的文件不能被访问,那就最好结合uid/gid选项一起使用。
authusers
该选项指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。
这里的用户不一定是客户端存在的用户。
如果"authusers"被设置,那么客户端发出对该模块的连接请求时,需要对用户身份进行验证。
用户的名和密码以明文方式存放在"secretsfile"选项指定的文件中。
默认情况下无需密码就可以连接模块(也就是匿名方式)。
创建rsync.secrets作为用户密码文件
#touch/etc/rsyncd/rsyncd.secrets
#chmod600/etc/rsyncd/rsyncd.secrets
编辑rsyncd.secrets,格式为“用户:
密码”
rsync:
passwd
注意:
rsync是服务器上存在的用户,同时将/CriticalData的使用者改为rsync
#chown-Rrsync/CriticalData/
创建rsync.motd作为登录消息文件
此文件是选择性配置文件,也可以不创建。
#touch/etc/rsyncd/rsyncd.motd
编辑rsyncd.conf
============================
ThisisCriticalDataServer
=============================
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
exportRSYNC_PASSWORD=passwd
exportPATH=$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"==========Beginrsync:
`date`===========">>$LOG2>&1
du-s$BDIR/*>>$LOG2>&1
rsync$OPTS$SERVER:
:
$DIR$BDIR/$BASE>>$LOG2>&1
echo"==========Endrsync:
`date`===========">>$LOG2>&1
mailroot-s"BackupReport"<$LOG
rm$LOG
}
//条件测试,运行程序
if[-f$EXCLUDES];then
if[-d$BDIR];then
run_rsync
else
echo"cantfind$BDIR";exit
fi
else
echo"cantfind$EXCLUDES";exit
fi
执行完rsync.sh后,可以查看/Backup目录来检查数据的正确性。
将有两种目录,一个是Current目录,用于存放当前服务器端备份和同步后的数据。
在脚本运行过程中,进行增量传输。
另外还有一个类似于2009-06-16的目录,用于存放已在服务器端删除的增量数据。
目录的名称将根据脚本执行的日期定义。
#pwd
/B