用 rsync 建立異地備份系統
在資料驅動的時代,備份不僅是 IT 人員的日常工作,更是企業與個人資料安全的最後防線。許多初學者傾向使用簡單的 cp 或 tar 指令進行備份,但這些工具在處理大量檔案、增量備份或網路傳輸時,往往效率低落且缺乏彈性。
rsync(Remote Sync)作為 Linux 生態系中最強大的同步與備份工具,以其「差異傳輸」的演算法聞名。它只會傳輸檔案中變更的部分,大幅節省頻寬與時間。本文将以 Ubuntu 22.04 或 Debian 12 為基礎,教大家如何利用 rsync 建立一套穩定、高效的異地備份系統。
環境準備與安裝
首先,我們需要確保源伺服器(Source)與目標伺服器(Destination)都已安裝 rsync。在 Debian 或 Ubuntu 系統上,安裝非常簡單:
sudo apt update
sudo apt install rsync
假設我們的架構如下:
- 源伺服器 (Source):IP 為
192.168.1.10,存放重要資料的目錄為/data/project。 - 目標伺服器 (Destination):IP 為
192.168.1.20,備份存放目錄為/backup/project。
第一階段:建立 SSH 金鑰認證
為了實現自動化備份,我們必須避免每次執行指令時都手動輸入密碼。最安全且常見的做法是使用 SSH 金鑰(SSH Key)。
在源伺服器上執行以下指令,生成一組無密碼的 SSH 金鑰:
ssh-keygen -t ed25519 -f ~/.ssh/rsync_backup_key -N ""
接著,將公鑰複製到目標伺服器。請將 user 替換為目標伺服器的實際使用者名稱:
ssh-copy-id -i ~/.ssh/rsync_backup_key.pub user@192.168.1.20
測試連線是否成功,若無需輸入密碼即可登入,即代表設定成功:
ssh -i ~/.ssh/rsync_backup_key user@192.168.1.20
第二階段:執行基礎同步指令
當 SSH 金鑰設定完成後,我們可以開始測試 rsync 的同步功能。以下是指令的詳細解析:
rsync -avz -e "ssh -i /home/username/.ssh/rsync_backup_key" --delete /data/project/ user@192.168.1.20:/backup/project/
讓我們拆解這個指令的參數意義:
-a(archive):歸檔模式,保留檔案權限、時間戳記、符號連結等屬性,是備份的關鍵。-v(verbose):顯示詳細的同步過程,方便除錯。-z(compress):在傳輸過程中壓縮資料,節省網路頻寬。-e "ssh ...":指定使用 SSH 作為傳輸通道,並指定我們剛剛建立的私鑰路徑。--delete:警告! 此參數會刪除目標端存在但源端不存在的檔案,確保兩端完全一致。若不希望刪除目標端的檔案,請移除此參數。- 路徑結尾的斜線
/:這是最容易被忽略的細節。/data/project/(有斜線)表示同步目錄「內容」;若為/data/project(無斜線),則會同步整個目錄資料夾本身。
執行後,若看到檔案列表快速滾動且無錯誤訊息,代表首次全量備份成功。
第三階段:自動化備份與排程
為了確保備份的即時性,我們可以使用 cron 來排程自動執行。在源伺服器上編輯 crontab:
crontab -e
加入以下行,設定每天凌晨 2:00 執行備份:
0 2 * * * /usr/bin/rsync -avz --delete -e "ssh -i /home/username/.ssh/rsync_backup_key" /data/project/ user@192.168.1.20:/backup/project/ >> /var/log/rsync_backup.log 2>&1
這裡我們將標準輸出與錯誤輸出都記錄到 /var/log/rsync_backup.log,方便後續檢查備份狀態。
常見問題與解決方案
1. 權限拒絕 (Permission denied)
若執行時出現 Permission denied 錯誤,通常有兩個原因:
- SSH 金鑰權限過寬:Linux 對私鑰檔案權限要求嚴格,請確保私鑰檔案權限為 600:
chmod 600 /home/username/.ssh/rsync_backup_key - 目標目錄權限問題:確認目標伺服器上的
/backup/project目錄屬於執行rsync的使用者,或者該使用者有寫入權限。
2. 同步速度緩慢或頻寬佔用過高 在生產環境中,全量同步可能影響業務效能。建議加入以下參數:
--bwlimit=1000:限制頻寬上限為 1000 KB/s,避免備份佔用過多網路資源。--partial:若傳輸中斷,保留部分傳輸的檔案,下次可繼續而非重新開始。
小結
透過 rsync 搭配 SSH 金鑰與 cron 排程,我們建立了一套簡潔且高效的異地備份系統。這種方案不僅免於依賴第三方商業軟體,更具備高度的可擴展性與安全性。
對於進階使用者,可以進一步結合 unison 進行雙向同步,或使用 restic 等工具增加加密與版本控制功能。但無論如何,rsync 作為 Linux 備份生態系的基石,掌握其核心用法絕對是每位系統管理員的必備技能。記得,備份的最後一步永遠是「還原測試」,沒有經過還原測試的備份,等於沒有備份。