Linux 自動備份實戰:用 rsync 配合 cron 定時同步檔案

# Linux 自動備份實戰:用 rsync 配合 cron 定時同步檔案 做 IT 嘅你一定明,資料安全有幾重要。無論係公司 server 定自己嘅開發機,冇 backup 就等於裸跑。今日同大家分享一個超實用嘅 Linux 備份方案 — 用 **rsync** 配合 **cron** 做全自動定時備份,簡單、可靠、唔使錢。 ## 點解揀 rsync? rsync 係 Linux 世界最強嘅檔案...

# Linux 自動備份實戰:用 rsync 配合 cron 定時同步檔案

做 IT 嘅你一定明,資料安全有幾重要。無論係公司 server 定自己嘅開發機,冇 backup 就等於裸跑。今日同大家分享一個超實用嘅 Linux 備份方案 — 用 **rsync** 配合 **cron** 做全自動定時備份,簡單、可靠、唔使錢。

## 點解揀 rsync?

rsync 係 Linux 世界最強嘅檔案同步工具,佢有幾個殺手鐧:

– **增量同步**:只傳輸有改動嘅檔案,唔會次次抄全碟
– **保留權限**:可以完整保留 file permission、owner、timestamp
– **支援 SSH**:可以跨 server 做 remote backup,全程加密
– **斷點續傳**:傳輸中斷咗可以 resume,唔使由頭嚟過

## 基本 rsync 指令

最簡單嘅 local backup 係咁:

rsync -av /source/folder/ /backup/folder/

參數解釋:
– `-a`(archive mode):保留所有屬性,等於 `-rlptgoD`
– `-v`(verbose):顯示詳細進度

如果你要 backup 去 remote server,加 SSH:

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

– `-z`:傳輸時壓縮,慳 bandwidth
– `-e ssh`:指定用 SSH 做傳輸通道

## 進階用法:排除唔需要嘅檔案

通常 backup 唔會乜都抄,node_modules、log files 呢啲可以 skip:

rsync -av --exclude='node_modules' --exclude='*.log' --exclude='.git' /source/ /backup/

或者用一個 exclude list file:

# 建立 exclude-list.txt
echo "node_modules" > exclude-list.txt
echo "*.log" >> exclude-list.txt
echo ".cache" >> exclude-list.txt

# 執行 rsync
rsync -av --exclude-from='exclude-list.txt' /source/ /backup/

## 配合 cron 做全自動備份

搞掂 rsync command 之後,下一步就係 set 定時任務。編輯 crontab:

crontab -e

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

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

格式解釋:`分 時 日 月 星期 指令`

常用 cron 時間例子:

# 每日凌晨 3 點
0 3 * * * /path/to/backup.sh

# 每星期一早上 6 點
0 6 * * 1 /path/to/backup.sh

# 每 6 小時一次
0 */6 * * * /path/to/backup.sh

## 寫個完整 Backup Script

將所有嘢包裝成一個 script 會更易管理:

#!/bin/bash
# backup.sh — 全自動 rsync 備份腳本

SOURCE="/var/www"
DEST="/mnt/backup/www"
LOGFILE="/var/log/backup.log"
RETENTION_DAYS=30  # 保留 30 日內嘅 backup

echo "===== Backup started: $(date) =====" >> $LOGFILE

# 執行 rsync
rsync -av --delete \
  --exclude='node_modules' \
  --exclude='*.log' \
  --exclude='.cache' \
  $SOURCE/ $DEST/ >> $LOGFILE 2>&1

if [ $? -eq 0 ]; then
    echo "✅ Backup completed successfully: $(date)" >> $LOGFILE
else
    echo "❌ Backup FAILED: $(date)" >> $LOGFILE
    # 可以加 email alert
    # mail -s "Backup Failed!" admin@example.com < $LOGFILE
fi

# 清理超過 30 日嘅舊 backup(如有需要)
find $DEST -type f -mtime +$RETENTION_DAYS -delete

echo "===== Backup finished: $(date) =====" >> $LOGFILE

記得俾 execute permission:

chmod +x backup.sh

然後喺 crontab 入面 call 呢個 script:

0 2 * * * /home/user/backup.sh

## Remote Backup 進階:SSH Key 免密碼

如果你要 backup 去 remote server,建議 set SSH key 免密碼登入:

# 產生 SSH key(如果未有)
ssh-keygen -t ed25519 -C "backup@server"

# 複製 public key 去 remote server
ssh-copy-id user@remote-server

之後 rsync over SSH 就唔使次次入密碼,cron job 先可以正常運行。

## 總結

rsync + cron 係 Linux 世界最經典嘅備份組合,簡單直接、穩定可靠。無論係個人 project 定 production server,呢個方案都夠用有餘。記住:**冇 backup 嘅 data 唔係 data,係賭博**。

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

如果想更進階,可以考慮配合 `rsnapshot`(基於 rsync 嘅 snapshot backup 工具)或者 `borgbackup`(deduplication + 加密),但對於大部分場景,rsync + cron 已經好夠用。快啲幫你部 server set 返個 backup 啦!

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

Linux 自動備份實戰:用 rsync 配合 cron 定時同步檔案 - 文章重點速覽 infographic