使用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同步網路備份
- 檔案共享服務之實時備份(inotify+rsync)
- Rsync 資料備份
- Linux 中 rsync 備份資料使用例項Linux
- Linux中rsync備份資料使用例項Linux
- 同步備份工具Rsync有什麼特性?linux系統快速入門Linux
- 使用Kafka和Flink構建實時資料處理系統Kafka
- rsync備份【基於客戶端與服務端】客戶端服務端
- Linux-中-rsync-備份資料使用例項Linux
- rsync 守護程式備份報錯
- 低程式碼實時數倉構建系統的設計與實踐
- 基於實時計算(Flink)與高斯模型構建實時異常檢測系統模型
- Linux下如何使用Rsync備份伺服器重要資料Linux伺服器
- Linux 系統的備份與恢復Linux
- Grafana監控系統的構建與實踐Grafana
- rsync同步和備份檔案到本地
- rsync實時同步
- 實踐:GNU構建系統
- 使用 NineData 實現備份集的實時查詢
- 使用 .NET Core 構建可擴充套件的實時資料處理系統套件
- win10怎麼備份系統還原 win10系統備份與還原步驟Win10
- 使用LangGraph構建多Agent系統架構!架構
- 完全解析Rsync命令的17個備份選項
- Linux作業系統定時備份檔案方法Linux作業系統
- windows10如何備份系統_windows10製作系統備份Windows
- 阿里雲資料庫備份DBS與自建備份系統有什麼優勢?阿里資料庫
- 使用 Proxy 構建響應式系統
- rsync+inotify實時同步
- 【Linux】Rsync的剖析與使用Linux
- windows10系統備份c盤時其他磁碟被強制備份怎麼解決Windows
- 小白都會的rsync遠端同步原理及-------(定期同步與rsync+inotify實時同步)實驗
- 如何備份win10_win10系統怎麼備份Win10
- RMAN備份恢復典型案例——RMAN備份&系統變慢
- 備份方案建設
- 如何備份win10系統映象_備份win10系統映象的步驟Win10
- Win10系統怎麼備份鬧鐘和時鐘Win10
- 常用命令--複製-備份--cp--mv--scp--rsync