目录
一、理论
1.rsync
2.rsync优缺点
3.rsync三种工作模式
4.rsync同步源服务器
3. 配置rsync下行同步(定时同步)
4.rsync实时同步(上行同步)
5.配置rsync实时同步(上行同步)
6.使用rsync快速删除大量文件
7.inotify-tools 监控文件安装
二、实验
1.配置rsync下行同步(定时同步)
三、问题
1.rsync启动失败
2.常见错误
四、总结
(1)概念
rsync(Remote Sync,远程同步)是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,并保持链接和权限,且采用优化的同步算法,传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。
rsync 的官方站点的网址是 rsync.samba.org/,目前最新版本是 3.1.3,由 Wayne Davison 进行维护。作为一种最常用的文件备份工具,rsync 往往是 Linux 和 UNIX 系统默 认安装的基本组件之一。
(2)特点
支持拷贝特殊文件,如连接文件、设备等。
可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变 –p。
可以实现增量同步,既只同步发生变化的数据,因此数据传输效率很高(tar-N)。
可以使用rcp、rsh、ssh等方式来配合传输文件(rsync本身不对数据加密)。
可以通过socket(进程方式)传输文件和数据(服务端和客户端)。
支持匿名的活认证(无需系统用户)的进程模式传输,可以实现方便安全的进行数据备份和镜像。
(1) 优点
1)可以增量备份,支持socket(daemon),集中备份(支持推拉,都是以客户端为参照物);socket(daemon)需要加密传输,可以利用服务或ipsec服务。
2)可以限速进行数据的备份或恢复操作。
3)远程SHELL通道模式还可以加密(SSH)传输
4)支持匿名认证(无需系统用户)的进程模式传输,可以实现方便安全的进行数据备份和镜像
5)保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变 –p
6)可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。(–exclude)
(2)缺点
1)大量小文件时进行同步备份,比对的时间较长,有时候会导致rsync进程停止运行或者进程挂起; 解决方法: a、打包后再同步; b、drbd(文件系统同步复制block)。
2)同步大文件,比如:10G这样的,有时也会出现问题,导致rsync进程中断,未完整同步前,是隐藏文件,但是会占用磁盘空间(ls -al查看)。直到同步完成后,将隐藏文件改成正常文件。而且,每中断一次,生成一个隐藏文件。
分别是:本地方式,远程方式,守护进程。
rsync参数 说明
-v, --verbose 详细模式输出
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-z, --compress 对备份的文件在传输时进行压缩处理
-P 显示进度
-r, --recursive 对子目录以递归模式处理
-l, --links 保留软链结
-p, --perms 保持文件权限
-o, --owner 保持文件属主信息
-g, --group 保持文件属组信息
-D, --devices 保持设备文件信息
-t, --times 保持文件时间信息
-e, --rsh=command 指定使用rsh、ssh方式进行数据同步
-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间
-n, --dry-run 现实哪些文件将被传输
-w, --whole-file 拷贝文件,不进行增量检测
-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节。
-x, --one-file-system 不要跨越文件系统边界
-R, - -relative 使用相对路径信息
-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件,不覆盖更新的文件
-q, --quiet 精简输出模式
-c, --checksum 打开校验开关,强制对文件传输进行校验
--exclude=PATTERN 指定排除不需要传输的文件模式
--exclude-from=FILE 排除FILE中指定模式的文件
--bwlimit=KBPS 限制I/O带宽,KBytes per second
--delete 删除那些DST中SRC没有的文件
--password-file=FILE 从FILE中得到密码
(1)原理
在远程同步任务中,负责发起 rsync 同步操作的客户机称为发起端,而负责响应来自客户机的 rsync 同步操作的服务器称为同步源。
① 在下行同步(下载)中,同步源负责提供文档的原始位置,发起端应对该位置有读取权限。
② 在上行同步(上传)中,同步源负责提供文档的目标位置,发起端应对该位置具有写入权限。
(1)环境
源服务器:192.168.204.46
客户机(发起端):192.168.204.45
(2)配置源服务器
第一张方式
① 配置rsync源服务器(192.168.204.46)
rpm -q rsync #一般系统已默认安装rsync
#建立/etc/rsyncd.conf 配置文件
vim /etc/rsyncd.conf #添加以下配置项
uid = root
gid = root
use chroot = yes #禁锢在源目录
address = 192.168.10.18 #监听地址
port 873 #监听端口 tcp/udp 873,可通过cat /etc/services | grep rsync查看
log file = /var/log/rsyncd.log #日志文件位置
pid file = /var/run/rsyncd.pid #存放进程 ID 的文件位置
hosts allow = 192.168.204.0/24 #允许访问的客户机地址
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z #同步时不再压缩的文件类型
[wwwroot] #共享模块名称
path = /var/www/html #源目录的实际路径
comment = Document Root of www.david.com
read only = yes #是否为只读
auth users = backuper #授权账户,多个账号以空格分隔
secrets file = /etc/rsyncd_users.db #存放账户信息的数据文件
#如采用匿名的方式,只要将其中的“auth users”和“secrets file”配置项去掉即可。
#为备份账户创建数据文件
vim /etc/rsyncd_users.db
backuper:123456 #无须建立同名系统用户
chmod 600 /etc/rsyncd_users.db
#保证所有用户对源目录/var/www/html 都有读取权限
chmod +r /var/www/html/
ls -ld /var/www/html/
#启动 rsync 服务程序
rsync --daemon #启动 rsync 服务,以独立监听服务的方式(守护进程)运行
netstat -anpt | grep rsync
#关闭 rsync 服务
kill $(cat /var/run/rsyncd.pid)
rm -rf /var/run/rsyncd.pid
第二种方式
systemctl stop firewalld
setenforce 0
rpm -q rsync #一般系统已默认安装rsync
#建立/etc/rsyncd.conf配置文件
vim /etc/rsyncd.conf
cat /etc/rsyncd.conf #注意:配置文件中,行后不要有注释和空格。
##全局配置
uid = root #用户
gid = root #用户组
use chroot = no #安全相关
max connections = 200 #最大链接数
timeout = 300 #超时时间
pid file = /var/run/rsyncd.pid #进程对应的进程号文件
lock file = /var/run/rsync.lock #锁文件
log file = /var/log/rsyncd.log #日志文件,显示出错信息
##模块配置
[backup] #模块名称
path = /data #模块对应的位置(路径)
ignore errors #忽略错误程序
read only = false #是否只读
list = false #是否可以列表
hosts allow = 192.168.204.0/24 #准许访问rsync服务器的客户范围
#hosts deny = 0.0.0.0/32 #禁止访问rsync服务器的客户范围
auth users = rsync_backup #不存在的用户;只用于认证
secrets file = /etc/rsync.password #设置进行连接认证的密匙文件
#关闭rsync 服务
kill $(cat /var/run/rsyncd.pid)
rm -rf /var/run/rsyncd.pid
#创建rsync备份目录/授权rsync用户管理备份目录,修改备份目录权限
mkdir -p /data
useradd rsync -s /sbin/nologin -M #创建一个rsync的虚拟用户,只被程序使用
chown -R rsync.rsync /data/
#创建认证用户密码文件,修改文件权限
echo "rsync_backup:123456" >/etc/rsync.password
chmod 600 /etc/rsync.password
#重启rsync守护进程服务,并查看是否启动
systemctl enable rsyncd.service
systemctl restart rsyncd.service
ps -ef|grep rsync
#启动文件
cat /usr/lib/systemd/system/rsyncd.service
[Unit]
Description=fast remote file copy program daemon
nditionPathExists=/etc/rsyncd.conf
[Service]
EnvironmentFile=/etc/sysconfig/rsyncd
ExecStart=/usr/bin/rsync --daemon --no-detach "$OPTIONS"
[Install]
WantedBy=multi-user.target
(3) 发起端配置
①基本格式
rsync [选项] 原始位置 目标位置
②常用选项
③配置
#将指定的资源下载到本地/opt 目录下进行备份。
格式一:
rsync -avz [email protected]::wwwroot /opt/ #密码123456
格式二:
rsync -avz rsync://[email protected]/wwwroot /opt/
#免交互格式配置:
echo "123456" > /etc/server.pass
chmod 600 /etc/server.pass
crontab -e
30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt/
#为了在同步过程中不用输入密码,需要创建一个密码文件,保存 backuper 用户的密码,如 /etc/server.pass。在执行 rsync 同步时使用选项 “--password-file=/etc/server.pass” 指定即可。
systemctl restart crond
systemctl enable crond
(1)定期同步的不足
① 执行备份的时间固定,延迟明显、实时性差
② 当同步源长期不变化时,密集的定期任务是不必要的
(2)实时同步的优点
一旦同步源出现变化,立即启动备份
只要同步源无变化,则不执行备份
(3) Linux内核的inotify机制
从版本2.6.13开始提供
可以监控文件系统的变动情况,并做出通知响应
辅助软件:inotify-tools
(4) 发起端配置rsync+Inotify
使用inotify通知接口,可以用来监控文件系统的各种变化情况,如文件存取、删除、移动、修改等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。
将inotify机制与rsync工具相结合,可以实现触发式备份(实时同步),即只要原始位置的文档发生变化,则立即启动增量备份操作;否则处于静默等待状态。
因为 inotify 通知机制由 Linux 内核提供,因此主要做本机监控,在触发式备份中应用时更适合上行同步。
发起端需要配置 rsync+Inotify。
(1)创建rsync备份目录/授权rsync用户管理备份目录,修改备份目录权限
mkdir -p /data
#创建一个rsync的虚拟用户,只被程序使用
useradd rsync -s /sbin/nologin -M
chown -R rsync.rsync /data/
(2)发起端,调整 inotify 内核参数
在Linux内核中,默认的inotify机制提供了三个调控参数:
① max_queue_events ( 监控事件队列,默认值为16384)、
② max_user_instances (最多监控实例数,默认值为128)、
③ max_user_watches (每个实例最多监控文件数,默认值为8192)。
当要监控的目录、文件数量较多或者变化较频繁时,建议加大这三个参数的值。
cat /proc/sys/fs/inotify/max_queued_events
cat /proc/sys/fs/inotify/max_user_instances
cat /proc/sys/fs/inotify/max_user_watches
vim /etc/sysctl.conf #内核参数都在该文件中修改
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
sysctl -p
(3)发起端,安装 inotify-tools
用inotify 机制还需要安装inotify-tools, 以便提供inotifywait、 inotifywatch 辅助工具程序,用来监控、汇总改动情况。
inotifywait:可监控modify (修改)、create (创建)、move (移动)、delete (删除)、attrib ( 属性更改)等各种事件,一有变动立即输出结果。
inotifywatch:可用来收集文件系统变动情况,并在运行结束后输出汇总的变化情况。
tar zxvf inotify-tools-3.14.tar.gz -C /opt/
cd /opt/inotify-tools-3.14
./configure
make && make install
#可以先执行“inotifywait”命令,然后另外再开启一个新终端向 /data 目录下添加文件、移动文件,在原来的终端中跟踪屏幕输出结果。
inotifywait -mrq -e modify,create,move,delete /data
#选项“-e”:用来指定要监控哪些事件
#选项“-m”:表示持续监控
#选项“-r”:表示递归整个目录
#选项“-q”:简化输出信息
(4)发起端,编写触发式同步脚本
①在另外一个终端编写触发式同步脚本(注意,脚本名不可包含 rsync 字符串,否则脚本可能不生效)。
vim /opt/inotify.sh
#!/bin/bash
#定义inotifywait监控/data目录中文件事件的变量。attrib表示属性变化。
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /data"
#定义执行 rysnc 上行同步的变量。--delete保证两边目录内容一致,可以不加。
RSYNC_CMD="rsynC -azH --delete --password-file=/etc/server .pass /data [email protected]::backupdir/"
#使用while、read持续获取监控结果,根据结果可以作进一步判断是否读取到输出的监控记录
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
#如果rsync未在执行,则立即启动
if[ $(pgrep rsync | wc -l) -le 0 ];then
$RSYNC_CMD
fi
done
chmod +8 /opt/inotify.sh
chmod +x /etc/rc.d/rc.local #开机自启脚本文件
echo '/opt/inotify.sh' >> /etc/rc.d/rc.local #加入开机自动执行
#之后运行脚本(后台运行)
cd /opt/
./inotify.sh &
#之后在发起端创建文件,查看源服务器中是否新增了
②如果同步的文件比较大,同步时比较慢导致后面文件没来的及同步,则需要在脚本内添加消息队列或缓冲
#!/bin/bash
#定义inotifywait监控目录中文件事件的变量
INOTIEY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /data/"
#定义执行rsync上行同步的变量
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /data/ [email protected]::backupdir"
#使用while、read持续获取监控结果,根据结果可以进一步判断是否读取到输出的监控记录
$INOTIEY_CMD | while read DIRECTORY EVENT FILE
do
#小于等于0,则等待它执行完再去同步其他文件
until [ $(pgrep rsync | wc -l) -le 0 ]
do
sleep 1
done
$RSYNC_CMD
done
(5)验证同步效果
上述脚本用来检测本机/data目录的变动情况,一旦有更新触发rsync 同步操作,上传备份至服务器192.168.204.246 的data共享目录下。
触发式上行同步的验证过程如下:
① 在本机运行/opt/inotify.sh 脚本程序.
② 切换到本机的 /data/ 目录,执行增加、删除、修改文件等操作。
③ 查看远端服务器中的data目录下的变化情况。
(1)场景
假如要在linux下删除大量文件,比如100万、1000万,像/usr/local/nginx/proxy_temp的nginx缓存等,那么rm -rf * 可能就不好用了,因为要等待很长一段时间。
在这种情况下我们可以使用rsync来巧妙处理。
(2)原理
rsync实际用的是替换原理。
#先建立一个空的文件夹:
mkdir /home/blank
#用rsync删除目标目录:
rsync --delete-before -a -H -v --progress --stats /home/blank/ /usr/local/nginx/proxy_temp
#这样目标目录很快就被清空了
(3)选项说明
(1)概念
inotify-tools 是一个用C语言库,一个为Linux提供简单inotify接口的命令行程序。这些程序可以用于监视文件系统事件并执行相应操作。这些程序是用C语言来写的,除了需要Linux内核的inotify支持外,没有其他的依赖。inotify-tools 3.14是目前最新版本,其于2010年3月7日发布。
inotify,它是Linux在内核 2.6.13 (June 18, 2005)版本中引入的一个新功能,它为用户态监视文件系统的变化提供了强大的支持,允许监控程序打开一个独立文件描述符,并针对事件集监控一个或者多个文件,例如打开、关闭、移动/重命名、删除、创建或者改变属性。
(2)inotify安装
inotify支持检测
只有在内核 2.6.13 (June 18, 2005)以上的Linux版本中才支持inotify-tools。
查看当前系统是否支持inotify, 可用通过 uname -a 查看你的内核版本
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
或
[root@localhost ~]# cat /proc/version
Linux version 3.10.0-693.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) ) #1 SMP Tue Aug 22 21:09:27 UTC 2017
或者查看/proc/sys/fs/inotify/
,如果看到显示 max_queued_events max_user_instances max_user_watches 则说明支持inotify
[root@localhost ~]# ls /proc/sys/fs/inotify/
max_queued_events max_user_instances max_user_watches
(3)inotify-tools安装
wget --no-check-certificate https://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
tar zxvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure
make
make install
(4)inotify-tools 工具包中包含了两个命令
① inotifywait
1)概念
inotifywait 仅执行阻塞,等待 inotify 事件,你可以使用它来监控任何一组文件和目录,或监控整个目录树(目录、子目录、子目录的子目录等等),并且可以结合 shell 脚本,更好的使用 inotifywait。
2)命令格式
inotifywait [-hcmrq] [-e] [-t ] [--format ] [--timefmt ] [ ... ]
3)选项参数
-h|--help 显示帮助信息
@ 排除不需要监视的文件,可以是相对路径,也可以是绝对路径
--exclude
正则匹配需要排除的文件,大小写敏感
--excludei
正则匹配需要排除的文件,忽略大小写。
-m|--monitor 接收到一个事情而不退出,无限期地执行。默认行为是接收到一个事情后立即退出
-d|--daemon 跟--monitor一样,除了是在后台运行,需要指定--outfile把事情输出到一个文件。也意味着使用了--syslog
-r|--recursive 监视一个目录下的所有子目录
--fromfile
从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头
-o|--outfile
输出事件到文件.
-s|--syslog 输出错误信息到系统日志
-q|--quiet 不输出详细信息,只输出事件
-qq 除了致命错误,不会输出任何信息
--timefmt 指定时间格式,用于�format选项中的%T格式
-c|--csv 输出csv格式。
-t|--timeout
设置超时时间,如果为0,则无限期地执行下去。
-e|--event [ -e|--event ... ]
指定监听的时间,如果省略,则侦听所有事件。
--format 指定输出格式
%w 表示发生事件的目录
%f 表示发生事件的文件
%e 表示发生的事件
%Xe 事件以“X”分隔
%T 使用由--timefmt定义的时间格式
3)可监听的事件
access 文件或者目录被读
modify 文件或目录被写入
attrib 文件或者目录属性被更改
close_write 文件或目录关闭,在写模式下打开后
close_nowrite 文件或目录关闭,在只读模式打开后
close 文件或目录关闭,而不管是读/写模式
open 文件或目录被打开
moved_to 文件或者目录移动到监视目录
moved_from 文件或者目录移出监视目录
move 文件或目录移出或者移入目录
create 文件或目录被创建在监视目录
delete 文件或者目录被删除在监视目录
delete_self 文件或目录移除,之后不再监听此文件或目录
unmount 文件系统取消挂载,之后不再监听此文件系统
示例1、监控/data
目录
inotifywait -rmq /data
们在另一个终端中想该目录中写入一个文件
echo "test" >> /data/newfile
就会在前一个终端中看到如下信息
# inotifywait -rmq /data
/data/ CREATE newfile
/data/ OPEN newfile
/data/ MODIFY newfile
/data/ CLOSE_WRITE,CLOSE newfile
上所示,我们监控的了对于newfile文件的 CREATE、OPEN、MODIFY、CLOSE_WRITE、CLOSE等事件。
示例2、实时监控对/etc/passwd
文件的修改、删除和权限相关时间,并且按照指定格式输出。
# inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f %e' --event modify,delete,attrib /etc/passwd
在另一终端创建一个新用户
# useradd testuser
时在前一个终端中就会监控到一个ATTRIB 事件
# inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f %e' --event modify,delete,attrib /etc/passwd
29/10/16 16:59 /etc/passwd ATTRIB
示例3、实现对 /data/web 目录进行监控,监控文件删除,修改,创建和权限相关事件,并且要求将监控信息写入/var/log/web_watch.log。要求日志条目要清晰明了,能突显文件路径、事件名和时间。
# cat web_watch.sh
#!/bin/bash
inotifywait -mrq --timefmt '%y/%m/%d %H:%M' --format '%T %w%f %e' --event delete,modify,create,attrib /data/web | while read date time file event
do
case $event in
MODIFY|CREATE|MOVE|MODIFY,ISDIR|CREATE,ISDIR|MODIFY,ISDIR)
echo $event'-'$file'-'$date'-'$time >> /var/log/web_watch.log
;;
MOVED_FROM|MOVED_FROM,ISDIR|DELETE|DELETE,ISDIR)
echo $event'-'$file'-'$date'-'$time /var/log/web_watch.log
;;
esac
done
行脚本后,在另一个终端操作后,查看/var/log/web_watch.log
日志
# cat /var/log/web_watch.log
CREATE-/data/web/a-14/06/27-16:21
CREATE-/data/web/aa-14/06/27-16:21
CREATE-/data/web/aaaa-14/06/27-16:24
CREATE-/data/web/aaaaa-14/06/27-16:24
② inotifywatch
1)概念
inotifywatch 用来收集关于被监视的文件系统的统计数据,包括每个 inotify 事件发生多少次。
2)命令格式
inotifywatch [-hvzrqf] [-e
] [-t ] [-a ] [-d ] [ ... ]
3)选项参数
-h|--help 显示帮助信息
-v|--verbose 详细信息
@ 排除不需要监视的文件,可以是相对路径,也可以是绝对路径
--fromfile 从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头
--exclude 正则匹配需要排除的文件,大小写敏感
--excludei 正则匹配需要排除的文件,忽略大小写。
-z|--zero 输出表格的行和列,即使元素为空
-r|--recursive 监视一个目录下的所有子目录
-t|--timeout
设置超时时间,如果为0,则无限期地执行下去。
-e|--event [ -e|--event ... ]
指定监听的时间,如果省略,则侦听所有事件。
-a|--ascending 以指定事件升序排列
-d|--descending 以指定事件降序排列
示例1、统计/data目录所在文件系统发生的事件次数
inotifywatch -v -e create,modify,delete -t 30 -r /data
然后在另一终端中进行一些操作
# echo "test" >> /data/newfile1
...
# rm /data/newfile
rm:是否删除普通文件 "/data/newfile"?y
# rm /data/newfile1
rm:是否删除普通文件 "/data/newfile1"?y
30秒后,前一个终端会生成如下报告
# inotifywatch -v -e create,modify,delete -t 30 -r /data
Establishing watches...
Setting up watch(es) on /data
OK, /data is now being watched.
Total of 1 watches.
Finished establishing watches, now collecting statistics.
Will listen for events for 30 seconds.
total modify create delete filename
11 8 1 2 /data/
(1)环境
源服务器:192.168.204.46
客户机(发起端):192.168.204.45
(2)配置源服务器(第一种方式)
为备份账户创建数据文件
(3)配置源服务器(第二种方式)
① 关闭防火墙
②一般系统已默认安装rsync
③ 建立/etc/rsyncd.conf配置文件
④创建rsync备份目录/授权rsync用户管理备份目录,修改备份目录权限
⑤创建认证用户密码文件,修改文件权限
⑦ 启动文件
(4)发起端配置(第一种方式)
免交互配置
服务端新建文件
客户端查看
(5)发起端配置(第二种方式)
①关闭防火墙
②创建密码文件,客户端密码文件中,只需要密码即可,密码文件的权限是600
③在客户端测试推送文件
④在源服务器上查看是否推送成功
⑥在客户端查看
(5)发起端,调整 inotify 内核参数
①默认的inotify机制提供了三个调控参数
②当要监控的目录、文件数量较多或者变化较频繁时,需要加大这三个参数的值。
③发起端安装 inotify-tools
⑥ inotifywait测试
(6)客户端触发式同步脚本
客户端
服务端
(1)问题
(2)原因分析
缺少pid文件
(3)解决方法
检查配置文件,发现路径错误
修改
(1) 报错
(2)原因分析
账户数据文件与配置文件里的路径不符
(3)解决方法
修改
(1)报错
(2)原因分析
未关闭所有安全机制及防火墙
(3)关闭服务
systemctl stop firewalld
setenforce 0
systemctl disable firewalld
(4)添加ssh
(1)错误一
@ERROR: auth failed on module backup
rsync: connection unexpectedly closed (90 bytes read so far)
rsync error: error in rsync protocol data stream (code 12) at io.c(150)
说明:这是因为密码设置错了,无法登入成功,检查一下rsync.pwd,看客服是否匹配。还有服务器端没启动rsync 服务也会出现这种情况。
(2)错误二
password file must not be other-accessible
continuing without password file
Password:
说明:这是因为rsyncd.pwd rsyncd.sec的权限不对,应该设置为600。如:chmod 600 rsyncd.pwd
(3)错误三
@ERROR: chroot failed
rsync: connection unexpectedly closed (75 bytes read so far)
rsync error: error in rsync protocol data stream (code 12) at io.c(150)
说明:这是因为你在 rsync.conf 中设置的 path 路径不存在,要新建目录才能开启同步
(4)错误四
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]
说明:防火墙问题导致,这个最好先彻底关闭防火墙,排错的基本法就是这样,无论是S还是C,还有ignore errors选项问题也会导致
(5)错误五
@ERROR: access denied to www from unknown (192.168.1.123)
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(359)
说明:此问题很明显,是配置选项host allow的问题,初学者喜欢一个允许段做成一个配置,然后模块又是同一个,致使导致
(6)错误六
rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(244) [generator=2.6.9]
rsync error: received SIGUSR1 (code 19) at main.c(1182) [receiver=2.6.9]
说明:导致此问题多半是服务端服务没有被正常启动,到服务器上去查查服务是否有启动,然后查看下 /var/run/rsync.pid 文件是否存在,最干脆的方法是杀死已经启动了服务,然后再次启动服务或者让脚本加入系统启动服务级别然后shutdown -r now服务器
(7)错误七
rsync: read error: Connection reset by peer (104)
rsync error: error in rsync protocol data stream (code 12) at io.c(604) [sender=2.6.9]
说明:原数据目录里没有数据存在
(8)错误八
@ERROR: auth failed on module bachup
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:服务器端该模块(backup)需要验证用户名密码,但客户端没有提供正确的用户名密码,认证失败。 提供正确的用户名密码解决此问题
rsync - 快速,通用,可实现全量和增量的远程(和本地)文件复制工具。
rsync监听端口:873
rsync运行模式:C/S
client/server :客户端/服务端
在下行同步(下载)中,同步源负责提供文档的原始位置,发起端应对该位置有读取权限。
在上行同步(上传)中,同步源负责提供文档的目标位置,发起端应对该位置具有写入权限。
rsync配置文件
vim /etc/rsyncd.conf
启动rsync服务程序
#启动rsync服务程序
rsync --daemon
#启动rsync 服务,以独立监听服务的方式(守护进程)运行
netstat -anpt | grep rsync
关闭rsync 服务
kill $(cat /var/run/rsyncd.pid)
rm -rf /var/run/rsyncd.pid
crontab设置
#编辑
crontab -e
#查看
crontab -l
#重启
systemctl restart crond
systemctl enable crond
检查执行脚本
#执行脚本
sh -x inotify.sh
开机自启脚本
#设置开机自启动
chmod +x /etc/rc.d/rc.local
echo "/opt/inotify.sh" >> /etc/rc.d/rc.local