rsync通过比对文件大小、修改时间及校验值,仅传输新增、修改或缺失的部分,实现高效增量同步;配合-a保留元数据、--delete保持镜像一致、-n模拟验证、末尾斜杠控制同步粒度,并结合cron定时执行脚本完成自动化备份。

用 rsync 配合 cron 就能实现稳定、高效的定时备份,核心是“只传变化”+“按时执行”,不需要复杂工具或额外服务。
rsync 增量同步怎么起作用
rsync 不是简单复制全部文件,而是逐个比对源和目标的文件大小、时间戳、校验值。只有真正有改动(新增、修改、重命名)或缺失的文件才会被传输。第一次全量备份后,后续每次只需几秒到几分钟——哪怕源目录有上百GB,只要只改了几个配置文件,它就只同步那几个。
- 用 -a 保证权限、所有者、时间戳、软链接等完全保留
- 加 -v 看清正在同步哪些文件,便于排查
- 加 --delete 可让备份目录严格跟随源目录(删了源里的文件,备份里也删),但首次启用建议先加 -n(dry-run)试跑一次,确认逻辑无误再正式启用
- 末尾斜杠很关键:
/data/表示同步目录内容;/data表示连同 data 这个目录一起同步过去
写一个可执行的备份脚本
把命令封装成脚本,方便复用、加日志、做判断。例如备份 /home/user/docs 到 /backup/docs:
- 新建脚本:
sudo vi /usr/local/bin/backup-docs.sh - 填入内容(注意替换路径):
# !/bin/bash
SOURCE="/home/user/docs/"
DEST="/backup/docs/"
LOG="/var/log/backup-docs.log"
date +"%Y-%m-%d %H:%M:%S - Start" >> $LOG
rsync -av --delete "$SOURCE" "$DEST" >> $LOG 2>&1
date +"%Y-%m-%d %H:%M:%S - Done" >> $LOG - 赋予执行权限:
sudo chmod +x /usr/local/bin/backup-docs.sh - 手动运行测试:
sudo /usr/local/bin/backup-docs.sh,检查日志和目标目录是否正确
用 cron 设置定时执行
cron 是系统级定时调度器,适合每天、每周等规律性任务。
- 编辑当前用户定时任务:
crontab -e - 添加一行(例如每天凌晨2:15执行):
15 2 * * * /usr/local/bin/backup-docs.sh - 保存退出。系统会自动加载,无需重启服务
- 验证是否生效:可临时改成每分钟执行(
* * * * *),观察日志是否持续追加;确认后再改回日常频率 - 注意:cron 默认 PATH 较窄,脚本中尽量用绝对路径(如
/usr/bin/rsync),或在脚本开头显式声明:PATH=/usr/local/bin:/usr/bin:/bin
远程备份更安全的写法
如果备份目标在另一台服务器上,优先走 SSH,不用开 rsync daemon,省配置、少暴露端口。
- 确保本地能免密登录目标机(配置好 SSH key)
- 把脚本中的 rsync 命令改为:
rsync -avz --delete -e "ssh -p 22" "$SOURCE" user@192.168.1.100:/backup/docs/ - -z 开启压缩,对跨网段或带宽受限场景很实用
- 目标机无需安装 rsync server,只要 openssh-server 和 rsync 客户端即可











