Rsync数据复制
Rsync服务概念特性
Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。Rsync软件适用于unix/linux/windows等多种操作系统平台。 Rsync是一个快速和非常通用的文件复制工具。它能本地复制,远程复制,或者远程守护进程方式复制。它提供了大量的参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制。它以其delta-transfer算法闻名。减少通过网络数据发送数量,利用只发送源文件和目标文件之间的差异信息,从而实现数据的增量同步复制。
Rsync被广泛用于数据备份和镜像
,并且作为一种改进后的复制命令用于日常运维。
Rsync具备使本地和远程两台主机之间的数据快速复制,远程备份的功能,Rsync命令本身即可实现异地主机复制数据,功能类似scp又优于scp,scp每次都是全量备份,rsync可以实现增量拷贝(和scp一样都是基于ssh服务传输),Rsync软件还支持配置守护进程,实现异机数据复制。
增量复制是Rsync一特点,优于scp,cp命令。
Rsync实现如下功能
- 本地数据同步复制,效果如cp
- 远程数据同步复制,如scp
- 本地数据删除,如rm
- 远程数据查看,如ls
Rsync软件特性
- 支持拷贝普通文件,特殊文件(link文件,设备文件)
- 支持排除指定文件、目录的同步功能(同步数据时,指定文件不同步)
- 能够保持原有文件所有属性均不变(stat查看的状态)
- 实现增量复制(只复制变化的数据,数据传输效率极高)
- 可以配合ssh、rcp、rsh等方式进行隧道加密文件传输(rsync本身不加密数据)
- 可以通过socket(进行通信文件)传输文件和数据(c/s架构)
- 支持匿名用户模式传输
增量传输

Rsync软件的增量备份是一大特点,在备份复制数据时,Rsync通过其quick cheek算法,仅复制文件(容量、最后修改时间变化)的文件或是目录,也可以指定文件权限的变化复制,甚至可以复制一个文件里仅变化的内容,因此可以实现快速的备份复制数据。
Rsync在centos7系统上默认是3.x版本,效率更高,原理是一边比对差异,一边对差异的数据进行复制,比centos6上的Rsync 2.x更高效。 ``` 查看rsync版本 [root@chaogelinux ~]# rsync —version rsync version 3.1.2 protocol version 31
yum install rsync -y
<a name="xlgvT"></a>## Rsync语法参数
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 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参数的具体解释如下:
-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 显示帮助信息
<a name="dkaAO"></a>
## Rsync工作方式
1. 本地数据传输
类似cp的复制,实现文件,目录的增量复制。
2. 远程Shell数据传输
借助SSH服务在两台服务器之间传输,没有客户端/服务端之分,两台机器是相对的复制关系。
<a name="WBfWk"></a>
### 本地数据传输
_语法模式_
rsync命令 参数 src源文件/目录 dest目标文件/目录
1.本地文件复制
复制hosts文件
[root@chaogelinux ~]# rsync /etc/hosts /tmp/
2.复制目录内容<br />-r, --recursive 对子目录以递归模式处理
复制/data下所有内容到/tmp
rsync -r /data/ /tmp/
复制/data整个文件夹到/tmp
rsync -r /data /tmp
注意如上的区别
3.删除文件夹数据,使用参数--delete<br />--delete 删除那些DST中SRC没有的文件
新建空文件夹
[root@chaogelinux ~]# mkdir /opt/null
同步删除数据
[root@chaogelinux ~]# rsync -r —delete /opt/null/ /tmp/
4.清空文件内容,使用参数--delete,参数--delete必须和-r结合用
1.echo “超哥带你学Rsync” > /tmp/test.txt 2.touch /tmp/null 3.rsync -r —delete /tmp/null /tmp/test.txt
5.查询文件和目录信息,如同ls -l
1.查询文件、文件夹信息 [root@chaogelinux ~]# rsync /etc/hosts -rw-r—r— 248 2020/03/05 15:47:44 hosts [root@chaogelinux ~]# rsync /opt drwxr-xr-x 4,096 2020/03/08 17:17:55 opt
<a name="OQWPT"></a>
### 远程数据传输
远程传输分为两种情况【拉取|推送】<br />拉取:远端服务器数据,拉取到本地<br />推送:本地数据发送给远程服务器<br />_拉取pull_
语法 rsync option user@host:src dest 命令 可选参数 用户名@主机ip:源路径 本地路径
_推送push_
语法 rsync option src user@host:dest 命令 参数 本地路径 用户@主机ip:目的路径
<br />1.拉取远程主机文件,拷贝到本地
1.把远程主机的/etc/hosts文件,拷贝到本地/tmp 在生产环境,常用ssh的免密登录来操作 rsync -av -e ‘ssh -p 22’ root@123.206.16.61:/etc/hosts /tmp -e, —rsh=COMMAND 指定使用rsh、ssh方式进行数据同步,若是默认22,可以不写该参数 -a, —archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,压缩模式传输 -v, —verbose 详细模式输出
执行结果
[root@web01 tmp]# rsync -av -e ‘ssh -p 22’ root@123.206.16.61:/etc/hosts /tmp The authenticity of host ‘123.206.16.61 (123.206.16.61)’ can’t be established. ECDSA key fingerprint is SHA256:CVwhwfUka2JLs1iD53HpLPrretR4pGltYRL6QB+5lyI. ECDSA key fingerprint is MD5:4b:41:6f:bd:84:ce:24:c3:70:d1:04:a1:5d:01:8d:34. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added ‘123.206.16.61’ (ECDSA) to the list of known hosts. root@123.206.16.61’s password: receiving incremental file list hosts
sent 43 bytes received 339 bytes 58.77 bytes/sec total size is 248 speedup is 0.65
2.把本地的/etc/hosts文件推送到远程服务器的/tmp下
rsync -av /etc/hosts root@123.206.16.61:/tmp/
【提示】
- 远程数据传输,指定SSH协议默认需要输入主机密码,可以配置SSH免密登录更为方便
- 工作环境下,采用rsync守护进程更为合适
<a name="Jy6BL"></a>
### 守护进程传输模式
守护进程传输模式是在客户端和服务端之间进行的数据复制。<br />服务端需要配置守护进程,在客户端执行命令,实现数据拉取和推送。<br />语法参数<br />【拉取语法】
1.拉取模式语法,推荐使用,看清楚参数的符号! rsync 参数 user@host::src dest
2.拉取第二种(不推荐使用) rsync 参数 rsync://user@host:port/src
【推送语法】
1.推送语法 rsync 参数 源路径 user@host::dest
2.推送第二种(不推荐使用) rsync 参数 src rsync://user@host:port/dest
通过语法可知,拉取和推送数据的语法几乎是相同的<br />想要通过守护传输模式进行复制传输数据,还得额外部署Rsync Daemon服务才行
<a name="waG0G"></a>
### 守护进程传输模式实战
<a name="uNdoC"></a>
#### 【准备三台linux服务器】
1.准备3台linux机器
老师机器的环境 192.168.178.140 web01 Nginx web服务器 192.168.178.139 backup Rsync备份存储服务器 192.168.178.138 nfs01 NFS存储服务器
128 learn_nginx_web_01 nginx web 服务器 源数据服务器 140 backup_01 rsync数据备份存储器 130 linux_learn01 nfs存储服务器 源数据服务器
三台机器的终端<br />
<a name="c2blo"></a>
#### 【环境部署,Rsync备份服务器】
1.准备linux系统环境 rethat系列的虚拟机查看方法如下 [root@chaoge_linux ~]# cat /etc/redhat-release CentOS Linux release 7.7.1908 (Core)
[root@chaoge_linux ~]# uname -r # 查看内核版本 3.10.0-1062.9.1.el7.x86_64 [root@chaoge_linux ~]# uname -m # 查看系统架构 x86_64
2.是否安装了rsync软件,若是未安装可以yum安装即可
[root@chaogelinux ~]# rpm -qa rsync
rsync-3.1.2-6.el7_6.1.x86_64
【配置需求】<br />在Rsync备份机器上以rsync守护进程的方式部署Rsync服务,使得所有Rsync节点的客户端主机,可以把本地数据通过rsync命令备份数据到BACKUP服务器上。<br />【备份架构拓扑图】<br />以Rsync守护进程模式部署架构,并且以远程数据同步方式由客户端节点向服务器端推送数据<br />
<a name="zZbgh"></a>
### Rsync守护进程客户端访问原理图

<a name="nMVgS"></a>
### Rsync服务端部署一
_守护进程数据传输原理解析(重要)_
| **步骤** | **举例** | **Rsync步骤** |
| --- | --- | --- |
| 1 | 确认是否有个房间可以当做仓库 | 确认Rsync程序是否安装 |
| 2 | 装修改造房间为仓库 | 修改Rsync配置文件信息 |
| 3 | 确认仓库的管理员 | 创建负责Rsync服务的虚拟用户 |
| 4 | 仓库中有柜子可以存储,管理员可以打开柜子 | 创建Rsync服务备份数据的目录,进行对虚拟用户授权 |
| 5 | 仓库要提升安全,上个锁 | 配置Rsync服务安全相关密钥,且对密钥文件授权600 |
| 6 | 确认仓库可以用了,开门营业了 | 启动Rsync服务,让其可以工作 |
| 7 | 确定仓库每天开门工作 | 设置Rsync服务开机启动 |
【第一步,修改rsyncd.conf配置文件】<br />Rsync守护进程配置在BACKUP服务器上
1.确认安装rsync服务 yum install rsync -y
2.修改配置文件,默认是 /etc/rsyncd.conf 写入如下参数
by chaoge rsyncd.conf
uid = rsync # 指定rsunc服务运行的时候,向磁盘写入数据和读取数据的用户是谁 gid = rsync # 同上,指定运行rsync的用户组 fake super = yes # 无需让rsync以root身份运行即可保存文件完整属性 use chroot = no # 进行数据同步存储时,有关安全的参数,默认企业都是内网rsync同步,这个参数就可以关闭了 max connections = 200 # 最大连接数 pid file = /var/run/rsyncd.pid # rsync服务运行时,用于记录rsync进程id号的文件 lock file = /var/run/rsync.lock # 定义锁文件,主要和上述的最大连接数进行并发控制 log file = /var/log/rsyncd.log # 定位日志位置 ignore errors read only = false list = false hosts allow = 192.168.178.0/24 # 允许哪些网段可以访问rsync hosts deny = 0.0.0.0/32 # 拒绝所有其他IP访问 auth users = rsync_backup # 用于连接rsync服务端的验证用户名 secrets file = /etc/rsync.password # 定义密码文件路径 [backup] # 定义区、段的名字,也是用于定义备份的模块的信息,可以写入多个 comment = This is chaoge backup! # 注释信息 path = /backup/
【rsyncd.conf参数解释】
| **配置参数** | **参数说明** |
| --- | --- |
| uid = rsync | 指定rsync服务运行的时候,向磁盘进行读取和写入操作的操作者 |
| gid = rsync | 指定rsync服务运行的时候,向磁盘进行读取和写入操作的操作者 |
| use chroot = no | 进行数据同步存储时,安全相关参数,默认内网进行数据同步,可以关闭 |
| max connections = 200 | 定义向备份服务器进行数据存储的并发连接数 |
| timeout = 300 | 定义与备份服务器建立的网络连接,在多长时间没有数据传输时,就释放连接 |
| pid file = /var/run/rsyncd.pid | 服务程序运行时,会将进程的pid信息存储到一个指定的pid文件中 |
| lock file = /var/run/rsync.lock | 定义锁文件,主要用于配合max connections 参数,当达到最大连接就禁止继续访问 |
| **配置参数** | **参数说明** |
| --- | --- |
| log file = /var/log/rsyncd.log | 定义服务的日志文件保存路径信息 |
| [backup] | 指定备份目录的模块名称信息 |
| path = /backup | 指定数据进行备份的目录信息 |
| ignore errors | 在进行数据备份传输过程过程中,忽略一些I/O产生的传输错误 |
| read only = false | 设置对备份的目录的具有读写权限,即将只读模式进行关闭 |
| list = false | 确认是否可以将服务配置的模块信息,在客户端可以查看显示 |
| hosts allow = 172.16.1.0/24 | 设置备份目录允许进行网络数据备份的主机地址或网段信息,即设置白名单 |
| **配置参数** | **参数说明** |
| --- | --- |
| hosts deny = 0.0.0.0/32 | 设置备份目录禁止进行网络数据备份的主机地址或网段信息,即设置黑名单 |
| auth users = rsync_backup | 指定访问备份数据目录的认证用户信息,为虚拟定义的用户,不需要进行创建 |
| secrets file = /etc/rsync.password | 设置访问备份数据目录进行认证用户的密码文件信息,会在文件中设置认证用户密码信息 |
| **配置参数** | **参数说明** |
| --- | --- |
| [backup] | 指定模块名称,便于日后维护 |
| path=/backup | 在当前模块中,Daemon使用的文件系统或目录,注意目录权限和配置文件权限一直,防止读写出问题 |
| #exclude= | 排除文件或目录,相对路径 |
| [chaoge] | 还可以添加其他模块 |
<a name="nsCDg"></a>
### Rsync服务端配置二
【配置数据备份的目录】
1.根据rsyncd.conf中定义的目录,创建目录、用户
-M 创建用户家目录 [root@rsync01 ~]# useradd rsync -s /sbin/nologin -M # 创建同步的账户 [root@rsync01 ~]# mkdir -p /backup [root@rsync01 ~]# chown -R rsync.rsync /backup/
2.配置用于Rsync复制的账户、密码、文件权限,在Rsync备份服务端创建 内容与上边定义文件auth users相对应 [root@rsync01 ~]# echo “rsync_backup:chaoge” > /etc/rsync.password [root@rsync01 ~]# [root@rsync01 ~]# [root@rsync01 ~]# chmod 600 /etc/rsync.password
检查密码文件,权限 [root@rsync01 ~]# ll /etc/rsync.password -rw———-. 1 root root 20 Mar 11 15:16 /etc/rsync.password [root@rsync01 ~]# cat /etc/rsync.password rsync_backup:chaoge
3.启动rsync服务,开机自启 systemc start rsyncd systemctl restart rsyncd systemc enable rsyncd systemc status rsyncd
4.检查Rsync服务进程、端口 [root@rsync01 ~]# netstat -tunlp|grep rsync tcp 0 0 0.0.0.0:873 0.0.0.0: LISTEN 9356/rsync tcp6 0 0 :::873 ::: LISTEN 9356/rsync
[root@rsync01 ~]# ps -ef|grep rsync|grep -v grep root 9356 1 0 15:18 ? 00:00:00 /usr/bin/rsync —daemon —no-detach
<a name="eueLn"></a>
### Rsync客户端(nfs01)配置
1.确认rsync命令是否有 2.创建和rsync服务端连接的账户密码文件,且授权 3.注意Rsync客户端要和服务端的配置区别开
配置过程
1.安装rsync yum install rsync -y
2.创建密码文件,和服务端相同 密码是服务端的密码 [root@nfs01 ~]# echo “chaoge” > /etc/rsync.password
3.授权文件 [root@nfs01 ~]# chmod 600 /etc/rsync.password
4.验证文件密码、权限 [root@nfs01 ~]# cat /etc/rsync.password chaoge [root@nfs01 ~]# ll /etc/rsync.password -rw———-. 1 root root 7 3月 11 15:30 /etc/rsync.password
5.配置特殊变量RSYNC_PASSWORD,可以替代密码文件 [root@nfs01 ~]# export RSYNC_PASSWORD=chaoge #临时生效 [root@nfs01 ~]# echo “export RSYNC_PASSWORD=chaoge” >> /etc/bashrc #永久开机生效
验证密码变量 [root@nfs01 ~]# tail -1 /etc/bashrc export RSYNC_PASSWORD=chaoge [root@nfs01 ~]# echo $RSYNC_PASSWORD chaoge
至此Rsync守护进程方式,服务端、客户端都配置完毕
<a name="tsDp1"></a>
### 测试数据同步,rsync生产经验实战
<a name="pA70l"></a>
#### 推送:客户端同步文件给服务端
1.从客户端推送 /opt目录 同步到服务端Rsync指定的目录(/bakcup)下 [root@nfs01 ~]# rsync -avzP /opt rsync_backup@192.168.178.139::backup —password-file=/etc/rsync.password
2.也可以直接使用密码变量,进行同步 [root@nfs01 ~]# tail -1 /etc/bashrc export RSYNC_PASSWORD=chaoge [root@nfs01 ~]# rsync -avzP /etc/ rsync_backup@192.168.178.139::backup
【客户端推送命令解释】
rsync -avzP /opt rsync_backup@192.168.178.139::backup —password-file=/etc/rsync.password 参数解释 -avzP /opt -a 保持文件原有属性 -v 显示传输细节情况 -z 对传输数据压缩传输,提升效率 -P 显示文件传输的进度信息 /opt 要推送的本地目录,注意/opt/ 表示推送该目录下内容
选项解释 rsync_backup@192.168.178.139::backup —password-file=/etc/rsync.password
验证rsync服务端参数 grep ‘auth user’ /etc/rsyncd.conf
rsync_backup rsync同步数据的虚拟认证用户(用来验证的账户)
是rsync服务端配置文件中定义的模块名 /etc/rsyncd.conf
@192.168.178.139::backup 要推送的目的地ip地址(服务端)以及模块名称 ::backup 表示配置文件中的[backup]字段
—password-file=/etc/rsync.password #指定密码文件
【进入Rsync服务端查询同步的数据】
[root@rsync01 ~]# ls /backup/
<a name="VT6KD"></a>
#### 拉取:从服务器端同步文件或目录到客户端
把rsync服务端的备份目录中的数据,拷贝到客户端的某个目录
1.在客户端执行 [root@nfs01 ~]# rsync -avz rsync_backup@192.168.178.139::backup /tmp —password-file=/etc/rsync.password
2.此时也就吧rsync服务端的/backup目录下的内容,同步到客户端的/tmp目录下了 [root@nfs01 ~]# ls /tmp/
<a name="TgV4e"></a>
## 注意同步问题
<a name="lomv4"></a>
#### 【客户端的错误现象:No route to host】
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
rsync: failed to connect to 172.16.1.41: No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]
办法:
1.关闭iptables,或者添加规则 iptables -F systemctl stop firewalld
2.关闭selinux [root@nfs01 ~]# setenforce 0 #临时关闭 [root@rsync01 ~]# sed -i ‘s/enforcing/disabled/g’ /etc/selinux/config #重启永久关闭
<a name="HB3KE"></a>
#### 【注意命令同步的细节】
1.同步整个文件夹 [root@nfs01 ~]# rsync -avzP /etc rsync_backup@192.168.178.139::backup
2.同步文件夹下内容 [root@nfs01 ~]# rsync -avzP /etc/ rsync_backup@192.168.178.139::backup
<a name="FP4Cg"></a>
#### 【ERROR: The remote path must start with a module name not a /】
rsync客户端执行rsync命令错误:
客户端的错误现象:
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::/backup
ERROR: The remote path must start with a module name not a /
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
办法
原因:客户端命令敲错了 rsync命令语法理解错误,::/backup是错误的语法,应该为::backup(rsync模块)
<a name="qRMjB"></a>
#### 【@ERROR: auth failed on module backup】
客户端的错误现象:
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
办法
1.密码文件错误/etc/rsync.password 2.密码文件参数和实际的密码文件名不一致,检查secrets file = /etc/rsync.password 3.密码文件权限不对 ll /etc/rsync.password 不是600 4.检查免密文件,是否手误 [root@rsync01 ~]# cat /etc/rsync.password rsync_backup:chaoge
5.rsync客户端的密码文件写错,只需要写入密码即可 [root@nfs01 ~]# cat /etc/rsync.password chaoge
<a name="yH3sD"></a>
#### 【@ERROR: Unknown module 'backup'】
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
@ERROR: Unknown module ‘backup’
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
办法
异常问题解决:
1、 /etc/rsyncd.conf配置文件模块名称书写错误
2、配置文件中网段限制不对
<a name="LkKKt"></a>
#### 【Permission denied】
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
sending incremental file list
hosts
rsync: mkstemp “.hosts.5z3AOA” (in backup) failed: Permission denied (13)
sent 196 bytes received 27 bytes 63.71 bytes/sec
total size is 349 speedup is 1.57
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]
办法
共享目录的属主和属组不正确,不是rsync
共享目录的权限不正确,不是755
3.注意防火墙,selinux的关闭
<a name="ApLQO"></a>
#### 【chdir failed 】
[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
@ERROR: chdir failed
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
办法
异常问题解决:
备份存储目录没有建立
建立的备份存储目录和配置文件定义不一致
<a name="kHCbA"></a> #### 【invalid uid rsync】[root@nfs01 tmp]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
Password:
@ERROR: invalid uid rsync
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]
办法
异常问题解决:
rsync服务对应rsync虚拟用户不存在了
<a name="Yi94N"></a>
#### 客户端有/etc/rsync.password依旧需要输入密码
1.密码文件也得是600权限 2.密码文件名字是否正常
<a name="xMKdQ"></a>
#### 【Connection refused (111)】
[root@oldboy-muban ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup
rsync: failed to connect to 172.16.1.41: Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]
办法
1.检查防火墙,selinux的关闭 2.检查rsync服务端rsyncd是否开启 ```
Rsync服务端排错思路
- 检查rsync服务端的配置文件路径是否正确:/etc/rsyncd.conf
- 查看配置文件的host allow,host deny允许的ip网段是否允许客户端访问
- 查看配置文件中的path参数路径是否存在,权限是否正确(和配置文件的UUID参数对应)
- 查看rsync服务是否启动,端口、进程是否存活
- 查看iptables防火墙、selinux是否允许rsync服务通过,或是关闭
- 查看服务端rsync配置文件的密码文件,权限是否600,格式,语法是否正确,且和配置文件的secrect files参数对应
如果是推送数据,要查看配置rsyncd.conf中的用户对该rsync模块下的文件是否可以读取
Rsync客户端排错
查看rsync客户端配置的密码文件权限是否600,密码文件格式是否正确,是否和服务端的密码一致
- 尝试telnet连接rsync服务端的873端口,检测服务是否可以连接
- 客户端执行命令语法要检查,细心
- 客户端的密码文件,只需要写入密码即可
cat /etc/rsync.password
