Rsync for Linux:同步、複製及備份檔案

9 分鐘閱讀 - 2025年5月24日

hero section cover
目錄
  • Linux 版 Rsync:如何像專家一樣同步、複製和備份檔案
  • 什麼是 rsync?
  • 為何選擇 rsync 而非 cp 或 scp
  • 常見的 rsync 參數
  • rsync 範例
  • 使用 cron 自動化 rsync
  • 結語
分享

如何在 Linux 上使用 rsync 進行增量傳輸、透過 SSH 進行遠端同步、使用 cron 進行排程備份,以及避免 trailing-slash 陷阱。

Linux 版 Rsync:如何像專家一樣同步、複製和備份檔案

Rsync 是用於在 Linux 系統之間複製檔案的標準工具。它比 cpscp ,且能從網路中斷中恢復,並僅傳輸實際變更的內容。本文將介紹 rsync 的功能、值得了解的參數、最常使用的範例,以及如何透過 cron 排程執行。


 

什麼是 rsync?

rsync 是一款用於在不同位置之間複製和同步檔案的命令列工具。它可在本地執行、透過 SSH 連線至遠端主機,或與 rsync 守護程序進行通訊。與 cpscp:rsync 會先比較來源與目標,然後僅傳輸差異部分。以一個 100 GB 的目錄為例,若其中有 200 MB 已變更,rsync 僅會傳輸 200 MB。 cpscp 則會傳輸全部內容。

它隨每個現代 Linux 發行版附帶。若未安裝: apt install rsyncdnf install rsync.

為何選擇 rsync 而非 cp 或 scp

rsync 在任何非簡單的複製任務中勝出的三個理由:

  • 它具有增量特性。後續執行時僅傳輸變更的位元組,而非整個檔案。對於備份和鏡像操作而言,這能將原本需要一整夜的任務縮短至幾分鐘。
  • 它能容忍中斷。透過 --partial,一個傳輸到一半的 50 GB 檔案會從中斷處繼續,而非從頭開始。
  • 它能保留元資料。存檔模式 (-a) 能保留權限、所有權、符號連結及時間戳記。這對於系統檔案、原始碼樹以及任何重視屬性的內容至關重要。

若僅需一次性複製小型檔案, scp 即可。至於任何需要重複執行的任務、佔用大量頻寬的傳輸,或是可能需要中斷後續傳輸的情況,請使用 rsync。

常見的 rsync 參數

您實際會用到的參數:

參數功能說明
-a歸檔模式。保留權限、所有權、符號連結及時間戳記。等同於 -rlptgoD.
-vVerbose。列出正在傳輸的檔案。
-z傳輸中壓縮。適用於速度慢或成本高的連線,在區域網路或針對已壓縮的內容則較無用處。
-P結合 --partial--progress。可恢復中斷的傳輸,並顯示即時進度。
--delete刪除目標位置上來源不存在的檔案。建立真正鏡像時必須啟用此選項。
--exclude跳過符合特定模式的檔案。
--exclude-from=FILE從檔案中讀取排除模式。比串接多個 --exclude 選項。
--dry-run顯示若不進行任何傳輸時會發生什麼情況。
--bwlimit=KBPS將頻寬使用量限制為每秒千位元組。對於在上班時間執行的備份非常有用。
--checksum透過校驗和而非檔案大小和修改時間來比較檔案。速度較慢,但能偵測邊緣案例。
-e ssh使用 SSH 進行傳輸。在大多數現代安裝環境中預設啟用。

預設行為會比較檔案大小與修改時間,此方式速度快且幾乎總是正確。請切換至 --checksum 若部署流程會重寫時間戳記但未變更內容,或您懷疑存在位元層級的損毀。

rsync 範例

在本地複製目錄:

rsync -av /source/path/ /destination/path/

透過 SSH 同步至遠端伺服器:

rsync -avz /local/dir/ user@remote:/remote/dir/

在執行任何可能造成資料損失的操作前進行模擬執行:

rsync -avz --dry-run /local/dir/ user@remote:/dir/

鏡像兩個目錄,並包含目標端已刪除的檔案:

rsync -av --delete /source/ /destination/

排除日誌檔與暫存目錄:

rsync -av --exclude='*.log' --exclude='tmp/' /src/ /dest/

恢復可能中斷的大型傳輸:

rsync -avP user@remote:/backups/big.img /local/

若 SSH 連線中斷,請再次執行相同指令。使用 -P,rsync 會從中斷處繼續傳輸,而非從頭開始。

將非尖峰時段的備份頻寬限制為 50 MB/s,以免佔滿上行鏈路:

rsync -avz --bwlimit=50000 /local/dir/ user@remote:/dir/

尾隨斜線的陷阱

最常見的 rsync 錯誤:

rsync -av /source  /destination/    # copies the 'source' directory INTO /destination
rsync -av /source/ /destination/    # copies the CONTENTS of /source into /destination

來源路徑末尾的斜線代表「此目錄內的所有內容」。若無末尾斜線,則代表「此目錄本身」。若不確定,請先使用 --dry-run ,尤其當與 --delete.

使用 cron 自動化 rsync

若要執行排程備份,您需要以下三項條件:

  1. 可透過無密碼 SSH 存取目標主機。cron 工作無法輸入密碼。請產生金鑰並將其複製到備份主機:

    ssh-keygen -t ed25519
    ssh-copy-id user@backup-host
  2. 一個腳本,而非 crontab 中的單行指令。這樣更容易測試,也更容易記錄:

    #!/bin/bash
    LOG=/var/log/rsync-backup.log
    rsync -az --delete /etc/ user@backup:/backups/$(hostname)/etc/ >> "$LOG" 2>&1

    使用以下指令賦予可執行權限 chmod +x.

  3. 建立一個 cron 任務來執行它。編輯時使用 crontab -e:

    0 2 * * * /usr/local/bin/rsync-backup.sh

    這會讓腳本每晚 02:00 執行。

在生產環境中值得進行的兩項優化:將腳本包裹在 flock ,以確保長時間執行的任務不會與隔夜的執行時段重疊,並將輸出透過 logger ,讓失敗紀錄能寫入系統日誌,以便監控系統能偵測到。

結語

Rsync 是少數幾種值得花時間學習其參數旗標,且能立即獲得回報的 Linux 工具之一。重點如下:

  • 增量傳輸與中斷續傳功能,使 rsync 成為任何需執行多次任務的理想選擇
  • -a 在歸檔模式下, -z 針對壓縮功能, -P 對於中斷後續傳輸與進度追蹤, --delete 用於真正的鏡像
  • 請注意來源路徑末尾的斜線,特別是在 --delete
  • 搭配 cron 和 SSH 金鑰,實現免人工干預的排程備份

對於需在不同設施間傳輸資料的大型備份任務,在具備無限頻寬的 VPS 上執行 rsync,意味著備份時段不會受傳輸上限的限制。

博客

本周特色

更多文章
數位視力疲勞:在螢幕使用頻繁的時代,如何保護您的視力

數位視力疲勞:在螢幕使用頻繁的時代,如何保護您的視力

整天盯著螢幕看嗎?學習如何運用經過驗證的技巧與工具來減輕數位眼疲勞。這份指南對於遠距工作者、開發人員以及所有科技從業者而言都不可或缺。

4 分鐘閱讀 - 2025年5月21日

為何擁有強大且不限流量的 VPS 至關重要

8 分鐘閱讀 - 2025年5月9日

更多文章