利用rsync和inotify機制能夠實現觸發式的數據備份,也就是實時備份。本地的某個文件一旦發生變化,就會自動同步到遠程的備份源服務器上。而不是某個時間段執行備份。安全
實驗前要解決三點問題:服務器
① 誰是備份源,誰是發起端。(發送連接請求的是發起端,迴應請求的是備份源)ssh
② 怎麼察覺本地的文件發生了變化。(交給inotify機制,Linux內核從2.6.13版本開始提供了inotify通知接口,用來監控文件系統的各類變化狀況,如文件存取、刪除、移動等。利用這一機制,能夠很是方便地實現文件異動告警、增量備份,並針對目錄或文件的變化及時做出響應。)ide
③ 怎麼根據目錄或文件的變化實現發送「備份的請求」從而實現遠程備份的目的。工具
這裏就要編寫腳原本實現這個功能。測試
另外,還要解決從監控文件到遠程備份整個過程當中交互式的操做,這裏用戶的交互式認證就要改成祕鑰的驗證方式。加密
先來看一下個人實驗環境 兩臺紅帽6 3d
發起端: 192.168.2.1blog
備份源: 192.168.2.2遞歸
下面是各個主機的操做
發起端:192.168.2.1
1.要監控目錄或文件的狀態,要利用inotify-tools工具 解壓安裝
make && make install 執行編譯安裝
2.建立要監測的目錄,也就是要執行備份的目錄 mkdir /abc 隨便建立的 並要有其餘用戶的讀取權限
3.建立要連接時的ssh 祕鑰 並用備份源(也就是2192.168.2.2)上的用戶拷貝過去
-t 是指定祕鑰的加密類型,執行過程當中直接回車,不要設置任何信息(至關於密保的一個更安全的密碼)
生成的祕鑰在用戶宿主目錄下的 .ssh/下
建立過程
而後用ssh-copy-id 命令把祕鑰複製到備份源上 robin用戶是備份源主機上事先有的
測試用ssh登錄遠程主機是否還用交互式方式驗證
4.編寫腳本一會再說 先到備份源上配置
備份源:192.168.2.2
備份源是提供數據備份時提供的位置(路徑)
我就建立根目錄下的BK目錄了 (根據實際狀況而定,真是環境確定是個安全可靠的位置)
並給與robin 寫入的權限 (robin用戶是實現建立好的)爲了目錄的安全,建議更改目錄的屬主和屬組,並設置setfacl 限制
作好後,再回到發起端上配置腳本。
在配置腳本以前先了解一下inotifywait命令的使用。
」-e」用來指定要監控哪些事件(create,move,delete,modify,attrib 是指監聽」建立 移動 刪除 寫入 屬性更改」 事件),選項」-m」表示持續監控,」-r」表示遞歸整個目錄,」-q」表示簡化輸出信息。
其餘選項的含義:
-a 存檔模式
-h 保存硬鏈接
-z 壓縮文件數據在傳輸
-t 維護修改時間
--delete 刪除於多餘文件
執行後會佔用一個終端,表示在檢測/abc 目錄的變化
編寫腳本
第一行不解釋
第二行 定義檢測目錄的變量 直接把監測/abc目錄的命令賦值給變量INOTIFY_CMD
第三行 定義執行備份的命令賦值給變量RSYNC_CMD
第四行 先執行變量INOTIFY_CMD 並利用grep 把執行變量後的值在賦給變量$AA $BB $CC
第五行 do 循環開始
第六行 利用if判斷語句判斷是否含有*rsync*的進程 若是有 執行第七行的RSYNC_CMD變量並用八九行彈出提示信息(隨意)
第十行if判斷結束
十一行 do結束
執行腳本後 凡是/abc 目錄下發生變化 (建立 移動 刪除 寫入 屬性更改)
就會彈出echo 後面的信息 並向備份源備份 如圖:
192.168.2.2:/BK
給予腳本x執行權限 ,並寫到用戶的登錄的腳本中 這樣用戶一登錄腳本就會執行。
!注意若是是字符終端下 腳本會佔用終端。切換終端便可
END