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文章
9674瀏覽量
87216 -
NFS
+關注
關注
1文章
56瀏覽量
26425
原文標題:實時備份工具之inotify+rsync
文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
u-boot命令之EMMC和SD卡操作命令詳解
關于Inotify對linux文件系統的監控
對linux中的inotify機制的一點認識
Linux關機命令詳解
inotify框架的使用和原理!如何添加對于目標文件的watch呢?

Backup-和Restore-命令詳解

Oracle-SQLPLUS基礎及sqlplus命令詳解

評論