0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

inotify之inotifywait命令詳解

阿銘linux ? 來源:lq ? 2018-12-31 09:01 ? 次閱讀

1.inotify簡介

inotify 是一個從 2.6.13 內(nèi)核開始,對 Linux 文件系統(tǒng)進(jìn)行高效率、細(xì)粒度、異步地監(jiān)控機(jī)制, 用于通知用戶空間程序的文件系統(tǒng)變化??衫盟鼘τ脩艨臻g進(jìn)行安全、性能、以及其他方面的監(jiān)控。Inotify 反應(yīng)靈敏,用法非常簡單,并且比 cron 任務(wù)的繁忙輪詢高效得多。如果內(nèi)核版本不低于 2.6.13,系統(tǒng)就支持 inotify。 如果存在/usr/include/sys/inotify.h 文件, 表明內(nèi)核支持 inotify。

1[root@localhost~]#ls-l/proc/sys/fs/inotify/#列出文件目錄,出現(xiàn)下面的內(nèi)容,說明服務(wù)器內(nèi)核支持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 可以監(jiān)控文件,也可以監(jiān)控目錄。當(dāng)監(jiān)控目錄時,它可以同時監(jiān)控目錄及目錄中的各子目錄及文件的。此外, inotify 使用文件描述符作為接口,因而可以使用通常的文件 I/O 操作 select、 poll 和 epoll 來監(jiān)視文件系統(tǒng)的變化。

3.inotify實現(xiàn)數(shù)據(jù)實時同步原理

無論是手動執(zhí)行 rsync 還是把 rsync 客戶端發(fā)出的數(shù)據(jù)同步請求命令做成周期性任務(wù)計劃, 每隔一段時間不管有沒有數(shù)據(jù)變化都發(fā)出一次數(shù)據(jù)同步請求命令, 同步一次數(shù)據(jù)。 服務(wù)端和客戶端都有時間差。所以, 使用內(nèi)核提供的 inotify 機(jī)制,當(dāng)數(shù)據(jù)發(fā)生改變時(刪除、修改等)就觸發(fā) rsync 客戶端發(fā)出數(shù)據(jù) 同步請求。 從而實現(xiàn)數(shù)據(jù)的實時傳輸。rsync + inotify 機(jī)制實現(xiàn)的兩臺服務(wù)器數(shù)據(jù)同步如下圖如示:

4.inotify的安裝與使用

1[root@localhost~]#yuminstall-yinotify-tools2[root@localhost~]#inotifywait-mrq--timefmt'%d%m%Y%H:%M'--format'%T%w%f'-ecreate/backup#創(chuàng)建對目錄/backup的監(jiān)控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參數(shù)詳解: 2-r:遞歸查詢目錄 3-q:打印監(jiān)控時間信息 4-m:始終保持時間監(jiān)聽狀態(tài) 5--excludei:排除文件或目錄時,不區(qū)分大小寫。 6--timefmt:指定時間輸出的格式 7--format:打印使用指定的輸出類似格式字符串 8a、%w:顯示被監(jiān)控文件的文件名; 9b、%f:如果發(fā)生某事件的對象是目錄,則顯示被監(jiān)控目錄的名字;默認(rèn)顯示為空串;10c、%T:使用--timefmt選項中自定義的時間格式;11d、%e表示發(fā)生的事件12e、%Xe事件以“X”分隔13-e:指定需要監(jiān)控的事件14access:文件或目錄被讀取15modify:文件或目錄內(nèi)容被修改16attrib:文件或目錄屬性被改變17close:文件或目錄封閉,無論讀/寫模式18open:文件或目錄被打開19move_to:文件或目錄被移動到另外一個目錄20move:文件或目錄被移動另一個目錄或從另一個目錄移動到當(dāng)前目錄21create:文件或目錄被創(chuàng)建在當(dāng)前目錄22delete:文件或目錄被刪除23unmount:文件系統(tǒng)被卸載24常用組合:close_write,modify,delete,create,attrib

6.編寫監(jiān)控腳本

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&#<==運(yùn)行腳本監(jiān)控/backup10[root@nfs?scripts]#?touch?/backup/{1..10}.log???????????#<==NFS上創(chuàng)建文件進(jìn)行測試????11[root@backup?backup]#?ll????????????????????#<==備份服務(wù)上查看是否備份成功???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#<==設(shè)置開機(jī)啟動

7.修改inotify默認(rèn)參數(shù)(inotify默認(rèn)內(nèi)核參數(shù)值太?。?/p>

1查看系統(tǒng)默認(rèn)參數(shù)值 2sysctl-a|grepmax_queued_events 3結(jié)果是:fs.inotify.max_queued_events=16384 4sysctl-a|grepmax_user_watches 5結(jié)果是:fs.inotify.max_user_watches=8192 6sysctl-a|grepmax_user_instances 7結(jié)果是:fs.inotify.max_user_instances=128 8修改參數(shù): 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參數(shù)說明:19max_queued_events:20inotify隊列最大長度,如果值太小,會出現(xiàn)"**EventQueueOverflow**"錯誤,導(dǎo)致監(jiān)控文件不準(zhǔn)確21max_user_watches:22設(shè)置inotifywait或inotifywatch命令可以監(jiān)視的文件數(shù)量(單進(jìn)程)23max_user_instances:24每個用戶創(chuàng)建inotify實例最大值25【inotify在實際生產(chǎn)環(huán)境中,對于50-200KB的文件,inotify的最發(fā)并發(fā)量為200-300,如果客戶端寫入速度大于這個量,將會造成短暫的延遲】

8.總結(jié)

11rysnc+inotify實時備份流程:22a.實現(xiàn)從NFS客戶端到rsync服務(wù)端的rsync的部署33b.實現(xiàn)從NFS客戶端對NFS目錄文件系統(tǒng)時間的實時監(jiān)控44c.當(dāng)監(jiān)控到NFS目錄文件系統(tǒng)事件變化后,觸發(fā)rsync推送變化的文件最后來一張總結(jié)圖:

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    8843

    瀏覽量

    84946
  • NFS
    NFS
    +關(guān)注

    關(guān)注

    1

    文章

    52

    瀏覽量

    26063

原文標(biāo)題:實時備份工具之inotify+rsync

文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    u-boot命令EMMC和SD卡操作命令詳解

    今天給大家詳細(xì)的介紹一下u-boot命令EMMC和SD卡操作的mmc命令使用。希望這篇文章對大家有所幫助。
    發(fā)表于 07-12 15:19 ?3821次閱讀

    關(guān)于Inotify對linux文件系統(tǒng)的監(jiān)控

    Linux提供了hotplup(熱插拔),udev和inotify機(jī)制幫助我們可以看到底層硬件設(shè)備發(fā)生了什么,從而能夠更好地管理設(shè)備,給用戶提供更好地服務(wù)。Inotify通過如下三個系統(tǒng)調(diào)用和返回
    發(fā)表于 10-19 16:01

    對linux中的inotify機(jī)制的一點認(rèn)識

    的前輩們已經(jīng)給我們做好了,在linux2.6內(nèi)核中開始引入,作為linux的系統(tǒng)調(diào)用來使用,所以我們就可以用它來幫助我們來完成這件事了。接下來我們來學(xué)習(xí)一下于inotify相關(guān)的系統(tǒng)調(diào)用接口:int
    發(fā)表于 11-29 17:00

    Linux inotify基本用法

    Linux inotify監(jiān)聽文件狀態(tài)
    發(fā)表于 07-02 14:47

    CAM填銅皮命令詳解

    CAM填銅皮命令詳解
    發(fā)表于 01-28 23:28 ?0次下載

    C2xx命令詳解

    C2xx命令詳解
    發(fā)表于 08-03 09:19 ?11次下載
    C2xx<b class='flag-5'>命令</b><b class='flag-5'>詳解</b>

    Linux關(guān)機(jī)命令詳解

    Linux關(guān)機(jī)命令詳解 在linux下一些常用的關(guān)機(jī)/重啟命令有shutdown、halt、reboot、及init,它們都 可以達(dá)到重啟系統(tǒng)的目的,但每個命令的內(nèi)部工作過程是不同的
    發(fā)表于 01-18 12:52 ?3604次閱讀

    邏輯漏洞越權(quán)詳解

    邏輯漏洞越權(quán)詳解
    發(fā)表于 09-07 09:41 ?5次下載
    邏輯漏洞<b class='flag-5'>之</b>越權(quán)<b class='flag-5'>詳解</b>

    Linux命令詳解 [兼容模式]pdf免費(fèi)下載

    linux的命令詳解pdf,希望對大家有幫助!
    發(fā)表于 12-15 15:54 ?10次下載

    DOS-ping和ipconfig命令詳解下載

    DOS-ping和ipconfig命令詳解下載
    發(fā)表于 01-16 16:13 ?3次下載

    inotify框架的使用和原理!如何添加對于目標(biāo)文件的watch呢?

    為了防止文件描述符fd的快速消耗,inotify提出了一個inotify instance(inotify實例)的概念。每一個inotify實例表示一個可讀寫的fd, 一個
    的頭像 發(fā)表于 08-15 17:43 ?1.2w次閱讀
    <b class='flag-5'>inotify</b>框架的使用和原理!如何添加對于目標(biāo)文件的watch呢?

    Linux虛擬機(jī)tcpdump命令操作詳解

    Linux虛擬機(jī)tcpdump命令操作詳解
    發(fā)表于 08-12 09:50 ?23次下載

    Backup-和Restore-命令詳解

    Backup-和Restore-命令詳解(力普拉斯電源技術(shù)有限公司)-文檔為Backup-和Restore-命令詳解總結(jié)文檔,是一份不錯的參考資料,感興趣的可以下載看看,,,,,,,,
    發(fā)表于 09-17 12:00 ?5次下載
    Backup-和Restore-<b class='flag-5'>命令</b><b class='flag-5'>詳解</b>

    Oracle-SQLPLUS基礎(chǔ)及sqlplus命令詳解

    Oracle-SQLPLUS基礎(chǔ)及sqlplus命令詳解(開關(guān)電源技術(shù)發(fā)展方向)-該文檔為Oracle-SQLPLUS基礎(chǔ)及sqlplus命令詳解文檔 ,是一份還算不錯的參考文檔,感興
    發(fā)表于 09-28 13:26 ?13次下載
    Oracle-SQLPLUS基礎(chǔ)及sqlplus<b class='flag-5'>命令</b><b class='flag-5'>詳解</b>

    kafka相關(guān)命令詳解

    kafka常用命令詳解
    的頭像 發(fā)表于 10-20 11:34 ?798次閱讀