Linux文件目录管理
Rsync同步过程中遇到的常见问题
## 一、Rsync服务介绍 Rsync属于一款实现全量及增量同步数据的软件工具,适用于unix/linux/windows等多种操作系统平台。 Rsync软件能实现本地复制,远程复制,或者远程守护进程方式复制。它以其delta-transfer算法闻名,减少通过网络数据发送数量,利用只发送源文件和目标文件之间的差异信息,从而实现数据的增量同步复制。 ##### 检查软件是否安装 ```shell rpm -qa rsync ``` ##### 安装软件 方法一: rysnc的官方网站:http://rsync.samba.org可以从上面得到最新的版本。 ```shell [root@server ~]# tar xvf rsync-3.0.9.tar.gz [root@server ~]# cd rsync-3.0.9 [root@server rsync-3.0.9]# ./configure --prefix=/usr [root@server rsync-3.0.9]# make [root@server rsync-3.0.9]# make install 注:在用源码包编译安装之前,您得安装gcc等编译开具才行 ``` 方法二: ```shell yum install rsync #适合centos ``` ## 二、Rsync工作方式 - 本地数据备份方式 - 远程传输数据方式 - 守护进程传输数据方式 以rsync守护进程方式实现为主,通过man rsync帮助,查看用法。 ```shell #拉取数据的命令参数用法 Pull:rsync [OPTION...] [USER@]HOST::SRC... [DEST] rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST] 参数解释: [USER@]HOST:: --- 指定远程连接的认证用户 SRC --- 指定相应的模块信息 [DEST] --- 将远程数据保存到本地的路径信息 #推送数据的命令参数用法 Push: rsync [OPTION...] SRC... [USER@]HOST::DEST rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST 参数解释: [USER@]HOST:: --- 指定远程连接的认证用户 SRC --- 指定本地要进行推送的数据信息 [DEST] --- 远程进行保存数据的模块信息 ``` ## 三、守护进程部署流程 ### 3.1 服务端部署 ##### 1)主机环境检查 ```shell [root@backup ~]# cat /etc/redhat-release CentOS release 6.8 (Final) [root@backup ~]# uname -r 2.6.32-642.el6.x86_64 [root@backup ~]# uname -m x86_64 ``` ##### 2)检查软件是否安装 ```shell [root@backup ~]# rpm -qa rsync rsync-3.0.6-12.el6.x86_64 ``` ##### 3)编辑配置文件 配置文件默认不存在,需要在/etc目录下创建rsyncd.conf。 参数用法:man rsyncd.conf。 ```shell uid = www #管理备份目录的用户(需要在linux系统下创建虚拟用户) gid = www #管理备份目录的用户组 use chroot = no #保护模式,一般内网使用,可以选择禁用no max connections = 200 #可以同时处理的并发连接数 timeout = 300 #连接超时,在指定时间内没有数据传输,自动释放连接 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log ignore errors #备份传输过程中,忽略一些I/O产生的传输错误 read only = false #对备份目录开启读写权限,默认为true,只读模式 list = false #禁止通过客户端查询服务端配置的模块信息 #hosts allow = * hosts allow = 172.16.1.0/24 #允许指定网段或主机来访问备份目录 auth users = rsync_backup #认证用户(虚拟认证用户),不是真实存在的,非linux系统管理的虚拟用户 secrets file = /etc/rsync.pass #设置免交互方式用户认证文件 [data] #指定备份目录的模块名称 comment = "sersync dir by myself" path = /home/www #以绝对路径方式,设置备份目录路径信息 ``` ##### 4)创建备份目录管理用户 ```shell [root@backup ~]# useradd www -M -s /sbin/nologin ``` ##### 5)创建备份目录 ```shell [root@backup ~]# mkdir /data [root@backup ~]# chown -R www.www /data ``` ##### 6)创建用户认证文件 ```shell [root@backup ~]# echo 'rsync_backup:123456' >>/etc/rsync.pass [root@backup ~]# chmod 600 /etc/rsync.pass ``` 追加内容"认证用户:密码"到认证文件中,在追加前先切换为英文输入法,行尾不添加空格或tab等内容,防止认证出错。 可以通过vim编辑器尾行模式,输入:set list检查,或者使用命令cat -A /etc/rsync.pass检查。 ##### 7)启动Rsync服务 ```shell [root@backup ~]# rsync --daemon [root@backup ~]# netstat -lntp|grep rsync tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 12805/rsync tcp 0 0 :::873 :::* LISTEN 12805/rsync [root@backup ~]# echo '/usr/bin/rsync --daemon' >>/etc/rc.local ``` 如果rsync服务默认端口873被其他服务占用,使用rsync --daemon --port=PORT命令启动测试,更多帮助查看rsync --daemon --help。 ### 3.2 客户端部署 ##### 1)主机环境检查 ```shell [root@nfs ~]# cat /etc/redhat-release CentOS release 6.8 (Final) [root@nfs ~]# uname -r 2.6.32-642.el6.x86_64 [root@nfs ~]# uname -m x86_64 ``` ##### 2)检查软件是否安装 ```shell [root@nfs ~]# rpm -qa rsync rsync-3.0.6-12.el6.x86_64 ``` ##### 3)创建认证文件 ```shell [root@nfs ~]# echo '123456' >>/etc/rsync.pass [root@nfs ~]# chmod 600 /etc/rsync.pass ``` 客户端认证文件只需要添加密码即可,认证用户在客户端通过rsync命令进行设置。 ##### 4)进行数据备份测试 ```shell #客户端上传文件:rsync -avz [本地路径] [远程路径] [参数] rsync -avz /data/ rsync_user@192.168.0.2::data --password-file=/etc/rsync.pass #服务端下载文件:rsync -avz [远程路径] [本地路径] [参数] rsync -avz rsync_user@192.168.0.1::data /data/ --password-file=/etc/rsync.pass #上传文件 rsync --port=7456 /home/www/me.log rsync@47.xxx.xxx.xxx::www --password-file=/home/www/rsync.pass rsync --port=8789 /home/www/cq.log rsync@175.xxx.xxx.xxx::www --password-file=/home/www/rsync.pass rsync /home/www/test.log rsync@114.xxx.xxx.xxx::web_outstable --password-file=/home/www/rsync.pass #下载文件 rsync --port=7456 rsync@47.xxx.xxx.xxx::www/cq.log /home/www/cq.log --password-file=/home/www/rsync.pass ``` ## 四、启动rsync服务器及防火墙的设置 ### 1、检查服务是否启动 ```shell ps aux | grep rsync ``` ### 2、启动ssh服务 ```shell service sshd start ``` ### 3、启动rsync服务器 ```shell /usr/bin/rsync --daemon #注:-–daemon 是让rsync以服务器模式运行; /usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf ``` ### 4、停止rsync服务器 ```shell killall rsync pkill rsync ``` ### 5、检查rsync监听的端口 ```shell netstat -lntp|grep rsync ``` ### 6、rsync服务器和防火墙 ```shell iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT #放行端口 iptables -L #注:查看一下防火墙是不是打开了 873端口 ``` ### 7、其他可能用到的命令 ```shell systemctl status rsync systemctl stop rsync systemctl restart rsync service rsync restart ``` ## 五、Rsync备份过程中常见的错误问题总结 ### 1. 客户端执行rsync命令发生错误问题 - 错误提示 ERROR: The remote path must start with a module name not a / - 演示过程 [root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::/data --password-file=/etc/rsync.pass 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命令语法错误,::/data错误的语法,data为模块,而不是目录,正确写法::data。 ### 2. 配置了免交互方式备份数据,客户端依旧需要输入密码问题 - 错误提示 password file must not be other-accessible - 演示过程 [root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass password file must not be other-accessible continuing without password file Password: sending incremental file list sent 26 bytes received 8 bytes 9.71 bytes/sec total size is 294 speedup is 8.65 - 问题解决 Rsync客户端的认证文件不是600权限。 ### 3. Rsync服务端防火墙问题 - 错误提示 No route to host - 演示过程 [root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass 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] - 问题解决 Rsync服务端开启了防火墙功能,关闭即可。 ### 4. Rsync用户认证失败问题 - 错误提示 ERROR: auth failed on module data - 演示过程 [root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass @ERROR: auth failed on module data rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6] - 问题解决 1.客户端rsync命令认证用户没写对,或者认证文件密码所在行的结尾有多余的空格或tab(cat -A /etc/rsync.pass检查) 2.客户端认证文件/etc/rsync.pass配置错误,不需要rsync_backup认证用户,只需要设置认证密码即可。 3.服务端认证文件中rsync_backup:123456后有空行或tab,需要注意。 4.服务端认证文件/etc/rsync.pass权限不是600。 5.服务端rsyncd.conf配置文件中,secrets file参数设置的认证文件名称与系统中创建的认证文件名称不一致。 6.服务端rsyncd.conf配置文件中,uid和gid设置的管理用户与备份目录管理用户不一致。 ### 5. Rsync服务权限阻止问题 - 错误提示 Permission denied - 演示过程 [root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass sending incremental file list hosts rsync: mkstemp ".hosts.dGfSQ1" (in data) failed: Permission denied (13) sent 180 bytes received 27 bytes 414.00 bytes/sec total size is 294 speedup is 1.42 rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6] - 问题解决 1.服务端/etc/rsyncd.conf文件中,uid和gid设置的管理用户与备份目录的属主和属组不一致。 2.备份目录的文件权限不是755。 ### 6. Rsync服务备份目录异常问题 - 错误提示 ERROR: chdir failed - 演示过程 [root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass @ERROR: chdir failed rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6] - 问题解决 服务端/etc/rsyncd.conf文件中,备份目录模块path路径设置存在问题,检查目录是否存在,或者path路径是否填写正确。 ### 7. Rsync服务备份模块异常问题 - 错误提示 ERROR: Unknown module 'data' - 演示过程 [root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass @ERROR: Unknown module 'data' rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6] - 问题解决 1.客户端rsync命令执行时,指定的模块名称不正确。 2.服务端/etc/rsyncd.conf文件中,指定的备份目录的模块名称不正确。 ### 8.Rsync无效的用户问题 - 错误提示 ERROR: invalid uid mine - 演示过程 [root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass @ERROR: invalid uid mine rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6] - 问题解决 服务端管理备份目录的虚拟用户不存在,通过“useradd 用户 -M -s /sbin/nologin”进行创建即可。 ### 9. Rsync服务未开启问题 - 错误提示 Connection refused - 演示过程 [root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::data --password-file=/etc/rsync.pass 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.检查服务:ps -ef|grep [r]sync 2.开启服务:rsync --daemon ### 10. Rsync服务连接超时问题 - 错误提示 Connection timed out - 演示过程 [root@nfs ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.51::data --password-file=/etc/rsync.pass rsync: failed to connect to 172.16.1.51: Connection timed out (110) rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6] - 问题解决 检查目标主机IP地址,ping目标主机检查链路是否正常。 [root@nfs ~]# ping 172.16.1.41 PING 172.16.1.41 (172.16.1.41) 56(84) bytes of data. 64 bytes from 172.16.1.41: icmp_seq=1 ttl=64 time=0.438 ms 64 bytes from 172.16.1.41: icmp_seq=2 ttl=64 time=0.543 ms ### 11. Rsync服务连接慢的问题 - 日志分析 [root@backup ~]# tailf /var/log/rsyncd.log 2019/06/27 12:49:35 [22251] params.c:Parameter() - Ignoring badly formed line in configuration file: ignore errors **--- 未对rsync客户端主机在服务端进行host解析,导致反向解析域名,使得连接缓慢。** 2019/06/27 12:49:55 [22251] name lookup failed for 172.16.1.31: Temporary failure in name resolution 2019/06/27 12:49:55 [22251] connect from UNKNOWN (172.16.1.31) 2019/06/27 12:49:55 [22251] rsync to data/ from rsync_backup@unknown (172.16.1.31) 2019/06/27 12:49:55 [22251] receiving file list 2019/06/27 12:49:56 [22251] sent 76 bytes received 81 bytes total size 294 - 问题解决 [root@backup ~]# echo -e '172.16.1.31\tnfs' >>/etc/hosts [root@backup ~]# tailf /var/log/rsyncd.log 2019/06/27 12:55:06 [22268] params.c:Parameter() - Ignoring badly formed line in configuration file: ignore errors **--- 可以查看到服务端对nfs主机进行了正确的反向解析过程。** 2019/06/27 12:55:06 [22268] connect from nfs (172.16.1.31) 2019/06/27 12:55:06 [22268] rsync to data/ from rsync_backup@nfs (172.16.1.31) 2019/06/27 12:55:06 [22268] receiving file list 2019/06/27 12:55:06 [22268] sent 76 bytes received 81 bytes total size 294
顶部
收展
底部
[TOC]
目录
Linux文件目录:增删改查命令
Linux文件目录:权限管理
Linux文件目录:文件搜索
Linux文件目录:文件比较
Linux文件目录:过滤分割合并
LInux文件目录:文件传输
Rsync同步过程中遇到的常见问题
相关推荐
Linux打包压缩
Linux文本处理
Linux软件安装
Linux用户和用户组管理
Linux文件系统管理
Linux系统管理