目錄
- rsync 傳輸備份工作原理詳解
- 一、核心算法:差異傳輸
- 二、傳輸流程
- 三、關鍵技術
- 四、與cp/scp復制的本質區別
- rsync的使用
- 基本語法
- 常用選項
- 常用組合案例
- 1. **本地目錄同步**
- 2. **遠程同步(SSH協議)**
- 3. **刪除目標端多余文件**
- 4. **排除特定文件**
- 5. **限速傳輸(避免占用帶寬)**
- 6. **僅同步修改時間不同的文件**
- 關鍵注意事項
- rsync 同步方式
- 1. 完整備份 (Full Backup)
- 2. 差量備份 (Differential Backup)
- 3. 增量備份 (Incremental Backup)
- 常見問題
- rsync實現遠程增量備份的方案
- rsync + inotify 實時同步案例
- 1. 安裝 inotify-tools
- 2. 實時同步腳本 (rsync_inotify.sh)
- 3. 啟動腳本(后臺運行)
- 4. 系統服務配置(可選)
rsync 傳輸備份工作原理詳解
rsync是一個快速和非常方便的文件復制工具。 它能本地復制,遠程復制,或者遠程守護進程方式復制 ,它提供了大量的參數來控制其行為的各個方面,并且允許非常靈活的方式來實現文件的傳輸復制。
rsync監聽端口:873
。
其核心工作原理可以分為以下幾個關鍵方面:
一、核心算法:差異傳輸
-
分塊校驗機制:
- rsync 將文件分割成固定大小的塊(默認約700字節)
- 對每個塊計算兩個校驗值:
- 弱校驗(rolling checksum):32位的快速校驗
- 強校驗(MD5):128位的精確校驗
-
差異檢測過程:
- 發送方計算源文件的校驗值
- 接收方計算目標文件的校驗值
- 雙方比較校驗值,僅傳輸不匹配的塊
二、傳輸流程
掃描:掃描需要傳輸的文件列表。
檢查:對比源和目標文件的時間戳和大小。
分塊:將文件分割成固定大小的數據塊。
校驗:通過滾動校驗算法計算數據塊的特征值。
傳輸:僅傳輸變化的數據塊。
重組:在目標端重組完整文件。
三、關鍵技術
-
雙通道設計:
- 控制通道:傳輸命令和元數據
- 數據通道:實際文件數據傳輸
-
滾動校驗算法:
/* 簡化版滾動校驗計算 */ uint16_t weak_checksum(char *buf, int len) {uint16_t s1 = 0, s2 = 0;for (int i = 0; i < len; i++) {s1 += buf[i];s2 += s1;}return (s2 << 16) | s1; }
這種算法可以高效計算滑動窗口的校驗值
-
三次文件處理:
- 文件列表生成
- 差異比較
- 文件更新
四、與cp/scp復制的本質區別
操作 | cp/scp | rsync |
---|---|---|
文件比較 | 無 | 校驗和比較 |
傳輸單位 | 整個文件 | 文件塊 |
網絡使用 | 高 | 優化 |
CPU使用 | 低 | 較高 |
適合場景 | 簡單復制 | 重復同步 |
rsync的使用
基本語法
rsync [選項] 源文件 目標文件
常用選項
選項 | 作用解釋 |
---|---|
-a (–archive) | 歸檔模式,保留所有文件屬性(權限、時間、所有者等),等同于 -rlptgoD |
-v (–verbose) | 顯示詳細傳輸過程 |
-z (–compress) | 壓縮傳輸,節省帶寬(適合遠程同步) |
-h (–human-readable) | 以易讀格式(KB/MB/GB)顯示文件大小 |
-n (–dry-run) | 模擬運行,只顯示會做什么但不實際執行 |
-e | 指定遠程 shell 命令 (如 -e "ssh -p 2222",默認為ssh ) |
-P | 組合選項,等同于 --partial --progress (顯示進度 + 支持斷點續傳) |
--exclude | 排除特定文件或目錄 |
--include | 包含特定文件或目錄 |
--delete | 刪除目標目錄中存在但源目錄中不存在的文件(保持嚴格同步) |
常用組合案例
1. 本地目錄同步
rsync -av /source/ /destination/
- 作用:將
/source/
下的內容同步到/destination/
(保留所有屬性) - 注意:源路徑末尾的
/
表示同步目錄內容(不含目錄本身),不加/
會同步目錄本身。
2. 遠程同步(SSH協議)
rsync -avzP -e "ssh -p 22" /local/path/ user@remote:/remote/path/
-e "ssh -p 22"
:指定 SSH 端口(默認 22 可省略)-z
:壓縮傳輸加速
3. 刪除目標端多余文件
rsync -av --delete /source/ /destination/
- 危險操作:確保目標路徑正確,否則可能誤刪數據!
4. 排除特定文件
rsync -av --exclude='*.tmp' --exclude='logs/' /source/ /destination/
--exclude
:排除匹配的文件或目錄(支持通配符)*
:匹配零個或多個字符,例如,*.txt
匹配所有以 .txt 結尾的文件。?
:匹配一個字符,例如,file?.txt
匹配file1.txt、file2.txt
等。[abc]
:匹配方括號內的任意字符,例如,file[1-3].txt
匹配file1.txt、file2.txt、file3.txt
。
5. 限速傳輸(避免占用帶寬)
rsync -avz --bwlimit=