rsync服务器数据同步备份实战:增量传输、滚动快照与排错指南


一、为什么服务器数据备份首选 rsync

服务器出故障、误删数据、被勒索加密,很多时候都发生在你毫无防备的时候。备份的方案很多:全量打包、git、云盘同步……但 rsync 凭借"增量化、断点续传、原子性、跨机安全"四大特性,成为服务器数据同步备份的事实标准。它只会传输文件发生变化的块,而非整个文件,首次全量之后每次增量都极快,尤其适合异地机房定时同步。

二、rsync 的三种工作模式

rsync 可以当普通 cp 用,也可以通过 ssh 跨机同步,理解它的定位有助于排错:

1. 本地拷贝:
   rsync -avh /src/ /dst/

2. 通过 ssh 拉取远端到本地:
   rsync -avh [remote-user]@[server-ip]:/path/to/remote /local/dst/

3. 通过 ssh 推送本地到远端:
   rsync -avh /local/src [remote-user]@[server-ip]:/path/to/remote/

注意路径结尾的斜杠:/src/ 表示拷贝 src 目录内的内容,/src(无斜杠)表示连 src 目录本身一起拷。这个细节最容易踩坑,务必重视。

三、常用参数详解与组合实战

用下面这组高频参数覆盖日常 90% 的场景:

rsync -avz --delete -e ssh /www/wwwroot /backup/www
  • -a(archive)归档模式:递归拷贝并保留权限、属主、组、时间戳、软链接等元数据。
  • -v 显示详细过程;-z 传输前压缩,对文本类数据显著减少带宽。
  • --delete 让目标端删除源端不存在的文件,使两边严格一致(适合同步镜像,慎用于主动向目标删除的场景)。
  • -e ssh 指定走 ssh 通道加密传输,安全又免配置额外服务。

想预演不影响实际文件,加 --dry-run(-n)即可列出将来会执行的操作。

四、只排除不想要的内容

同步时往往要跳过缓存、日志、临时文件,用 --exclude 精确控制:

rsync -avz --delete \
    --exclude='cache/' \
    --exclude='*.log' \
    --exclude='/tmp' \
    /www/wwwroot /backup/www

排除规则较多时建议写进规则文件:--exclude-from=/etc/rsync-exclude.txt,每行一条。注意 --exclude 是按路径匹配的,写清楚相对路径或通配符能避免误排除。

五、通过 ssh 密钥实现免密自动同步

定时备份要求无需人工输入密码,这就要用到前文讲过的 SSH 密钥。在备份机生成密钥并部署公钥到目标服务器后,即可把 rsync 写进 crontab 自动执行:

# 每日凌晨 3 点把 Web 站点目录同步到备份服务器
0 3 * * * /usr/bin/rsync -avz --delete \
    -e 'ssh -i /root/.ssh/backup_key -o StrictHostKeyChecking=no' \
    /www/wwwroot root@backup-server:/backup/www >> /var/log/rsync-backup.log 2>&1

加 -o StrictHostKeyChecking=no 避免首次连接时的主机指纹确认卡住 crontab。日志重定向到文件,方便日后排查"备份到底跑没跑"。

六、让备份永不丢的增量保留策略

单靠 --delete 的镜像同步,一旦源端误删,备份端也会跟着删。稳妥做法是"滚动快照":按日期保留最近 N 天的独立备份,用硬链接让空间几乎不增加:

#!/bin/bash
DATE=$(date +%Y%m%d)
BASE=/backup/rsync-snapshots
# 以上一次备份为 --link-dest 基础,只复制变动的块,未变的用硬链接
rsync -avz --delete \
    --link-dest="$BASE/last" \
    /www/wwwroot root@web-server:/ # 伪代码示意,实际从远端拉取走 ssh
# 简化为本地目录:把今天的同步目录与上一次做硬链接叠加
```
rsync -a --delete --link-dest="$BASE/$(date -d yesterday +%Y%m%d)/" \
    /www/wwwroot "$BASE/$(date +%Y%m%d)/"

由于未变化的文件以硬链接形式共享同一 inode,几乎不占额外空间,却保留了多天版本,回滚误删只需挑一个旧日期目录。

七、排错与监控

同步出现异常时按次序排查:先用
rsync -avzn 干跑确认行为,再看 ssh 连接是否通(ssh -i key host),最后查目标目录权限和磁盘空间(df -h)。建议给备份脚本加上结果校验:

rsync -avz ... && echo "$(date) OK" >> /var/log/rsync.log || echo "$(date) FAIL" >> /var/log/rsync.log

写在最后

备份从来不是"存了就行",而是"能恢复才算数"。用 rsync 的关键在于:路径斜杠区分、--delete 的取舍、exclude 规则、ssh 免密、滚动快照保留多版本。配合 crontab 定时与日志监控,一套低成本、可靠、可审计的服务器数据备份方案就成型了。别等到数据没了才想起备份,今天动手,明早安心。


手机扫码阅读

微信或手机浏览器扫一扫,随时随地随心阅读与分享

Nginx限流防CC攻击完整指南:limit_req与limit_conn精细化配置

Linux SSH密钥登录配置全攻略:无密码登录、密钥管理与实践

评 论
更换验证码