rsync 增量同步与一条可用的备份命令
发布时间:2026-06-06 20:29       
更新时间:2026-06-07 00:38
备份数据目录之前,先把 rsync 的路径规则弄明白,尤其是末尾那个斜杠,它决定了同步的到底是什么。
基本用法
rsync -av /data/www/ /backup/www/
源路径末尾带斜杠,同步的是目录里的内容;不带斜杠,连 www 这个目录本身一起搬过去。这是 rsync 最经典的误会造成:少写一个斜杠,备份目录里就多出一层嵌套。
常用参数:-a 归档模式,递归并保留权限、时间戳、属主等属性;-v 显示过程;-z 传输时压缩,适合走公网;-P 等于 --partial --progress,大文件断了能接着传;担心挤占白天带宽,--bwlimit=5000 限到约 5 MB/s。跨机器同步走 SSH:rsync -avz -e "ssh -p 2222" /data/ deploy@192.168.1.10:/backup/。
增量怎么判断的
默认依据是文件大小和修改时间,两项一致就跳过,所以第二次同步常常只传几 MB。想按内容严格比对,加 --checksum,代价是两边都要把文件读一遍,只在要紧场景用。
--delete 是把双刃剑
加上它,源里删掉的文件在目标里也会被删,备份与源严格一致。风险在于路径写反:源和目标一旦颠倒,带着 --delete 的一条命令能把备份清空。更隐蔽的翻车是源目录被误清空后任务照跑,空源被忠实同步,备份瞬间蒸发。铁规矩是先跑一次 rsync -av --delete -n,n 是演练模式,只报告不动手,确认要删的清单没有吓到你,再去掉 n 正式执行;平时也定期抽查备份目录的文件数。
排除文件
--exclude '.git' --exclude '*.log' 可以叠加多个;排除项多了写成文件,用 --exclude-from=/etc/backup.exclude,一行一条。
一条可直接改用的定时备份
30 2 * * * rsync -a --delete --exclude-from=/etc/backup.exclude /data/ /backup/daily/ >> /var/log/backup.log 2>&1
跑完用 du -sh 对比两边容量,心里有数。备份只有恢复过一次才算数,找个测试目录 rsync 回来验证可读,别让头一次恢复发生在事故当天,恢复演练半年一轮即可。备份落在同一块盘上只能防误删,防不了盘坏,重要数据要有一份出机器的副本,云上多可用区各存一份更稳。