rsync配置文件详解

配置文件内容说明

man rsyncd.conf

全局参数

uid=rsync运行rsync守护进程的用户。
gid=rsync运行rsync用户组(用户所在的组)
use chroot=no如果为true,daemon会在客户端传输文件前“chroot to the path”。这是一种安全配置,因为我们大多数都在内网,所以不配也没关系
max connections=200设置最大连接数,默认0,意思无限制,负值为关闭这个模块
strict modes=yes是否检查口令文件的权限
port=873默认端口873
timeout=400默认为0,表示no timeout,建议300-600(5-10分钟)
pid filersync daemon启动后将其进程pid写入此文件。如果这个文件存在,rsync不会覆盖该文件,而是会终止
lock file指定lock文件用来支持“max connections”参数,使得总连接数不会超过限制
log file不设或者设置错误,rsync会使用rsyslog输出相关日志信息
motd file“motd file”参数用来指定一个消息文件,当客户连接服务器时该文件的内容显示给客户,默认没有motd文件

模块参数

ignore errors忽略无关的I/O错误
read only=false指定客户端是否可以上传文件,默认对所有模块为true
list=false是否允许客户端可以查看可用模块列表,默认为可以
hosts allow指定可以联系的客户端主机名或和ip地址或地址段,默认情况没有此参数,即都可以连接
hosts deny指定不可以联系的客户端主机名或ip地址或地址段,默认情况没有此参数,即都可以连接
auth users指定以空格或逗号分隔的用户可以使用哪些模块,用户不需要在本地系统中存在。默认为所有用户无密码访问
secrets file指定用户名和密码存放的文件,格式;用户名;密码,密码不超过8位
[backup]这里就是模块名称,需用中括号扩起来,起名称没有特殊要求,但最好是有意义的名称,便于以后维护
comment模块注释信息
path这个模块中,daemon使用的文件系统或目录,目录的权限要注意和配置文件中的权限一致,否则会遇到读写的问题

定义变量信息实现免密钥交互

添加环境变量

export RSYNC_PASSWORD=vicodona123

测试

[root@mico ~]# export RSYNC_PASSWORD=vicodona123
[root@mico ~]# rsync -azvP /root/practices/tmp/1.txt [email protected]::backup
sending incremental file list sent 48 bytes received 20 bytes 136.00 bytes/sec
total size is 0 speedup is 0.00

守护进程多模块功能配置

第一步:编写配置信息创建多模块

[root@vicodona ~]# vim /etc/rsyncd.conf
......
[micodata]
comment = "micodata dir by vicodona"
path = /backup/micodata [micobackup]
comment = "micobackup dir by vicodona"
path = /backup/micobackup

第二步:创建多模块指定的目录

[root@vicodona xinetd.d]# mkdir /backup/mico{data,backup} -p
[root@vicodona xinetd.d]# chown rsync.rsync /backup/mico{data,backup}

第三步:利用rsync客户端进行测试

[root@mico ~]# rsync -azv /root/practices/tmp/ [email protected]::backup --password-file=/etc/rsync.passwd
sending incremental file list
./
1.txt sent 107 bytes received 46 bytes 306.00 bytes/sec
total size is 0 speedup is 0.00

说明

【说明】无论是全局变量发生变化,还是局部变量发生变化,都建议重启rsync服务使配置生效

守护进程的排除功能实践

排除的方式

  • --exclude=要配置的目录或文件名称
  • --exclude-from=要排除多个目录或文件汇总文件名称

    +在配置文件中进行修改,指定要排除的信息

--exclude 排除测试

第一步:,创建模拟测试环境

[root@mico data]# mkdir {a..d}
[root@mico data]# touch {a..d}/{1..3}.txt
[root@mico data]# tree
.
├── a
│   ├── 1.txt
│   ├── 2.txt
│   └── 3.txt
├── b
│   ├── 1.txt
│   ├── 2.txt
│   └── 3.txt
├── c
│   ├── 1.txt
│   ├── 2.txt
│   └── 3.txt
└── d
├── 1.txt
├── 2.txt
└── 3.txt 4 directories, 12 files

第二步:利用--exclude 参数测试排除功能

需求:不要a目录中的3.txt 也不要b、c目录

[root@mico data]# rsync -avz /root/practices/data/ --exclude=a/3.txt --exclude=b --exclude=c [email protected]::micodata
sending incremental file list
./
a/
a/1.txt
a/2.txt
d/
d/1.txt
d/2.txt
d/3.txt sent 372 bytes received 134 bytes 1,012.00 bytes/sec
total size is 0 speedup is 0.00

精简方式排除

[root@mico data]# rsync -avz /root/practices/data/ --exclude=a/3.txt  --exclude={b,c} [email protected]::micodata
sending incremental file list
./
a/
a/1.txt
a/2.txt
d/
d/1.txt
d/2.txt
d/3.txt sent 372 bytes received 134 bytes 1,012.00 bytes/sec
total size is 0 speedup is 0.00

利用--exclude-from方式进行排除

第一步:创建模拟测试环境

[root@mico data]# mkdir {a..d}
[root@mico data]# touch {a..d}/{1..3}.txt

第二步:进行排除

# 将需要排除的文件写入delete.txt文件
[root@mico data]# vim delete.txt
a/1.txt
b/2.txt
c/3.txt
[root@mico data]# rsync -avz /root/practices/data/ --exclude-from=/root/practices/data/delete.txt [email protected]::micodata
sending incremental file list
./
delete.txt
a/
a/2.txt
a/3.txt
b/
b/1.txt
b/3.txt
c/
c/1.txt
c/2.txt
d/
d/1.txt
d/2.txt
d/3.txt sent 716 bytes received 241 bytes 638.00 bytes/sec
total size is 26 speedup is 0.03

说明:

在配置文件中修改要排除的文件

第一步:编写修改服务端配置文件

vim /etc/rsyncd.conf
[nfsdata]
comment = "micodata dir by vicodona"
path = /backup/micodata
exclude=a/3.txt b c

第二步:重启rsync服务

[root@vicodona micodata]# systemctl restart rsyncd
[root@vicodona micodata]# rsync --daemon

第三步:进行测试

[root@mico data]# rsync -avz /root/practices/data/  [email protected]::micodata
sending incremental file list
./
delete.txt
ERROR: daemon refused to receive file "a/3.txt"
ERROR: daemon refused to receive directory "b"
*** Skipping any contents from this failed directory ***
ERROR: daemon refused to receive directory "c"
*** Skipping any contents from this failed directory ***
a/
a/1.txt
a/2.txt
d/
d/1.txt
d/2.txt
d/3.txt sent 617 bytes received 435 bytes 701.33 bytes/sec
total size is 26 speedup is 0.02
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]

守护进程来创建备份目录

通过客户端命令创建服务端备份目录中子目录

# 推送/root/practices/data/a/delete.txt 文件到服务器 /backup/sda 目录
[root@mico practices]# rsync -avzP /root/practices/data/delete.txt [email protected]::backup/sda
sending incremental file list
delete.txt
26 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/1) sent 116 bytes received 43 bytes 318.00 bytes/sec
total size is 26 speedup is 0.16

查看同步结果

[root@vicodona backup]# ll sda/
total 4
-rw-r--r-- 1 rsync rsync 26 Jul 15 16:06 delete.txt

说明:

守护进程的访问控制配置

第一步:在服务端配置文件,编写白名单策略或黑名单策略(只能取其一)

[root@vicodona backup]# cat /etc/rsyncd.conf
hosts allow = 47.107.108.0/24
# hosts deny = 0.0.0.0/32

关于访问控制说明:

守护进程无差异同步配置

什么是无差异

  • 推模式:我有什么,你就有什么;我没有,你也不能有
  • 拉模式:你有什么,我就有什么;你没有,我也不能有

    总结:服务端客户端数据完全一致(一模一样)

实现无差异同步的方法

第一步: 建实验环境

[root@mico practices]# ll  data/
总用量 20
drwxr-xr-x 2 root root 4096 7月 15 15:42 a
drwxr-xr-x 2 root root 4096 7月 15 15:42 b
drwxr-xr-x 2 root root 4096 7月 15 15:42 c
drwxr-xr-x 2 root root 4096 7月 15 15:42 d
-rw-r--r-- 1 root root 26 7月 15 16:06 delete.txt

第二步:进行第一次数据同步

[root@mico practices]# rsync -avz --delete /root/practices/data/ [email protected]::backup/micodata/
sending incremental file list
./
delete.txt
a/
a/1.txt
a/2.txt
a/3.txt
b/
b/1.txt
b/2.txt
b/3.txt
c/
c/1.txt
c/2.txt
c/3.txt
d/
d/1.txt
d/2.txt
d/3.txt sent 879 bytes received 298 bytes 2,354.00 bytes/sec
total size is 26 speedup is 0.02

第三步:删除指定目录,并添加指定文件,测试无差异功能

# 删除客户端中的 a/ 目录,再进行无差异传输
[root@mico data]# rm -rf a/
[root@mico data]# rsync -avz --delete /root/practices/data/ [email protected]::backup/micodata/
Password:
sending incremental file list
deleting a/3.txt
deleting a/2.txt
deleting a/1.txt
deleting a/
./ sent 300 bytes received 69 bytes 82.00 bytes/sec
total size is 26 speedup is 0.07

第四步:查看服务端的数据同步情况

[root@mico data]# ll
总用量 16
drwxr-xr-x 2 root root 4096 7月 15 15:42 b
drwxr-xr-x 2 root root 4096 7月 15 15:42 c
drwxr-xr-x 2 root root 4096 7月 15 15:42 d
-rw-r--r-- 1 root root 26 7月 15 16:06 delete.txt

可以看见,a目录下的数据已经同步删除

【注意】无差异同步方法对应用

实现存储数据与备份数据完全一致(慎用)

rsync -avz --delete  /data/ [email protected]::backup /

快速删除大文件数据

 1.mkdir /null      --创建出一个空目录。
2.rsync -avz --delete /null/ /bigdata/
# 删除效率高于 rm -rf /bigdata

守护进程的列表功能配置

第一步:在服务端配置文件中开启list列表功能

[root@vicodona ~]# vim /etc/rsyncd.conf
list = true

第二步:客户端查看服务端模块信息

[root@vicodona ~]# systemctl stop rsyncd
[root@vicodona ~]# rsync --daemon

第三步:客户端查看服务端模块信息

[root@mico data]# rsync  [email protected]::
backup "backup dir by vicodona"
micodata "micodata dir by vicodona"
micobackup "micobackup dir by vicodona"

服务端常见问题

问题一

@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]

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

问题四

password file must not be other-accessible
continuing without password file
Password:

【解决】这是因为rsyncd.pwd rsyncd.secrets的权限不对,应该设置为600。如:chmod 600 rsyncd.pwd

问题五

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]

【解决】对方没开机、防火墙阻挡、通过的网络上有防火墙阻挡,都有可能。关闭防火墙,其实就是把tcp udp的873端口打开。

问题六

rsync error: error starting client-server protocol (code 5) at main.c(1524) [Receiver=3.0.7]

【解决】/etc/rsyncd.conf配置文件内容有错误。请正确核对配置文件。

问题七

rsync: chown "" failed: Invalid argument (22)

【解决】权限无法复制。去掉同步权限的参数即可。(这种情况多见于Linux向Windows的时候)

问题八:

@ERROR: daemon security issue -- contact admin
rsync error: error starting client-server protocol (code 5) at main.c(1530) [sender=3.0.6]

【原因】

同步的目录里面有软连接文件,需要服务器端的/etc/rsyncd.conf打开use chroot = yes。掠过软连接文件。

问题九:

ERROR: module is read only
rsync error: syntax or usage error (code 1) at main.c(747) [receiver=2.6.8]
rsync: connection unexpectedly closed (4 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(600) [sender=3.0.6]

【解决】 提示打开了read only,将配置文件 read only = no

问题十:

cat /var/log/rsyncd.log
2011/12/14 11:58:37 [22377] name lookup failed for XX.XX.XX.XX: Name or service not known
2011/12/14 11:58:37 [22377] connect from UNKNOWN (XX.XX.XX.XX)
2011/12/14 11:58:37 [22377] rsync to html/ from unknown (XX.XX.XX.XX)

【解决】需要在服务端这台机上上的/etc/hosts里面添加客户端机的ip和机器名

问题十一:

[root@Dell-R710 ~]# rsync -artuz -R --delete ./ 192.168.1.233::gex
rsync: failed to connect to 61.145.118.206: Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]

【解决】

一、查看防火墙

二、查看服务端是否开启守护进程

ps ax|grep rsync
rsync --daemon --config=/etc/rsyncd.conf

客户端常见问题

问题一

rsync -auzv --progress --password-file=/etc/rsync.pas [email protected]::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

问题二

rsync -auzv --progress --password-file=/etc/rsync.pas [email protected]::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 ,这里登陆名不可缺少

问题三

rsync -auzv --progress --password-file=/etc/rsync.pas [email protected]::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

问题四:

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 来查看可用空间和已用空间

问题五:网络收集问题

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测试。

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]

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配置文件中

05-11 22:38