Rsync数据复制

Rsync - 图1

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 - 图2
    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

  1. <a name="xlgvT"></a>
  2. ## 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:目的路径

![](https://cdn.nlark.com/yuque/0/2022/png/12538678/1652430405162-5d9a57bd-9007-41e1-ba25-bd8778cb60fa.png#clientId=u845de647-aa19-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=u4777603e&margin=%5Bobject%20Object%5D&originHeight=1018&originWidth=1556&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u9091e43d-57a4-4ddf-8635-8f943f2a618&title=)<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 />![](https://cdn.nlark.com/yuque/0/2022/png/12538678/1652430405181-344bdacc-4e4e-4a4f-8bc8-86bde6285327.png#clientId=u845de647-aa19-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=uc5ad9d38&margin=%5Bobject%20Object%5D&originHeight=166&originWidth=2790&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u21caa9aa-d754-44a1-b614-65aa12fb010&title=)
<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 />![](https://cdn.nlark.com/yuque/0/2022/png/12538678/1652430405217-cbd8224a-bb02-4bfa-a0b4-82458ffdf7d2.png#clientId=u845de647-aa19-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=u43852168&margin=%5Bobject%20Object%5D&originHeight=1220&originWidth=1906&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u39c12d34-c0cf-4d33-bdc9-db90002fc97&title=)
<a name="zZbgh"></a>
### Rsync守护进程客户端访问原理图
![](https://cdn.nlark.com/yuque/0/2022/png/12538678/1652430405981-4bfa70eb-8dde-4779-afb5-3cda08055dbe.png#clientId=u845de647-aa19-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=u96368a49&margin=%5Bobject%20Object%5D&originHeight=962&originWidth=2370&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u4c27483b-ef33-492b-a322-4d5f73236a2&title=)
<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]

办法
  1. 共享目录的属主和属组不正确,不是rsync

  2. 共享目录的权限不正确,不是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]

办法

异常问题解决:

  1. 备份存储目录没有建立

  2. 建立的备份存储目录和配置文件定义不一致

    <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服务端排错思路

  1. 检查rsync服务端的配置文件路径是否正确:/etc/rsyncd.conf
  2. 查看配置文件的host allow,host deny允许的ip网段是否允许客户端访问
  3. 查看配置文件中的path参数路径是否存在,权限是否正确(和配置文件的UUID参数对应)
  4. 查看rsync服务是否启动,端口、进程是否存活
  5. 查看iptables防火墙、selinux是否允许rsync服务通过,或是关闭
  6. 查看服务端rsync配置文件的密码文件,权限是否600,格式,语法是否正确,且和配置文件的secrect files参数对应
  7. 如果是推送数据,要查看配置rsyncd.conf中的用户对该rsync模块下的文件是否可以读取

    Rsync客户端排错

  8. 查看rsync客户端配置的密码文件权限是否600,密码文件格式是否正确,是否和服务端的密码一致

  9. 尝试telnet连接rsync服务端的873端口,检测服务是否可以连接
  10. 客户端执行命令语法要检查,细心
  11. 客户端的密码文件,只需要写入密码即可 cat /etc/rsync.password