Ubuntu 运维系列 | 第 17 天:数据备份与恢复——rsync、tar、增量备份与演练

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

Ubuntu 运维 第17天

一、备份的核心概念与策略

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 上的安装部署、性能调优与数据备份策略,敬请期待。

微信二维码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容