rsync是Linux下小巧却非常高效的文件同步工具,常被用于文件备份。rsync既可以作为单个命令在本地两个目录之间进行文件同步,也可以应用于CS架构:即在服务器上用rsync的守候进程模式启动一个rsync服务,而其它的客户端主机使用rsync命令,与rsync服务器之间进行同步。
虽然也可以通过samba或者nfs等服务将其它Linux需要同步的目录mount到本地的一个目录,然后使用rsync命令进行本地目录间的同步,但是从效率以及管理方便程度方面考虑,兔大侠并不推荐这种方式。如果是主机之间的同步,首选还是应该是用rsync的守候进程模式。
rsync可以通过yum install rsync或者源代码编译方式来进行安装。不论哪种方式,都只是安装在系统上安装了rsync命令,服务器模式的相关配置只能自己动手。
服务器端配置
需要事先做好文件同步或者备份的规划,准备好文件存贮目录,例如/opt/backup。
-
主要配置文件:/etc/rsyncd.conf
#如果使用rsync默认端口(873),则不需要指定该参数 port = 8082 #密码文件,格式为id:passwd secrets file = /etc/rsyncd.secrets #允许列表 list = yes #指定运行rsync守候进程的系统帐号 uid = root gid = root #不允许访问指定目录的上级目录 use chroot = no #限制连接数, 0为不限制 max connections = 10 #日志文件等临时文件,推荐以下配置 log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock #控制允许访问的客户端地址,可以指定单个地址或者地址段 hosts allow=192.168.1.1,10.0.0.0/8 #如果是公网正式服务器,推荐默认禁止所有非允许的主机 hosts deny=* #设置超时时间 timeout = 300 #设置服务器端同步的目录 #指定ID [bak] #允许客户端写操作 read only = no comment = Backup Storage #指定目录 path = /opt/backup #指定允许操作的用户(是在rsync密码文件中指定的用于认证的用户,并非系统用户,) auth users = rsyncman
-
密码文件:/etc/rsyncd.secrets
每一行的格式为id:passwd,例如:rsyncman:123
注意,该文件的权限属性一定要修改为600,否则启动时会报错
-
开机自启动脚本:/etc/init.d/rsyncd
#!/bin/bash # # rsyncd This shell script takes care of starting and stopping # standalone rsync. # # chkconfig: - 99 50 # description: rsync is a file transport daemon # processname: rsync # config: /etc/rsyncd.conf # Source function library . /etc/rc.d/init.d/functions RETVAL=0 prog="rsync" OPTIONS="--daemon -4" PPATH="/usr/bin/" CFILE="/etc/rsyncd.conf" start() { # Start daemons. [ -x $PPATH$prog ] || \ { echo "FATAL: No such programme";exit 4; } [ -f $CFILE ] || \ { echo "FATAL: config file does not exist";exit 6; } echo -n $"Starting $prog: " daemon $PPATH$prog $OPTIONS RETVAL=$? [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog echo return $RETVAL } stop() { # Stop daemons. echo -n $"Shutting down $prog: " killproc $prog RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog return $RETVAL } # call the function we defined case "$1" in start) start ;; stop) stop ;; restart|reload) stop start RETVAL=$? ;; status) status $prog RETVAL=$? ;; *) echo $"Usage: $0 {start|stop|restart|reload|status}" exit 2 esac exit $RETVAL
使用
chmod 755 rsyncd
命令,将以上脚本置为可执行。#/etc/init.d/rsyncd start
,即可以启动rsync服务。另外,如果系统启用了iptables防火墙,别忘了开放相应的端口。
客户端使用rsync命令与该服务器的指定目录进行同步。客户端使用rsync命令时,除了指定服务器的参数以外,其它的参数与同步两个目录时所用的参数并没有太大区别。