Rsync 之所以成為 Linux/Unix 世界裡最受歡迎的檔案同步工具,核心在於其獨創的「Rsync 演算法」:僅傳輸檔案差異部分,而非整份檔案,使得跨網路同步大型資料集時速度極快、頻寬佔用極低。本文將深入剖析其演算法核心、六大工作模式、常用參數與實戰範例,助你掌握企業級備份與同步的最佳實踐。
假設兩台主機 α(源端)與 β(目標端)需同步相似檔案 A 與 B,且網路頻寬有限。演算流程如下:
此機制使 Rsync 在低頻寬、高延遲網路下仍能高效同步 TB 級資料。
| 模式 | 命令格式 | 觸發條件 | 說明 |
|---|---|---|---|
| 本地複製 | rsync [OPT] SRC DEST | SRC/DEST 均無冒號 | 本機磁碟間同步 |
| 遠端 Shell 推送 | rsync [OPT] SRC [USER@]HOST:DEST | DEST 含單冒號 : | 本地→遠端(SSH/RSH) |
| 遠端 Shell 拉取 | rsync [OPT] [USER@]HOST:SRC DEST | SRC 含單冒號 : | 遠端→本地(SSH/RSH) |
| Daemon 模式拉取 | rsync [OPT] [USER@]HOST::SRC [DEST] | SRC 含雙冒號 :: | 從 rsyncd 服務拉取 |
| Daemon 模式推送 | rsync [OPT] SRC [USER@]HOST::DEST | DEST 含雙冒號 :: | 推送至 rsyncd 服務 |
| 列出檔案清單 | rsync [OPT] [USER@]HOST::SRC | 僅指定 SRC | 不複製,僅顯示清單 |
-a, --archive 歸檔模式(-rlptgoD),保留所有屬性
-v, --verbose 詳細輸出
-z, --compress 傳輸時壓縮
--delete 同步刪除目標端多餘檔案
--progress 顯示進度
-P 等同 --partial --progress(斷點續傳+進度)
-e ssh 指定 SSH 為傳輸協定
--bwlimit=KB/s 限制頻寬
# 列出服務端所有模組
rsync 192.168.1.100::
# 查看指定模組 www 內容(需驗證)
rsync user@192.168.1.100::www/
# 以系統用戶查看絕對路徑
rsync user@192.168.1.100:/var/www/html/
#!/bin/bash
# 每日增量備份,保留屬性、壓縮傳輸、刪除多餘檔案
rsync -avz --delete --bwlimit=5000 \
-e "ssh -p 22" \
backup@192.168.1.100:/data/www/ \
/backup/www_$(date +%F)/
當源端損壞,僅需調換 SRC/DEST 參數,前提是客戶端對服務端有寫入權限:
rsync -avz --delete /local/backup/ user@server::restore_module/
-P 支援斷點續傳。--exclude 排除暫存檔、日誌、快取目錄。rsync -avn --delete SRC DEST(-n 乾跑模式)。cron 或 systemd timer 實現自動化排程。掌握 Rsync 的演算法精髓與六大模式,你就擁有了跨平台、跨網路、企業級的資料同步利器。無論是日誌歸檔、程式碼部署、資料庫冷備份,還是異地災備,Rsync 都是最可靠的首選工具。