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