rsync详细使用

2014年5月30日 由 admin 留言 »

使用情况一:liunx做客户端,ip:70.xx.xx.xx,windows做服务端,ip:123.xx.xx.xx

1,首先检查Linux是否安装rsync

rpm -qa|grep rsync

如果安装了,会显示rsync的版本号,没安装会什么都没有,centos系统运行以下命令安装

yum install rsync

Linux做客户端的话,只要安装了rsync即可,不需要配置rsync.conf配置文件。

2,给windows电脑安装cwRsync服务器端:http://soft.huweishen.com/soft/308.html 这个是下载地址!
下载软件一路next即可,到达一个输入帐号密码的地方。这个帐号密码是rsync登陆windows系统的账号密码,这个帐号密码记录下来,后面配置备用。假设我设置的帐号密码为:haha haha123@

3,修改windows机器服务端的配置文件,配置文件一般的系统路径为:

C:\Program Files\ICW\rsyncd.conf

64位系统配置文件路径为

C:\Program Files (x86)\ICW\rsyncd.conf

rsyncd.conf具体配置为:(在复制配置的时候把#以及后面的文章要删除,不然,配置文件不生效)

use chroot = false
strict modes = false
hosts allow = 70.xx.xx.xx #这个默认为* ,但是为了安全着想,我们一般只填同步服务器的ip,多个ip英文逗号隔开
log file = rsyncd.log
port = 873
uid=0
gid=0
# Module definitions
# Remember cygwin naming conventions : c:\work becomes /cygwin/c/work
#
[www]                     #这个模块名可以随意命名
path = /cygdrive/d/www    #要同步的文件路径,代表d:\www目录
read only = false
transfer logging = yes
list  = no
hosts allow = 70.xx.xx.xx #这个默认为* ,但是为了安全着想,我们一般只填同步服务器的ip,多个ip英文逗号隔开
auth users = haha         #rsync用户 仅这个账户可以同步该配置下文件
secrets file = etc/rsyncd.secrets   #rsync登陆用户文件 记录rsync时需要输入的账号密码

4,创建账户文件rsyncd.secrets ,路径C:\Program Files\ICW\etc 64位系统路径:C:\Program Files (x86)\ICW\etc
文件命名必须和配置文件中secrets file = etc/rsyncd.secrets相同,这里文件名为:rsyncd.secrets
内容为 账户:密码
例如本文:

haha:haha123@

5,配置完成,启动服务

服务器管理器-工具-服务,其他版本的windows可以用控制面板-管理工具-服务

找到服务rsyncserver (如果没有这个服务 应该是你用户名密码那你输入有问题 卸载了重新装一次)
将rsyncserver设置为自动启动 并启动服务。

6,Linux客户端添加一个密码文件即可,如果有防火墙,到防火墙里开启873端口

cd /etc
vi rsyncd_test.scrt #里面输入在服务端设置的密码,haha123@ 注意这里不要帐号只填密码即可

把这个文件设置为600的权限

chmod 600 rsyncd_test.scrt

防火墙开启873端口

vi /etc/sysconfig/iptables

添加下面的内容

-A INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT

重启防火墙使配置生效

/etc/init.d/iptables restart

7,一切准备就绪,在windows下cmd里面输入

netstat -ano  #查看端口873是否正常开启。

在linux输入一下命令

telnet 123.xx.xx.xx 873

联通状态为:

Trying  123.xx.xx.xx...
Connected to 123.xx.xx.xx(123.xx.xx.xx).
Escape character is '^]'.
@RSYNCD:30.0

反之就是未联通,经过测试一般出现连接步同的情况,都是windows有开启防火墙,关闭防火墙,重启rsync服务即可

8,同步命令,因为windows为服务端,所以执行同步命令只能到linux客户端执行

rsync -vzrtopg --progress --delete  --password-file=/etc/rsyncd_test.scrt haha@123.xx.xx.xx::www /tmp/test1

此命令是从windows服务端同步数据到linux客户端tmp/test1目录下。

rsync -vzrtopg --progress --delete  --password-file=/etc/rsyncd_test.scrt /tmp/test1 haha@123.xx.xx.xx::www

此命令是从linux客户端tmp/test1目录下同步数据到windows服务端(同步到windows[www] 这个模块指定的文件夹
path = /cygdrive/d/www )

9,具体在使用过程中,肯定有各种意外的情况,这个时候就借助日志文件百度即可
日志文件位置:
C:\Program Files\ICW\rsyncd.log #普通windows系统
C:\Program Files (x86)\ICW\rsyncd.log #windows64系统

使用情况二:liunx做服务器端,windows做客户端

1,首先检查Linux是否安装rsync

rpm -qa|grep rsync

如果安装了,会显示rsync的版本号,没安装会什么都没有,centos系统运行以下命令安装

yum install rsync

2,由于Linux为服务端,所以我们要配置rsyncd.conf

cd /etc
vi rsyncd.conf

rsyncd.conf具体配置为:(在复制配置的时候把#以及后面的文章要删除,不然,配置文件不生效)

uid = nobody
gid = nobody
use chroot = no
max connections = 200
timeout = 600
pid file= /var/run/rsyncd.pid
lock file = /home/tmp/rsyncd.lock  #rsyncd.lock跟rsyncd.log路径可以自定义,tmp文件夹自己建,权限设置为777
log file = /home/tmp/rsyncd.log    #日志如果经常同步要记得清理,否则如果同步数据量大的花,日志文件大的惊人。
hosts allow = 123.xx.xx.xx,xx.xx.xx.xx #默认可以填*,为了安全我们填要同步的ip,多个ip用英文逗号分隔
port = 873
[www]
path = /home/wwwroot    #自定义要同步的路径
read only = false
transfer logging = yes
list  = no
hosts allow = 123.xx.xx.xx
uid = root
gid = root
auth users = haha     #这个haha是下面rsyncd.secrets里面设置的,并不需要在linux系统里添加haha帐号
secrets file = /etc/rsyncd.secrets

3,接着我们设置rsyncd.secrets文件,如果有防火墙还得在防火墙添加端口

cd  /etc
vi rsyncd.secrets

rsyncd.secrets具体内容就为自己自定义用来同步的帐号密码

haha:haha123@

权限记得设置为600,否则同步时会出问题

chmod 600 rsyncd.secrets

查看,873端口是否开启。

netstat -an | grep 873

防火墙开启873端口

vi /etc/sysconfig/iptables

添加下面的内容

-A INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT

重启防火墙使配置生效

/etc/init.d/iptables restart

kill掉rsync,再以进程的方式运行rsync:

cat /var/run/rsyncd.pid | xargs kill -9 && rm -rf /var/run/rsyncd.pid  #killrsync并移除rsyncd.pid文件
kill -9 $(pgrep rsync)   #清掉进程
/usr/bin/rsync --daemon #以进程的方式启动rsync服务

4,windows客户端,我们安装rsync windows版的客户端 cwRsync 4.1.0客户端:http://soft.huweishen.com/soft/307.html
下载软件一路next即可,到达一个输入帐号密码的地方。这个帐号密码是rsync登陆windows系统的账号密码,这个帐号密码记录下来,后面配置备用。假设我设置的帐号密码为:haha haha123@
安装之后,软件路径为:

C:\Program Files\cwRsync\bin         #普通windows系统路径
C:\Program Files (x86)\cwRsync\bin   #windows 64位路径

5,windows客户端,我们要建立一个密码文件,用来同步时需要用到,当然你也可以不设置,直接在输入同步命令的时候,手动输入密码也是可以的。
我就在c盘根目录建了个copy的目录,在里面建了个rsync.pass文件,文件里只填了服务端设置的密码,注意只要填密码即可,步需要填用户名。
rsync.pass 内容为:

haha123@

6,配置完成,启动服务

服务器管理器-工具-服务,其他版本的windows可以用控制面板-管理工具-服务

找到服务rsyncserver (如果没有这个服务 应该是你用户名密码那你输入有问题 卸载了重新装一次)
将rsyncserver设置为自动启动 并启动服务。

7,这个步骤是关键步骤,如果没设置好,你运行同步命令的时候还是会要输入密码,即使你加了–password-file 这个参数,并且密码文件也存在。进入运行,输入cmd

cd C:\Program Files\cwRsync\bin  #64位系统命令为:cd C:\Program Files (x86)\cwRsync\bin
chmod -c 600 /cygdrive/c/copy/rsync.pass  #/cygdrive/c/意思就是c盘目录
chown administrator /cygdrive/c/copy/rsync.pass #这个命令很多人执行不成功,因为默认安装的客户端C:\Program Files\cwRsync\bin这个文件夹里没有chown.exe这个文件,我是从windows服务端版的rsync bin目录下拷贝的。

8,一切准备就绪,在windows下cmd里面输入

netstat -ano  #查看端口873是否正常开启。

在linux输入以下命令

telnet 123.xx.xx.xx 873

联通状态为:

Trying  123.xx.xx.xx...
Connected to 123.xx.xx.xx(123.xx.xx.xx).
Escape character is '^]'.
@RSYNCD:30.0

反之就是未联通,经过测试一般出现连接步同的情况,都是windows有开启防火墙,关闭防火墙,重启rsync服务即可

9,开始同步,因为windows为客户端,linux为服务端,我们执行命令一般在客户端执行。
同样要先进cmd,然后cd C:\Program Files\cwRsync\bin切换到rsync安装目录

rsync -vzrtopg --progress --delete  --password-file=/cygdrive/c/copy/rsync.pass haha@70.xx.xx.xx::www /cygdrive/e/abc/

该命令是从linux服务器同步数据到windows的e盘的abc目录下

rsync -vzrtopg --progress --delete  --password-file=/cygdrive/c/copy/rsync.pass /cygdrive/e/abc/ haha@70.xx.xx.xx::www

反过来使用,这个命令就是从windows的e盘abc目录同步文件到linux服务端。(同步到linux[www]模块制定的文件夹 path = /home/wwwroot)

10,具体在使用过程中,如果出现错误,日志文件在linux服务端log file = /home/tmp/rsyncd.log,查看该文件即可,把相关错位到百度搜索,一般可以解决掉。

rsync相关命令:
rsync kill以及启动

cat /var/run/rsyncd.pid | xargs kill -9 && rm -rf /var/run/rsyncd.pid  #killrsync并移除rsyncd.pid文件
kill -9 $(pgrep rsync)   #清掉进程
/usr/bin/rsync --daemon #以进程的方式启动rsync服务
echo ''>/home/tmp/rsyncd.log #linux清除日志 可以写成shell,在crontab里定时执行
-c, --checksum #参数c,打开校验开关,强制对文件传输进行校验
--size-only #仅比较文件大小,可以提高同步速度

rsync大文件续传命令 #linux客户端,windows服务端 (linux上执行)

rsync --archive --recursive --compress --partial --progress --append --password-file=/etc/rsyncd_test.scrt /home/wwwroot/yasuobao.tar.gz haha@123.xx.xx.xx::www  #linux客户端,windows服务端

rsync大文件续传命令 #windows客户端,linux服务端 (windows上执行)

rsync --archive --recursive --compress --partial --progress --append --password-file=/cygdrive/c/copy/rsync.pass /cygdrive/e/abc/yasuobao.gz haha@70.xx.xx.xx::www    #windows客户端,linux服务端

rsync同步时排除文件命令,#windows客户端,linux服务端 (windows上执行)

rsync -vzrtopg --progress --exclude-from=/cygdrive/c/copy/exclude.txt --password-file=/cygdrive/c/copy/rsync.pass /cygdrive/d/abc/ haha@70.xx.xx.xx::www  #windows客户端,linux服务端 

rsync同步时排除文件命令,#linux客户端,windows服务端 (linux上执行)

rsync -vzrtopg --progress --exclude-from=/home/exclude.txt --password-file=/etc/rsyncd_test.scrt /home/wwwroot/ haha@123.xx.xx.xx::www   #linux客户端,windows服务端

rsync定时同步
1,如果是用windows做客户端定时同步,只需把执行命令复制到bat文件,修改为:

@echo off

"C:\Program Files (x86)\cwRsync\bin\rsync.exe" -vzrtopg --progress --exclude-from=/cygdrive/c/copy/exclude.txt --password-file=/cygdrive/c/copy/rsync.pass /cygdrive/d/abc/ haha@70.xx.xx.xx::www

然后在,windows的计划任务里,添加这个bat定时执行即可,主要要选择 最高权限执行。
2,如果是用linux做客户端定时同步,只需把执行命令复制到sh文件。

#!/bin/bash

rsync -vzrtopg --progress --exclude-from=/home/exclude.txt --password-file=/etc/rsyncd_test.scrt /home/wwwroot/ haha@123.xx.xx.xx::www

然后编辑crontab,设置定时执行

rsync开机启动设置:在/etc/init.d/下新建rsync文件复制下面代码进去,把DAEMON,CONFIGFILE,PIDFILE三个参数改为自己在rsyncd.conf的设置路径。

#!/bin/sh
       #
       # php-fpm - this script starts and stops the rsync daemin
       #
       # chkconfig: - 85 15
       # processname: rsync
       # config:      /etc/rsyncd.conf

       set -e

       PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
       DESC="rsync daemon"
       NAME=rsync
       DAEMON=/usr/bin/$NAME
       CONFIGFILE=/etc/rsyncd.conf
       PIDFILE=/var/run/rsyncd.pid
       SCRIPTNAME=/etc/init.d/$NAME
       
       # If the daemon file is not found, terminate the script.
       test -x $DAEMON || exit 0

       d_start(){
           $DAEMON -y $CONFIGFILE || echo -n " already running"
       }

       d_stop(){
           kill -QUIT `cat $PIDFILE` || echo -n " no running"
       }

       d_reload(){
           kill -HUP `cat $PIDFILE` || echo -n " could not reload"
       }

       case "$1" in
           start)
               echo -n "Starting $DESC: $NAME"
               d_start
               echo "."
               ;;
           stop)
               echo -n "Stopping $DESC: $NAME"
               d_stop
               echo "."
               ;;
           reload)
               echo -n "Reloading $DESC configuration..."
               d_reload
               echo "Reloaded."
               ;;
           restart)
               echo -n "Restarting $DESC: $NAME"
               d_stop
               # Sleep for two seconds before starting again, this should give the nginx daemon some time to perform a graceful stop
               sleep 2
               d_start
               echo "."
               ;;
           *)
               echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload)" >&2
               exit 3
               ;;
       esac
       exit 0

保存好 /etc/init.d/rsync文件后,执行以下命令:

chmod 775 /etc/init.d/rsync
chkconfig --add rsync
chkconfig rsync on
/etc/init.d/rsync start   #命令启动rsync
/etc/init.d/rsync stop    #命令停止rsync
/etc/init.d/rsync restart #命令重启rsync
or
service rsync start       #命令启动rsync
service rsync stop        #命令停止rsync
service rsync restart     #命令重启rsync
广告位
分享到:

发表回复