一. 简介
rsync常用的备份工具, 它目前是由 rsync.samba.org 维护.
rsync使用所谓的"rsync算法",提供一个非常快速的档案传输方法, 使local和远端二部主机之间的档案达到同步,它主要是传送二个档案的异动部份,而非每次都整份传送, 因此速度相当地快.
rsync它可以搭配rsh或ssh,也可以当成daemon模式使用直接的socket连接, 所以rsync可以当做一个优异的备份工具来使用.
我这简单介绍运用rsync备份远程网路主机档案的基本方法。
在这,我们是给rsync当成linux的一种daemon模式来运行.
首先,先给个简单的定义:当然要一台主机跑rsync daemon模式, 我们就称这台机器为一rsync Server, 或者说这台主机是一台备份主机( Backup Server).
备份主机会开启一个873的端口(port), 等待对方rsync连接.所以服务器记的要开这个端口
连接时, rsync Server 会检查密码是否相符, 若通过密码查核, 则开始进行档案传输.
第一次连通完成时, 会把整份档案传输一次, 下一次就只传送二个档案之间异动的部份.
以上是rsync client (欲加以备份的远程网路主机) 和rsync server 的运作方式。
藉由上述方法, 我们当然也可以设立多部备份主机, 使网路主机上重要的档案能分散至数部主机中, 以分散风险.
一旦完成备份, 我们可以对这些备份主机再做进一步的储存动作, 如使用tar打成tar的包, 把档案备份到硬盘之类.
以下内容,我用Ubuntu 7.10做客户机,Centos5做服务器测试过.
二. 安装法
rsync目前最新版是 2.6.8, 可以到rsync.samba.org 下载.
若您使用 rpm 套件,请用下面的方法安装,当然rhel5和centos5中默认就安装了
#rpm -ivh rsync*.rpm
#yum install rsync
它的设定档位置在 /etc/rsyncd.conf,奇怪,我的没有自动生成这个文件,那我们就来自己配置他
三. 设定 rsync server: (假设这台主机名称为 rsync.x111.com)
rsync server 端要设定以下四项:
1.规划建立备份目录区
2.启动xinetd中的rsync
3.设定: /etc/rsyncd.conf
4.设定: 密码档
依次说明如下:
1. 规划建立备份目录区:
建议您准备一个容量较大且独立的分割区, 并在其中开好备份目录, 如此 /blackup/x99
2. 启动xinetd中的rsync
系统默认没有安装xinetd。
# yum install xinetd
#service xinetd restart
#chkconfig rsync on
以上的操作,主要是要打开rsync这个daemon,一旦有rsync client要连接时,xinetd会把它转介给rsyncd (port 873).
3. 设定 /etc/rsyncd.conf :
全局设置
uid = root
gid = root
use chroot = no # 不使用chroot
max connections = 4 # 最大连接数为4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log # 日志记录文件
以下的部分,代表开放给某一台rsync client 主机的设定, 简单范本如下:
[x99]
path = /blackup/x99/x99_backup
auth users = x99_backup
secrets file = /etc/rsyncd.secrets
read only = no
以上文件的注解:
[x99] 代表要备份的主机代号, 名称自己设置.
path 用来设定备份档案要存放在那一个目录.这个可先要mkdir开好,可以自己设置
auth users 代表授权的帐号, 可以自己设置.
secrets file 代表储存帐号密码的密码档, 其放置的路径档名.
当然, 这台备份主机, 可以容纳许多 rsync client 连接, 只要在 rsyncd.conf中设置对应的多个部分即可.
以下例子,代表二个主机x99及x100欲备份进来:
[x99]
path = /blackup/x99/x99_backup
comment = XXXXX
auth users = x99_backup
secrets file = /etc/rsyncd.secrets
read only = no
[x100]
path = /blackup/x100/x100_backup
auth users = x100_backup
secrets file = /etc/rsyncd.secrets
read only = no
4. 设定密码文件:
rsyncd.secrets 的内容很容易, 格式为"帐号:密码";
如以下例子:
x99_backup:x99pass
注意! 上述设定只是一个例子,你自己设置可一定千万不要直接套用.
接下来, 要将 rsyncd.secrets 这个密码档的档案属性设为root拥有, 且权限要设为600, 否则无法备份成功!
因此, 请下:
#chown root.root rsyncd.secrets
#chmod 600 rsyncd.secrets
至此, rsync的服务器这端已设定完成, 若欲查看备份日志.
#tail -f /var/log/rsyncd.log
接下来是 client 端(即欲备份的网路主机) 的设定.
四. 设定 rsync client (假设这台主机 IP 为 : 11.22.33.44)
步骤:
1.设定密码档
2.测试rsync命令是否可以正常
3.将rsync指令放入定时任务(crontab)
另外, 假设x99这台主机是网路上的服务器, 现打算把/var/www/html这个目录加以备份至backup server(上面讲的rsync.x111.com),
但不想备份下面的目录中的内容/html/log,(也就是说要把/html/log目录排除), 整个操作方式如下:
1. 假设把密码档放在 /root/rsyncd.secrets, 内容只要含有密码一行即可:
x99pass
注意: rsyncd.secrets 的权限属性必须设为600,设置方法见上面.
2. 测试指令是否可以成功?
/usr/bin/rsync -rvztopglHpogDtS –progress –password-file=/root/rsyncd.secrets /var/www/html –exclude /html/log x99_backup@rsync.x111.com::x99
若出现传输目录档案的画面, 即表示测试成功.上面这个命令行中-rv里的v是verbose,z是压缩,r是递归,字目录一直,topg都是保持文件原有属性如属主、时间的参数。- -progress是指显示出详细的进度情况,–delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致。后面的 x99_backup@ip中,的x99_backup是指的用户名
3. 置入工作排程, 假设每天凌晨5点开始备份:
crontab -u root -e
0 5 * * * /usr/bin/rsync -rvlHpogDtS –password-file=/root/rsyncd.secrets /var/www/html –exclude apache /html/log x99_backup@rsync.x111.com::x99
若您有其它目录(如 /home)要备份, 则如法泡制:
20 5 * * * /usr/bin/rsync -rvlHpogDtS –password-file=/root/rsyncd.secrets /home x99_bakup@rsync.x111.com::x99
当然您觉得备份一台Backup Server不够,还可再按上述方法,自行增加任意多台Backup Server, 以分散风险!
五. 安全性:
防火墙的 iptables 指令, 来限制 rsync client 的连线范围, 例子如下:
iptables -A INPUT -p tcp -s ! xx.xx.xx.xx –dport 873 -j DROP
如此, 只有 xx.xx.xx.xx 这个 client IP 能连入这台 rsync server.
附:
详细格式说明:
-v, –verbose 详细模式输出
-q, –quiet 精简输出模式
-c, –checksum 打开校验开关,强制对文件传输进行校验
-a, –archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, –recursive 对子目录以递归模式处理
-R, –relative 使用相对路径信息
-b, –backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为
~filename。可以使用–suffix选项来指定不同的备份文件前缀。
–backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀
-u, –update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。
(不覆盖更新的文件)
-l, –links 保留软链结
-L, –copy-links 想对待常规文件一样处理软链结
–copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
–safe-links 忽略指向SRC路径目录树以外的链结
-H, –hard-links 保留硬链结
-p, –perms 保持文件权限
-o, –owner 保持文件属主信息
-g, –group 保持文件属组信息
-D, –devices 保持设备文件信息
-t, –times 保持文件时间信息
-S, –sparse 对稀疏文件进行特殊处理以节省DST的空间
-n, –dry-run现实哪些文件将被传输
-W, –whole-file 拷贝文件,不进行增量检测
-x, –one-file-system 不要跨越文件系统边界
-B, –block-size=SIZE 检验算法使用的块尺寸,默认是700字节
-e, –rsh=COMMAND 指定替代rsh的shell程序
–rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
-C, –cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
–existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
–delete 删除那些DST中SRC没有的文件
–delete-excluded 同样删除接收端那些被该选项指定排除的文件
–delete-after 传输结束以后再删除
–ignore-errors 及时出现IO错误也进行删除
–max-delete=NUM 最多删除NUM个文件
–partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
–force 强制删除目录,即使不为空
–numeric-ids 不将数字的用户和组ID匹配为用户名和组名
–timeout=TIME IP超时时间,单位为秒
-I, –ignore-times 不跳过那些有同样的时间和长度的文件
–size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
–modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0
-T –temp-dir=DIR 在DIR中创建临时文件
–compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份
-P 等同于 –partial –progress 显示备份过程
-z, –compress 对备份的文件在传输时进行压缩处理
–exclude=PATTERN 指定排除不需要传输的文件模式
–include=PATTERN 指定不排除而需要传输的文件模式
–exclude-from=FILE 排除FILE中指定模式的文件
–include-from=FILE 不排除FILE指定模式匹配的文件
–version 打印版本信息
–address 绑定到特定的地址
–config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
–port=PORT 指定其他的rsync服务端口
–blocking-io 对远程shell使用阻塞IO
-stats 给出某些文件的传输状态
–progress 在传输时现实传输过程
–log-format=FORMAT 指定日志文件格式
–password-file=FILE 从FILE中得到密码
–bwlimit=KBPS 限制I/O带宽,KBytes per second
-h, –help 显示帮助信息