linux运维中配置rsync增量同步的核心目标是实现可靠、可回溯、不误删的备份;需组合关键参数、目录轮转机制及ssh免密等基础保障,而非简单安装即用。

Linux 运维中配置 Rsync 增量同步服务,核心不是“装完就用”,而是明确目标:**本地或远程的可靠、可回溯、不误删的增量备份**。Rsync 本身是同步工具,不是备份工具——默认行为是镜像(源删,目标也删),不做历史保留。要实现真正可用的增量同步,需组合关键参数、目录轮转机制和基础环境保障。
确认安装并验证 rsync 可用性
多数现代发行版(Ubuntu 22.04+、RHEL 9、CentOS 8+)已预装 rsync,但不能跳过验证:
- 运行 rsync --version,看到类似 rsync version 3.2.7 才算到位;若报 command not found,按系统补装:
- Debian/Ubuntu:sudo apt update && sudo apt install rsync -y
- RHEL/CentOS 7:sudo yum install rsync
- RHEL/CentOS 8+ 或 Fedora:sudo dnf install rsync
- ⚠️ 不要装 rsync-daemon 包——那是为搭建 rsync 服务端(daemon 模式)准备的,日常备份只需客户端主程序
- 旧系统如 CentOS 6 自带 rsync 3.0.6,缺少 --delete-delay 和 --partial-dir 等关键选项,易导致断点续传失败或误删,建议升级系统或源码编译新版
远程同步必须配 SSH 免密 + 合理参数
rsync 默认走 SSH,没免密就无法进 cron 定时执行,且裸用 -av 会带来静默风险:
- 生成密钥并分发:ssh-keygen -t ed25519 && ssh-copy-id user@backup-server
- 关键参数缺一不可:--delete(保持目标与源结构一致)、--partial(中断后自动续传)、--compress(对文本类文件压缩传输,节省带宽)
- 首次执行前务必加 --dry-run 测试,例如:
rsync -avz --partial --delete --dry-run /data/ user@backup-server:/backup/data/ - 斜杠结尾决定语义:/data/ 同步内容,/data 同步目录本身——错一个字符,可能在目标多嵌套一层
- 目标目录需对 SSH 用户可写;~/.ssh/authorized_keys 权限不能超过 600,否则连接卡住无提示
实现可回溯的增量备份:用 --link-dest 做硬链接快照
这是空间高效、支持多版本恢复的主流做法,但有硬性前提:源与备份目录必须在同一文件系统(硬链接不能跨设备):
- 创建带日期的备份目录:mkdir /backup/daily.0
- 首次完整同步:rsync -a /data/ /backup/daily.0/
- 第二天执行前轮转:mv /backup/daily.0 /backup/daily.1
- 再同步并复用旧文件:rsync -a --delete --link-dest=/backup/daily.1/ /data/ /backup/daily.0/
- 务必确保 --link-dest 指向的路径存在且可读,否则 rsync 退化为全量复制
- 可配合 cron 每日执行,并用 date +%Y%m%d 动态命名,保留 7 天快照便于回滚
避免常见静默失败陷阱
很多“同步失败”其实没报错,只是没达到预期效果:
- 时间戳被干扰:挂载时用了 noatime、其他进程 touch 过目标文件、NFS 挂载时间精度低 → rsync 的 quick-check(修改时间+大小)失效,退化为全量传输;临时排查可加 -c(校验和比对),但勿长期启用
- 权限问题:目标端用户对备份目录无写权限,或 SELinux/enforcing 状态未调为 permissive,会导致静默跳过或失败
-
日志重定向缺失:cron 任务不显错,建议将输出重定向到日志,例如:
>/var/log/rsync-backup.log 2>&1 - 路径用相对路径:脚本中写 ~/backup 或 ./data,cron 下执行时 $HOME 可能不是预期值,一律用绝对路径











