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)
SRC="/etc /home /root /var/www"
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 上下文(如需)无误再上线。










