使用 rsync (全自动网络备份法)
一. 简介
rsync 本来是用以取代 rcp 的一个工具, 它目前是由 rsync.samba.org 维护.
rsync 使用所谓的 "rsync 算法", 提供一个非常快速的档案传输方法, 使 local 和远程二部主机之间的档案达到同步, 它主要是传送二个档案的异动部份, 而非每次都整份传送, 因此速度相当地快.
由于 rsync 可以搭配 rsh 或 ssh 甚至使用 daemon 模式, 因此许多人拿 rsync 当做一个优异的备份工具来使用. (拿来 update ISO 檔也很好用)
本文将简单介 绍运用 rsync 备份网络主机档案的基本方法, 供各位伙伴参考.
rsync 有 6 种不同的用法, 如 local 拷贝备份, local 档案藉由 rsh/ssh 传送至远方主机.... 在此我们主要介绍 rsync 的 daemon 模式.
首先, 先给个简单的定义: 如果一台主机跑 rsync daemon 模式, 我们就称这台机器为一 rsync Server, 或者说这台主机是一台备份主机( Backup Server).
备份主机会开 启一个 873 的服务信道(port), 等待对方 rsync 连接.
连接时, rsync Server 会检查密码是否相符, 若通过密码查核, 则开始进行档案传输.
第一次连通 完成时 , 会把整份档案传输一次 , 下一次就只传送二个档案之间异动的部份 .
藉由上述方法, 我们可以设立多部备份主机, 使网络主机上重要的档案能分散至数部主机中, 以分散风险.
一旦完成备份, 我们可以对这些备份主机再做进一步的储存动作, 如使用 tar 或 Ghost , 把档案备份到更稳固,更能长久保存的设备上, 如 MO 或 烧录设备.
以上, 便是整个运作的想法, 底下, 我们来加以实作.
二. 安装法
rsync 目前最新版是 2.5.5, 可以到 rsync.samba.org 下载 .
安装 rsync 十分简单, 以下这道指令即可搞定:
./configure && make && make install
若您使用 rpm 套件, 只要下 rpm -ivh rsync*.rpm 即可
它的设定文件 位置在 /etc/rsyncd.conf
其实 RedHat / Mandrake 等 Linux 套件, 默认值都已帮各位安装好 rsync 了.
三. 设定 rsync server: (假设这台主机名称为 192.168.0.2)
rsync server 端要设定以下四项:
- 规划建立备份目录区
- 设定: /etc/xinetd.d/rsync
- 设定: /etc/rsyncd.conf
- 设定: 密码文件
依次说明如下:
1. 规划建立备份目录区:
建议您准备一 个容量较大且独立的分割区, 并在其中开好备份目录, 如此 /bk/server
2. 设定 /etc/xinetd.d/rsync, 简单模板如下:
# default: off
# description: The rsync server is a good addition to am ftp server, as it /
#
allows crc checksumming etc.
service rsync
{
disable = no
socket_type
= stream
wait
= no
user
= root
server
= /usr/bin/rsync
server_args
= --daemon
log_on_failure
+= USERID
}
然后下 service xinetd restart, 使上述设定生效.
上述, 主要是要打开 rsync 这个 daemon, 一旦有 rsync client 要连接时, xinetd 会把它转介给 rsyncd (跑 port 873).
3. 设定 /etc/rsyncd.conf :
以下区块, 代表开放给某一台 rsync client 主机的设定, 简单模板如下:
secrets file = /etc/rsyncd.secrets
read only = yes
list=yes
uid = nobody
gid = nobody
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
.
以下模板, 代表二个主机 web备份服务器 及 tomcat备份服务器 欲备份进来:
[www]
comment = tranlate www from 158
path = /usr/local/apache2/htdocs/www
auth users = dev
uid = root
gid = root
secrets file = /etc/rsyncd.secrets
read only = no
[tomcat]
comment = tranlate tomcat from 158
path = /usr/local/tomcat-5.0.28/webapps/ROOT
auth users = dev
uid = root
gid = root
secrets file = /etc/rsyncd.secrets
read only = no
比较重要的解 释:
[www] 代表欲备份的模块
comment代表欲备份的主机代号, 名称可自订.
path 用来设定备份文件要存放在那一个目录? 请先用 mkdir 开设好, 名称可自订.
auth users 代表授权的帐号, 名称可自订.
secrets file 代表储存帐号密码的密码文件, 其放置的路径文件名.
当然, 这台备份主机, 可以容纳许多 rsync client 连接, 只要在 rsyncd.conf 中设妥对应的区块即可
4. 设定密码文件:
rsyncd.secrets 的内容很简单, 格式为 帐号:密码
如以下例子:
dev:123456
注意! 上述设定只是一个范例, 请务必自订一组, 千万不要直接套用.
接下来, 要将 rsyncd.secrets 这个密码文件的档案属性设为 root 拥有, 且权限要设为 600, 否则无法备份成功!
因此, 请下:
- chown root.root rsyncd.secrets
- chmod 600 rsyncd.secrets
至此, rsync server 这端已设定完成, 若欲查看备份记录, 可参考 /var/log/rsyncd.log 这个档案.
接下来是 client 端(即欲备份的网络主机) 的设定.
四. 设定 rsync client (假设这台主机 IP 为 : 192.168.0.3)
步骤:
- 设定密码文件
- 测试 rsync 执行指令
- 将 rsync 指令放入工作排程 (crontab)
另外, 假设 192.168.0.2 这台主机是网络主机, 今打算把 /usr/local/apache 这个目录加以备份至 backup server 192.168.0.3),
1. 假设把密码文件放在 /root/rsyncd.secrets, 内容只要含有密码一行即可:
123456
注意: rsyncd.secrets 的权限属性必须设为 600
2. 测试指令是否可以成功?
/usr/bin/rsync –vzrtopg --password-file=/root/rsyncd.secrets root@61.140.243.158::tomcat /usr/local/tomcat-5.5.15/webapps/ROOT
若出现传输目 录档案的画面, 即表示测试成功.
3. 置入工作排程, 假设每天凌晨 5 点开始备份:
crontab -u root -e
0 5 * * * /usr/bin/rsync -vzrtopg --password-file=/root/rsyncd.secrets root@61.140.243.158::tomcat /usr/local/tomcat-5.5.15/webapps/ROOT
若您有其它目 录(如 /www)要备份, 则如法泡制:
20 5 * * * /usr/bin/rsync -vzrtopg --password-file=/root/rsyncd.secrets root@61.140.243.158::www /usr/local/apache2/htdocs/www
若您觉得备份 一台 Backup Server 不够, 可再按上述方法, 自行增加任意多台 Backup Server, 以分散风险!
像这样把备份 的工作全部自动化, 真是轻松愉快, 大大地减低备份工作烦人的压力!!
五. 安全性:
建议使用 ipchains 或 iptables 指令, 来限制 rsync client 的联机范围, 例子如下:
ipchains -A input -p tcp -s ! 192.168.0.3 --dport 873 -j DENY
或
iptables -A INPUT -p tcp -s ! 192.168.0.3 --dport 873 -j DROP
如此, 只有 192.168.0.3 这个 client IP 能连入这台 rsync server.
ipchains 及 iptables 的用法, 可参考CU里的教程。
PS:另外 rsync 可以结合 ssh 或 ssh2, 使安全性更加提高. 详情请自行查阅 rsync / ssh / ssh2 的 manpage.
具体步骤如 下:
在 A上生成隐藏文件夹/root/.ssh ,在里面生成密钥对
]#cd /root/.ssh
]#ssh-keygen -d
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
Enter passphrase (empty for no passphrase): <-- 此处不打passphrase..下次才不会询问password
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
11:22:33:44:55:66:77:88:99:00:11:22:33:44:55:66 root@rsync-server.com
]#
2. 在/root/.ssh内已经生成id_dsa与id_dsa.pub(分别为私钥和公钥)
]#scp id_dsa.pub B的IP:/root/.ssh/authorized_keys
B服务器要求输入登录密码验证身份,成功后在B server的/root/.ssh目录里面生成authorized_keys(公钥)
测试:在A上输入 ssh B的IP A可以无需密码验证就登录进B(不过这样的安全性很差)
然后的备份就简单了:
在服务器 B,建立以下脚本:
#!/bin/bash
/usr/bin/rsync - vzrtopg -e ssh --progress --delete 192.168.0.2 :/usr/local/tomcat-5.0.28/webapps/ROOT/ /usr/local/tomcat-5.0.28/webapps/ROOT/
六. 参考文件:
rsync 的一些备份妙法, 请参考: http://rsync.samba.org/examples.html
rsync有很多功能选项,下面就对介绍一下常用的选项:
rsync的命令格式可以为:
1. rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
2. rsync [OPTION]... [USER@]HOST:SRC DEST
3. rsync [OPTION]... SRC [SRC]... DEST
4. rsync [OPTION]... [USER@]HOST::SRC [DEST]
5. rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
6. rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
rsync有六种不同的工作模式:
1. 拷贝本地文件;当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。
2.使用一个远程shell程序(如rsh、 ssh)来实现将本地机器的内容拷贝到远程机器。当DST
路径地址包含单个冒号":"分隔符时启动该模式。
3.使用一个远程 shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC
地址路径包含单个冒号":"分隔符时启动该模式。
4. 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。
5. 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。
6. 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。
rsync 的教学文件: A Tutorial on Using rsync
rsync 的 FAQ (具 体看 man rsync )
七. 在我配置的过程出现的一些错误,和大家分享一下
1.
@ERROR: auth failed on module xxxxx
rsync: connection unexpectedly closed (90 bytes read so far)
rsync error: error in rsync protocol data stream (code 12) at io.c(150)
A: 这是因为密码设错了, 无法登入成功, 请再检查一下 rsyncd.secrets 中的密码设定, 二端是否一致?
2.
password file must not be other-accessible
continuing without password file
Password:
A: 这表示 rsyncd.secrets 的档案权限属性不对, 应设为 600
请下 chmod 600 rsyncd.secrets
3.
@ERROR: chroot failed
rsync: connection unexpectedly closed (75 bytes read so far)
rsync error: error in rsync protocol data stream (code 12) at io.c(150)
A: 这通常是您的 rsyncd.conf 中
的 path 路径所设的那个目录并不存在所致.
请先用 mkdir 开设好备份目录.
4. Q: 出现以下这个讯息 , 是怎么一回事 ?
rsync: failed to connect to 61.140.243.160: No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(94)
A:这通常是你的防火墙问题
/etc/init.d/iptables stop 然后在试试看看
随后记得设置你的iptables 然后把防火墙打开