当前位置:专辑空间 -- 技术备忘录
Centos 7 配置rsync远程数据同步
2022-05-29 19:11:10

一、rsync 简介
  Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也可以使用 Rsync 同步本地硬盘中的不同目录。 
  Rsync 是用于取代rcp的一个工具,Rsync使用所谓的 “Rsync 算法” 来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。您可以参考 How Rsync Works A Practical Overview 进一步了解 rsync 的运作机制。
  Rsync支持大多数的类Unix系统,无论是Linux、Solaris还是BSD上都经过了良好的测试。此外,它在windows平台下也有相应的版本,比较知名的有cwRsync和Sync2NAS。
  Rsync 的初始作者是 Andrew Tridgell 和 Paul Mackerra。
  Rsync的基本特点如下:
  1. 可以镜像保存整个目录树和文件系统;
  2. 可以很容易做到保持原来文件的权限、时间、软硬链接等;
  3. 无须特殊权限即可安装;
  4. 优化的流程,文件传输效率高;
  5. 可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接;
  6. 支持匿名传输,以方便进行网站镜像。
  在使用 rsync 进行远程同步时,可以使用两种方式:远程 Shell 方式(建议使用 ssh,用户验证由 ssh 负责)和 C/S 方式(即客户连接远程 rsync 服务器,用户验证由 rsync 服务器负责)。
  无论本地同步目录还是远程同步数据,首次运行时将会把全部文件拷贝一次,以后再运行时将只拷贝有变化的文件(对于新文件)或文件的变化部分(对于原有文件)。
  rsync 在首次复制时没有速度优势,速度不如 tar,因此当数据量很大时您可以考虑先使用 tar 进行首次复制,然后再使用 rsync 进行数据同步。

、系统环境

rsync 服务器:172.16.1.31
rsync 客户端:172.16.1.41

系统平台:CentOS 7.x

如图所示,搭建网络,配置地址。

1.在1.10服务器上配置为服务端,修改rsync的配置文件/etc/rsyncd.conf,并启动rsync服务程序。

2.在1.20上使用rsync命令验证是否能够从服务端(/home)下载文件到客户机端(/home)。

3.修改rsync的配置文件/etc/rsyncd.conf,实现客户机端(/home)能上传文件到服务端的(/home)位置。在客户机端验证。

4.在1.20上实现每天晚上22:00对服务器的网站目录(/home)做一次同步。

三、服务器端与客户端安装rsync服务并运行 

rpm -qa | grep rsync #检查rsync软件是否存在
yum -y install rsync #安装rsync服务

systemctl start rsyncd #启动rsync服务

systemctl enable rsyncd #加入rsync开机启动

systemctl reload rsyncd #重新加载rsync

netstat -lnp|grep 873 #检查是否已经成功启动

好了,安装运行成功。

firewall-cmd --add-service=rsyncd --zone=public --permanent  #防火墙添加rsyncd服务开放,默认端口873

firewall-cmd --reload  #重新载入防火墙


五、1.10服务端配置

1.配置rsync软件文件(/etc/rsyncd.conf)

配置文件:/etc/rsyncd.conf(默认不存在,自行编写)

vim /etc/rsyncd.conf 编辑配置文件

我的成功运行的配置——

#rsync_config
#created by HQ at 2017
##rsyncd.conf start##

uid = rsync            #指定rsync服务运行时向磁盘读取和写入的用户
gid = rsync            #指定rsync服务运行时向磁盘读取和写入的用户组
port = 873             #服务默认端口号873
fake super = yes       #伪装管理员功能开启 便于可以执行chgrp命令
use chroot = false     #安全配置 !!!
max connections = 200  #最大连接数 同时支持200个客户端连接
timeout = 300          #连接超时时间300秒
incoming  chmod  = Du=rwx,Dg=rwx,Fu=rwx,Fgo=rwx
pid file = /var/run/rsyncd.pid
#进程信息文件,便于获取进程号停止进程,便于判断服务是否启动,避免反复启动 
lock file = /var/run/rsync.lock   #锁文件 
log file = /var/log/rsyncd.log    #服务运行时日志文件
transfer logging = yes            #使rsync服务器使用ftp格式的文件来记录下载和上载操作在自己单独的日志中。
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
#用来指定那些不进行压缩处理再传输的文件
ignore errors     #忽略传输过程一些小错误 
read only = false #指定备份目录的权限为可读可写 
list = false      #是否可以列表
hosts allow = 172.16.1.0/24        #允许访问rsync服务器的客户端白名单 
hosts deny = 0.0.0.0/32            #禁止访问rsync服务器的客户端黑名单 
auth users = rsyncuser             #定义认证用户,实际并不存在 
secrets file = /etc/rsync.passwd 
#密码文件,包含客户机使用定义认证用户连接服务器需要的用户和密码信息 
ignore nonreadable = yes           #忽略错误程序

[home]                             #模块名称,可以多个模块 
    path = /home                   #模块对应的文件同步的路径
    comment = home dir by oldboy   #模块信息

配置二详解

###全局配置
address = 192.168.3.52			     #指定服务器IP地址
port = 873			                 #指定运行端口,默认是873,您可以自己指定;
uid = root			                 #rsync使用的用户,默认nobody
gid = root			                 #rsync使用的gid 默认nobody
#注:服务器端传输文件时,要发哪个用户和用户组来执行,默认是nobody。 如果用nobody 用户和用户组,可能遇到权限问题,有些
#文件从服务器上拉不下来。所以我就偷懒,为了方便,用了root 。不过您可以在定义要同步的目录时定义的模块中指定用户来解决权限的问题。
use chroot = no		                 #是否限定在该目录下,默认为true
#当有软连接时,需要改为fasle,如果为true就限定为模块默认目录,通常都在内网使用rsync所以不配也可以
pid file = /var/run/rsyncd.pid    	 #pid文件位置
lock file = /var/run/rsync.lock  	 #指定lock文件用来支持"max connections"参数使总连接不会超过限制
log file = /var/log/rsyncd.log 		 #日志文件路径
max connections = 200			     #设置最大连接数,默认0,意思无限制,负值为关闭这个模块
timeout = 300			             #默认为0,表示no timeout,建议300-600(5-10分钟)
transfer logging = yes			     #使rsync服务器使用ftp格式的文件来记录下载和上载操作在自己单独的日志中。
log format = %t %a %m %f %b		     #通过该选项用户在使用transfer logging可以自己定制日志文件的字段。其格式是
#一个包含格式定义符的字符串,可以使用的格式定义符如下所示:
#%h 远程主机名  #%a 远程IP地址  #%l 文件长度字符数  #%p 该次rsync会话的进程id  #%o 操作类型:"send"或"recv"
#%f 文件名      #%P 模块路径    #%m 模块名          #%t 当前时间               #%u 认证的用户名(匿名时是null)  
#%b 实际传输的字节数            #%c 当发送文件时,该字段记录该文件的校验码
#默认log格式为:"%o %h [%a] %m (%u) %f %l",一般来说,在每行的头上会添加"%t [%p] "。在源代码中同时发布有一个叫
#rsyncstats的perl脚本程序来统计这种格式的日志文件。
ignore nonreadable = yes			
#指定rysnc服务器完全忽略那些用户没有访问权限的文件。这对于在需要备份的目录中有些文件是不应该被备份者得到的情况是有意义的。		
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2	
#用来指定那些不进行压缩处理再传输的文件,默认值是*.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz。

###目录配置
[rsync]
	comment= "测试"
	path = /data/rsync
	ignore errors = yes		      #是否忽略IO错误
	read only = no			      #read only 是只读选择,也就是说,不让客户端上传文件到服务器上
	write only = no			      #write only指只可以上传文件不可以下载
	hosts allow = 192.168.3.55	  
	#可以指定单个IP,也可以指定整个网段,能提高安全性。格式是ip 与ip 之间、#ip和网段之间、网段和网段之间要用空格隔开;
	hosts deny = *
	list = yes			#list 意思是把rsync 服务器上提供同步数据的目录在服务器上模块是否显示列出来。默认是yes。
					#如果你不想列出来,就no ;如果是no是比较安全的,至少别人不知道你的服务器上提供了哪些目录。
	exclude = file1/ file2/		#exclude是排除的意思,也就是说,要把/data/rsync目录下的file1和
					#file2排除在外; beinan/和samba/目录之间有空格分开
	auth user = tytt		#该选项指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户
					#和系统用户没有任何关系。如果"auth users"被设置,那么客户端发出对该模块的连接
					#请求以后会被rsync请求challenged进行验证身份,这里使用的challenge/response
					#认证协议。用户的名和密码以明文方式存放在"secrets file"选项指定的文件中。
					#默认情况下无需密码就可以连接模块(也就是匿名方式)。
	secrets file = /etc/rsync.passwd #该选项指定一个包含定义用户名:密码对的文件。只有在"auth users"
					 #被定义时,该文件才有作用。文件每行包含一个username:passwd对。
					 #一般来说密码最好不要超过8个字符。没有默认的secures file名,
					 #需要限式指定一个。(例如:/etc/rsyncd.secrets)

chmod +x /etc/rsyncd.conf  #给rsyncd.conf执行权限

2.创建备份目录管理用户

useradd -s /sbin/nologin -M rsync 创建程序(虚拟)用户

id rsync 查看用户信息

3.创建认证用户密码文件

echo “rsync:123456” > /etc/rsync.password 设置用户密码文件
chmod 600 /etc/rsync.password 设置配置文件权限为只读

4.创建备份目录(我直接备份的home文件夹,可以不需要这一步)

mkdir /backup
chown -R rsync:rsync /backup/ 将所创目录属组设为认证用户
5.启动rsync服务(端口:873)

rsync --daemon 启动守护进程

6.客户端验证
rsync -avz /etc/hosts rsyncuser@172.16.1.41::home 传输数据到客户端

五、rsync服务工作方式(3种)

1.实现本地数据传输备份

rsync -a /oldboy/test02 172.16.1.31:/tmp

2.实现ssh远程数据传输备份,使用ssh默认端口22可以不输入

rsync -avz -e “ssh -p22” /home 172.16.1.41:/home  #表示本机推送到远程机
rsync -avz -e “ssh -p22”  172.16.1.41:/home  /home  #表示从远程机拉去到本机

3.实现socket守护进程数据传输

rsync -avz /home  rsyncuser@172.16.1.41::home

第三种方式需要关闭SELinux,具体方法见CentOS 7.X 关闭SELinux


六、1.20客户端部署免密钥传输数据流程(–password-file)

1.创建密码文件,并进行修改权限为600

echo “123456” >>/etc/rsync.password

chmod 600 /etc/rsync.password

2.进行免交互传输数据测试

客户端向服务端推送:

rsync -avz /home rsyncuser@172.16.1.31::home –password-file=/etc/rsync.password

客户端从服务端拉取:

rsync -avz  rsyncuser@172.16.1.31::home  /home  –password-file=/etc/rsync.password



.rsync参数选项

1.-avz

-v 表示:显示详细信息
-z 表示:传输是进行压缩提高传输效率
-a(rtpP) 表示:递归传输数据,保持文件属性

2.-rp
-r 表示:表递归传输
-p 表示:保持权限不变

3.-t
-t 表示:保持时间信息

4.-P
-P 表示:显示同步过程及传输进度信息

5.-e
-e 表示:信道协议-----ssh
例:
rsync -avz -e “ssh -p22” /home/oldboy/oldboy_test.txt 172.16.1.41:/backup
ssh远程登录传输数据**

6.–delete **
–delete 表示:无差异同步数据(本地和rsync服务端数据同步)
例:rsync --delete -avz /home  rsyncuser@172.16.1.41::home --password-file=/etc/rsync.password

7.–exclude
–exclude 参数指定排除的文件或目录信息
例:rsync -avz /oldboy_dir/ --exclude=a --exclude=b --exclude=d/2 rsync_backup@172.16.1.41::backup–password-file=/etc/rsync.password

8.–exclude-from
–exclude-from 参数指定排除多个数据信息文件
例:rsync -avz /oldboy_dir/ --exclude-from=/oldboy_dir/**exclude.txt **  rsync_backup@172.16.1.41::backup–password-file=/etc/rsync.password

详细介绍

rsync参数的具体解释如下:

-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、ssh方式进行数据同步
--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 显示帮助信息


一般都使用azv选项(如果windows与linux同步不建议使用这个参数)


八、部分补充说明

1.对备份目录进行分别授权

chown -R rsync.rsync /backup/chown -R sa.sa /sabackup/
chown -R dev.dev /devbackup/

重启服务

killall rsync && rsync --daemon

2.黑白名单访问策略

(1)只有白名单,没有黑名单,只按白名单执行,默认规则是阻止
(2)没有白名单,只有黑名单,按黑名单执行,默认规则是允许
(3)默认规则允许,白名单优于黑名单

3.守护进程无差异同步配置

–delete 实现无差异同步数据传输

4.守护进程列表功能配置(list= )
list=true(可以让rsync客户查看到rsync服务端所有的模块信息)
list=false(不可以让rsync客户查看到rsync服务端所有的模块信息)

查看命令:rsync  rsync_backup@172.16.1.41::
建议为false,安全


5.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 foo:src/bar /data
  4)从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。如:rsync -av root@172.16.78.192::www /databack
  5)从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。如:rsync -av /databack root@172.16.78.192::www
      6)列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。如:rsync -v rsync://172.16.78.192/www

九、rsync 常见错误与解决方法整理

我们都是通过错误日志查看

在rsyncd.log里面或.err文件里面,大家可以用记事本打开查看。

注意windows下面我们需要给SvcwRsync用户,管理同步目录的所有权限,基本上这样就可以了

问题一: 
@ERROR: chroot failed 
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3] 

原因: 
服务器端的目录不存在或无权限,创建目录并修正权限可解决问题。 

问题二: 
@ERROR: auth failed on module tee 
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3] 

原因: 
服务器端该模块(tee)需要验证用户名密码,但客户端没有提供正确的用户名密码,认证失败。 
提供正确的用户名密码解决此问题。 

问题三: 
@ERROR: Unknown module ‘tee_nonexists' 
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3] 

原因: 
服务器不存在指定模块。提供正确的模块名或在服务器端修改成你要的模块以解决问题。 


问题1: 
在client上遇到问题: 
rsync -auzv --progress --password-file=/etc/rsync.pas root@192.168.133.128::backup /home/ 
rsync: could not open password file "/etc/rsync.pas": No such file or directory (2) 
Password: 
@ERROR: auth failed on module backup 
rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7] 
遇到这个问题:client端没有设置/etc/rsync.pas这个文件,而在使用rsync命令的时候,加了这个参数-- 
password-file=/etc/rsync.pas 

问题2: 
rsync -auzv --progress --password-file=/etc/rsync.pas root@192.168.133.128::backup /home/ 
@ERROR: auth failed on module backup 
rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7] 
遇到这个问题:client端已经设置/etc/rsync.pas这个文件,里面也设置了密码111111,和服务器一致,但是 
服务器段设置有错误,服务器端应该设置/etc/rsync.pas ,里面内容root:111111 ,这里登陆名不可缺少 

问题3: 
rsync -auzv --progress --password-file=/etc/rsync.pas root@192.168.133.128::backup /home/ 
@ERROR: chdir failed 
rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7] 
遇到这个问题,是因为服务器端的/home/backup 其中backup这个目录并没有设置,所以提示:chdir failed 

问题4: 
rsync: write failed on "/home/backup2010/wensong": No space left on device (28) 
rsync error: error in file IO (code 11) at receiver.c(302) [receiver=3.0.7] 
rsync: connection unexpectedly closed (2721 bytes received so far) [generator] 
rsync error: error in rsync protocol data stream (code 12) at io.c(601) [generator=3.0.7] 
磁盘空间不够,所以无法操作。 
可以通过df /home/backup2010 来查看可用空间和已用空间 

问题5:网络收集问题 
1、权限问题 
类似如下的提示:rsync: opendir "/kexue" (in dtsChannel) failed: Permission denied (13)注意查看同步的目录权限是否为755 
2、time out 
rsync: failed to connect to 203.100.192.66: Connection timed out (110) 
rsync error: error in socket IO (code 10) at clientserver.c(124) [receiver=3.0.5] 
检查服务器的端口netstat –tunlp,远程telnet测试。 
可能因为客户端或者服务端的防火墙开启 导致无法通信,可以设置规则放行 rsync(873端口) 或者直接关闭防火墙。 

还有一种在同步过程中可能会提示没有权限 (将同步目录加上SvcwRsync全部权限即可,更简单的方法就是将SvcwRsync设为管理员即可)


3、服务未启动 
rsync: failed to connect to 10.10.10.170: Connection refused (111) 
rsync error: error in socket IO (code 10) at clientserver.c(124) [receiver=3.0.5] 
启动服务:rsync --daemon --config=/etc/rsyncd.conf 
4、磁盘空间满 
rsync: recv_generator: mkdir "/teacherclubBackup/rsync……" failed: No space left on device (28) 
*** Skipping any contents from this failed directory *** 
5、Ctrl+C或者大量文件 
rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(544) [receiver=3.0.5] 
rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(544) [generator=3.0.5] 
说明:导致此问题多半是服务端服务没有被正常启动,到服务器上去查查服务是否有启动,然后查看下 /var/run/rsync.pid 文件是否存在,最干脆的方法是杀死已经启动了服务,然后再次启动服务或者让脚本加入系统启动服务级别然后shutdown -r now服务器

6、xnetid启动 
rsync: read error: Connection reset by peer (104) 
rsync error: error in rsync protocol data stream (code 12) at io.c(759) [receiver=3.0.5] 
查看rsync日志 
rsync: unable to open configuration file "/etc/rsyncd.conf": No such file or directory 
xnetid查找的配置文件位置默认是/etc下,根据具体情况创建软链接。例如: 
ln -s /etc/rsyncd/rsyncd.conf /etc/rsyncd.conf 
或者更改指定默认的配置文件路径,在/etc/xinetd.d/rsync配置文件中。 
Rsync configure:
配置一:
ignore errors
说明:这个选项最好加上,否则再很多crontab的时候往往发生错误你也未可知,因为你不可能天天去看每时每刻去看log,不加上这个出现错误的几率相对会很高,因为任何大点的项目和系统,磁盘IO都是一个瓶颈

Rsync error: 
错误一: 
@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) 
说明:这是因为密码设置错了,无法登入成功,检查一下rsync.pwd,看客服是否匹配。还有服务器端没启动rsync 服务也会出现这种情况。
错误二: 
password file must not be other-accessible 
continuing without password file 
Password: 
说明:这是因为rsyncd.pwd rsyncd.sec的权限不对,应该设置为600。如:chmod 600 rsyncd.pwd

错误三: 
@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) 
说明:这是因为你在 rsync.conf 中设置的 path 路径不存在,要新建目录才能开启同步
错误四: 
rsync: failed to connect to 218.107.243.2: No route to host (113) 
rsync error: error in socket IO (code 10) at clientserver.c(104) [receiver=2.6.9] 
说明:防火墙问题导致,这个最好先彻底关闭防火墙,排错的基本法就是这样,无论是S还是C,还有ignore errors选项问题也会导致

错误五:
@ERROR: access denied to www from unknown (192.168.1.123)
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(359)
说明:此问题很明显,是配置选项host allow的问题,初学者喜欢一个允许段做成一个配置,然后模块又是同一个,致使导致
错误六:
rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(244) [generator=2.6.9]
rsync error: received SIGUSR1 (code 19) at main.c(1182) [receiver=2.6.9]
说明:导致此问题多半是服务端服务没有被正常启动,到服务器上去查查服务是否有启动,然后查看下 /var/run/rsync.pid 文件是否存在,最干脆的方法是杀死已经启动了服务,然后再次启动服务或者让脚本加入系统启动服务级别然后shutdown -r now服务器

错误七:
rsync: read error: Connection reset by peer (104)
rsync error: error in rsync protocol data stream (code 12) at io.c(604) [sender=2.6.9]
说明:原数据目录里没有数据存在
rsync 错误与解决方法整理补充篇

由于我们经常使用rsync进行服务器文件的同步工作,但在配置过程中,会出现很多问题,下面的错误基本上都是通过客户端返回的错误进行分析。

      另外查找错误过程中也学到了一个查看错误的方法-查看系统日志,我们操作的每步都会在日志上有说明,有时候报错看不懂,日志上都写的清清楚楚。

      命令:cat /var/log/messages

问题一:

@ERROR: auth failed on module bachup
 rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]

原因:服务器端该模块(backup)需要验证用户名密码,但客户端没有提供正确的用户名密码,认证失败。  提供正确的用户名密码解决此问题。 
这个问题比较蠢,如果可能你和我一样明明在模块里写了密码文件,怎么都不通,这个时候我劝你先检查一下所写模块中是不是和下图一样。比如,某处多了个s。
问题二:110错误 -time out

rsync: failed to connect to 203.100.192.66: Connection timed out (110) 
rsync error: error in socket IO (code 10) at clientserver.c(124) [receiver=3.0.5]

原因:

检查服务器的端口netstat –tunlp,远程telnet测试。 可能因为客户端或者服务端的防火墙开启 导致无法通信,可以设置规则放行 rsync(873端口) 或者直接关闭防火墙。 
在这里博主是重启过服务器,然后就报110了,直接开启rsync服务就行。

命令:service rsyncd start

问题三:113错误 -防火墙
rsync: failed to connect to 218.107.243.2: No route to host (113) rsync error: error in socket IO (code 10) at clientserver.c(104) [receiver=2.6.9]
原因:
防火墙问题导致,这个很简单,关闭防火墙就可以。不过博主还是被困在这里几个小时,因为linux防火墙分两种:

-iptable和-firewall
认识到这个问题首先查看系统的防火墙种类,查看防火墙状态即可
service iptable status
firewall-cmd --state

确定防火墙种类后再按对应方法将防火墙关闭即可。

问题四:1516错误

@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1516) [Receiver=3.0.9]
解决:这个问题错误差别很大,可查看系统日志查看错误,再搜索解决方法。

注意:一般这种情况都建立在可以连通的基础。去服务端查看系统日志,可以查看相关错误。

命令:cat /var/log/massages

cat /var/log/rsyncd.log

发布:木船