Linux rsync 自動備份教學:用 Cron Job 定時同步檔案保平安

# Linux rsync 自動備份教學:用 Cron Job 定時同步檔案保平安 做 IT 嘅人都知,**備份**係最後一道防線。但好多時啲人貪方便,就咁 copy paste 去外置 hard disk 就算,結果一係唔記得做,一係做錯。今日就同大家分享點樣用 Linux 入面嘅 **rsync** 配合 **cron job**,做到全自動定時備份,set 好之後就唔使再理。 ## rsyn...

# Linux rsync 自動備份教學:用 Cron Job 定時同步檔案保平安

做 IT 嘅人都知,**備份**係最後一道防線。但好多時啲人貪方便,就咁 copy paste 去外置 hard disk 就算,結果一係唔記得做,一係做錯。今日就同大家分享點樣用 Linux 入面嘅 **rsync** 配合 **cron job**,做到全自動定時備份,set 好之後就唔使再理。

## rsync 係咩嚟?

**rsync**(remote sync)係 Linux 世界最強大嘅檔案同步工具。佢最大嘅賣點係**增量同步**——只會複製有改動過嘅檔案,唔會次次都由頭抄過。對於大型檔案庫或者每日備份嚟講,呢個功能慳返唔少時間同 bandwidth。

基本語法係咁:

rsync -av /來源路徑/ /目的地路徑/

– `-a`:archive mode,保留權限、時間戳、symlink
– `-v`:verbose,顯示進度
– 路徑後面有 `/` 代表同步目錄內容,冇 `/` 就係同步整個目錄

## rsync 進階用法你要識

### 1. 排除唔需要嘅檔案

備份嗰陣有啲嘢根本唔使抄,例如 cache、log、node_modules。用 `–exclude` 就得:

rsync -av --exclude='node_modules' --exclude='*.log' --exclude='.cache' \
  /home/user/projects/ /mnt/backup/projects/

### 2. 限速唔好扯爆 network

公司 network 繁忙時段做備份?加個 `–bwlimit` 限速,唔會影響其他同事:

rsync -av --bwlimit=5000 /data/ /backup/data/
# 限速 5000 KB/s ≈ 5 MB/s

### 3. 刪除目的地多餘檔案

預設 rsync 唔會刪除目的地嘅檔案。如果你想 backup 同 source 完全一致(mirror mode),加 `–delete`:

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

⚠️ 小心!`–delete` 會刪走 destination 有但 source 冇嘅檔案。建議第一次用加 `–dry-run` 試咗先:

rsync -av --delete --dry-run /source/ /destination/

### 4. SSH 遠端備份

rsync 支援經 SSH 同步去 remote server,唔使裝任何額外嘢:

rsync -avz -e ssh /local/data/ user@192.168.1.100:/remote/backup/

`-z` 係壓縮傳輸,`-e ssh` 指定用 SSH。

## 用 Cron Job 做到全自動

set 好 rsync command 之後,下一步就係用 **cron** 定時執行。編輯 crontab:

crontab -e

加一行,例如每日凌晨 2 點自動備份:

0 2 * * * rsync -av --exclude='node_modules' /home/user/data/ /mnt/backup/data/ >> /var/log/backup.log 2>&1

格式係:`分 時 日 月 星期 command`

常用 cron 時間例子:

0 2 * * *    # 每日凌晨 2 點
0 */6 * * *  # 每 6 小時一次
0 2 * * 0    # 每個星期日凌晨 2 點
30 8 1 * *   # 每月 1 號早上 8:30

## 完整備份 Script 範例

將 rsync 包裝成 script,加埋 log 同 error handling:

#!/bin/bash
# backup.sh - 每日自動備份 script

SOURCE="/home/user/data"
DEST="/mnt/backup/data"
LOG="/var/log/backup_$(date +%Y%m%d).log"

echo "=== 備份開始 $(date) ===" >> $LOG

rsync -av --delete \
  --exclude='node_modules' \
  --exclude='*.log' \
  --exclude='.cache' \
  --bwlimit=10000 \
  $SOURCE/ $DEST/ >> $LOG 2>&1

if [ $? -eq 0 ]; then
  echo "✅ 備份成功 $(date)" >> $LOG
else
  echo "❌ 備份失敗 $(date)" >> $LOG
  # 可以加 send email / webhook 通知
fi

記得 `chmod +x backup.sh` 俾執行權限。

## 備份策略小貼士

1. **3-2-1 法則**:3 份 copies、2 種媒體、1 份 offsite
2. **定期測試還原**:backup 唔係做完就算,要定期試 restore 確認啲 data 真係用得返
3. **加密敏感資料**:rsync 可以配合 `–rsh` 行 SSH tunnel,傳輸過程加密
4. **保留多個版本**:用 `rsync –link-dest` 做到 incremental snapshot,每日一個版本但唔會重複佔用空間

rsync + cron 呢個組合簡單得嚟好 powerful,無論係個人 project 定公司 server 都適用。set 好一次就唔使再煩,真正嘅「set and forget」!

🔗 參考資料:NVD NIST 漏洞資料庫

希望呢篇教學幫到大家。有咩問題歡迎留言討論!

#技術分享 #備份 #IT教學 #Linux

Linux rsync 自動備份教學:用 Cron Job 定時同步檔案保平安 - 文章重點速覽 infographic