用 rsync 做可靠的增量备份
用 rsync 做可靠的增量备份
日常备份不必每次整盘拷贝。rsync 只传输变化的部分,还能保留权限与时间戳,并支持断点续传,适合把项目目录同步到远端机器或另一块磁盘。理解几个常用参数后,就能搭一套既省流量又可控的备份习惯。
基本用法
把本地 ~/projects 同步到远端(需已能 SSH 登录):
rsync -avz --progress ~/projects/ user@host:/backup/projects/
-a:归档模式(递归,并尽量保留权限、属主、时间戳等)-v:输出过程,方便确认每次改动了什么-z:传输时压缩,跨公网时通常更省带宽- 源路径末尾的
/表示「同步目录里的内容」;不加/会把目录本身一并拷过去
第一次同步往往最久,之后只会推送差异,速度会明显快很多。
更稳妥的日常备份
rsync -avz --delete --partial --bwlimit=8192 \
~/projects/ user@host:/backup/projects/
--delete:源端已删的文件,目标端也删除(做镜像时有用;误删风险高,务必先 dry-run)--partial:大文件中断后可续传,不必从头再来--bwlimit=8192:大约限制 8MB/s,避免占满上行影响其他业务
第一次务必加 --dry-run(可写成 -n)看清会改哪些文件:
rsync -avzn --delete ~/projects/ user@host:/backup/projects/
确认列表无误后再去掉 -n 真正执行。养成这个习惯,比事后从误删里恢复省事得多。
排除无关文件
构建产物、依赖目录通常不必进备份:
rsync -avz \
--exclude '.git/' \
--exclude 'node_modules/' \
--exclude 'dist/' \
--exclude '*.tmp' \
~/webapp/ user@host:/backup/webapp/
规则多了可以放进 excludes.txt,再用 --exclude-from=excludes.txt。排除得当,既能缩短同步时间,也能减少远端磁盘占用。
定时执行与日志
写成脚本 /usr/local/bin/backup-projects.sh:
#!/bin/bash
set -euo pipefail
LOG=/var/log/backup-projects.log
{
echo "=== $(date -Iseconds) start ==="
rsync -avz --delete --partial \
/home/you/projects/ backup@nas:/volume1/backups/projects/
echo "=== $(date -Iseconds) done ==="
} >>"$LOG" 2>&1
再用 systemd timer 或 cron 每天凌晨跑一次。失败时优先看日志末尾几行,定位是网络、权限还是磁盘空间问题,比盲目重跑更有效。
注意点
- 先 dry-run:尤其带
--delete时,避免远端重要数据被误删。 - 权限与属主:跨用户同步时
-a可能改不了属主,必要时在目标机用--chown或事后chown。 - 密钥登录:生产环境用 SSH key,不要把密码写进脚本或定时任务。
- 首次全量会久:之后增量通常很快;可用
--info=progress2看总体进度。 - 重要数据建议多副本:rsync 是同步工具,不是版本库;关键目录可再保留按日期命名的快照目录,或配合硬链接快照做简单历史版本。
掌握这几条,日常项目备份就能既省流量又可控。改备份策略前先 dry-run,往往能少踩很多坑;稳定跑一段时间后,再考虑是否加校验与告警。
小练习
找一个不超过几百 MB 的项目目录,先对空目录做一次 dry-run,再真正同步到本机另一个路径(例如 /tmp/rsync-demo/)。改几个文件后再跑一遍,观察传输量是否明显下降。熟悉之后,再把目标换成 NAS 或云主机,并加上排除规则与日志。这样比一上来就对着生产数据试 --delete 安全得多。
- 点赞
- 收藏
- 关注作者
评论(0)