linux实时备份,51CTO博客-专业IT技术博客创作平台-技术成就梦想

rsync缺点/不足:

1.rsync在同步数据时,需要扫描所有文件后进行比对,进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的,并且正在发生变化的往往是其中很少的一部分,这是非常低效的方式。

2.rsync不能实时的去监测、同步数据,虽然它可以通过linux守护进程的方式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据。linux内核从2.6.13起,加入了inotify支持,通过inotify可以监控文件系统中添加、删除、修改、移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools正是实施监控的软件。

在使用rsync首次全量同步后,结合inotify对源目录进行实时监控,只有有文件变动或新文件产生,就会立刻同步到目标目录下,非常高效使用!

inotify :创建一个文件描述符,附加一个或多个监视器(一个监视器是一个路径和一组事件),然后用read方法从描述符获取事件,read并不会用完整个周期,它是事件发生之前是被阻塞的。

文件描述符:linux内核为了更优秀的管理被打开的文件创建的索引,是一个非负整数。用于指代被打开的文件,所有执行io的操作 系统调用都是通过文件描述符。0表示标准输入,1表示标准输出,2表示标准错误输出。

查看linux内核版本

需要看当前linux是否支持inotify[root@Rsync-139 ~]# uname -a

Linux Rsync-139 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

[root@Rsync-139 ~]# ls -lsart /proc/sys

sys/           sysrq-trigger  sysvipc/

[root@Rsync-139 ~]# ls -lsart /proc/sys/fs/inotify/

总用量 0

0 dr-xr-xr-x 0 root root 0 11月  5 15:31 ..

0 dr-xr-xr-x 0 root root 0 11月  6 16:12 .

0 -rw-r--r-- 1 root root 0 11月  6 16:12 max_user_watches

0 -rw-r--r-- 1 root root 0 11月  6 16:12 max_user_instances

0 -rw-r--r-- 1 root root 0 11月  6 16:12 max_queued_events

安装[root@Rsync-139 ~]# tar -zxvf inotify-tools-3.14.tar.gz -C /usr/local/src/

[root@Rsync-139 ~]# ./configrue --prefix=/usr/local/inotify

[root@Rsync-139 ~]# make &&make install

需要加环境变量vim /etc/profile

最低行加:/usr/local/inotify/bin/

重新加载配置文件. /etc/profile 或者

source /etc/profile

查看帮助信息

inotifywait --help[root@WebA-136 script]# inotifywait --help

inotifywait 3.14

Wait for a particular event on a file or set of files.

Usage: inotifywait [ options ] file1 [ file2 ] [ file3 ] [ ... ]

Options:可用选项

-h|--help       Show this help text.

@         Exclude the specified file from being watched.

--exclude 

Exclude all events on files matching the

extended regular expression .

--excludei 

Like --exclude but case insensitive.

-m|--monitor    Keep listening for events forever.  Without

this option, inotifywait will exit after one

event is received.

-d|--daemon     Same as --monitor, except run in the background

logging events to a file specified by --outfile.

Implies --syslog.

-r|--recursive  Watch directories recursively.

--fromfile 

Read files to watch from  or `-' for stdin.

-o|--outfile 

Print events to  rather than stdout.

-s|--syslog     Send errors to syslog rather than stderr.

-q|--quiet      Print less (only print events).

-qq             Print nothing (not even events).

--format   Print using a specified printf-like format

string; read the man page for more details.

--timefmt  strftime-compatible format string for use with

%T in --format string.

-c|--csv        Print events in CSV format.

-t|--timeout 

When listening for a single event, time out after

waiting for an event for  seconds.

If  is 0, inotifywait will never time out.

-e|--event  [ -e|--event  ... ]

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

常用

-r 递归(目录)

-m 永久监听

-d 后台运行

-q 静默,只输出较少的信息

编写脚本进行实时备份vim inotify.sh

inotifywait -mrq --timefmt '%d%m%y %H:%M' --format '%T %w%f%e' -e close_write,modify,delete,create,attrib,move /var/log/ |while read file

do

rsync -az --delete-before /var/log/ rsync_WebA@192.168.146.139::WebA/ --password-file=/etc/WebA.pass

done

./inotify &放入后台执行即可

注:

rsync error: some files/attrs were not transferred (see previous errors) (code 23) at

main.c(1505)是因为在同步的时候,源目录下有软链接文件!

rsync同步软链接文件,应该加参数-l

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值