0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

inotify之inotifywait命令详解

阿铭linux 来源:lq 2018-12-31 09:01 次阅读

1.inotify简介

inotify 是一个从 2.6.13 内核开始,对 Linux 文件系统进行高效率、细粒度、异步地监控机制, 用于通知用户空间程序的文件系统变化。可利用它对用户空间进行安全、性能、以及其他方面的监控。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。如果内核版本不低于 2.6.13,系统就支持 inotify。 如果存在/usr/include/sys/inotify.h 文件, 表明内核支持 inotify。

1[root@localhost~]#ls-l/proc/sys/fs/inotify/#列出文件目录,出现下面的内容,说明服务器内核支持inotify2total03-rw-r--r--1rootroot0Oct1305:39max_queued_events4-rw-r--r--1rootroot0Oct1305:39max_user_instances5-rw-r--r--1rootroot0Oct1305:39max_user_watches

2.inotify的作用

inotify 可以监控文件,也可以监控目录。当监控目录时,它可以同时监控目录及目录中的各子目录及文件的。此外, inotify 使用文件描述符作为接口,因而可以使用通常的文件 I/O 操作 select、 poll 和 epoll 来监视文件系统的变化。

3.inotify实现数据实时同步原理

无论是手动执行 rsync 还是把 rsync 客户端发出的数据同步请求命令做成周期性任务计划, 每隔一段时间不管有没有数据变化都发出一次数据同步请求命令, 同步一次数据。 服务端和客户端都有时间差。所以, 使用内核提供的 inotify 机制,当数据发生改变时(删除、修改等)就触发 rsync 客户端发出数据 同步请求。 从而实现数据的实时传输。rsync + inotify 机制实现的两台服务器数据同步如下图如示:

4.inotify的安装与使用

1[root@localhost~]#yuminstall-yinotify-tools2[root@localhost~]#inotifywait-mrq--timefmt'%d%m%Y%H:%M'--format'%T%w%f'-ecreate/backup#创建对目录/backup的监控31710201700:02/backup/1.txt41710201700:02/backup/2.txt51710201700:02/backup/3.txt61710201700:02/backup/4.txt71710201700:02/backup/5.txt

5.inotify之inotifywait命令详解

1参数详解: 2-r:递归查询目录 3-q:打印监控时间信息 4-m:始终保持时间监听状态 5--excludei:排除文件或目录时,不区分大小写。 6--timefmt:指定时间输出的格式 7--format:打印使用指定的输出类似格式字符串 8a、%w:显示被监控文件的文件名; 9b、%f:如果发生某事件的对象是目录,则显示被监控目录的名字;默认显示为空串;10c、%T:使用--timefmt选项中自定义的时间格式;11d、%e表示发生的事件12e、%Xe事件以“X”分隔13-e:指定需要监控的事件14access:文件或目录被读取15modify:文件或目录内容被修改16attrib:文件或目录属性被改变17close:文件或目录封闭,无论读/写模式18open:文件或目录被打开19move_to:文件或目录被移动到另外一个目录20move:文件或目录被移动另一个目录或从另一个目录移动到当前目录21create:文件或目录被创建在当前目录22delete:文件或目录被删除23unmount:文件系统被卸载24常用组合:close_write,modify,delete,create,attrib

6.编写监控脚本

1[root@nfsscripts]#viminotify.sh 2#!/bin/bash 3/usr/bin/inotifywait-mrq'%w%f'-eclose_write,modify,delete,create/backup 4|whilereadline 5do 6cd/backup&&rsync-azP./rsync_bakup@192.168.0.175::backup/--password-file=/etc/rsync.password>/dev/null2>&1 7done 8exit0 9[root@nfsscripts]#shinotify.sh&#<==运行脚本监控/backup10[root@nfs scripts]# touch /backup/{1..10}.log           #<==NFS上创建文件进行测试    11[root@backup backup]# ll                    #<==备份服务上查看是否备份成功   12total 413-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 10.log14drwxr-xr-x 2 rsync rsync 4096 Oct 12 21:43 192.168.0.16515-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 1.log16-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 2.log17-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 3.log18-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 4.log19-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 5.log20-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 6.log21-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 7.log22-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 8.log23-rw-r--r-- 1 rsync rsync    0 Oct 17 00:28 9.log24[root@nfs scripts]# echo "/bin/bash /server/scripts/inotify.sh &" >>/etc/rc.local#<==设置开机启动

7.修改inotify默认参数(inotify默认内核参数值太小)

1查看系统默认参数值 2sysctl-a|grepmax_queued_events 3结果是:fs.inotify.max_queued_events=16384 4sysctl-a|grepmax_user_watches 5结果是:fs.inotify.max_user_watches=8192 6sysctl-a|grepmax_user_instances 7结果是:fs.inotify.max_user_instances=128 8修改参数: 9sysctl-wfs.inotify.max_queued_events="99999999"10sysctl-wfs.inotify.max_user_watches="99999999"11sysctl-wfs.inotify.max_user_instances="65535"12vim/etc/sysctl.conf#添加以下代码13fs.inotify.max_queued_events=9999999914fs.inotify.max_user_watches=9999999915fs.inotify.max_user_instances=6553516:wq!#保存退出1718参数说明:19max_queued_events:20inotify队列最大长度,如果值太小,会出现"**EventQueueOverflow**"错误,导致监控文件不准确21max_user_watches:22设置inotifywait或inotifywatch命令可以监视的文件数量(单进程)23max_user_instances:24每个用户创建inotify实例最大值25【inotify在实际生产环境中,对于50-200KB的文件,inotify的最发并发量为200-300,如果客户端写入速度大于这个量,将会造成短暂的延迟】

8.总结

11rysnc+inotify实时备份流程:22a.实现从NFS客户端到rsync服务端的rsync的部署33b.实现从NFS客户端对NFS目录文件系统时间的实时监控44c.当监控到NFS目录文件系统事件变化后,触发rsync推送变化的文件最后来一张总结图:

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    12

    文章

    8088

    浏览量

    82433
  • NFS
    NFS
    +关注

    关注

    1

    文章

    52

    浏览量

    25949

原文标题:实时备份工具之inotify+rsync

文章出处:【微信号:aming_linux,微信公众号:阿铭linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Linux系统命令及其使用详解

    Linux系统命令及其使用详解
    发表于 08-20 13:38

    关于Inotify对linux文件系统的监控

    Linux提供了hotplup(热插拔),udev和inotify机制帮助我们可以看到底层硬件设备发生了什么,从而能够更好地管理设备,给用户提供更好地服务。Inotify通过如下三个系统调用和返回
    发表于 10-19 16:01

    对linux中的inotify机制的一点认识

    的前辈们已经给我们做好了,在linux2.6内核中开始引入,作为linux的系统调用来使用,所以我们就可以用它来帮助我们来完成这件事了。接下来我们来学习一下于inotify相关的系统调用接口:int
    发表于 11-29 17:00

    Linux inotify基本用法

    Linux inotify监听文件状态
    发表于 07-02 14:47

    CAM填铜皮命令详解

    CAM填铜皮命令详解
    发表于 01-28 23:28 0次下载

    C2xx命令详解

    C2xx命令详解
    发表于 08-03 09:19 11次下载
    C2xx<b class='flag-5'>命令</b><b class='flag-5'>详解</b>

    Linux关机命令详解

    Linux关机命令详解 在linux下一些常用的关机/重启命令有shutdown、halt、reboot、及init,它们都 可以达到重启系统的目的,但每个命令的内部工作过程是不同的
    发表于 01-18 12:52 3510次阅读

    PADS 9.0新增的无模命令Z 的使用详解

    PADS 9.0新增的无模命令Z 的使用详解本人这两天,使用9.0,发现无模命令Z的强大,欣喜之余,共同分享使用心得有错漏之处,敬请多指点.以下命令必须以Z开
    发表于 10-06 10:59 3619次阅读

    基于H3C的路由器配置命令详解

    本文档内容介绍了基于H3C的路由器配置命令详解
    发表于 09-20 14:19 18次下载

    inotify框架的使用和原理!如何添加对于目标文件的watch呢?

    为了防止文件描述符fd的快速消耗,inotify提出了一个inotify instance(inotify实例)的概念。每一个inotify实例表示一个可读写的fd, 一个
    的头像 发表于 08-15 17:43 1.1w次阅读
    <b class='flag-5'>inotify</b>框架的使用和原理!如何添加对于目标文件的watch呢?

    Linux系统中EXP命令详解质量汇总

    Linux系统中EXP命令详解质量汇总
    发表于 05-14 09:35 1次下载

    Linux虚拟机之tcpdump命令操作详解

    Linux虚拟机之tcpdump命令操作详解
    发表于 08-12 09:50 23次下载

    Backup-和Restore-命令详解

    Backup-和Restore-命令详解(力普拉斯电源技术有限公司)-文档为Backup-和Restore-命令详解总结文档,是一份不错的参考资料,感兴趣的可以下载看看,,,,,,,,
    发表于 09-17 12:00 5次下载
    Backup-和Restore-<b class='flag-5'>命令</b><b class='flag-5'>详解</b>

    Oracle-SQLPLUS基础及sqlplus命令详解

    Oracle-SQLPLUS基础及sqlplus命令详解(开关电源技术发展方向)-该文档为Oracle-SQLPLUS基础及sqlplus命令详解文档 ,是一份还算不错的参考文档,感兴
    发表于 09-28 13:26 13次下载
    Oracle-SQLPLUS基础及sqlplus<b class='flag-5'>命令</b><b class='flag-5'>详解</b>

    kafka相关命令详解

    kafka常用命令详解
    的头像 发表于 10-20 11:34 341次阅读