Oamc

rsync 增量备份与定时任务 · 修改记录

这是 linux/rsync-backup.md 的每次改动内容,按时间从新到旧。其他文章一起提交的部分不会出现在这里。

#1 2026-10-18 +65 −0 docs: 新增 23 篇网络/ Linux / Windows / 服务器文章 be5956e
 new file mode 100644
 @@ -0,0 +1,65 @@
+---
+tags: [备份, rsync, cron]
+order: 80
+---
+
+# rsync 增量备份与定时任务
+
+## 场景
+
+每天把服务器上的目录同步到备份机,只传变化的部分,保留最近几份快照。
+
+## 前置条件
+
+- 两台机器能 SSH 互通(建议用密钥)
+- 目标盘容量够放 N 份快照
+- 想清楚哪些目录要排除(缓存、临时文件)
+
+## 配置
+
+```bash
+# 手动跑一次
+rsync -avz --delete \
+  --exclude 'cache/' --exclude '*.tmp' \
+  -e "ssh -p 22" \
+  /data/ backup@10.0.0.9:/backup/data/
+
+# 用硬链接保留 7 份快照(只存变化的部分)
+rsync -avz --delete \
+  --link-dest=/backup/data/latest \
+  /data/ backup@10.0.0.9:/backup/data/2026-10-18/
+ln -sfn /backup/data/2026-10-18 /backup/data/latest
+```
+
+定时任务:
+
+```bash
+cat >/etc/cron.d/rsync-backup <<'EOF'
+0 2 * * * root /usr/local/bin/backup.sh >> /var/log/rsync-backup.log 2>&1
+EOF
+```
+
+## 验证
+
+```bash
+rsync -avzn --delete /data/ backup@10.0.0.9:/backup/data/   # -n 只演练
+ssh backup@10.0.0.9 'du -sh /backup/data/*'
+ssh backup@10.0.0.9 'ls -l /backup/data/latest/'
+```
+
+## 回滚
+
+```bash
+rm /etc/cron.d/rsync-backup
+```
+
+已经同步过去的文件按需从快照目录拷回。
+
+## 坑
+
+- **`--delete` 会把源端删掉的文件也删掉**,先用 `-n` 演练,确认路径没写错 `/data/` 和 `/data` 是两回事。
+- 源路径带斜杠和不带斜杠,结果完全不同:`/data/` 是目录内容,`/data` 是把目录本身放进去。
+- 硬链接快照要求同一个文件系统,跨盘会退化成全量拷贝。
+- 备份没验证过等于没有,定期挑一份恢复试试。
+- cron 的环境变量和你登录时不一样,脚本里用绝对路径。
+- `-z` 压缩对已经在网内、CPU 吃紧的场景可能反而慢。