rsync 与 tar 可协同实现全量 + 增量备份:每周 tar 全量打包并校验,每日 rsync 硬链接式增量快照,统一目录管理;恢复时直接解压或同步对应快照即可。

用 rsync + tar 做 Linux 备份,不是非得二选一——全量和增量可以配合使用,关键在设计好目录结构、时间标记和同步逻辑。rsync 负责高效同步,tar 负责归档打包,两者结合既能保留历史快照,又避免重复存储大量相同文件。
一、备份策略设计:全量 + 增量快照式存档
不推荐纯增量(如每天只备份变化文件),因为恢复时需按顺序还原多个增量包,易出错且耗时。更稳妥的做法是:
- 每周一次全量备份:用 tar 打包并压缩,命名含日期(如 backup_full_20240601.tar.gz)
- 每日增量备份:用 rsync 的 –link-dest 参数硬链接前次全量目录,生成“类快照”结构,实际只存差异
- 所有备份统一存放在 /backup/ 下,按 full_YYYYMMDD 和 inc_YYYYMMDD 分目录管理
二、全量备份脚本(tar + gzip)
执行前确保目标路径有足够空间,建议加校验和(sha256sum)并记录时间戳:
#!/bin/bash DATE=$(date +%Y%m%d) data-src="/etc /home /root /var/www" data-lazy="true" src="https://blog.sgvps.cn/wp-content/themes/wordpress-theme-puock-2.5.7/assets/img/z/load-tip.png" DST="/backup/full_${DATE}" TAR_FILE="/backup/backup_full_${DATE}.tar.gz" mkdir -p "$DST" tar -czf "$TAR_FILE" -C / $SRC sha256sum "$TAR_FILE" > "$TAR_FILE.sha256" echo "Full backup done: $TAR_FILE"
说明:/etc、/home 等是典型需备份的核心路径,可根据实际调整;-C / 表示从根开始相对打包,解压 时结构清晰。
三、增量备份脚本(rsync 硬链接快照)
利用 rsync 的 –link-dest 复用上一个全量目录的文件块,新目录看起来独立,实则节省空间:
#!/bin/bash DATE=$(date +%Y%m%d) FULL_DIR="/backup/full_$(date -d'last Sunday'+%Y%m%d)" # 自动找上周日全量 INC_DIR="/backup/inc_${DATE}" 若找不到全量基线,回退到最新全量
if [! -d "$FULL_DIR"]; then FULLDIR=$(ls -rd /backup/full* 2>/dev/null | head -n1) fi
rsync -av --delete --link-dest="$FULL_DIR" --exclude='/proc' --exclude='/sys' --exclude='/dev' --exclude='/backup' / "$INC_DIR/"
touch "$INC_DIR/.backup_timestamp" echo "Incremental backup done: $INC_DIR"
注意:–link-dest 必须指向已存在的完整目录,且与目标目录在同一分区(否则硬链接失效);排除虚拟文件系统是必须操作。
四、恢复操作:按需选择全量或增量快照
恢复不依赖脚本,直接解压或复制即可:
- 恢复某天全量:tar -xzf /backup/backup_full_20240601.tar.gz -C /
- 恢复某日增量快照(即模拟当日系统状态):rsync -a /backup/inc_20240605/ /(注意末尾斜杠)
- 验证完整性:对比 sha256sum 或用 tar -tzf 检查包内文件列表
提示:生产环境建议先恢复到测试机,确认服务、权限、SELinux 上下文(如需)无误再上线。