数据是运维工作的生命线。无论是生产数据库、用户上传的文件,还是各类配置文件,一旦发生误删、磁盘损坏或服务器宕机,能否在最短时间内恢复数据,直接决定了业务的存亡。在 Ubuntu 系统上,rsync 与 tar 是最经典、最可靠的两大数据备份利器:rsync 擅长远程同步与增量传输,tar 擅长打包归档与压缩。本文将围绕这两大工具,系统地讲解备份策略、增量备份方案与恢复演练,帮助你构建一套真正可落地的数据保护体系。

一、备份的核心概念与策略
1. 为什么要备份
备份的价值不在于”做了备份”,而在于”能否恢复”。一个无法恢复的备份毫无意义。因此,在制定备份方案时,我们始终要围绕恢复目标来反向设计,而不是简单地复制文件。
2. 备份的三种基本类型
- 完全备份(Full Backup):备份全部数据,恢复最快,但耗时最长、占用空间最大。
- 增量备份(Incremental Backup):只备份自上一次备份以来变化的数据,空间占用小、速度快,但恢复时需要依次应用多次增量。
- 差异备份(Differential Backup):备份自上一次完全备份以来变化的数据,恢复比增量简单,空间占用介于两者之间。
3. 3-2-1 备份原则
运维领域公认的黄金法则:至少保留 3 份数据副本,存储在 2 种不同的介质上,其中 1 份存放在异地。这条原则能有效抵御单点故障、介质损坏与机房灾难。
二、tar 归档打包实战
tar 是 Ubuntu 上最常用的归档工具,它能把多个文件与目录打包成单个文件,并可配合 gzip、bzip2、xz 进行压缩。
1. 创建完全备份
# 将 /var/www 目录打包并压缩为带时间戳的备份文件
tar -czvf /backup/www-$(date +%F).tar.gz /var/www
# 参数说明:
# -c 创建归档
# -z 使用 gzip 压缩
# -v 显示处理过程
# -f 指定归档文件名
2. 查看与解压归档
# 列出归档内容,确认文件完整
tar -tzvf /backup/www-2026-09-06.tar.gz
# 解压到指定目录
tar -xzvf /backup/www-2026-09-06.tar.gz -C /restore/
3. 排除不需要备份的目录
# 备份时排除缓存与临时目录,减小体积
tar -czvf /backup/www-$(date +%F).tar.gz
--exclude='/var/www/cache'
--exclude='/var/www/tmp'
/var/www
三、rsync 增量同步实战
rsync 采用增量传输算法,只同步源与目标之间的差异部分,非常适合做远程备份与镜像同步,是 Ubuntu 运维中最常用的备份命令之一。
1. 本地目录同步
# 将 /data 同步到 /backup/data,-a 归档模式保留权限与时间戳
rsync -avz /data/ /backup/data/
# 参数说明:
# -a 归档模式(递归 + 保留权限、属主、时间戳、符号链接等)
# -v 显示详细输出
# -z 传输时压缩
2. 远程备份到另一台服务器
# 通过 SSH 将本地 /data 同步到远程备份服务器
rsync -avz -e ssh /data/ root@192.168.1.100:/backup/data/
# 使用 --delete 让目标目录与源保持完全一致(删除目标多余文件)
rsync -avz --delete -e ssh /data/ root@192.168.1.100:/backup/data/
3. 基于时间快照的增量备份
利用 rsync 的 --link-dest 参数,可以创建基于硬链接的增量备份:未变化的文件通过硬链接共享,只有新增或修改的文件才真正占用空间,从而实现”天天全量、但空间只占增量”的效果。
# 硬链接式增量备份
rsync -avz --delete
--link-dest=/backup/data/$(date -d yesterday +%F)
/data/ /backup/data/$(date +%F)/
四、自动化备份脚本
手动执行备份既容易遗忘,也不可靠。将备份流程脚本化,并交由 cron 定时执行,才是生产环境的标准做法。
#!/bin/bash
# 全量 + 增量混合备份脚本
BACKUP_DIR="/backup"
SRC_DIR="/data"
DATE=$(date +%F)
mkdir -p "${BACKUP_DIR}/full" "${BACKUP_DIR}/incr"
# 每周日做全量备份
if [ "$(date +%u)" -eq 7 ]; then
tar -czvf "${BACKUP_DIR}/full/${DATE}.tar.gz" -C "$(dirname ${SRC_DIR})" "$(basename ${SRC_DIR})"
echo "[$(date)] Full backup done: ${DATE}" >> "${BACKUP_DIR}/backup.log"
else
# 平时做基于硬链接的增量备份
rsync -avz --delete --link-dest="${BACKUP_DIR}/incr/latest"
"${SRC_DIR}/" "${BACKUP_DIR}/incr/${DATE}/"
rm -f "${BACKUP_DIR}/incr/latest"
ln -s "${BACKUP_DIR}/incr/${DATE}" "${BACKUP_DIR}/incr/latest"
echo "[$(date)] Incremental backup done: ${DATE}" >> "${BACKUP_DIR}/backup.log"
fi
将脚本加入 cron,每天凌晨 2 点自动执行:
# 编辑定时任务
crontab -e
# 添加如下行,每天凌晨 2 点执行备份脚本
0 2 * * * /usr/local/bin/backup.sh
五、恢复演练:备份的真正价值
备份只有在恢复演练中经过验证才可信。建议每季度至少进行一次恢复演练,模拟数据丢失场景,检验备份的完整性与恢复流程的可行性。
# 模拟恢复:从完全备份恢复 /data 目录
mkdir -p /restore/data
tar -xzvf /backup/full/2026-09-06.tar.gz -C /restore/
# 验证恢复结果
diff -r /data /restore/data && echo "恢复校验通过" || echo "恢复校验失败"
六、常见问题与排障
问题一:rsync 同步很慢怎么办?
检查是否为网络带宽瓶颈,可通过 -z 开启压缩、限制带宽参数 --bwlimit=1024(单位 KB/s)来缓解;若小文件数量极多,可考虑先打包再同步。
问题二:tar 备份文件损坏,如何抢救?
可以使用 tar -tzf 检测归档完整性;对于损坏的 gzip 文件,可尝试 gzip -dc 文件.tar.gz | tar -xvf - 跳过损坏部分尽量恢复数据。
问题三:增量备份链过长导致恢复困难?
建议采用”全量 + 定期增量”的轮换策略,避免增量链无限延伸。例如每周全量、每日增量,恢复时最多只需一次全量加六次增量。
七、总结
本文从备份的核心概念出发,系统讲解了 tar 归档打包与 rsync 增量同步的实战用法,并给出了自动化备份脚本与基于硬链接的增量方案。备份是运维的底线工程,请务必记住:不经过演练验证的备份,等于没有备份。建议结合 3-2-1 原则,搭建异地备份并定期演练,才能真正做到有备无患。
下期预告:第 18 天我们将进入「数据库运维——MySQL 与 PostgreSQL 部署、优化和备份」,深入讲解两大主流数据库在 Ubuntu 上的安装部署、性能调优与数据备份策略,敬请期待。















暂无评论内容