备份(镜像)工具rsync详解
1、什么是Rsync
Rsync 是一个Unix系统下的文件同步和传输工具。rsync是用 “rsync 算法”提供了一个客户机和远程文件服务器的文件同步的快速方法。
Rsync的基本特点如下:
1.可以镜像保存整个目录树和文件系统;
2.可以很容易做到保持原来文件的权限、时间、软硬链接等;
3.无须特殊权限即可安装;
4.优化的流程,只传输改变的文件,忽略相同的文件,文件传输效率高;
5.可以使用rsh、ssh等方式来传输文件,当然也可以通过直接的socket连接;
6.支持匿名传输。
2、Rsync服务器的架设
2.1软件的安装:
软件安装非常简单,现在Linux各大发行版都提供这个软件包,当然您也可以自己编译安装。
$ sudo apt-get install rsync 注:在debian、ubuntu 等在线安装方法;
# slackpkg install rsync 注:Slackware 软件包在线安装;
# yum install rsync 注:Fedora、Redhat 等系统安装方法;
其它Linux发行版,请用相应的软件包管理方法来安装;如果是源码包,也就是用下面的办法;
# tar xvf sync-xxxx.tar.gz 或sync-xxx.tar.bz2
# cd sync-xxx
# ./configure --prefix=/usr;make ;make install 注:在用源码包编译安装之前,您得安装gcc等编译开具才行;
2.2 rsync服务器的配置文件
#mkdir /etc/rsyncd
注:在/etc目录下创建一个rsyncd的目录,我们用来存放配置文件;
#touch /etc/rsyncd/rsyncd.conf
注:创建rsyncd.conf ,这是rsync服务器的配置文件;
#touch /etc/rsyncd/rsyncd.secrets
注:创建rsyncd.secrets ,这是用户密码文件;
#chmod 600 /etc/rsyncd/rsyncd.secrets
注:为了密码的安全性,我们把权限设为600;
#ls -lh /etc/rsyncd/rsyncd.secrets
-rw------- 1 root root 14 2007-07-15 10:21 /etc/rsyncd/rsyncd.secrets
#touch /etc/rsyncd/rsyncd.motd
注:
它是定义rysnc 服务器信息的文件。
rsyncd.conf 是rsync服务器主要配置文件,我们来个简单的示例;比如我们要备份服务器上的 /home 和/opt ,在/home中,我想把*.tmp和samba目录排除在外;
pid file = /var/run/rsyncd.pid
port = 873
address = 10.194.3.7 #服务器的ip地址
uid = root #使用此程序的uid
gid = root #使用此程序的gid
use chroot = yes
read only = yes #是否允许客户端上传文件
#limit access to private LANs
hosts allow=192.168.1.0/255.255.255.0 10.0.1.0/255.255.255.0 #允许访问的地址/网段
hosts deny=*
max connections = 5 #服务器最大的连接数
motd file = /etc/rsyncd/rsyncd.motd #motd文件的位置
log file = /var/log/rsync.log #log文件存放的位置
transfer logging = yes #记录传输的文件
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
[home] #同步目录显示的名称
path = /home #同步的目录路径
list=yes #是否允许列表
ignore errors
auth users = test #允许连接该模块的用户
secrets file = /etc/rsyncd/rsyncd.secrets
# 用户和密码文件,只有在"auth users"被定义时,该文件才有作用。文件每行包含一个username:passwd对。一般来说密码最好不要超过8个字符。没有默认的secures file名,需要限式指定一个(例如:/etc/rsyncd.passwd)。注意:该文件的权限一定要是600,否则客户端将不能连接服务器。
comment = home
exclude = *.tmp samba/ #同步时排除在外的文件/目录
注: 关于 auth users 是必须在服务器上存在的真实的系统用户,如果你想用多个用户,那就以,号隔开;比如 auth users = test ,guest
secrets文件:/etc/rsyncd/rsyncd.secrets的内容格式;
用户名:密码
而我们在例子中rsyncd.secrets的内容如下类似的;在文档中说,有些系统不支持长密码,自己尝试着设置一下吧。另外 rsyncd.secrets文件权限对其它用户组是不可读的。如果你设置错了,可能rsync不工作。
test:test
注: 这里的密码值得注意,为了安全,你不能把系统用户的密码写在这里。比如你的系统用户test 密码是 1234 ,为了安全,你可以让rsync 中的test 为 test 。这和samba的用户认证的密码原理是差不多的;
rsyncd.motd 文件;
它是定义rysnc 服务器信息的,也就是用户登录信息。比如让用户知道这个服务器是谁提供的等;类似ftp服务器登录时,我们所看到的 ftp ……。 当然这在全局定义变量时,并不是必须的,你可以用#号注掉,或删除;我在这里写了一个 rsyncd.motd的内容为:
+++++++++++++++++++++++++++
+Ftp server rsync 2010 +
+++++++++++++++++++++++++++
3、Rsync客户端同步命令
在对rsync服务器配置结束以后,下一步就需要在客户端发出rsync命令来实现将服务器端的文件备份到客户端来。rsync是一个功能非常强大的工具,其命令也有很多功能特色选项,我们下面就对它的选项一一进行分析说明。
Rsync的命令格式可以为以下六种:
rsync [OPTION]... SRC DEST rsync [OPTION]... SRC [USER@]HOST:DEST rsync [OPTION]... [USER@]HOST:SRC DEST rsync [OPTION]... [USER@]HOST::SRC DEST rsync [OPTION]... SRC [USER@]HOST::DEST rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST] |
对应于以上六种命令格式,rsync有六种不同的工作模式:
1)拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。如:rsync -a /data /backup
2)使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。如:rsync -avz *.c foo:src
3)使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。如:rsync -avz f oo:src/bar /data
4)从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。
如:rsync –av [email protected]::www /databack
5)从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。
如:rsync -av /databack [email protected]::www
6)列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。
如:rsync -v rsync://172.16.78.192/www
4、通过rsync客户端来同步数据
4.1 列出rsync 服务器上的所提供的同步内容
$ rsync --list-only [email protected]::
4.2 rsync 客户端同步数据
$rsync -avzP --delete --bwlimit=100 --password-file=~/rsync.passwd [email protected]::home /home
把服务器home目录同步到本地的home目录,带宽限制为100KB,密码文件为home下的rsync.passwd,
-a 参数,相当于-rlptgoD,-r 是递归 -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件;
-z 传输时压缩;
-P 传输进度;
-v 传输时的进度等信息
--delete 选项,表示客户端上的数据要与服务器端完全一致,如果 home目录中有服务器上不存在的文件,则删除
--password-file=rsync.password ,这是当我们以test用户登录rsync服务器同步数据时,密码将读取 rsync.password 这个文件。
这个文件内容只是linuxsir用户的密码。我们要如下做;
$ touch rsync.password
$ chmod 600 rsync.passwod
$ echo "test" > rsync.password
注: 这样就不需要手动输入密码了;其实这是比较重要的,因为服务器通过crond 计划任务还是有必要的;
4.3 让rsync 客户端自动与服务器同步数据
在cron中插入任务:
0 0 * * sun /usr/bin/ rsync -avzP --delete --bwlimit=100 --password-file=~/rsync.passwd [email protected]::home /home
每个周日的0点开始备份。