1.介绍:开源的、快速的、多功能的可以实现全量和增量备份的工具;还能实现文件的删除等;可以根据文件大小的变化和修改时间的变化来同步数据(快速)
2.描述:支持特殊文件的拷贝,例如设备文件,链接等;可以排除目录下指定文件的同步功能,相当于tar;可以做到保持原文件的属性和权限等不改变(-p);实现增量同步,传输效率很高;可以使用rcp等方式来传输文件;可以通过socket传输文件和数据(c/s);支持匿名认证的方式进行传输
3.企业应用:两台服务器之间的数据同步(nfs备份),时时同步,增量备份
4.rsync的工作模式:单个主机之间本地传输(类似于cp)
借助rcp,ssh等通道来传输数据(类似于scp)
以守护进程socket的方式传输数据(重要功能)
5.使用方法:
rsync [OPTION...] SRC... [DEST]
所有属性的拷贝rsync -avz
删除文件或者目录(不同的目录或者文件)rsync -r --delete 目录1 目录2
6.rsync的推拉复制
rsync -avz file(需要发送的文件) -e(指定通道) 'ssh -p 65535'(指定协议) haha@172.1.1.1:~ 文件的推送
rsync -avz -e 'ssh -p 65535' haha@172.1.1.3:~/hosts /home/haha 文件的拉取
7.客户端的常用参数
rsync -v:详细方式输出
-z:压缩传输2w
-a:归档模式(rtopDI)
-e,--rsh=command:使用的信道协议
--exclude=PATTERN,--exclude-from
--bwlimit=10:传输限速
*8.socket方式传输
daemon方式:
拓扑:
rsync的server端的配置文件/etc/rsyncd.conf
#rsync_config_______________start
#created by oldboy 15:01 2007-6-5
#QQ 31333741 blog:http://oldboy.blog.51cto.com
##rsyncd.conf start##
uid = rsync
gid = rsync
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
[oldboy] #共享设置
path = /oldboy/
ignore errors
read only = false
list = false
hosts allow = 10.0.0.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
#rsync_config_______________end
服务以daemon方式启动:rsync --daemon
netstat -lntup | grep 873 监听在873端口
然后创建对应的目录及用户,将属主和属组修改
mkdir /oldboy ---- useradd -s /ssbin/nologin -M rsync ------chown -R rsync.rsync /oldboy
接下来创建虚拟用户以及密码
echo "rsync_backup:oldboy" > /etc/rsync.password
chmod 600 /etc/rsync.password
客户端的操作:
echo "oldboy" > /etc/rsync.password
chmod 600 /etc/rsync.password
数据的流向是服务端走向客户端
在客户端执行:(下面的oldboy是服务端[oldboy]模块名,不是目录)
rsync -avz rsync_backup@172.1.1.4::oldboy /data --password-file=/etc/rsync.password 拉取操作
rsync -avz rsync :/rsyn_backup@172.1.1.4::oldboy /data --password-file=/etc/rsync.password
rsync -avz /data/(data下的内容) rsync_backup@172.1.1.4::oldboy --password-file=/etc/rsync.password 推操作
rsync -avz /data/ rsync://rsync_backup@172.1.1.4/oldboy --password-file=/etc/rsync.password
Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
****rsync拍错过程:防火墙,seliux,参考日志/var/log/syncd.log,文件命名和权限
深度讲解rsync(873端口)
正常情况下需要将服务端rsync写到rc.local下(echo "/usr/bin/rsync --daemon" >> /etc/rc.local)保证开机自启动
客户端负责推送本地的文件到rsync服务端的对应模块下
rsync拓展:
--exclude
--exclude-from
排除的方法:可以在客户端排除,也可以在服务端设置参数进行排除
rsync -avz --exclude=log/ /data/ rsync_backup@172.1.1.4::oldboy --password-file=/etc/rsync.password 排除目录或者单个文件可以这样纸
rsync -avz --exclude={1.txt,2.txt,5.txt,log/} /data/ rsync_backup@172.1.1.4::oldboy --password-file=/etc/rsync.password 排除多个文件和目录的用法
rsync -avz --exclude-from=hehe.log /data/ rsync_backup@172.1.1.4::oldboy--password-file=/etc/rsync.password
服务端的排除:(需要修改配置文件,会带来麻烦)
********无差异同步实践(主备机之间的需求)
参数:--delete
推送的场景:其一是备份(主要) --delete风险(文件丢失)
拉取【客户端操作】的应用场景:代码发布,下载(远端有啥本地有啥)
rsync -avz --delete rsync_backup@172.1.1.4::oldboy /data/ --password-file=/etc/rsync.password 保证数据的时时同步
使用场景:负载均衡器之间和高可用服务器之间
防火墙配置:
iptables -A INPUT -s 172.1.1.0/255.255.255.0 -p tcp -m tcp --dport 873 -j ACCEPT
多模块配置(共享多个目录)
需要在服务器端操作的事项:配置文件中写多个模块,参考配置文件如下:
uid = rsync
gid = rsync
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
ignore errors
read only = false
list = false
hosts allow = 172.1.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[oldboy]
path = /oldboy/
[data]
path = /data/
然后再对data目录给以rsync属主,此时就可以实现在客户端的操作了
排错:密码文件权限问题,目录以及权限问题,防火墙问题,
前提是熟悉部署的流程;
原理要理解
学会看日志(命令行和日志输出)
模拟错误,重视日常的错误
rsync+inotify时时同步
1、时时同步原理
计划任务结合rsync实现分钟级别的同步
inotify是一种异步文件系统时间监控机制,触发同步
首先在客户端安装inotify程序,在服务端启动rsync --daemon;当客户端检测到的目录及内容发生变化时然后客户端会将发生变化的目录及内容推送
2、inotify的实施
准备条件:实现rsync daemon和客户端之间的推拉传输数据
配置inotify的要求:在客户端安装和配置
先查看客户端是否支持inotify
# ll /proc/sys/fs/inotify/
-rw-r--r-- 1 root root 0 5月 18 17:32 max_queued_events 最大队列事件(大一点比较好)
-rw-r--r-- 1 root root 0 5月 18 17:32 max_user_instances
-rw-r--r-- 1 root root 0 5月 18 17:32 max_user_watches
./configure -prefix=/opt/inotify
make && make install
ln -s /opt/inotify /usr/local/inotify
3、详细介绍
/opt/inotify/bin/inotifywait
--exclude <pattern> 排除文件或者目录时不区分大小写
--excludei <pattern> 排除文件或者目录时不区分大小写
-m|--monitor 始终保持事件监听状态
-d|--daemon
-r|--recursive 递归查询目录
--fromfile <file>
-o|--outfile <file>
-s|--syslog
-q|--quiet 打印很少的信息,打印监控事件
-qq
--format <fmt> 打印使用指定的输出类似格式的字符串
--timefmt <fmt> strftime-compatible format string for use with
%T in --format string.
-c|--csv Print events in CSV format.
-t|--timeout <seconds>
When listening for a single event, time out after
waiting for an event for <seconds> seconds.
If <seconds> is 0, inotifywait will never time out.
-e|--event <event1> [ -e|--event <event2> ... ] 监控事件的变化
Listen for specific event(s). If omitted, all events are
listened for.
Exit status:
0 - An event you asked to watch for was received.
1 - An event you did not ask to watch for was received
(usually delete_self or unmount), or some error occurred.
2 - The --timeout option was given and no events occurred
in the specified interval of time.
Events:
access file or directory contents were read
modify file or directory contents were written
attrib file or directory attributes changed
close_write file or directory closed, after being opened in
writeable mode
close_nowrite file or directory closed, after being opened in
read-only mode
close file or directory closed, regardless of read/write mode
open file or directory opened
moved_to file or directory moved to watched directory
moved_from file or directory moved from watched directory
move file or directory moved to or from watched directory
create file or directory created within watched directory
delete file or directory deleted within watched directory
delete_self file or directory was deleted
unmount file system containing file or directory unmounted
4.实战:
在inotify端执行:
/opt/inotify/bin/inotifywait -mrq --timefmt '%d%m%y%H:%M' --format '%T%w%f' -e create,delete,open /backup 在backup目录下的创建操作进行监控
/opt/inotify/bin/inotifywait -mrq --timefmt '%d%m%y%H:%M' --format '%T%w%f' -e delete /backup
简化的事件输出:
#!/bin/bash
/opt/inotify/bin/inotifywait -mrq --format '%w%f' -e create,close_write,delete /backup
while read file
do
rsync -az "$file" --delete rsync_backup@serverip::backup --password-file=/etc/rsync.password
done
执行上述的脚本,然后再往backup下创建和删除文件测试,但是不能实现删除同步操作。
优化版脚本如下:
#!/bin/bash
#parameter
host=172.1.1.4
src="/backup"
dst="oldboy"
user="rsync_backup"
pass="/etc/rsync.password"
cmd="/opt/inotify/bin/inotifywait"
#judge
if [ ! -e $src ] \
|| [ ! -e $pass ] \
|| [ ! -e $cmd ] \
|| [ ! -e "/usr/bin/rsync" ];
then
echo "please check file and folder !"
exit 9
fi
#exec
$cmd -mrq --timefmt '%d%m%y %H:%M' --format '%T %w%f' -e close_write,delete,create,attrib $src \
| while read file
do
# rsync -azP --delete --timeout=100 --password-file=$pass $src $user@$host::$dst &> /dev/null
cd $src && rsync -az -R --delete ./ --timeout=100 $user@$host::$dst --password-file=$pass &> /dev/null
done
exit 0
通过start|stop控制脚本事项inotify操作结合上述脚本实现开关操作
#!/bin/bash
. /etc/init.d/functions
if [ $# -ne 1 ];then
usage:$0 {start|stop}
exit 1
fi
case "$1" in
start)
/bin/bash /server/scripts/inotify.sh &
echo $$ > /opt/inotify/i.pid
if [ `ps -ef | grep inotify|wc -l` -gt 2 ];then
action "inotify server is started" /bin/true
else
action "inotify server is error" /bin/false
fi
;;
stop)
kill -9 `cat /opt/inotify/i.pid` > /dev/null 2>&1
pkill inotifywait
sleep 1
if [ `ps -ef | grep inotify |wc -l` -eq 0 ];then
action "inotify server is stopped" /bin/true
else
action "inotify server is stopped error" /bin/false
fi
;;
*)
usage :$0 {start|stop}
exit 1
esac
压力测试 及优化
查看inotify对应的内核参数
cd /proc/sys/fs/inotify/
cat *
16384 表示调用inotify_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW事件。
128 表示每一个real user ID可创建的inotify instatnces的数量上限
8192 表示同一用户同时可以添加的watch数目(watch一般是针对目录,决定了同时同一用户可以监控的目录数量)
上述三个参数可以按照实际情况尽可能地调大一点
重启机器之后会失效,永久操作的方法
vim /etc/sysctl.conf
fs.inotify.max_queued_events= 99999999
fs.inotify.max_user_watches= 99999999
fs.inotify.max_user_instances= 65535
修改完成之后sysctl -p 刷新生效即可
注意: max_queued_events 是inotify管理的队列的最大长度,文件系统变化越频繁,这个值就应该越大。
注意: max_queued_events 是inotify管理的队列的最大长度,文件系统变化越频繁,这个值就应该越大。
(小文件的最大并发数也就200左右,否则会有延迟)
echo {a..j} | tr " " "\n" > a.log #竖着 写文件
split -l 2 a.log #两行一个分割文件
inotify的缺点
(1)、并发大于200有延迟
(2)、推送效率不高
改进版
#!/bin/bash
cmd="/opt/inotify/bin/inotifywait"
$cmd -mqr --format '%w%f' -e create,close_write,delete /backup|\
while read line
do
[ ! -e "$line" ] && continue
rsync -az --delete $line rsync_backup@172.1.1.4::oldboy --password-file=/etc/rsync.password
done
1.介绍:开源的、快速的、多功能的可以实现全量和增量备份的工具;还能实现文件的删除等;可以根据文件大小的变化和修改时间的变化来同步数据(快速)
2.描述:支持特殊文件的拷贝,例如设备文件,链接等;可以排除目录下指定文件的同步功能,相当于tar;可以做到保持原文件的属性和权限等不改变(-p);实现增量同步,传输效率很高;可以使用rcp等方式来传输文件;可以通过socket传输文件和数据(c/s);支持匿名认证的方式进行传输
3.企业应用:两台服务器之间的数据同步(nfs备份),时时同步,增量备份
4.rsync的工作模式:单个主机之间本地传输(类似于cp)
借助rcp,ssh等通道来传输数据(类似于scp)
以守护进程socket的方式传输数据(重要功能)
5.使用方法:
rsync [OPTION...] SRC... [DEST]
所有属性的拷贝rsync -avz
删除文件或者目录(不同的目录或者文件)rsync -r --delete 目录1 目录2
6.rsync的推拉复制
rsync -avz file(需要发送的文件) -e(指定通道) 'ssh -p 65535'(指定协议) haha@172.1.1.1:~ 文件的推送
rsync -avz -e 'ssh -p 65535' haha@172.1.1.3:~/hosts /home/haha 文件的拉取
7.客户端的常用参数
rsync -v:详细方式输出
-z:压缩传输2w
-a:归档模式(rtopDI)
-e,--rsh=command:使用的信道协议
--exclude=PATTERN,--exclude-from
--bwlimit=10:传输限速
*8.socket方式传输
daemon方式:
拓扑:
rsync的server端的配置文件/etc/rsyncd.conf
#rsync_config_______________start
#created by oldboy 15:01 2007-6-5
#QQ 31333741 blog:http://oldboy.blog.51cto.com
##rsyncd.conf start##
uid = rsync
gid = rsync
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
[oldboy] #共享设置
path = /oldboy/
ignore errors
read only = false
list = false
hosts allow = 10.0.0.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
#rsync_config_______________end
服务以daemon方式启动:rsync --daemon
netstat -lntup | grep 873 监听在873端口
然后创建对应的目录及用户,将属主和属组修改
mkdir /oldboy ---- useradd -s /ssbin/nologin -M rsync ------chown -R rsync.rsync /oldboy
接下来创建虚拟用户以及密码
echo "rsync_backup:oldboy" > /etc/rsync.password
chmod 600 /etc/rsync.password
客户端的操作:
echo "oldboy" > /etc/rsync.password
chmod 600 /etc/rsync.password
数据的流向是服务端走向客户端
在客户端执行:(下面的oldboy是服务端[oldboy]模块名,不是目录)
rsync -avz rsync_backup@172.1.1.4::oldboy /data --password-file=/etc/rsync.password 拉取操作
rsync -avz rsync :/rsyn_backup@172.1.1.4::oldboy /data --password-file=/etc/rsync.password
rsync -avz /data/(data下的内容) rsync_backup@172.1.1.4::oldboy --password-file=/etc/rsync.password 推操作
rsync -avz /data/ rsync://rsync_backup@172.1.1.4/oldboy --password-file=/etc/rsync.password
Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
****rsync拍错过程:防火墙,seliux,参考日志/var/log/syncd.log,文件命名和权限
深度讲解rsync(873端口)
正常情况下需要将服务端rsync写到rc.local下(echo "/usr/bin/rsync --daemon" >> /etc/rc.local)保证开机自启动
客户端负责推送本地的文件到rsync服务端的对应模块下
rsync拓展:
--exclude
--exclude-from
排除的方法:可以在客户端排除,也可以在服务端设置参数进行排除
rsync -avz --exclude=log/ /data/ rsync_backup@172.1.1.4::oldboy --password-file=/etc/rsync.password 排除目录或者单个文件可以这样纸
rsync -avz --exclude={1.txt,2.txt,5.txt,log/} /data/ rsync_backup@172.1.1.4::oldboy --password-file=/etc/rsync.password 排除多个文件和目录的用法
rsync -avz --exclude-from=hehe.log /data/ rsync_backup@172.1.1.4::oldboy--password-file=/etc/rsync.password
服务端的排除:(需要修改配置文件,会带来麻烦)
********无差异同步实践(主备机之间的需求)
参数:--delete
推送的场景:其一是备份(主要) --delete风险(文件丢失)
拉取【客户端操作】的应用场景:代码发布,下载(远端有啥本地有啥)
rsync -avz --delete rsync_backup@172.1.1.4::oldboy /data/ --password-file=/etc/rsync.password 保证数据的时时同步
使用场景:负载均衡器之间和高可用服务器之间
防火墙配置:
iptables -A INPUT -s 172.1.1.0/255.255.255.0 -p tcp -m tcp --dport 873 -j ACCEPT
多模块配置(共享多个目录)
需要在服务器端操作的事项:配置文件中写多个模块,参考配置文件如下:
uid = rsync
gid = rsync
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
ignore errors
read only = false
list = false
hosts allow = 172.1.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[oldboy]
path = /oldboy/
[data]
path = /data/
然后再对data目录给以rsync属主,此时就可以实现在客户端的操作了
排错:密码文件权限问题,目录以及权限问题,防火墙问题,
前提是熟悉部署的流程;
原理要理解
学会看日志(命令行和日志输出)
模拟错误,重视日常的错误
rsync+inotify时时同步
1、时时同步原理
计划任务结合rsync实现分钟级别的同步
inotify是一种异步文件系统时间监控机制,触发同步
首先在客户端安装inotify程序,在服务端启动rsync --daemon;当客户端检测到的目录及内容发生变化时然后客户端会将发生变化的目录及内容推送
2、inotify的实施
准备条件:实现rsync daemon和客户端之间的推拉传输数据
配置inotify的要求:在客户端安装和配置
先查看客户端是否支持inotify
# ll /proc/sys/fs/inotify/
-rw-r--r-- 1 root root 0 5月 18 17:32 max_queued_events 最大队列事件(大一点比较好)
-rw-r--r-- 1 root root 0 5月 18 17:32 max_user_instances
-rw-r--r-- 1 root root 0 5月 18 17:32 max_user_watches
./configure -prefix=/opt/inotify
make && make install
ln -s /opt/inotify /usr/local/inotify
3、详细介绍
/opt/inotify/bin/inotifywait
--exclude <pattern> 排除文件或者目录时不区分大小写
--excludei <pattern> 排除文件或者目录时不区分大小写
-m|--monitor 始终保持事件监听状态
-d|--daemon
-r|--recursive 递归查询目录
--fromfile <file>
-o|--outfile <file>
-s|--syslog
-q|--quiet 打印很少的信息,打印监控事件
-qq
--format <fmt> 打印使用指定的输出类似格式的字符串
--timefmt <fmt> strftime-compatible format string for use with
%T in --format string.
-c|--csv Print events in CSV format.
-t|--timeout <seconds>
When listening for a single event, time out after
waiting for an event for <seconds> seconds.
If <seconds> is 0, inotifywait will never time out.
-e|--event <event1> [ -e|--event <event2> ... ] 监控事件的变化
Listen for specific event(s). If omitted, all events are
listened for.
Exit status:
0 - An event you asked to watch for was received.
1 - An event you did not ask to watch for was received
(usually delete_self or unmount), or some error occurred.
2 - The --timeout option was given and no events occurred
in the specified interval of time.
Events:
access file or directory contents were read
modify file or directory contents were written
attrib file or directory attributes changed
close_write file or directory closed, after being opened in
writeable mode
close_nowrite file or directory closed, after being opened in
read-only mode
close file or directory closed, regardless of read/write mode
open file or directory opened
moved_to file or directory moved to watched directory
moved_from file or directory moved from watched directory
move file or directory moved to or from watched directory
create file or directory created within watched directory
delete file or directory deleted within watched directory
delete_self file or directory was deleted
unmount file system containing file or directory unmounted
4.实战:
在inotify端执行:
/opt/inotify/bin/inotifywait -mrq --timefmt '%d%m%y%H:%M' --format '%T%w%f' -e create,delete,open /backup 在backup目录下的创建操作进行监控
/opt/inotify/bin/inotifywait -mrq --timefmt '%d%m%y%H:%M' --format '%T%w%f' -e delete /backup
简化的事件输出:
#!/bin/bash
/opt/inotify/bin/inotifywait -mrq --format '%w%f' -e create,close_write,delete /backup
while read file
do
rsync -az "$file" --delete rsync_backup@serverip::backup --password-file=/etc/rsync.password
done
执行上述的脚本,然后再往backup下创建和删除文件测试,但是不能实现删除同步操作。
优化版脚本如下:
#!/bin/bash
#parameter
host=172.1.1.4
src="/backup"
dst="oldboy"
user="rsync_backup"
pass="/etc/rsync.password"
cmd="/opt/inotify/bin/inotifywait"
#judge
if [ ! -e $src ] \
|| [ ! -e $pass ] \
|| [ ! -e $cmd ] \
|| [ ! -e "/usr/bin/rsync" ];
then
echo "please check file and folder !"
exit 9
fi
#exec
$cmd -mrq --timefmt '%d%m%y %H:%M' --format '%T %w%f' -e close_write,delete,create,attrib $src \
| while read file
do
# rsync -azP --delete --timeout=100 --password-file=$pass $src $user@$host::$dst &> /dev/null
cd $src && rsync -az -R --delete ./ --timeout=100 $user@$host::$dst --password-file=$pass &> /dev/null
done
exit 0
通过start|stop控制脚本事项inotify操作结合上述脚本实现开关操作
#!/bin/bash
. /etc/init.d/functions
if [ $# -ne 1 ];then
usage:$0 {start|stop}
exit 1
fi
case "$1" in
start)
/bin/bash /server/scripts/inotify.sh &
echo $$ > /opt/inotify/i.pid
if [ `ps -ef | grep inotify|wc -l` -gt 2 ];then
action "inotify server is started" /bin/true
else
action "inotify server is error" /bin/false
fi
;;
stop)
kill -9 `cat /opt/inotify/i.pid` > /dev/null 2>&1
pkill inotifywait
sleep 1
if [ `ps -ef | grep inotify |wc -l` -eq 0 ];then
action "inotify server is stopped" /bin/true
else
action "inotify server is stopped error" /bin/false
fi
;;
*)
usage :$0 {start|stop}
exit 1
esac
压力测试 及优化
查看inotify对应的内核参数
cd /proc/sys/fs/inotify/
cat *
16384 表示调用inotify_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW事件。
128 表示每一个real user ID可创建的inotify instatnces的数量上限
8192 表示同一用户同时可以添加的watch数目(watch一般是针对目录,决定了同时同一用户可以监控的目录数量)
上述三个参数可以按照实际情况尽可能地调大一点
重启机器之后会失效,永久操作的方法
vim /etc/sysctl.conf
fs.inotify.max_queued_events= 99999999
fs.inotify.max_user_watches= 99999999
fs.inotify.max_user_instances= 65535
修改完成之后sysctl -p 刷新生效即可
注意: max_queued_events 是inotify管理的队列的最大长度,文件系统变化越频繁,这个值就应该越大。
注意: max_queued_events 是inotify管理的队列的最大长度,文件系统变化越频繁,这个值就应该越大。
(小文件的最大并发数也就200左右,否则会有延迟)
echo {a..j} | tr " " "\n" > a.log #竖着 写文件
split -l 2 a.log #两行一个分割文件
inotify的缺点
(1)、并发大于200有延迟
(2)、推送效率不高
改进版
#!/bin/bash
cmd="/opt/inotify/bin/inotifywait"
$cmd -mqr --format '%w%f' -e create,close_write,delete /backup|\
while read line
do
[ ! -e "$line" ] && continue
rsync -az --delete $line rsync_backup@172.1.1.4::oldboy --password-file=/etc/rsync.password
done