# 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




