使用inotify-tools與rsync構建實時備份系統
使用inotifywait監控檔案變動
inotifywait是 inotify-tools
包中提供的一個工具,它使用 inotify
API 來監控檔案/目錄中的變動情況。
在archlinux上,我們可以使用下面命令來安裝
sudo pacman -S --noconfirm inotify-tools
平時 inotifywait
會掛起在那裡,直到檔案/目錄發生了要引起關注的事件後,它會退出並輸出事件發生的場所、事件的名稱以及引起事件的檔案(當事件發生在目錄上時才會輸出).
inotifywait
最常用的選項有兩個,一個是 -r
一個是 -e
,其中:
- -r
- 表示遞迴監控子目錄中檔案發生的事件
- -e
- 指定要監控的事件列表。對於備份系統來說,只需要監控 modify、create和delete三種事件就行了。
比如,我們執行
inotifywait -r -e modify,create,delete /tmp
表示監控 /tmp
目錄及其子目錄中檔案修改、檔案建立和檔案刪除三種事件。
這時程式一直在掛起狀態
[lujun9972@X61 ~]$ inotifywait -r -e modify,create,delete /tmp
Setting up watches. Beware: since -r was given, this may take a while!
Watches established.
這時在 /tmp
目錄下新建一個檔案
touch /tmp/newFile
則 inotifywait
程式退出,並輸出如下資訊
/tmp/ CREATE newFile
使用rsync同步變動
rsync是一款快速增量備份工具。它的具有以下幾個特點使得它很適合用作做備份的工具:
- 增量備份,只會傳輸修改過的內容
- 可以在傳輸過程中實時解壓縮,減少頻寬消耗
- 可以保持原來檔案的許可權、事件、軟硬連結
- 即支援本機複製,也支援遠端複製
rsync常用法為:
rsync -avz --delete src/ foo:/data
其中
- -a
- 表示archive mode,即備份目錄下的所有內容(包括子目錄中的內容),並且保持軟連結、檔案屬性、檔案修改事件、檔案的所有者和宿主資訊不變,並且同步字元/塊裝置以及命名socket和fifo等特殊檔案。
- -v
- 表示輸出備份的詳細資訊
- -z
- 表示傳輸時進行壓縮
- –delete
- 刪除備份目的地裡src中沒有的檔案
- src/
- 表示要備份的是src目錄下的所有內容,注意這裡最後的
/
不能去掉,否則會把src目錄本身備份過去 - foo:/data
- 表示備份的目的地是foo主機下的
/data/
目錄
整合起來
接下來我們只需要用個 while
死迴圈把兩個工具整合起來就行了,非常簡單
#!/bin/bash
if [[ $# -ne 2 ]];then
cat<<EOF
Usage $(basename $0) source_dir [host:]dest_dir
EOF
exit 0
fi
source_dir=$1
dest_dir=$2
while :
do
inotifywait -r -e modify,create,delete ${source_dir} && rsync -avz ${source_dir}/ ${dest_dir} --delete
done
這裡有必要說明的是,雖然用 inotifywait
能探測出檔案具體做了什麼改動,但實際上我們根本不需要知道具體的改變是什麼。
我們只需要知道有所改變了,然後具體改變了什麼由 rsync
來自己處理就行了。
相關文章
- 使用 rsync 來備份 Linux 系統Linux
- rsync + lsyncd 檔案實時同步/備份
- 使用rsync同步網路備份
- 如何使用 rsync 備份 Linux 系統的一些介紹Linux
- [rsync]——rsync檔案同步和備份
- 用rsync實現網站映象和備份網站
- 實施aix系統備份AI
- Linux 中 rsync 備份資料使用例項Linux
- Linux中rsync備份資料使用例項Linux
- 低程式碼實時數倉構建系統的設計與實踐
- 使用Kafka和Flink構建實時資料處理系統Kafka
- 用rsync實現網站映象和備份(ZT)網站
- 同步備份工具Rsync有什麼特性?linux系統快速入門Linux
- rsync備份【基於客戶端與服務端】客戶端服務端
- 安卓備份系統教程安卓備份系統教程安卓
- 基於實時計算(Flink)與高斯模型構建實時異常檢測系統模型
- Grafana監控系統的構建與實踐Grafana
- 通過rsync實現遠端容災備份薦
- rsync 守護程式備份報錯
- Rsync資料遠端同步備份
- 備份與應急恢復系統功能實現(轉)
- 實時聯機系統雙機備份的必要性
- HP系統的備份與恢復
- 使用 JavaFX 構建 Reactive 系統JavaReact
- rsync實時同步
- 實踐:GNU構建系統
- Linux-中-rsync-備份資料使用例項Linux
- 使用svnsync實時異地備份配置庫
- rsync同步和備份檔案到本地
- aix系統備份AI
- Linux 系統的備份與恢復Linux
- FreeBSD系統日誌與備份(轉)
- 使用 .NET Core 構建可擴充套件的實時資料處理系統套件
- 使用 NineData 實現備份集的實時查詢
- Linux下如何使用Rsync備份伺服器重要資料Linux伺服器
- 使用 WebSocket 構建實時性應用Web
- linux下rsync和tar增量備份梳理Linux
- win10怎麼備份系統還原 win10系統備份與還原步驟Win10